如何在impala中启用递归读取

时间:2015-04-08 07:58:51

标签: hadoop dictionary mapreduce impala

我需要查询每小时地图减少来自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中创建分区表。 但是分区表并不符合我们的要求。

如何解决此问题?

2 个答案:

答案 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有关新数据的信息。