Kategorien:

Information Schema, Tabellenfunktionen

QUERY_HISTORY , QUERY_HISTORY_BY_*

Die Tabellenfunktionen der QUERY_HISTORY-Familie können verwendet werden, um den Snowflake-Abfrageverlauf anhand verschiedener Dimensionen abzufragen:

  • QUERY_HISTORY gibt Abfragen innerhalb eines angegebenen Zeitraums zurück.

  • QUERY_HISTORY_BY_SESSION gibt Abfragen innerhalb einer angegebenen Sitzung und eines bestimmten Zeitraums zurück.

  • QUERY_HISTORY_BY_USER gibt Abfragen zurück, die von einem bestimmten Benutzer innerhalb eines bestimmten Zeitraums gestellt wurden.

  • QUERY_HISTORY_BY_WAREHOUSE gibt Abfragen zurück, die von einem bestimmten Warehouse innerhalb eines bestimmten Zeitraums ausgeführt wurden.

Jede Funktion ist für die Abfrage anhand der angegebenen Dimension optimiert. Die Ergebnisse können mit SQL-Prädikaten weiter gefiltert werden.

Siehe auch:

Syntax

QUERY_HISTORY(
      [ END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )

QUERY_HISTORY_BY_SESSION(
      [ SESSION_ID => <constant_expr> ]
      [, END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )

QUERY_HISTORY_BY_USER(
      [ USER_NAME => '<string>' ]
      [, END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )

QUERY_HISTORY_BY_WAREHOUSE(
      [ WAREHOUSE_NAME => '<string>' ]
      [, END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )
Copy

Argumente

Alle Argumente sind optional.

END_TIME_RANGE_START => constant_expr, . END_TIME_RANGE_END => constant_expr

Zeitbereich (im Format TIMESTAMP_LTZ) innerhalb der letzten 7 Tage, in der die Abfrage fertig ausgeführt wurde:

  • Wenn END_TIME_RANGE_END nicht angegeben ist, gibt die Funktion alle Abfragen zurück, auch jene, die noch ausgeführt werden.

  • Wenn END_TIME_RANGE_END den Wert CURRENT_TIMESTAMP aufweist, gibt die Funktion nur jene Abfragen zurück, die abgeschlossen wurden.

Wenn der Zeitbereich nicht in den letzten 7 Tagen liegt, wird ein Fehler zurückgegeben.

Bemerkung

Wenn keine Start- oder Endzeiten angegeben sind, werden die letzten Abfragen bis zum angegebenen Limit zurückgegeben.

SESSION_ID => constant_expr

Gilt nur für QUERY_HISTORY_BY_SESSION

Der numerische Bezeichner für eine Sitzung oder CURRENT_SESSION. Es werden nur Abfragen aus der angegebenen Sitzung zurückgegeben.

Standard: CURRENT_SESSION

USER_NAME => 'string'

Gilt nur für QUERY_HISTORY_BY_USER

Eine Zeichenfolge, die den Anmeldenamen eines Benutzers oder CURRENT_USER angibt. Es werden nur Abfragen zurückgegeben, die vom angegebenen Benutzer ausgeführt wurden. Beachten Sie, dass der Anmeldename in einfache Anführungszeichen gesetzt werden muss. Wenn der Anmeldename Leerzeichen, gemischte Groß- und Kleinbuchstaben oder Sonderzeichen enthält, muss der Name innerhalb der einfachen Anführungszeichen in doppelte Anführungszeichen gesetzt werden (z. B. '"User 1"' vs. 'user1').

Standard: CURRENT_USER

WAREHOUSE_NAME => 'string'

Gilt nur für QUERY_HISTORY_BY_WAREHOUSE

Eine Zeichenfolge, die einen Warehouse-Namen angibt, oder CURRENT_WAREHOUSE. Es werden nur von diesem Warehouse ausgeführte Abfragen zurückgegeben. Beachten Sie, dass der Warehouse-Name in einfache Anführungszeichen gesetzt werden muss. Wenn der Warehouse-Name Leerzeichen, Groß- und Kleinbuchstaben oder Sonderzeichen enthält, muss der Name außerdem innerhalb der einfachen Anführungszeichen in doppelte Anführungszeichen gesetzt werden (z. B. '"My Warehouse"' vs. 'mywarehouse').

Standard: CURRENT_WAREHOUSE

RESULT_LIMIT => num

Eine Zahl, die die maximale Anzahl der von der Funktion zurückgegebenen Zeilen angibt:

Wenn die Anzahl der übereinstimmenden Zeilen größer als dieser Grenzwert ist, werden die Abfragen mit der jüngsten Endzeit (oder Abfragen, die noch ausgeführt werden) zurückgegeben – bis zum angegebenen Grenzwert.

Bereich: 1 bis 10000

Standard: 100.

Nutzungshinweise

  • Gibt Abfragen zurück, die vom aktuellen Benutzer ausgeführt werden. Gibt auch Abfragen zurück, die von einem beliebigen Benutzer ausgeführt wurden, wenn die ausführende Rolle oder eine höhere Rolle in einer Hierarchie die Berechtigung MONITOR oder OPERATE für die Warehouses, in denen die Abfragen ausgeführt wurden. Weitere Informationen dazu finden Sie unter Berechtigungen von virtuellen Warehouses.

  • Beim Aufrufen einer Tabellenfunktion des Information Schema muss die Sitzung über ein aktives INFORMATION_SCHEMA-Schema verfügen oder der Funktionsname muss vollqualifiziert sein. Weitere Details dazu finden Sie unter Snowflake Information Schema.

  • Die Werte für die Spalten EXTERNAL_FUNCTION_TOTAL_INVOCATIONS, EXTERNAL_FUNCTION_TOTAL_SENT_ROWS, EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS, EXTERNAL_FUNCTION_TOTAL_SENT_BYTES und EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES werden von vielen Faktoren beeinflusst, darunter:

    • Anzahl der externen Funktionen in der Anweisung SQL.

    • Anzahl der Zeilen pro Batch, die an jeden Remotedienst gesendet werden.

    • Anzahl der Wiederholungen aufgrund vorübergehender Fehler (z. B. weil eine Antwort nicht innerhalb der erwarteten Zeit empfangen wurde).

Abfragewiederholungsspalten

Es kann sein, dass eine Abfrage ein oder mehrere Male wiederholt werden muss, um erfolgreich abgeschlossen zu werden. Es kann mehrere Ursachen geben, die zu einer Wiederholung einer Abfrage führen. Einige dieser Ursachen sind behebbar, d. h. ein Benutzer kann Änderungen vornehmen, um Abfragewiederholungen für eine bestimmte Abfrage zu reduzieren oder zu vermeiden. Wenn beispielsweise eine Abfrage aufgrund von fehlendem Arbeitsspeicher wiederholt wird, kann das Problem durch Änderung der Warehouse-Einstellungen behoben werden.

Einige Abfragewiederholungen werden durch einen Fehler verursacht, der nicht behebbar ist. Das heißt, ein Benutzer kann keine Änderung vornehmen, um die Wiederholung der Abfrage zu verhindern. So kann beispielsweise die Abfragewiederholung durch einen Netzwerkausfall verursacht werden. In diesem Fall gibt es keine Änderung an der Abfrage oder an dem ausführenden Warehouse, mit der sich die Abfragewiederholung verhindern lässt.

Die Spalten QUERY_RETRY_TIME, QUERY_RETRY_CAUSE und FAULT_HANDLING_TIME können Ihnen helfen, Abfragen zu optimieren, die wiederholt werden, und Schwankungen in der Abfrageleistung besser zu verstehen.

Ausgabe

Die Funktion gibt die folgenden Spalten zurück:

Spaltenname

Datentyp

Beschreibung

QUERY_ID

VARCHAR

Die eindeutige ID der Anweisung.

QUERY_TEXT

VARCHAR

Text der SQL-Anweisung.

DATABASE_NAME

VARCHAR

Datenbank, die bei der Kompilierung im Kontext der Abfrage angegeben wurde.

SCHEMA_NAME

VARCHAR

Schema, das bei der Kompilierung im Kontext der Abfrage angegeben wurde.

QUERY_TYPE

VARCHAR

DML, Abfrage usw. Wenn die Abfrage gerade ausgeführt wird oder fehlgeschlagen ist, kann der Abfragetyp UNKNOWN lauten.

SESSION_ID

NUMBER

Sitzung, die die Anweisung ausgeführt hat.

USER_NAME

VARCHAR

Benutzer, der die Abfrage ausgegeben hat.

ROLE_NAME

VARCHAR

Rolle, die zum Zeitpunkt der Abfrage in der Sitzung aktiv war.

WAREHOUSE_NAME

VARCHAR

Warehouse, in dem die Abfrage ggf. ausgeführt wurde.

WAREHOUSE_SIZE

VARCHAR

Größe des Warehouses, als diese Anweisung ausgeführt wurde.

WAREHOUSE_TYPE

VARCHAR

Typ des Warehouse, als diese Anweisung ausgeführt wurde.

CLUSTER_NUMBER

NUMBER

Der Cluster (in einem Multi-Cluster-Warehouse), für den diese Anweisung ausgeführt wurde.

QUERY_TAG

VARCHAR

Abfrage-Tag, das für diese Anweisung über den Sitzungsparameter QUERY_TAG festgelegt wird.

EXECUTION_STATUS

VARCHAR

Ausführungsstatus der Abfrage: Fortsetzen des Warehouse (resuming_warehouse), aktiv (running), in Warteschlange gestellt (queued), blockiert (blocked), erfolgreich (success), fehlgeschlagen mit Fehler (failed_with_error) oder fehlgeschlagen mit Vorfall (failed_with_incident).

ERROR_CODE

NUMBER

Fehlercode, wenn die Abfrage einen Fehler zurückgegeben hat

ERROR_MESSAGE

VARCHAR

Fehlermeldung, wenn die Abfrage einen Fehler zurückgegeben hat

START_TIME

TIMESTAMP_LTZ

Startzeit der Anweisung

END_TIME

TIMESTAMP_LTZ

Endzeit der Anweisung Wenn die Abfrage noch ausgeführt wird, entspricht END_TIME dem UNIX-Epochenzeitstempel („1970-01-01 00:00:00“), der für die lokale Zeitzone angepasst ist. Für die Pacific Standard Time wäre dies beispielsweise „1969-12-31 16:00:00.000 -0800“.

TOTAL_ELAPSED_TIME

NUMBER

Verstrichene Zeit (in Millisekunden)

BYTES_SCANNED

NUMBER

Anzahl der von dieser Anweisung gescannten Bytes.

ROWS_PRODUCED

NUMBER

Anzahl der von dieser Anweisung erzeugten Zeilen.

COMPILATION_TIME

NUMBER

Kompilierungszeit (in Millisekunden)

EXECUTION_TIME

NUMBER

Ausführungsdauer (in Millisekunden)

QUEUED_PROVISIONING_TIME

NUMBER

Zeit (in Millisekunden), die in der Warehouse-Warteschlange auf die Bereitstellung von Warehouse-Computeressourcen gewartet wurde, weil Warehouses erstellt, fortgesetzt oder in der Größe geändert wurden.

QUEUED_REPAIR_TIME

NUMBER

Zeit (in Millisekunden), die in der Warehouse-Warteschlange gewartet wurde, bis Computeressourcen im Warehouse repariert waren.

QUEUED_OVERLOAD_TIME

NUMBER

Zeit (in Millisekunden), die in der Warehouse-Warteschlange gewartet wurde, weil das Warehouse durch die aktuelle Abfrage-Workload überlastet war.

TRANSACTION_BLOCKED_TIME

NUMBER

Zeit (in Millisekunden), in der eine Sperre durch eine gleichzeitige DML-Operation aktiv war.

OUTBOUND_DATA_TRANSFER_CLOUD

VARCHAR

Ziel-Cloudanbieter für Anweisungen, die Daten in eine andere Region und/oder Cloud entladen.

OUTBOUND_DATA_TRANSFER_REGION

VARCHAR

Zielregion für Anweisungen, die Daten in eine andere Region und/oder Cloud entladen.

OUTBOUND_DATA_TRANSFER_BYTES

NUMBER

Anzahl der Bytes, die in Anweisungen übertragen werden, die Daten in eine andere Region und/oder Cloud entladen.

INBOUND_DATA_TRANSFER_CLOUD

VARCHAR

Quell-Cloudanbieter für Anweisungen, die Daten aus einer anderen Region und/oder Cloud laden.

INBOUND_DATA_TRANSFER_REGION

VARCHAR

Quellregion für Anweisungen, die Daten aus einer anderen Region und/oder Cloud laden.

INBOUND_DATA_TRANSFER_BYTES

NUMBER

Anzahl der Bytes, die bei einer Replikationsoperation von einem anderen Konto übertragen wurden. Das Quellkonto kann sich in derselben Region oder in einer anderen Region als das aktuelle Konto befinden.

LIST_EXTERNAL_FILE_TIME

NUMBER

Zeit (in Millisekunden) für das Auflisten externer Dateien.

CREDITS_USED_CLOUD_SERVICES

NUMBER

Anzahl der Credits, die für Clouddienste verbraucht wurden.

RELEASE_VERSION

VARCHAR

Release-Version im Format major_release.minor_release.patch_release (<Hauptversion>.<Nebenversion>.<Patchversion>).

EXTERNAL_FUNCTION_TOTAL_INVOCATIONS

NUMBER

Gesamtzahl, mit der durch diese Abfrage Remotedienste aufgerufen wurden. Weitere wichtige Details dazu finden Sie in den Nutzungshinweisen.

EXTERNAL_FUNCTION_TOTAL_SENT_ROWS

NUMBER

Gesamtzahl der Zeilen, die von dieser Abfrage bei allen Aufrufen an alle Remotedienste gesendet wurden.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS

NUMBER

Gesamtzahl der Zeilen, die von dieser Abfrage bei allen Aufrufen von allen Remotediensten empfangen wurden.

EXTERNAL_FUNCTION_TOTAL_SENT_BYTES

NUMBER

Gesamtzahl der Bytes, die von dieser Abfrage bei allen Aufrufen an alle Remotedienste gesendet wurden.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES

NUMBER

Gesamtzahl der Bytes, die von dieser Abfrage bei allen Aufrufen von allen Remotediensten empfangen wurden.

IS_CLIENT_GENERATED_STATEMENT

BOOLEAN

Gibt an, ob die Abfrage von einem Client generiert wurde.

QUERY_HASH

VARCHAR

Der Hash-Wert wird auf der Grundlage des kanonisierten SQL-Textes berechnet.

QUERY_HASH_VERSION

NUMBER

Die Version der Logik, die zur Berechnung von QUERY_HASH verwendet wird.

QUERY_PARAMETERIZED_HASH

VARCHAR

Der Hash-Wert, der auf Grundlage der parametrisierten Abfrage berechnet wird.

QUERY_PARAMETERIZED_HASH_VERSION

NUMBER

Die Version der Logik, die zur Berechnung von QUERY_PARAMETERIZED_HASH verwendet wird.

TRANSACTION_ID

NUMBER

ID der Transaktion, die die Anweisung enthält, oder 0, wenn die Anweisung nicht innerhalb einer Transaktion ausgeführt wird.

QUERY_ACCELERATION_BYTES_SCANNED

NUMBER

Anzahl der vom Abfragebeschleunigungsdienst gescannten Bytes.

QUERY_ACCELERATION_PARTITIONS_SCANNED

NUMBER

Anzahl der vom Abfragebeschleunigungsdienst gescannten Partitionen.

QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

NUMBER

Oberes Limit des Skalierungsfaktors, bei dem eine Abfrage profitiert hätte.

BYTES_WRITTEN_TO_RESULT

NUMBER

Anzahl der Bytes, die in ein Ergebnisobjekt geschrieben wurden. Beispielsweise würde select * from ... eine Menge von Ergebnissen im Tabellenformat für jedes Feld in der Auswahl liefern. . . Im Allgemeinen repräsentiert das Ergebnisobjekt das, was als Ergebnis der Abfrage erzeugt wird, und BYTES_WRITTEN_TO_RESULT repräsentiert die Größe des zurückgegebenen Ergebnisses.

ROWS_WRITTEN_TO_RESULT

NUMBER

Anzahl der Zeilen, die in ein Ergebnisobjekt geschrieben wurden. Für CREATE TABLE AS SELECT (CTAS) und alle DML-Operationen ist dieses Ergebnis 1.

ROWS_INSERTED

NUMBER

Anzahl der Zeilen, die von der Abfrage eingefügt wurden.

QUERY_RETRY_TIME

NUMBER

Gesamtausführungszeit (in Millisekunden) für Abfragewiederholungen, die durch behebbare Fehler verursacht wurden. Weitere Informationen dazu finden Sie unter Abfragewiederholungsspalten.

QUERY_RETRY_CAUSE

VARIANT

Array von Fehlermeldungen für behebbare Fehler. Das Array enthält eine Fehlermeldung für jeden Abfrageversuch. Wird die Abfrage nicht wiederholt, ist das Array leer. Weitere Informationen dazu finden Sie unter Abfragewiederholungsspalten.

FAULT_HANDLING_TIME

NUMBER

Gesamtausführungszeit (in Millisekunden) für Abfragewiederholungen, die durch nicht behebbare Fehler verursacht wurden. Weitere Informationen dazu finden Sie unter Abfragewiederholungsspalten.

Die Spalte QUERY_TYPE kann folgende Werte enthalten:

  • CREATE_USER

  • CREATE_ROLE

  • CREATE_NETWORK_POLICY

  • ALTER_ROLE

  • ALTER_NETWORK_POLICY

  • ALTER_ACCOUNT

  • DROP_SEQUENCE

  • DROP_USER

  • DROP_ROLE

  • DROP_NETWORK_POLICY

  • RENAME_NETWORK_POLICY

  • REVOKE

Beispiele

Abrufen der maximal 100 letzten Abfragen, die in der aktuellen Sitzung ausgeführt wurden:

select *
from table(information_schema.query_history_by_session())
order by start_time;
Copy

Abrufen der maximal 100 letzten Abfragen, die vom aktuellen Benutzer ausgeführt wurden (oder von einem beliebigen Benutzer für eine Warehouse ausgeführt werden, bei dem der aktuelle Benutzer über die Berechtigung MONITOR verfügt):

select *
from table(information_schema.query_history())
order by start_time;
Copy

Abrufen der maximal 100 letzten Abfragen, die in der vergangenen Stunde vom aktuellen Benutzer ausgeführt wurden (oder von einem beliebigen Benutzer für ein Warehouse ausgeführt werden, bei dem der aktuelle Benutzer über die Berechtigung MONITOR verfügt):

select *
from table(information_schema.query_history(dateadd('hours',-1,current_timestamp()),current_timestamp()))
order by start_time;
Copy

Abrufen aller Abfragen, die die aktuelle Benutzer ausgeführt hat (oder von einem beliebigen Benutzer für ein Warehouse ausgeführt wurden, bei dem der aktuelle Benutzer über die Berechtigung MONITOR verfügt) innerhalb eines bestimmten 30-Minuten-Zeitblocks in den letzten 7 Tagen:

select *
  from table(information_schema.query_history(
    END_TIME_RANGE_START=>to_timestamp_ltz('2017-12-4 12:00:00.000 -0700'),
    END_TIME_RANGE_END=>to_timestamp_ltz('2017-12-4 12:30:00.000 -0700')));
Copy