配置单元何时使用分区上的where子句作为 predicate 筛选器

bxgwgixi  于 2021-06-28  发布在  Hive
关注(0)|答案(0)|浏览(262)

我有两张table, tbl_a 以及 tbl_b ,都格式化为orc,并在列上分区 dt . 一个表使用分区格式 %Y%m%d%H%M 而另一个表使用 %Y%m%d .
当我查看hive1.2.1.2.4(使用tez0.7.0.2.4)中简单的select+where语句的执行计划时,我只看到为 tbl_a ,但不是另一个 tbl_b . 这意味着 tbl_b 将执行完整表扫描,而不仅仅是对所需分区的扫描。两个查询的分区都存在并包含数据。

hive> EXPLAIN SELECT * FROM tbl_a WHERE dt='1001010600';
OK
Plan not optimized by CBO.

Stage-0
  Fetch Operator
     limit:-1
     Select Operator [SEL_2]
        outputColumnNames:["_col0","_col1","_col2","_col3"]
        Filter Operator [FIL_4]
           predicate:(dt = '1001010600') (type: boolean)
           TableScan [TS_0]
              alias:tbl_a

Time taken: 0.866 seconds, Fetched: 12 row(s)

hive> EXPLAIN SELECT * FROM tbl_b WHERE dt='161001';
OK
Plan not optimized by CBO.

Stage-0
  Fetch Operator
     limit:-1
     Select Operator [SEL_2]
        outputColumnNames:["_col0","_col1","_col2","_col3"]
        TableScan [TS_0]
           alias:tbl_b

Time taken: 0.904 seconds, Fetched: 10 row(s)

这种行为我看不太清楚。哪个条件决定where条件是否用作 predicate 过滤器?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题