Оператор
Hive CREATE TABLE
не копирует никаких данных. Данные остаются в месте, указанном в таблице DDL. CREATE TABLE создает метаданные только в хранилище метаданных Hive.
Вы можете добавить файлы позже в том же месте.
HDFS не позволяет обновлять. Вы можете удалять файлы и помещать новые файлы. select вернет пустой набор данных посередине между удалением и помещением новых файлов.
Если это файловая система S3, и вы переписываете одни и те же файлы или удаляете их, то в конечном итоге может возникнуть проблема согласованности (файл не найден, и т.д. c).
Также, когда вы напрямую управляете файлами , Статистика Hive не обновляется, поскольку Hive не знает, что вы изменили данные.
Hive не знает, изменили ли вы файлы, потому что файловая система и Hive слабо связаны. У Hive есть метаданные с определением схемы таблицы, сервером и местоположением, статистикой и т. Д. c. И он остается таким же после того, как вы изменили данные в расположении таблицы.
Транзакции Hive - это atomi c. Если вы вставляете или перезаписываете данные с помощью HiveQL, он записывает данные во временное местоположение, и только в случае успешного выполнения команды файлы перемещаются в местоположение таблицы (старые файлы удаляются в случае перезаписи). Если SQL терпит неудачу, данные остаются такими, какими они были до команды.
Но поскольку Hive не копирует данные из расположения таблицы в какое-то внутреннее управляемое хранилище, если вы манипулируете файлами, когда Hive их читает, это будет исключением в процессе куста. Hive не может заблокировать таблицу во время работы с файлами, потому что Hive об этом не знает. Файловая система довольно отделена от улья, и вы можете делать все в файловой системе, как будто улья вообще не существует.
Прочтите также о режиме ACID Hive: Транзакции Hive
Также прочтите о различиях между управляемыми и внешними таблицами в Hive .