Hive импортирует только определенные типы файлов из hdfs - PullRequest
1 голос
/ 17 июня 2019

Я создаю внешнюю таблицу, используя Serde

org.apache.hive.hcatalog.data.JsonSerde

Местоположение папки Hdfs имеет несколько форматов файлов, и я хотел бы импортировать только json типы файлов. Я пытался использовать

**SERDEPROPERTIES (“input.regex” = “*.json”)** 

Но, похоже, не работает

1 Ответ

0 голосов
/ 17 июня 2019

У куста есть виртуальный столбец с именем INPUT__FILE__NAME, и вы можете отфильтровать его в предложении where.

select * from --do everything else on this level
(select * from your_table --do filtering in the subquery wrapper
where INPUT__FILE__NAME rlike '\\.json$' --ends with .json
)s

Я не уверен, что это будет эффективно работать, потому что эти связанные Jiras, к сожалению, еще не реализованы: Добавить обрезку файлов в Hive и Выборочно включать в себя исходные файлы EXTERNAL TABLE черезREGEX

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

НайденыЕще одно решение, которое вы можете использовать: SymlinkTextInputFormat

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

Например, расположение таблицы "/user/hive/mytable".Существует файл с именем "/user/hive/mytable/myfile.txt".Внутри файла есть 2 строки: "/user/myname/textfile1.txt" и "/user/myname/textfile2.txt"

. Мы можем сделать:

CREATE TABLE mytable (...) STORED AS INPUTFORMAT 'org.apache.hadoop.hive.io.SymlinkTextInputFormat' LOCATION '/user/hive/mytable';
SELECT * FROM mytable;

, которая будет возвращать содержимое двух файлов: "/ user / myname/textfile1.txt "и" /user/myname/textfile2.txt"

...