我在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'
我发现正在扫描所有分区,因此不会进行分区修剪。
有什么方法吗?
答案 0 :(得分:1)
正如最新评论中所提到的,可以为每个过滤器构建视图。
如评论中所述,应该可以使用此处记录的分区视图来解决此问题: https://cwiki.apache.org/confluence/display/Hive/PartitionedViews#PartitionedViews-Syntax
如果分区没有扩展到子查询,请尝试:
我通常不主张在视图上构建视图,但如果这是让分区工作所需要的,那么这当然可以证明设计选择的合理性。