Snowflake cloud data platform 雪花-如何查询流的元数据并保存到表
我有各种各样的溪流,但有些溪流已变得陈旧。为了避免它们变得陈旧,我想在适当的地方放置一些进程,可以读取“show stream”属性“stale after”,如果只剩下1天,请运行一个进程来刷新流。要实现您的目标,您必须捕获show STREAMS的输出。您可以开始构建一个存储过程来运行它,并使用与下面类似的TABLERESULT\u SCANLAST\u QUERY\u ID以结果集的形式返回其输出,该ID可以通过一个参数来丰富,该参数用于您要检查剩余1天的时间窗口以及后续的创建或替换流 请注意,这不是问题的完整解决方案,但仅是问题的一半,因为它不包括重新创建过时流所需的操作Snowflake cloud data platform 雪花-如何查询流的元数据并保存到表,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有各种各样的溪流,但有些溪流已变得陈旧。为了避免它们变得陈旧,我想在适当的地方放置一些进程,可以读取“show stream”属性“stale after”,如果只剩下1天,请运行一个进程来刷新流。要实现您的目标,您必须捕获show STREAMS的输出。您可以开始构建一个存储过程来运行它,并使用与下面类似的TABLERESULT\u SCANLAST\u QUERY\u ID以结果集的形式返回其输出,该ID可以通过一个参数来丰富,该参数用于您要检查剩余1天的时间窗口以及后续的创建或替换流 请
CREATE OR REPLACE PROCEDURE sp_show_stream_stale()
RETURNS VARIANT NOT NULL
LANGUAGE Javascript
EXECUTE AS Caller
AS
$$
var sql_command0 = snowflake.createStatement({ sqlText:`show streams in database`});
var sql_command1 = snowflake.createStatement({ sqlText:`SELECT "created_on"
, "name"
, "database_name"
, "schema_name"
, "owner"
, "comment"
, "table_name"
, "type"
, "stale"
, "mode"
, "stale_after"
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))`});
try {
sql_command0.execute();
var db = sql_command1.execute();
var json_rows = {};
var array_of_rows = [];
var COLUMNS = ["created_on","name","database_name","schema_name","owner", "comment", "table_name", "type", "stale", "mode", "stale_after"];
var row_num = 1;
while (db.next()) {
json_rows = {};
for (var col_num = 0; col_num < COLUMNS.length; col_num = col_num + 1) {
var col_name = COLUMNS[col_num];
json_rows[col_name] = db.getColumnValue(col_num + 1);
}
array_of_rows.push(json_rows);
++row_num;
}
return array_of_rows;
}
catch (err) {
return "Failed: " + err;
}
$$;
由于resultset是一个JSON,您可以运行存储过程,并在下面的SELECT语句之后立即以表格格式获取resultset
CALL sp_show_stream_stale();
SELECT value:created_on::datetime as "created_on",
value:name::string as "name",
value:database_name::string as "database_name",
value:schema_name::string as "schema_name",
value:owner::string as "owner",
value:comment::string as "comment",
value:table_name::string as "table_name",
value:type::string as "type",
value:stale::string as "stale",
value:mode::string as "mode",
value:stale_after::datetime as "stale_after"
FROM (SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())))
, LATERAL FLATTEN(Input => sp_show_stream_stale)
WHERE DATEDIFF(Day, current_timestamp, value:stale_after::datetime) <= 1 ;
谢谢你,弗朗西斯科,询问和解释帮助了我。