将hdfs文件夹信息引入配置单元外部表

2ekbmq32  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(320)

我的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”引入表中。我能做什么?谢谢!

5rgfhyps

5rgfhyps1#

在配置单元中,您可以使用虚拟列来读取基础文件名。 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;

有关配置单元中虚拟列的详细信息。

omjgkv6w

omjgkv6w2#

您是否使用mapreduce作为配置单元执行引擎?您应该能够简单地指示框架遍历所有子目录。

SET mapreduce.input.fileinputformat.input.dir.recursive=true;
SET hive.mapred.supports.subdirectories=true;
SELECT COUNT(1) FROM table_name;

相关问题