Exibição ACCESS_HISTORY: novas colunas parent_query_id e root_query_id

Atenção

Essa mudança de comportamento está no pacote 2023_08.

Para saber o status atual do pacote, consulte Histórico do pacote.

A exibição ACCESS_HISTORY do Account Usage se comporta da seguinte forma:

Antes da mudança

Uma consulta na exibição não inclui as colunas parent_query_id e root_query_id.

Após a mudança

Uma consulta na exibição inclui as colunas parent_query_id e root_query_id, que são definidas da seguinte forma:

Nome da coluna

Tipo de dados

Descrição

parent_query_id

TEXT

O ID de consulta do trabalho pai ou NULL se o trabalho não tiver um pai.

root_query_id

TEXT

O ID de consulta do trabalho mais importante na cadeia ou NULL se o trabalho não tiver um pai.

Essas colunas começam a registrar dados quando o pacote 2023_08 é ativado e são as duas últimas colunas da exibição. O ID da consulta corresponde a uma consulta na coluna query_id na exibição ACCESS_HISTORY do Account Usage. As colunas registram os IDs da consulta para estes tipos de consultas:

  • Uma consulta executa uma operação de leitura ou gravação em outro objeto.

    A operação de leitura ou gravação deve ser uma operação suportada atualmente pela exibição ACCESS_HISTORY.

  • Uma consulta executa uma operação de leitura ou gravação em um objeto que chama um procedimento armazenado. Chamadas de procedimentos armazenados aninhados também são suportadas.

Por exemplo, se você executar essas instruções em ordem:

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();
Copy

Uma consulta exibição ACCESS_HISTORY registra as informações da seguinte forma:

USE ROLE GOVERNANCE_VIEWER;

SELECT
  query_id,
  parent_query_id,
  root_query_id,
  direct_objects_accessed
FROM
  SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY;
Copy
+----------+-----------------+---------------+-----------------------------------+
| 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"}]       |
+----------+-----------------+---------------+-----------------------------------+
  • A primeira linha corresponde à chamada do segundo procedimento denominado myproc_parent conforme mostrado na coluna direct_objects_accessed.

    As colunas parent_query_id e root_query_id retornam NULL porque você chamou esse procedimento armazenado diretamente.

  • A segunda linha corresponde à consulta que chama o primeiro procedimento denominado myproc_child conforme mostrado na coluna direct_objects_accessed.

    As colunas parent_query_id e root_query_id retornam o mesmo ID de consulta porque a consulta que chama myproc_child foi iniciada pela consulta que chama myproc_parent, que você chamou diretamente.

  • A terceira linha corresponde à consulta que acessou a tabela denominada mytable no procedimento myproc_child conforme mostrado na coluna direct_objects_accessed.

    A coluna parent_query_id retorna o ID de consulta da consulta que acessou mytable, que corresponde à chamada de myproc_child. Esse procedimento armazenado foi iniciado pela consulta que chama myproc_parent, mostrada na coluna root_query_id.

Ref: 1265