ACCESS_HISTORY 视图:新增 parent_query_id
和 root_query_id
列¶
Account Usage ACCESS_HISTORY 视图的行为如下:
- 变更前
对视图的查询不包括
parent_query_id
和root_query_id
列。- 变更后
对视图的查询包括
parent_query_id
和root_query_id
列,其定义如下:列名称
数据类型
描述
parent_query_id
TEXT
父作业的查询 ID,如果作业没有父作业,则查询 NULL。
root_query_id
TEXT
链中最顶层作业的查询 ID,如果作业没有父作业,则查询 NULL。
这些列在启用 2023_08 捆绑包后开始记录数据,是视图中的最后两列。查询 ID 对应 Account Usage ACCESS_HISTORY 视图中
query_id
列中的查询。这些列记录以下类型查询的查询 IDs :查询对另一个对象执行读取或写入操作。
读取或写入操作 必须是 ACCESS_HISTORY 视图当前支持的操作。
查询对调用存储过程的对象执行读取或写入操作。还支持嵌套存储过程调用。
例如,如果按顺序运行这些语句:
CREATE OR REPLACE PROCEDURE myproc_child() RETURNS INTEGER LANGUAGE SQL AS $$ BEGIN SELECT * FROM mydb.mysch.mytable; RETURN 1; END $$; CREATE OR REPLACE PROCEDURE myproc_parent() RETURNS INTEGER LANGUAGE SQL AS $$ BEGIN CALL myproc_child(); RETURN 1; END $$; CALL myproc_parent();
对 ACCESS_HISTORY 视图的查询将按如下方式记录信息:
USE ROLE GOVERNANCE_VIEWER; SELECT query_id, parent_query_id, root_query_id, direct_objects_accessed FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY;
+----------+-----------------+---------------+-----------------------------------+ | QUERY_ID | PARENT_QUERY_ID | ROOT_QUERY_ID | DIRECT_OBJECTS_ACCESSED | +----------+-----------------+---------------+-----------------------------------+ | 1 | NULL | NULL | [{"objectName": "myproc_parent"}] | | 2 | 1 | 1 | [{"objectName": "myproc_child"}] | | 3 | 2 | 1 | [{"objectName": "mytable"}] | +----------+-----------------+---------------+-----------------------------------+
第一行对应的是调用名为
myproc_parent
的第二个存储过程,如direct_objects_accessed
列所示。parent_query_id
和root_query_id
列返回 NULL,因为您直接调用了此存储过程。第二行对应的是调用名为
myproc_child
的第一个存储过程的查询,如direct_objects_accessed
列所示。parent_query_id
和root_query_id
列返回相同的查询 ID,因为调用myproc_child
的查询是由调用 :code:`myproc_parent`(直接调用)的查询启动的。第三行对应的是访问
myproc_child
过程中名为mytable
的表的查询,如direct_objects_accessed
列中所示。parent_query_id
列返回访问mytable
的查询的查询 ID,对应于调用myproc_child
。该存储过程由调用myproc_parent
启的查询动,该查询显示在root_query_id
列中。
参考:1265