雪花物化视图未更新

Posted

技术标签:

【中文标题】雪花物化视图未更新【英文标题】:Snowflake Materialized View Not Updating 【发布时间】:2020-04-14 04:07:50 【问题描述】:

我在 Snowflake 中实现了不令人耳目一新的物化视图。下面是我正在做的一个基本示例。

--Create table and insert two records
CREATE OR REPLACE TABLE T1 (ID INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (2);

--Create materialized view on table
CREATE OR REPLACE MATERIALIZED VIEW VW_T1 AS SELECT ID AS AVG_ID FROM T1;

--Insert two more records after creating the materialized view
INSERT INTO T1 VALUES (3);
INSERT INTO T1 VALUES (4);

-- Show metadata
SHOW MATERIALIZED VIEWS LIKE '%T1';

无论我等待多久,视图似乎都没有更新。行数始终为 2。Behind_by 始终有一个值。

我做错了什么。我已按照 Snowflake 文档中的故障排除,但没有成功。 https://docs.snowflake.com/en/user-guide/views-materialized.html#troubleshooting

马吕斯

【问题讨论】:

仅供参考,非常有问题的元数据,您可以通过INSERT INTO T1 VALUES (1),(2);插入很多行 但是运行了你的例子,并在show 之后执行select * from VW_T1; 并获得预期的行,然后再次执行show... 并获得旧行,我同意获得相同的值返回..并交换到不同的仓库并运行选择并再次显示,选择的结果仍然正确,但显示的结果旧 对我来说听起来像是一个错误,我会在支持下开票。 我可以在最后看到 4 条记录。您能否查看SHOW MATERIALIZED VIEWS 上的refreshed_on 列,显示时间。 @PIG 他注意到show 命令的结果有错误的行数,而不是视图本身有这些行。 【参考方案1】:

这是预期的行为。雪花物化视图不同于其他数据库上的物化视图。两个重点:

1) 物化视图由 Snowflake 自动且透明地维护。

2) 具体化视图始终提供最新数据。如果在物化视图更新之前运行查询,Snowflake 将更新物化视图或使用物化视图的最新部分并从基表中检索任何所需的更新数据。

因此您无需担心更新。它将不时在后台更新(基于某些标准,例如 DML 大小、DML 计数、时间)。如果您检查 SHOW 命令输出中的“refreshed_on”列,您可以看到它何时更新。

---------- 额外信息 --------------

MV 将数据保存在自己的数据文件中。 SHOW 命令显示“刷新数据的时间”、“它包含多少行”等... Marius 看到了 2 行,因为 MV 那时有 2 行。当 Marius 向源表添加更多行时,MV 不会立即复制它们。有一些阈值,但是如果你尝试从 MV 中读取,MV 会从源表中读取 delta,并一直提供当前数据。用户无需担心“behind_by”、“refreshed_on”或“行数”(除非滞后几天)。

总之,SHOW 命令和 MV 似乎按预期工作。

【讨论】:

我对他的问题的解读是,“物化视图有效,但 show 命令详细信息错误”,这意味着如果您将 show 命令输出用于“某事”本身,则这些结果不能用过的。我重新查看了我/他的视图,它们刚刚是最新的,但是在插入更多行并从视图中获取这些行之后,rows 计数和up-to-daterefreshed-on 全部错误的。所以你的观点和他试图表达的观点一样不正确。 我了解情况,并在回答中添加了更多细节以进行解释。 啊,这个额外的解释更有意义,在节目中看到的差距和选择的行为。

以上是关于雪花物化视图未更新的主要内容,如果未能解决你的问题,请参考以下文章

雪花物化视图可以包含半结构化数据的展平吗?

使用 dbt 的物化视图与表

PG 物化视图

oracle物化视图不会自动更新是怎么回事

Postgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行

Oracle设置物化视图的自动刷新