物化视图如何设置任务的刷新时间?

Materialized View how to set a refresh time with task?

我正在尝试设置一个任务以每小时刷新一次物化视图。我试过这个:

  1. I 运行 并将新数据插入原始 table。物化视图即时更新
  2. 强制 table 删除,取消删除构成物化视图的 table。它导致在特定时间完全恢复 - 尽管这很快就会变得昂贵

Drop table BookInventory;

Undrop table BookInventory;

我在文档中找不到任何关于安排实体化视图创建的内容。有没有人这样做过?

您可以暂停和恢复实体化视图。但是您不能查询暂停的 MV。你想达到什么目的?你不是要省钱,只是推迟成本。

另一种选择是您只需通过可以通过任务安排的自定义过程创建自己的 "materialized view"。

该程序创建一个与当前类似的临时 table,包括赠款。然后从视图中将数据插入此 table。最后交换 tables 并降低温度 table。最好将其创建为瞬态 table,因为不需要时间旅行。

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;
$$;