Vue ACCESS_HISTORY : nouvelles colonnes parent_query_id et root_query_id

Attention

Ce changement de comportement est présent dans le bundle 2023_08.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

La vue Account Usage ACCESS_HISTORY se comporte comme suit :

Avant la modification

Une requête sur la vue ne comprend pas les colonnes parent_query_id et root_query_id.

Après la modification

Une requête sur la vue inclut les colonnes parent_query_id et root_query_id, qui sont définies comme suit :

Nom de la colonne

Type de données

Description

parent_query_id

TEXT

La requête ID de la tâche parent ou NULL si la tâche n’a pas de parent.

root_query_id

TEXT

La requête ID de la tâche la plus élevée de la chaîne ou NULL si la tâche n’a pas de parent.

Ces colonnes commencent à enregistrer des données lorsque le bundle 2023_08 est activé et sont les deux dernières colonnes de la vue. La requête ID correspond à une requête dans la colonne query_id de la vue Account Usage ACCESS_HISTORY. Les colonnes enregistrent la requête IDs pour ces types de requêtes :

  • Une requête effectue une opération de lecture ou d’écriture sur un autre objet.

    L’opération de lecture ou d’écriture doit être une opération que la vue ACCESS_HISTORY prend actuellement en charge.

  • Une requête effectue une opération de lecture ou d’écriture sur un objet qui appelle une procédure stockée. Les appels de procédures stockées imbriquées sont également pris en charge.

Par exemple, si les instructions suivantes sont exécutées dans l’ordre :

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

Une requête sur la vue ACCESS_HISTORY enregistre les informations comme suit :

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"}]       |
+----------+-----------------+---------------+-----------------------------------+
  • La première ligne correspond à l’appel de la deuxième procédure nommée myproc_parent comme indiqué dans la colonne direct_objects_accessed.

    Les colonnes parent_query_id et root_query_id renvoient NULL parce que vous avez appelé cette procédure stockée directement.

  • La deuxième ligne correspond à la requête qui appelle la première procédure nommée myproc_child comme indiqué dans la colonne direct_objects_accessed.

    Les colonnes parent_query_id et root_query_id renvoient la même requête ID car la requête appelant myproc_child a été initiée par la requête appelant myproc_parent, que vous avez appelée directement.

  • La troisième ligne correspond à la requête qui a accédé à la table nommée mytable dans la procédure myproc_child, comme indiqué dans la colonne direct_objects_accessed.

    La colonne parent_query_id renvoie la requête ID de la requête qui a accédé à mytable, ce qui correspond à l’appel de myproc_child. Cette procédure stockée a été lancée par la requête appelant myproc_parent, qui figure dans la colonne root_query_id.

Réf : 1265