Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält Informationen zur Abfrageverlaufs-Systemtabelle, einschließlich einer Gliederung des Schemas der Tabelle.
Tabellenbereichspfad: Diese Systemtabelle befindet sich bei system.query.history.
Verfügbarkeit der Platten
Akten sind in der Regel innerhalb einer Stunde verfügbar. Die Datenlieferung für neue Arbeitsbereiche kann länger dauern.
Wenn die Abfrageverlauftabelle kundenverwaltete Schlüssel verwendet, gilt diese Verfügbarkeit nicht. Siehe "Verschlüsselte Felder lesen".
Verwenden der Abfrageverlaufstabelle
Die Abfragehistorik-Tabelle enthält Datensätze für Abfragen, die mit SQL-Warehouses ausgeführt werden, serverlose Rechenleistungen für Notebooks und Jobs sowie Lakeflow-Pipelines , die serverlose oder klassische Compute verwenden. Die Tabelle enthält Datensätze aus allen Arbeitsbereichen in Ihrem Konto, die sich in derselben Region wie der Arbeitsbereich befinden, den Sie zum Zugriff auf die Tabelle verwenden.
Standardmäßig haben nur Administratoren Zugriff auf die Systemtabelle. Wenn Sie die Daten der Tabelle für einen Benutzer oder eine Gruppe freigeben möchten, empfiehlt Databricks, eine dynamische Ansicht für jeden Benutzer oder jede Gruppe zu erstellen. Weitere Informationen finden Sie unter Erstellen einer dynamischen Ansicht.
Schema der Abfrageverlaufs-Systemtabelle
Die Abfrageverlaufstabelle verwendet das folgende Schema:
| Spaltenname | Datentyp | Description | Example |
|---|---|---|---|
account_id |
string | ID des Kontos | 11e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
string | ID des Arbeitsbereichs, in dem die Abfrage ausgeführt wurde. | 1234567890123456 |
statement_id |
string | ID, die die Ausführung der Anweisung eindeutig identifiziert. Sie können diese ID verwenden, um die Ausführung der Anweisung in der Benutzeroberfläche Abfrageverlauf zu finden. | 7a99b43c-b46c-432b-b0a7-814217701909 |
session_id |
string | ID der Spark-Sitzung. | 01234567-cr06-a2mp-t0nd-a14ecfb5a9c2 |
execution_status |
string | Beendigungszustand der Anweisung. Mögliche Werte:
|
FINISHED |
compute |
struct | Eine Struktur, die den Typ der für die Ausführung der Anweisung verwendeten Computeressource und ggf. die ID der Ressource darstellt. Der Wert type ist einer von:
|
{type: WAREHOUSE,cluster_id: NULL,warehouse_id: ec58ee3772e8d305} |
executed_by_user_id |
string | ID des Benutzers, der die Anweisung ausgeführt hat. | 2967555311742259 |
executed_by |
string | E-Mail-Adresse oder Benutzername des Benutzers, der die Anweisung ausgeführt hat. | example@databricks.com |
statement_text |
string | Text der SQL-Anweisung. Standardmäßig wird dieses Feld zurückgegeben <REDACTED> , es sei denn, Sie sind Kontoadministrator oder Mitglied der databricks_pii_access Kontoebene-Gruppe. Siehe Access masked statement-Text. Wenn Sie kundenverwaltete Schlüssel konfiguriert haben, siehe Verschlüsselte Felder lesen. Aufgrund von Speicherbeschränkungen werden textwerte für längere Anweisungen komprimiert. Selbst bei der Komprimierung erreichen Sie möglicherweise ein Zeichenlimit. |
SELECT 1 |
statement_type |
string | Der Anweisungstyp. Beispiel: ALTER, COPY und INSERT. |
SELECT |
error_message |
string | Meldung mit einer Beschreibung der Fehlerbedingung. Wenn Sie kundenverwaltete Schlüssel konfiguriert haben, siehe Verschlüsselte Felder lesen. | [INSUFFICIENT_PERMISSIONS] Insufficient privileges: User does not have permission SELECT on table 'default.nyctaxi_trips'. |
client_application |
string | Clientanwendung, die die Anweisung ausgeführt hat. Beispiel: Databricks SQL Editor, Tableau und Power BI. Dieses Feld wird von Informationen abgeleitet, die von Clientanwendungen bereitgestellt werden. Werte werden zwar im Laufe der Zeit statisch bleiben, dies kann jedoch nicht garantiert werden. | Databricks SQL Editor |
client_driver |
string | Der Connector, der für die Verbindung zu Azure Databricks verwendet wird, um die Anweisung auszuführen. Zum Beispiel: Databricks SQL-Treiber für Go, Databricks ODBC-Treiber, Databricks JDBC-Treiber. | Databricks JDBC Driver |
cache_origin_statement_id |
string | Bei Abfrageergebnissen, die aus dem Cache abgerufen wurden, enthält dieses Feld die Anweisungs-ID der Abfrage, die das Ergebnis ursprünglich in den Cache eingefügt hat. Wenn das Abfrageergebnis nicht aus dem Cache abgerufen wird, enthält dieses Feld die eigene Statement-ID der Abfrage. | 01f034de-5e17-162d-a176-1f319b12707b |
total_duration_ms |
bigint | Gesamtausführungszeit der Anweisung in Millisekunden (ohne Ergebnisabrufzeit). | 1 |
waiting_for_compute_duration_ms |
bigint | Mit Warten auf die Bereitstellung von Computeressourcen zugebrachte Zeit in Millisekunden. | 1 |
waiting_at_capacity_duration_ms |
bigint | Mit Warten auf verfügbare Computekapazität in der Warteschlange verbrachte Zeit in Millisekunden. | 1 |
execution_duration_ms |
bigint | Mit der Ausführung der Anweisung in Millisekunden zugebrachte Zeit. | 1 |
compilation_duration_ms |
bigint | Für das Laden von Metadaten und das Optimieren der Abfrage benötigte Zeit in Millisekunden. | 1 |
total_task_duration_ms |
bigint | Gesamtdauer aller Aufgaben in Millisekunden. Diese Zeit ist die insgesamt zum Ausführen der Abfrage auf allen Kernen aller Knoten benötigte Zeit. Diese Zeit kann deutlich länger als die Gesamtbetrachtungszeit sein, wenn mehrere Aufgaben parallel ausgeführt werden. Sie kann kürzer als die Gesamtbetrachtungszeit sein, wenn Aufgaben auf verfügbare Knoten warten müssen. | 1 |
result_fetch_duration_ms |
bigint | Für das Abrufen der Anweisungsergebnisse nach Abschluss der Ausführung zugebrachte Zeit in Millisekunden. | 1 |
start_time |
timestamp | Der Zeitpunkt, zu dem Databricks die Anforderung erhalten hat. Zeitzoneninformationen werden am Ende des Werts aufgezeichnet, wobei +00:00 die UTC darstellt. |
2022-12-05T00:00:00.000+0000 |
end_time |
timestamp | Der Zeitpunkt, zu dem die Ausführung der Anweisung beendet wurde, ohne die Zeit für das Abrufen der Ergebnisse. Zeitzoneninformationen werden am Ende des Werts aufgezeichnet, wobei +00:00 die UTC darstellt. |
2022-12-05T00:00:00.000+00:00 |
update_time |
timestamp | Der Zeitpunkt, zu dem die Anweisung zuletzt eine Fortschrittsaktualisierung erhalten hat. Zeitzoneninformationen werden am Ende des Werts aufgezeichnet, wobei +00:00 die UTC darstellt. |
2022-12-05T00:00:00.000+00:00 |
read_partitions |
bigint | Anzahl der nach Bereinigung gelesenen Partitionen. | 1 |
pruned_files |
bigint | Anzahl bereinigter Dateien. | 1 |
read_files |
bigint | Anzahl der nach Bereinigung gelesenen Dateien. | 1 |
read_rows |
bigint | Gesamtzahl der von der Anweisung gelesenen Zeilen. | 1 |
produced_rows |
bigint | Gesamtanzahl der von der Anweisung zurückgegebenen Zeilen. | 1 |
read_bytes |
bigint | Gesamtgröße der von der Anweisung gelesenen Daten in Byte. | 1 |
pruned_files_bytes |
bigint | Die Anzahl der Bytes der Dateien, die nach Tabellenpartition und Dateibeschnitt beschnitten wurden. | 1 |
read_files_bytes |
bigint | Die Anzahl der Bytes an Dateien, die nach der Tabellenpartitionierung und Dateibeschnitt gelesen werden. | 1 |
read_io_cache_percent |
int | Prozentsatz an Bytes persistenter Daten, die aus dem E/A-Cache gelesen wurden. | 50 |
from_result_cache |
boolean |
TRUE gibt an, dass das Anweisungsergebnis aus dem Cache abgerufen wurde. |
TRUE |
spilled_local_bytes |
bigint | Größe der Daten in Byte, die während der Ausführung der Anweisung vorübergehend auf die Festplatte geschrieben werden. | 1 |
written_bytes |
bigint | Größe der in den Cloudobjektspeicher geschriebenen persistenten Daten in Byte. | 1 |
written_rows |
bigint | Die Anzahl der Zeilen persistenter Daten, die in den Cloudobjektspeicher geschrieben wurden. | 1 |
written_files |
bigint | Die Anzahl der Dateien von persistenten Daten, die in den Cloudobjektspeicher geschrieben wurden. | 1 |
shuffle_read_bytes |
bigint | Die Gesamtmenge der über das Netzwerk gesendeten Daten in Bytes. | 1 |
query_source |
struct | Eine Struktur, die Schlüsselwertpaare enthält, die Databricks-Entitäten darstellen, die an der Ausführung dieser Anweisung beteiligt waren, z. B. Aufträge, Notizbücher oder Dashboards. Dieses Feld zeichnet nur Databricks-Entitäten auf. | {alert_id: 81191d77-184f-4c4e-9998-b6a4b5f4cef1,sql_query_id: null,dashboard_id: null,notebook_id: null,job_info: { job_id: 12781233243479, job_run_id: null, job_task_run_id: 110373910199121},legacy_dashboard_id: null,genie_space_id: null} |
query_parameters |
struct | Eine Struktur, die benannte und positionale Parameter enthält, die in parametrisierten Abfragen verwendet werden. Benannte Parameter werden als Schlüsselwertpaare dargestellt, die Parameternamen zu Werten zuordnen. Positionsparameter werden als Liste dargestellt, in der der Index die Parameterposition angibt. Es kann jeweils nur ein Typ (benannt oder positionell) vorhanden sein. | {named_parameters: { "param-1": 1, "param-2": "hello"},pos_parameters: null,is_truncated: false} |
executed_as |
string | Der Name des Benutzers oder Dienstprinzipals, dessen Berechtigung zum Ausführen der Anweisung verwendet wurde. | example@databricks.com |
executed_as_user_id |
string | Die ID des Benutzers oder Dienstprinzipals, dessen Berechtigung zum Ausführen der Anweisung verwendet wurde. | 2967555311742259 |
query_tags |
map<string, string> |
Benutzerdefinierte Schlüsselwerttags, die auf die Abfrage zum Gruppieren, Filtern und Kostenzuordnung angewendet werden. Tags können mithilfe von Sitzungskonfigurationsparametern oder der SET QUERY_TAGS SQL-Anweisung festgelegt werden. Nur Schlüsseltags weisen einen null Wert auf. Diese Spalte wird nur für Abfragen aufgefüllt, die in SQL-Warehouses ausgeführt werden. Siehe Abfragetags. |
{"team": "engineering","cost_center": "701","env": "prod"} |
Zugriff auf maskierte Anweisungen
SQL-Anweisungen können sensible Informationen wie Kundennamen, E-Mail-Adressen oder andere personenbezogene Daten (PII) enthalten. Das Feld statement_text kehrt standardmäßig zurück.<REDACTED> Kontoadministratoren und Mitglieder der databricks_pii_access Gruppe können den vollständigen Anfragetext lesen.
Um die Gruppe zu erstellen und ihre Mitgliedschaft und Berechtigungen zu verwalten, siehe Erstelle und Verwaltung der databricks_pii_access Gruppe.
Fehlerbehebung überlappender Spaltenmasken
Wenn Sie bereits eine Spaltenmaske auf statement_textangewendet haben, beispielsweise mit einer attributbasierten Zugriffskontrollrichtlinie (ABAC), können Abfragen gegen system.query.history mit COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKSfehlschlagen. Für einen bestimmten Benutzer kann nur eine Spaltenmaske angewendet werden.
Um den Konflikt zu lösen, musst du Metastore-Admin sein oder einen Have MANAGE auf dem Tisch haben. Verwenden Sie widersprüchliche Filter und Masken , um überlappende Richtlinien zu identifizieren, und schränken Sie dann Ihre Maske auf ein oder entfernen Sie sie auf statement_text.
Lesen verschlüsselter Felder
Wenn Arbeitsbereiche kundenverwaltete Schlüssel für verwaltete Dienste verwenden, werden die Felder statement_text und error_message in der Systemtabelle standardmäßig verschlüsselt. Dies liegt daran, dass Systemtabellen Daten von allen Arbeitsbereichen in der Region speichern und darauf zugreifen können. Um verschlüsselte Systemtabellenfelder zu entschlüsseln und anzuzeigen, müssen Kontoadministratoren dem system Katalog selbst eine Schlüsselkonfiguration hinzufügen. Sie müssen über MANAGE Berechtigung für den system Katalog verfügen, um diesen Vorgang auszuführen.
Wenn die Abfragehistorie-Tabelle kundenverwaltete Schlüssel verwendet, gilt die typische Datensatzverfügbarkeit in Datensatzverfügbarkeit nicht.
Warning
Wenn Sie dem system Katalog eine Schlüsselkonfiguration hinzufügen, werden alle Unity-Kataloge entfernt, die Sie zuvor auf das system.query Schema und die system.query.history Tabelle angewendet haben, und setzen sie auf die Standarderteilung zurück. Da Finanzhilfen Metastore-Ebene sind, wirkt sich dies auf alle Arbeitsbereiche aus, die dem Metastore zugeordnet sind, einschließlich Arbeitsbereichen, in denen Sie den Befehl nicht ausgeführt haben. Nachdem Sie vom Kunden verwaltete Schlüssel aktiviert haben, müssen Sie alle benutzerdefinierten Zuschüsse erneut anwenden für system.query und system.query.history.
Sie können entweder einen neuen Schlüssel erstellen oder einen vorhandenen schlüssel wiederverwenden. Führen Sie mit der vollständigen Schlüssel-ID den folgenden Befehl aus:
curl -v -X PATCH https://my-workspace-url/api/2.1/unity-catalog/catalogs/system -H 'Authorization: Bearer <pat token>' --data '{
"managed_encryption_settings": {
"azure_key_vault_key_id": "https://my-key-vault.vault.azure.net/keys/my-key-name/my-key-version",
"azure_encryption_settings": {
"azure_tenant_id": "my-tenant-id"
}
}
}'
Erwarte bis zu 24 Stunden, bis die Enablement abgeschlossen ist. Nach Abschluss der Enablement beginnt es, system.query.history die verschlüsselten Felder für alle neuen Datensätze anzuzeigen. Datensätze, die vor der Enablement erstellt wurden, können nicht entschlüsselt werden.
Hinweis
Der system Katalog unterscheidet sich für jeden Metastore, sodass der vom Kunden verwaltete Schlüssel für jeden Metastore separat konfiguriert werden muss. Metastores in derselben Region können jedoch so konfiguriert werden, dass derselbe Schlüssel verwendet wird.
Anzeigen des Abfrageprofils für einen Datensatz
Gehen Sie wie folgt vor, um zu dem Abfrageprofil einer Abfrage zu navigieren, das auf einem Datensatz in der Abfrageverlaufstabelle basiert:
- Identifizieren Sie den relevanten Datensatz und kopieren Sie dann dessen
statement_id. - Verweisen Sie auf die
workspace_iddes Datensatzes, um sicherzustellen, dass Sie im Arbeitsbereich des Datensatzes angemeldet sind. - Wählen Sie in der Randleiste des Arbeitsbereichs
Abfrageverlauf aus.
- Fügen Sie in das Feld Anweisungs-ID die
statement_iddes Datensatzes ein. - Wählen Sie den Namen einer Abfrage. Es wird eine Übersicht über Abfragemetriken angezeigt.
- Wählen Sie Siehe Abfrageprofil aus.
Verständnis von Scan-Metriken
Die Abfragehistorie-Tabelle enthält mehrere während des Scans erhobenen Metriken. Sie können die folgenden zusätzlichen Metriken aus den Spalten der Tabelle berechnen:
-
table_bytes: Die gesamte komprimierte Größe, in Bytes, der Dateien in den gescannten Tabellen. Berechnet alspruned_files_bytes + read_files_bytes. -
table_files: Die Gesamtzahl der Dateien in den gescannten Tabellen. Berechnet alsread_files + pruned_files.
Hinweis
read_bytes nicht direkt mit table_bytesvergleichbar ist.
table_bytes, read_files_bytes, und pruned_files_bytes sind komprimierte, auf der Festplatte verfügbare Dateigrößen. Im Gegensatz zu diesen Dateigrößen misst sie read_bytes die tatsächlich gelesenen Daten nach dem Ausschneiden von Spalten- und Zeilengruppen. Sie kombiniert komprimierte Daten, die aus dem Cloud-Speicher gelesen werden, mit unkomprimierten Daten, die vom Festplattencache bereitgestellt werden, und sie kann bei erneuten Leseversuchungen weiter steigen. Daher kann überschreitentable_bytes. read_bytes
Grundlegendes zur Spalte query_source
Die Spalte query_source enthält eine Reihe eindeutiger Bezeichner von Azure Databricks Entitäten, die an der Ausführung der Anweisung beteiligt sind.
Wenn die query_source Spalte mehrere IDs enthält, bedeutet dies, dass die Ausführung der Anweisung durch mehrere Entitäten ausgelöst wurde. Beispielsweise kann ein Auftragsergebnis eine Warnung auslösen, die eine SQL-Abfrage aufruft. In diesem Beispiel werden alle drei IDs innerhalb von query_source eingetragen. Die Werte dieser Spalte werden nicht nach Ausführungsreihenfolge sortiert.
Mögliche Abfragequellen sind:
- alert_id: Aus einer Warnung ausgelöste Aussage
- sql_query_id: Anweisung, die in dieser SQL-Editorsitzung ausgeführt wird
- dashboard_id: Aus einem Dashboard ausgeführte Anweisung
- genie_space_id: Erklärung, die von einem Genie Agent ausgeführt wurde
- notebook_id: Anweisung, die aus einem Notebook ausgeführt wird.
- job_info.job_id: Anweisung, die in einem Auftrag ausgeführt wird
- job_info.job_run_id: Anweisung, die in einer Jobausführung ausgeführt wird
- job_info.job_task_run_id: Anweisung, die in einer Auftragsaufgabe ausgeführt wird
Gültige Kombinationen von query_source
Die folgenden Beispiele zeigen, wie die query_source Spalte je nach Ausführung der Abfrage aufgefüllt wird:
Abfragen, die während einer Auftragsausführung ausgeführt werden, umfassen eine aufgefüllte
job_infoStruktur:{alert_id: null,sql_query_id: null,dashboard_id: null,notebook_id: null,job_info: {job_id: 64361233243479,job_run_id: null,job_task_run_id: 110378410199121},legacy_dashboard_id: null,genie_space_id: null}Abfragen aus Warnungen umfassen eine
sql_query_idund einealert_id.{alert_id: e906c0c6-2bcc-473a-a5d7-f18b2aee6e34,sql_query_id: 7336ab80-1a3d-46d4-9c79-e27c45ce9a15,dashboard_id: null,notebook_id: null,job_info: null,legacy_dashboard_id: null,genie_space_id: null}Abfragen aus Dashboards umfassen eine
dashboard_id, aber keinejob_info:{alert_id: null,sql_query_id: null,dashboard_id: 887406461287882,notebook_id: null,job_info: null,legacy_dashboard_id: null,genie_space_id: null}