Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Snowflake cloud data platform 雪花-如何查询流的元数据并保存到表_Snowflake Cloud Data Platform - Fatal编程技术网

Snowflake cloud data platform 雪花-如何查询流的元数据并保存到表

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天的时间窗口以及后续的创建或替换流 请

我有各种各样的溪流,但有些溪流已变得陈旧。为了避免它们变得陈旧,我想在适当的地方放置一些进程,可以读取“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 ;

谢谢你,弗朗西斯科,询问和解释帮助了我。