Impala2.7无法从用tez创建的Hive创建的Parquet表中读取任何数据

j8ag8udp  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(530)

我正在使用一个查询填充一个parquet存储格式的分区配置单元表,该查询使用许多union-all操作符。查询是使用tez执行的,默认设置会导致多个并发的tez writer创建hdfs结构,其中parquet文件位于分区文件夹下的子文件夹中(文件夹名为tez writer id)。e、 g./apps/hive/warehouse/scratch.db/test\u table/part=p1/8/0000000
即使在使元数据无效并收集表上的统计信息之后,当查询表时,impala也返回零行。问题似乎是 Impala 没有遍历分区子文件夹来查找Parquet文件。
如果我将hive.merge.tezfiles设置为true(默认为false),有效地迫使tez使用额外的处理步骤将多个文件合并为一个文件,则生成的Parquet文件直接写入分区文件夹下,刷新后impala可以看到新分区或更新分区中的数据。
我想知道是否有一个配置选项指示impala在分区子文件夹中查找,或者可能有一个补丁为impala在这方面改变了它的行为。

gg58donl

gg58donl1#

到目前为止,impala不支持从表位置下的子目录递归读取文件。示例:如果使用位置“/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

作为替代解决方案,您可以从配置单元读取数据并插入到最终的配置单元表中。
在此表的顶部创建一个impala视图,用于交互式查询或报告查询。
您可以使用以下配置设置在配置单元中设置此功能。
配置单元支持带有选项的子目录扫描 SET mapred.input.dir.recursive=true;SET hive.mapred.supports.subdirectories=true;

相关问题