Возможно ли импортировать данные в таблицу Hive без копирования данных

У меня есть файлы журналов, хранящиеся в виде текста в HDFS. Когда я загружаю файлы журнала в таблицу Hive, все файлы копируются.

Могу ли я дважды хранить все мои текстовые данные?

EDIT: я загружаю его с помощью следующей команды

LOAD DATA INPATH '/user/logs/mylogfile' INTO TABLE `sandbox.test` PARTITION (day='20130221')

Затем я могу найти тот же самый файл в:

/user/hive/warehouse/sandbox.db/test/day=20130220

Я предположил, что он был скопирован.

Ответ 1

используйте внешнюю таблицу:

CREATE EXTERNAL TABLE sandbox.test(id BIGINT, name STRING) ROW FORMAT
              DELIMITED FIELDS TERMINATED BY ','
              LINES TERMINATED BY '\n' 
              STORED AS TEXTFILE
              LOCATION '/user/logs/';

если вы хотите использовать разделение с внешней таблицей, вы будете нести ответственность за управление каталогами разделов. указанное местоположение должно быть каталогом hdfs.

Если вы удаляете внешний стол, улей НЕ удаляйте исходные данные. Если вы хотите управлять своими необработанными файлами, используйте внешние таблицы. Если вы хотите, чтобы улей делал это, пусть куст хранит внутри своего пути к хранилищу.

Ответ 2

Я могу сказать, вместо того, чтобы копировать данные с помощью приложения java непосредственно в HDFS, иметь этот файл в локальной файловой системе и импортировать их в HDFS через куст, используя следующую команду.

LOAD DATA LOCAL INPATH '/your/local/filesystem/file.csv' INTO TABLE `sandbox.test` PARTITION (day='20130221')

Обратите внимание на LOCAL

Ответ 3

Чтобы избежать дублирования данных, вы можете использовать инструкцию раздела alter table.

create External table if not exists TestTable (testcol string) PARTITIONED BY (year INT,month INT,day INT) row format delimited fields terminated by ',';

ALTER table TestTable partition (year='2014',month='2',day='17') location 'hdfs://localhost:8020/data/2014/2/17/';

Ответ 4

Улей (по крайней мере при работе в режиме реального кластера) не может ссылаться на внешние файлы в локальной файловой системе. Hive может автоматически импортировать файлы во время создания таблицы или загрузки. Причиной этого может быть то, что Hive запускает задания MapReduce для извлечения данных. MapReduce считывает данные из HDFS, а также записывает обратно в HDFS и даже работает в распределенном режиме. Поэтому, если файл хранится в локальной файловой системе, он не может использоваться распределенной инфраструктурой.