我需要查询每小时地图减少来自Imapala的批量结果
output directory structure will be
/data/access/web1/2015/Jan/day1/09/part-r-00000
/data/access/web1/2015/Jan/day1/09/part-r-00001
...
/data/access/web1/2015/Jan/day1/20/part-r-00000
/data/access/web1/2015/Jan/day1/20/part-r-00001
...
/data/access/web1/2015/Jan/day2/01/part-r-00000
...
/data/access/web1/2015/Jan/day30/18/part-r-00000
....
是否可以创建一个impala表来读取/data/access/web1/*
目录(包括子目录)中的数据
默认情况下,impala不会查询子目录中的数据。
如何在impala中启用递归读取?
解决方法是在impala中创建分区表。 但是分区表并不符合我们的要求。
如何解决此问题?
答案 0 :(得分:0)
截至目前,Impala不支持从TABLE LOCATION下的子目录中递归读取文件。示例:如果使用位置'/ home / data / input /'
创建表如果目录结构如下:
/home/data/input/a.txt
/home/data/input/b.txt
/home/data/input/subdir1/x.txt
/home/data/input/subdir2/y.txt
然后Impala只能从以下文件中查询
/home/data/input/a.txt
/home/data/input/b.txt
不查询以下文件
/home/data/input/subdir1/x.tx
/home/data/input/subdir2/y.txt
作为替代解决方案,您可以从Hive读取数据并插入最终的Hive表。
在此表的顶部为交互式或报表查询创建Impala视图。
您可以使用以下配置设置在Hive中设置此功能。
Hive支持使用选项
的子目录扫描SET mapred.input.dir.recursive = true;
和
SET hive.mapred.supports.subdirectories = true;
答案 1 :(得分:-2)
Checkout Hive external tables:
CREATE EXTERNAL TABLE my_external_table (c1 INT, c2 STRING, c3 TIMESTAMP)
LOCATION '/data/access/web1';
Impala将以递归方式从给定的HDFS目录中读取数据。
将新文件添加到HDFS目录时,请在Impala上调用refresh my_external_table;
以通知Impala有关新数据的信息。