在 Snowflake 中跟踪数据加载历史

Track data load history in Snowflake

Snowflake 在其 INFORMATION_SCHEMA 对象中存储很少的元数据集。我试图调查 table 是如何被 procedure/query 加载的。

History 允许进行高级调查,但我想使用自定义 SQL 代码来进行更深入的研究。

执行下面的代码后,我得到了 Statement not found 错误,即使 Query_ID 是有效的。 有什么方法可以导航历史加载,以便我可以跟踪哪个过程将数据加载到 table?

SELECT * FROM table(RESULT_SCAN('xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx'));

如果您想查看最近的查询历史记录,您可以使用以下语法:

SELECT *
FROM TABLE(information_schema.QUERY_HISTORY())
WHERE QUERY_ID = 'xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx'

过滤数据加载查询:

SELECT *
FROM TABLE(information_schema.QUERY_HISTORY())
WHERE QUERY_TEXT LIKE '%COPY INTO%'

提示:以上 table 功能 return 最近 7 天的数据。如果您需要更多历史记录,请使用帐户使用情况视图。 提示:要使用帐户历史视图,请切换到 AccountAdmin 角色。 https://docs.snowflake.com/en/sql-reference/account-usage/query_history.html

Rgds,

段.

使用 RESULT_SCAN( ) 的详细信息可在下方 link 中找到,请注意这两个条件可能会影响您 运行 查询的能力:

  • 查询不能在使用 RESULT_SCAN()
  • 前超过 24 小时执行
  • 只有 运行 原始查询的用户可以使用 RESULT_SCAN( )

https://docs.snowflake.com/en/sql-reference/functions/result_scan.html#usage-notes

至于"navigate history load so I can track what procedure loaded data to which table?":我强烈建议您在SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY视图上进行分析。 一个好的起点可能是这样的:

SELECT *
FROM   snowflake.account_usage.query_history
WHERE  start_time >= DATEADD('days', -30, CURRENT_TIMESTAMP())
AND    start_time <= date_trunc(HOUR, CURRENT_TIMESTAMP())
AND    query_text iLike '%TABLE_NAME_HERE%'
AND    query_type <> 'SELECT';

https://docs.snowflake.com/en/sql-reference/account-usage/query_history.html

如果您怀疑有问题的 table 是从 COPY INTO table 命令加载的, 从以下两个视图之一中查看结果对您来说是有意义的:

虽然 account_usage "share" 中的视图可能会有一些延迟(通常为 10-20 分钟,可能长达 90 分钟),但我发现使用它们进行分析就像你做的比查询 INFORMATION_SCHEMA 个对象(意见)更容易。

希望对你有帮助...丰富