Внести информацию о папке HDFS во внешнюю таблицу Hive - PullRequest
0 голосов
/ 10 июля

У меня есть такая структура каталогов HDFS:

/home/date_1/A/file.txt
/home/date_1/B/file.txt
/home/date_2/A/file.txt
/home/date_2/B/file.txt
...

Я могу создать внешнюю таблицу

CREATE EXTERNAL TABLE table_name(col1 int, col2 string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORE AS TEXTFILE
LOCATION '/home'

Но я не знаю, как ввести информацию о папке 'A 'или' B 'в таблицу. Что я могу сделать? Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 июля

Используете ли вы MapReduce в качестве механизма выполнения Hive? Вы должны иметь возможность просто указать фреймворку для обхода всех подкаталогов.

SET mapreduce.input.fileinputformat.input.dir.recursive=true;
SET hive.mapred.supports.subdirectories=true;
SELECT COUNT(1) FROM table_name;
0 голосов
/ 10 июля

В Hive у вас есть виртуальные столбцы, которые вы можете использовать для чтения основного имени файла. INPUT__FILE__NAME предоставит вам список файлов, которые данные использовали для получения имени файла.

Итак, вам нужно сначала создать внешнюю таблицу (как вы это сделали). Затем, когда вы запрашиваете внешнюю таблицу, вы можете использовать виртуальный столбец и разделить данные, как показано ниже:

select 
 col1,
 col2,
 INPUT__FILE__NAME as full_filepath,
 concat_ws("/",reverse(split(reverse(INPUT__FILE__NAME),"/")[1]), reverse(split(reverse(INPUT__FILE__NAME),"/")[0])) as splitted_filepath
 FROM
 table_name;

Подробнее о виртуальном столбце в кусте .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...