我在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)
我看到正在扫描所有分区,因此不会发生分区修剪.
有没有办法解决?
正如最新评论中提到的,可以为每个过滤器构建视图。
正如评论中提到的,应该可以使用分区视图来解决这个问题,如下所示: https: //cwiki.apache.org/confluence/display/Hive/PartitionedViews#PartitionedViews-Syntax
如果分区未扩展到子查询,请尝试以下操作:
我通常不会提倡在视图上构建视图,但如果这是让分区工作所需要的,那么这当然会证明设计选择是合理的。