Ansicht ACCESS_HISTORY: Neue Spalten root_query_id und root_query_id

Achtung

Diese Verhaltensänderung ist in Bundle 2023_08 enthalten.

Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.

Die Account Usage-Ansicht ACCESS_HISTORY verhält sich wie folgt:

Vor der Änderung

Eine Abfrage auf der Ansicht enthält nicht die Spalten root_query_id und root_query_id.

Nach der Änderung

Eine Abfrage auf der Ansicht enthält die Spalten root_query_id und root_query_id, die wie folgt definiert sind:

Spaltenname

Datentyp

Beschreibung

root_query_id

TEXT

Die Abfrage-ID des übergeordneten Jobs oder NULL, wenn der Job keinen übergeordneten Job hat.

root_query_id

TEXT

Die Abfrage-ID des obersten Jobs in der Job-Hierarchie oder NULL, wenn der Job keinen übergeordneten Job hat.

Diese Spalten beginnen mit der Erfassung von Daten, sobald Bundle 2023_08 aktiviert wird. Sie sind beiden letzten Spalten in der Ansicht. Die Abfrage-ID entspricht einer Abfrage in der Spalte query_id der Account Usage-Ansicht ACCESS_HISTORY. Die Spalten erfassen die Abfrage-IDs für folgende Arten von Abfragen:

  • Abfragen, die eine Lese- oder Schreiboperation auf einem anderen Objekt ausführen.

    Die Lese- oder Schreiboperation muss eine Operation sein, die derzeit von der Ansicht ACCESS_HISTORY unterstützt wird.

  • Abfrage, die eine Lese- oder Schreiboperation auf einem Objekt ausführen, der eine gespeicherte Prozedur aufruft. Verschachtelte Aufrufe von gespeicherten Prozeduren werden ebenfalls unterstützt.

Wenn Sie z. B. die folgenden Anweisungen nacheinander ausführen lassen:

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

Bei einer Abfrage auf der Ansicht ACCESS_HISTORY werden die Informationen wie folgt erfasst:

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"}]       |
+----------+-----------------+---------------+-----------------------------------+
  • Die erste Zeile entspricht dem Aufruf der zweiten Prozedur namens myproc_parent, wie in der Spalte direct_objects_accessed gezeigt.

    Die Spalten root_query_id und root_query_id geben NULL zurück, da Sie diese gespeicherte Prozedur direkt aufgerufen haben.

  • Die zweite Zeile entspricht der Abfrage, die die erste Prozedur namens myproc_child aufruft, wie in der Spalte direct_objects_accessed angegeben.

    Die Spalten root_query_id und root_query_id geben dieselbe Abfrage-ID zurück, da die Abfrage, die myproc_child aufruft, von der Abfrage initiiert wurde, die myproc_parent aufruft, die Sie direkt aufgerufen haben.

  • Die dritte Zeile entspricht der Abfrage, die in der Prozedur myproc_child auf die Tabelle mytable zugreift, wie in der Spalte direct_objects_accessed angegeben.

    Die Spalte root_query_id gibt die Abfrage-ID der Abfrage zurück, die auf mytable zugegriffen hat, was einem Aufruf von myproc_child entspricht. Diese gespeicherte Prozedur wurde durch die Abfrage gestartet, die myproc_parent aufruft. Sie wird in der Spalte root_query_id angezeigt.

Ref.: 1265