Создать таблицу с входами из вложенных подкаталогов

У меня есть данные в формате 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