Impala 2.7无法从使用Tez的Hive创建的镶木桌上读取任何数据

时间:2017-11-08 19:34:48

标签: parquet impala tez

我使用一个使用多个union all运算符的查询来填充镶木地板存储格式的分区Hive表。使用Tez执行查询,Tez使用默认设置导致多个并发Tez编写器创建HDFS结构,其中镶木地板文件位于分区文件夹下的子文件夹(文件夹名称为Tez writer ID)中。 例如。 /apps/hive/warehouse/scratch.db/test_table/part=p1/8/000000_0

即使在表上无效元数据和收集统计信息之后,Impala也会在查询表时返回零行。 问题似乎是Impala没有遍历分区子文件夹来查找镶木地板文件。

如果我将hive.merge.tezfiles设置为true(默认情况下为false),有效地强制Tez使用额外的处理步骤将多个文件合并为一个,生成的镶木地板文件直接写在分区文件夹下,刷新后,Impala可以查看新分区或更新分区中的数据。

我想知道是否有一个配置选项让Impala指示它查看分区子文件夹,或者是否有一个Impala补丁改变了它在这方面的行为。

1 个答案:

答案 0 :(得分:4)

截至目前,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.txt
    /home/data/input/subdir2/y.txt

作为替代解决方案,您可以从Hive读取数据并插入最终的Hive表。

在此表的顶部为交互式或报表查询创建Impala视图。

您可以使用以下配置设置在Hive中设置此功能。

Hive支持使用选项

的子目录扫描

SET mapred.input.dir.recursive=true;

SET hive.mapred.supports.subdirectories=true;