Snowflake cloud data platform 物化视图如何设置任务的刷新时间?
我试图设置一个任务,每小时刷新一个物化视图。我试过这个: 我运行并将新数据插入到原始表中。物化视图立即更新 强制删除表时,取消删除构成物化视图的表。这导致了在特定时间的全面恢复,尽管这会很快变得昂贵 下表库存 Undrop表格库存Snowflake cloud data platform 物化视图如何设置任务的刷新时间?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我试图设置一个任务,每小时刷新一个物化视图。我试过这个: 我运行并将新数据插入到原始表中。物化视图立即更新 强制删除表时,取消删除构成物化视图的表。这导致了在特定时间的全面恢复,尽管这会很快变得昂贵 下表库存 Undrop表格库存 我在文档中找不到任何关于计划创建Materialized视图的内容。以前有人这样做过吗 您可以挂起和恢复物化视图。但不能查询挂起的MV。你想完成什么?您不会节省资金,只会推迟成本。另一种选择是,您只需通过自定义过程创建自己的物化视图,您可以通过任务进行调度 该过程创建
我在文档中找不到任何关于计划创建Materialized视图的内容。以前有人这样做过吗 您可以挂起和恢复物化视图。但不能查询挂起的MV。你想完成什么?您不会节省资金,只会推迟成本。另一种选择是,您只需通过自定义过程创建自己的物化视图,您可以通过任务进行调度 该过程创建一个与当前表类似的临时表,包括授权。然后将数据从视图插入此表中。最后交换表并删除临时表。最好将其创建为一个临时表,因为不需要时间旅行
CREATE OR REPLACE PROCEDURE utl.arch_create_mview_sp(P_TABLE_NM VARCHAR, P_VIEW_NM VARCHAR)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS $$
var result = "";
var sqlCmd = "";
var rs = "";
var tmpTableNM = P_TABLE_NM + "_tmp";
try {
sqlCmd = "CREATE OR REPLACE TABLE " + tmpTableNM + " LIKE " + P_TABLE_NM + " COPY GRANTS";
snowflake.execute( {sqlText: sqlCmd} );
sqlCmd = "INSERT INTO " + tmpTableNM + " SELECT * FROM " + P_VIEW_NM;
rs = snowflake.execute( {sqlText: sqlCmd} );
rs.next();
result = "rows inserted: " + rs.getColumnValue(1);
sqlCmd = "ALTER TABLE " + P_TABLE_NM + " SWAP WITH " + tmpTableNM;
snowflake.execute( {sqlText: sqlCmd} );
sqlCmd = "DROP TABLE " + tmpTableNM;
snowflake.execute( {sqlText: sqlCmd} );
}
catch (err) {
result = "Failed: Code: " + err.code + " | State: " + err.state;
result += "\n Message: " + err.message;
result += "\nStack Trace:\n" + err.stackTraceTxt;
}
}
return result;
$$;
但是为什么呢?当DML在其基表上运行时,Snowflake会自动使物化视图保持最新。此外,如果您的基表每小时都经历如此多的更改,那么物化视图可能不是正确的解决方案。通常,当物化视图的基表没有经历太多更改,并且物化视图sql经常运行且IO和计算成本较高时,建议使用物化视图。但是,如果您承诺每小时刷新一次物化视图,则可以使用触发刷新。刷新时,对视图进行的查询将针对基表执行,因此速度会变慢。