Создать таблицу с входами из вложенных подкаталогов
У меня есть данные в формате Avro в HDFS в файлах, например: /data/logs/[foldername]/[filename].avro
. Я хочу создать таблицу Hive над всеми этими файлами журнала, то есть все файлы формы /data/logs/*/*
. (Все они основаны на одной и той же схеме Avro.)
Я запускаю следующий запрос с флагом mapred.input.dir.recursive=true
:
CREATE EXTERNAL TABLE default.testtable
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs://.../data/*/*'
TBLPROPERTIES (
'avro.schema.url'='hdfs://.../schema.avsc')
Таблица заканчивается пустым, если я не изменю LOCATION
на менее вложенную, т.е. будет 'hdfs://.../data/[foldername]/'
с определенным именем папки. Это работало без проблем с менее вложенным путем для LOCATION
.
Я хотел бы иметь возможность отправлять исходные данные из всех этих разных папок [foldername]. Как сделать выбор рекурсивного ввода дальше в моих вложенных каталогах?
Ответы
Ответ 1
Используйте эти настройки улья для включения рекурсивных каталогов:
set hive.mapred.supports.subdirectories=TRUE;
set mapred.input.dir.recursive=TRUE;
Создайте внешнюю таблицу и укажите корневой каталог как местоположение:
LOCATION 'hdfs://.../data'
Вы сможете запросить данные из местоположения таблицы и всех подкаталогов
Ответ 2
Одна вещь, которая поможет решить вашу проблему, - это добавить имя папки в качестве столбца раздела во внешнюю таблицу. Затем вы можете создать таблицу, как только создаете каталог данных.
Или вы можете взять эти вложенные файлы и сгладить их в одном каталоге.
Я не думаю, что вы сможете запросить улей, чтобы вставить все эти папки, считанные как 1 таблица.
Эти вопросы, похоже, направлены на аналогичную проблему:
при создании внешней таблицы в кусте можно указать местоположение для определенных файлов в директории?
В одном контексте есть проблема с открытым jira:
https://issues.apache.org/jira/browse/HIVE-951
Просмотр большего Я видел это сообщение, предлагая вам использовать SimlinkInputTextFormat в качестве альтернативы. Я не уверен, насколько хорошо это будет с вашим форматом Avro.
https://hive.apache.org/javadocs/r0.10.0/api/org/apache/hadoop/hive/ql/io/SymlinkTextInputFormat.html