Snowflake在self-Join上创建材料化视图



我正试图在表上创建一个具有最新数据的物化视图。查询看起来像这个

Create Materialized view t1_latest as
select c1,c2,dt from t1
join
(select max(dt) maxdt from t1) t2
ON t1.dt = t2.maxdt

dt是日期字段。

正如我们所知,物化视图不允许子查询或窗口函数。是否有方法重写查询以创建具有最新日期的Materialized视图。最新日期不能被视为current_date或硬编码。

另一种方法是创建一个带有联接的视图,然后在此之上创建Materialized视图。但问题是,我们将失去物化视图的优势。

任何建议。

如果您的表由dt集群,并且您只需使用与上面相同的逻辑在其上放置一个标准视图,那么您实际上会获得完全相同的性能增益。这将以与创建物化视图相同的方式修剪表

如果表已经聚集在其他对象上,那么创建一个以dt作为集群键的简单物化视图将提供同样的好处,但也可以简单地查询基表,并让查询优化器帮助选择最佳修剪选项:

https://docs.snowflake.com/en/user-guide/views-materialized.html#how-查询优化器使用物化视图

根据评论编辑:我不知道为什么你不能使用任务/流,但如果你用task&流动

  1. 创建流。。。当流有数据时,可以执行一个执行存储过程的任务
  2. 存储过程将评估该表,以查看是否存在CCD_ 3的多于1个不同值。如果存在,它将从表中删除较旧的数据

在Snowflake中,删除基本上只是一个元数据操作,因为根据您对加载数据的描述,所有的微分区都包含相同的日期。

最新更新