USERS- und QUERY_HISTORY-Ansichten (ACCOUNT_USAGE) und die Funktion QUERY_HISTORY: Neue Spalten (ausstehend)¶
Achtung
Diese Verhaltensweisen sind im Bundle 2024_08 enthalten.
Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.
Wenn dieses Verhaltensänderungs-Bundle aktiviert ist, enthalten die Ansichten USERS und QUERY_HISTORY sowie die Ausgabe der Funktion QUERY_HISTORY die folgenden neuen Spalten.
USERS-Ansicht (ACCOUNT_USAGE)¶
Wenn der Benutzer TYPE SNOWFLAKE_SERVICE ist, was darauf hinweist, dass es sich um einen Dienstbenutzer handelt, liefern die folgenden neuen Spalten die Datenbank- und Schema-Informationen des Services. Anderenfalls sind diese Spalten null.
Spaltenname |
Typ |
Beschreibung |
---|---|---|
DATABASE_NAME |
VARCHAR |
Wenn der Benutzer-TYPE SNOWFLAKE_SERVICE ist, gibt er den Namen der Datenbank des Dienstes an. Anderenfalls wird NULL angegeben. |
DATABASE_ID |
NUMBER |
Wenn der Benutzer-TYPE SNOWFLAKE_SERVICE lautet, gibt er den internen, von Snowflake generierten Bezeichner für die Datenbank des Dienstes an. Anderenfalls wird NULL angegeben. |
SCHEMA_NAME |
VARCHAR |
Wenn der Benutzertyp SNOWFLAKE_SERVICE ist, gibt er den Namen des Dienstschemas an. Anderenfalls wird NULL angegeben. |
SCHEMA_ID |
NUMBER |
Wenn der Benutzertyp SNOWFLAKE_SERVICE ist, gibt er den internen, von Snowflake generierten Bezeichner für das Dienstschema an. Anderenfalls wird NULL angegeben. |
QUERY_HISTORY-Ansicht (ACCOUNT_USAGE)¶
Wenn die QUERY_HISTORY USER_TYPE SNOWFLAKE_SERVICE ist und anzeigt, dass die Abfrage von einem Snowpark Container Services-Dienst ausgeführt wird, liefern die anderen Spalten die Datenbank- und Schema-Informationen des Dienstes.
Spaltenname |
Typ |
Beschreibung |
---|---|---|
USER_TYPE |
VARCHAR |
Gibt den Typ des Benutzers an, der die Abfrage ausführt. Er ist dasselbe wie das Feld |
USER_DATABASE_NAME |
VARCHAR |
Wenn der Wert in der |
USER_DATABASE_ID |
NUMBER |
Wenn der Wert in der |
USER_SCHEMA_NAME |
VARCHAR |
Wenn der Wert in der |
USER_SCHEMA_ID |
NUMBER |
Wenn der Wert in der |
Funktion QUERY_HISTORY¶
Die folgenden neuen Spalten werden der Ausgabe hinzugefügt (siehe QUERY_HISTORY-Funktion). Sie identifizieren den Benutzertyp (USER_TYPE). Wenn der USER_TYPE SNOWFLAKE_SERVICE ist, identifizieren die anderen Spalten die Datenbank und das Dienstschema.
Spaltenname |
Typ |
Beschreibung |
---|---|---|
USER_TYPE |
VARCHAR |
Gibt den Typ des Benutzers an, der die Abfrage ausführt. Es ist dasselbe wie das Feld |
USER_DATABASE_NAME |
VARCHAR |
Wenn der Wert in der |
USER_SCHEMA_NAME |
VARCHAR |
Wenn der Wert in der |
Beispiele¶
Die Datenbank- und Schemainformationen des Dienstes sowie der Benutzername (der für den SNOWFLAKE_SERVICE -Benutzer type
auch der Dienstname ist) können bei der Fehlersuche hilfreich sein. Sie können zum Beispiel eine Abfrage schreiben, um Informationen über den Dienst abzurufen, der die Abfragen ausgeführt hat. Im Folgenden finden Sie einige Beispielabfragen:
Beispiel 1: Abrufen von Abfragen, die von einem Dienst ausgeführt werden.
SELECT query_history.*
FROM snowflake.account_usage.query_history
WHERE user_type = 'SNOWFLAKE_SERVICE'
AND user_name = '<service-name>'
AND user_database_name = '<service-db-name>'
AND user_schema_name = '<service-schema-name>'
order by start_time;
Für die WHERE-Klausel gilt:
user_name = '<service-name>'
, da ein Dienst Abfragen als service-user ausführt und der Name des Dienstbenutzers mit dem Dienstnamen identisch ist.user_type = 'SNOWFLAKE_SERVICE'
unduser_name = '<service-name>'
rufen nur Abfragen ab, die von einem Dienst ausgeführt werden.user_database_name
unduser_schema_name
sind die Namen der Datenbank und des Schemas des Dienstes für einen Dienstbenutzer.
Sie erhalten dieselben Abfragen, wenn Sie die Funktion information_schema.query_history abfragen.
SELECT *
FROM TABLE(<any-user-db-name>.information_schema.query_history())
WHERE user_database_name = '<service-db-name>'
AND user_schema_name = '<service-schema-name>'
AND user_type = 'SNOWFLAKE_SERVICE'
AND user_name = '<service-name>'
order by start_time;
Für die WHERE-Klausel gilt:
user_type = 'SNOWFLAKE_SERVICE'
unduser_name = '<service-name>'
rufen nur Abfragen ab, die von einem Dienst ausgeführt wurden.user_database_name
unduser_schema_name
sind die Namen der Datenbank und des Schemas des Dienstes für einen Dienstbenutzer.
Beispiel 2: Abrufen von Abfragen, die von Diensten ausgeführt werden, und die entsprechenden Dienstinformationen.
SELECT query_history.*, services.*
FROM snowflake.account_usage.query_history
JOIN snowflake.account_usage.services
ON query_history.user_name = services.service_name
AND query_history.user_schema_id = services.service_schema_id
AND query_history.user_type = 'SNOWFLAKE_SERVICE'
Die Abfrage verbindet die Ansichten QUERY_HISTORY und SERVICES, um Informationen über die Abfragen und ausführenden Dienste abzurufen. Beachten Sie Folgendes:
Bei Abfragen, die von Diensten ausgeführt werden, ist
query_history.user_name
der Name des Dienstbenutzers, der mit dem Dienstnamen übereinstimmt.Die Abfrage verbindet die Ansichten anhand des Schemas IDs (nicht des Schemanamens), um sicherzustellen, dass Sie sich auf dasselbe Schema beziehen. Denn wenn Sie ein Schema löschen und neu erstellen, ändert sich das Schema ID, aber der Name bleibt derselbe.
Sie können der Abfrage optionale Filter hinzufügen. Beispiel:
query_history
-Filter, um nur Dienste abzurufen, die bestimmte Abfragen ausgeführt haben.services
-Filter, um nur Abfragen abzurufen, die von bestimmten Diensten ausgeführt wurden.
Beispiel 3: Abrufen von Dienstbenutzerinformationen für jeden Dienst.
SELECT services.*, users.*
FROM snowflake.account_usage.users
JOIN snowflake.account_usage.services
ON users.name = services.service_name
AND users.schema_id = services.service_schema_id
AND users.type = 'SNOWFLAKE_SERVICE'
Die Abfrage verbindet die Ansichten SERVICES und USERS im Schema ACCOUNT_USAGE, um Dienste und Benutzerinformationen abzurufen. Beachten Sie Folgendes:
Wenn ein Dienst Abfragen ausführt, führt er die Abfragen als Dienstbenutzer aus, und der Name des Dienstbenutzers ist derselbe wie der Dienstname. Daher geben Sie die Join-Bedingung an:
users.name = services.service_name
.Dienstnamen sind nur innerhalb eines Schemas eindeutig. Daher gibt die Abfrage die Join-Bedingung (
users.schema_id = services.service_schema_id
) an, um sicherzustellen, dass jeder Dienstbenutzer mit dem spezifischen Dienst abgeglichen wird, zu dem er gehört (und nicht mit einem anderen gleichnamigen Dienst, der in verschiedenen Schemas läuft).
Ref.: 1771