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

时间:2016-10-27 18:56:36

标签: 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
    ;

问题在于,如果我这样做

EXPLAIN DEPENDENCY    SELECT * FROM myview WHERE source_system='AAA'

我发现正在扫描所有分区,因此不会进行分区修剪。

有什么方法吗?

1 个答案:

答案 0 :(得分:1)

解决方法

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

注意,以下内容无效

如评论中所述,应该可以使用此处记录的分区视图来解决此问题: https://cwiki.apache.org/confluence/display/Hive/PartitionedViews#PartitionedViews-Syntax

如果分区没有扩展到子查询,请尝试:

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

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