如何在 SnowFlake 中加入 query_id & METADATA$ROW_ID

How to join query_id & METADATA$ROW_ID in SnowFlake

我正在跟踪数据的变化以及一些审计细节,比如做出变化的用户。

Snowflake 中的

Streams 提供增量记录详细信息和少量审计列,包括 METADATA$ROW_ID.

另一个 table 即 information_schema.query_history 包含查询历史详细信息,包括 query_id、user_name、数据库名称、模式名称等

我正在寻找一种方法,以便我可以加入 query_id & METADATA$ROW_ID 所以我可以找到对应于每个数据变化的user_name。

我们将不胜感激。

此致, 内拉吉

流中的 METADATA$ROW_ID 列唯一标识源 table 中的每一行,以便您可以使用流跟踪其更改。

它不是用来跟踪更改了数据,而是用来跟踪如何数据更改的。

据我所知,Snowflake 不会跟踪谁更改了单个行,这是您必须自己构建到您的应用程序中的东西 - 例如,通过像 updated_by 这样的列。

我找到的唯一方法是添加

SELECT * FROM table(information_schema.QUERY_HISTORY_BY_SESSION()) ORDER BY start_time DESC LIMIT 1 

在报告期间/table/生成行

假设您没有更改设置,您可以在一个会话中同时 运行 更多查询,这将获得 运行ning 查询 ID,将其更改为 CTE 并交叉连接到select 的最后一部分将其插入所有行。

这样你就可以得到 query_history table 中的所有变量。还要记住,snowflake 确实会将 SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY(和其他数据)保留长达一年。所以我推荐 weekly/monthly 将数据合并到长期历史记录中的工作 table。这样一来,您也可以更轻松地处理对历史数据的访问,而不是将帐户管理员角色授予用户。