具有嵌套选择和分区修剪的配置单元视图

mis*_*kin 6 hadoop hive

我在HIVE中有一个subselect视图 - 视图的目的是从源表中删除重复.

源表由source_system列分区.

CREATE VIEW myview AS 
        SELECT * FROM (
            SELECT            
              *
              ,row_number() OVER (PARTITION BY source_system,key ORDER BY modification_date DESC) as seq_rn
            FROM mytable
        )  t
        WHERE seq_rn= 1
    ;
Run Code Online (Sandbox Code Playgroud)

问题是,如果我这样做

EXPLAIN DEPENDENCY    SELECT * FROM myview WHERE source_system='AAA'
Run Code Online (Sandbox Code Playgroud)

我看到正在扫描所有分区,因此不会发生分区修剪.

有没有办法解决?

Den*_*din 1

解决方法

正如最新评论中提到的,可以为每个过滤器构建视图。


请注意,以下内容没有帮助

正如评论中提到的,应该可以使用分区视图来解决这个问题,如下所示: https: //cwiki.apache.org/confluence/display/Hive/PartitionedViews#PartitionedViews-Syntax

如果分区未扩展到子查询,请尝试以下操作:

  1. 使用内部查询创建视图
  2. 使用外部查询在其之上创建第二个视图

我通常不会提倡在视图上构建视图,但如果这是让分区工作所需要的,那么这当然会证明设计选择是合理的。