【物化视图分区刷新】物化视图限制分区数量刷新时结果错误

【详述】版本2.5.7,根据主键分区基表创建物化视图进行row_number partition排序,但是每次执行的结果都不一致,通过etl_date(物化视图中使用的now()生成的)字段可以看出来数据没有刷新,详情见下图



物化视图建表语句中使用auto_refresh_partitions_limit,如下图:

类比问题视图自己建表语句如下,不知是不是数据量的问题问题并没有复现,建表语句中除了字段多少和数据量的差异,其余都是一样的
物化视图分区数据不同时刷新.sql (9.3 KB)
每次也都能正常排序显示


视图的执行时间一直在变化,但是表中的dh_etl_date一直停留在 2023-08-29 09:30:59.0

看task是SUCCESS,然后数据没变化?看下base表是不是真的有新的数据

自己测试的表没有新的数据,我设置的是60个分区刷新,不是应该是按照分区刷吗,而不是看有没有数据变更


这个SQL是怎么样的

现在看又正常了

1.sql (14.2 KB)
刚才回复的正常是因为同事把auto_refresh_partitions_limit改成-1了

您要看SQL,咱们是MPP数据库,默认SQL不加order by,顺序怎么能保证?

这个查询就四条数据,我的sn字段是通过row_number() over(partition)生成的,正常应该是1,2,3,4 但是现在出现了没有序号4的情况,也就是说只刷新了其中的某几条

我可以确定的是这四条数据绝对是在我设定的60个分区之内

开窗函数要看你怎么写,不保证每次都是那个顺序的,想要保证顺序,加个order by啊

大佬我有order by 即使我没有order by 序号也应该是1,2,3,4啊

开窗函数每次执行结果不一样:
row_number()over(partition by a.day,a.type,a.deviceId order by a.createTime) as rk,同一个分区同一个order by保证不了每次rk = 1 是同一行,优化为row_number()over(partition by a.day,a.type,a.deviceId order by a.createTime,a.day,a.type,a.deviceId) as rk就能保证了。

哟~ 超华大佬 …

:rofl: 大佬来做咱们的斑竹