Freigeben über


Auftragssystemtabellenreferenz

Wichtig

Dieses Feature befindet sich in der Public Preview.

Dieser Artikel enthält eine Referenz zur Verwendung der workflow Systemtabellen zum Überwachen von Aufträgen in Ihrem Konto. Diese Tabellen enthalten Datensätze aus allen Arbeitsbereichen in Ihrem Konto, die in derselben Cloudregion bereitgestellt wurden. Um Datensätze aus anderen Regionen anzuzeigen, müssen Sie die Tabellen aus einem Arbeitsbereich anzeigen, der in dieser Region bereitgestellt wird.

system.workflow muss von einem Kontoadministrator aktiviert werden. Sie können es mithilfe der SystemSchemas-API aktivieren.

Beispiele für die Verwendung dieser Tabellen für die Kostenüberwachung von Arbeitsplätzen und Integrität finden Sie unter Überwachen von Auftragskosten mit Systemtabellen.

Verfügbare Auftragstabellen

Alle auftragsbezogenen Systemtabellen befinden sich im system.workflow Schema. Derzeit hostet das Schema vier Tabellen:

  • jobs: Verfolgt die Erstellung, Löschung und grundlegende Informationen von Aufträgen.
  • job_tasks: Verfolgt die Erstellung, Löschung und grundlegende Informationen zu Auftragsaufgaben.
  • job_run_timeline: Zeichnet Anfang, Ende und resultierenden Status von Auftragsausführungen auf.
  • job_task_run_timeline: Zeichnet Anfang, Ende und resultierenden Status von Auftragsaufgaben auf.

Auftragstabellenschema

Die jobs-Tabelle ist eine sich langsam ändernde Dimensionstabelle. Wenn eine Zeile geändert wird, wird eine neue Zeile ausgegeben, die logisch die vorherige Zeile ersetzt.

Die Tabelle verwendet das folgende Schema:

Spaltenname Datentyp Beschreibung
account_id string Die ID des Kontos, zu dem dieser Auftrag gehört.
workspace_id Zeichenfolge Die ID des Arbeitsbereichs, zu dem dieser Auftrag gehört.
job_id Zeichenfolge Der ID der Stelle. Dieser Schlüssel ist nur innerhalb eines einzelnen Arbeitsbereichs eindeutig.
name Zeichenfolge Der vom Benutzer angegebene Name des Auftrags.
creator_id Zeichenfolge Die ID des Prinzipals, der den Auftrag erstellt hat.
tags Zeichenfolge Die vom Benutzer bereitgestellten benutzerdefinierten Tags, die diesem Auftrag zugeordnet sind.
change_time Zeitstempel Der Zeitpunkt, an dem der Auftrag zuletzt geändert wurde.
delete_time Zeitstempel Der Zeitpunkt, zu dem der Auftrag vom Benutzer gelöscht wurde.
run_as Zeichenfolge Die ID des Benutzer- oder Dienstprinzipals, dessen Berechtigungen für die Ausführung des Auftrags verwendet werden.

Auftragsaufgabentabellenschema

Die job_tasks-Tabelle ist eine sich langsam ändernde Dimensionstabelle. Wenn eine Zeile geändert wird, wird eine neue Zeile ausgegeben, die logisch die vorherige Zeile ersetzt.

Die Tabelle verwendet das folgende Schema:

Spaltenname Datentyp Beschreibung
account_id string Die ID des Kontos, zu dem dieser Auftrag gehört.
workspace_id Zeichenfolge Die ID des Arbeitsbereichs, zu dem dieser Auftrag gehört.
job_id Zeichenfolge Der ID der Stelle. Dieser Schlüssel ist nur innerhalb eines einzelnen Arbeitsbereichs eindeutig.
task_key Zeichenfolge Der Referenzschlüssel für einen Vorgang in einem Auftrag. Dieser Schlüssel ist nur innerhalb eines einzelnen Auftrags eindeutig.
depends_on_keys array Die Aufgabenschlüssel aller vorgelagerten Abhängigkeiten dieser Aufgabe.
change_time Zeitstempel Der Zeitpunkt, an dem die Aufgabe zuletzt geändert wurde.
delete_time Zeitstempel Der Zeitpunkt, zu dem eine Aufgabe vom Benutzer gelöscht wurde.

Zeitachsentabellenschema für Auftragsausführung

Die job_run_timeline Tabelle ist unveränderlich und zum Zeitpunkt der Produktion vollständig.

Die Tabelle verwendet das folgende Schema:

Spaltenname Datentyp Beschreibung
account_id string Die ID des Kontos, zu dem dieser Auftrag gehört.
workspace_id Zeichenfolge Die ID des Arbeitsbereichs, zu dem dieser Auftrag gehört.
job_id Zeichenfolge Der ID der Stelle. Dieser Schlüssel ist nur innerhalb eines einzelnen Arbeitsbereichs eindeutig.
run_id Zeichenfolge Die ID des Auftragsausführung.
period_start_time Zeitstempel Die Startzeit für die Ausführung oder für den Zeitraum.
period_end_time Zeitstempel Die Endzeit für die Ausführung oder für den Zeitraum.
trigger_type Zeichenfolge Der Triggertyp, der eine Ausführung auslösen kann.
result_state Zeichenfolge Das Ergebnis des Auftragsausführung. Weitere Informationen finden Sie in den möglichen Werten unter dieser Tabelle.

Die möglichen Werte für die result_state Spalte sind:

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

Die möglichen Werte für die trigger_type Spalte sind:

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Auftragsaufgabe: Zeitachsentabellenschema ausführen

Die job_task_run_timeline Tabelle ist unveränderlich und zum Zeitpunkt der Produktion vollständig.

Die Tabelle verwendet das folgende Schema:

Spaltenname Datentyp Beschreibung
account_id string Die ID des Kontos, zu dem dieser Auftrag gehört.
workspace_id Zeichenfolge Die ID des Arbeitsbereichs, zu dem dieser Auftrag gehört.
job_id Zeichenfolge Der ID der Stelle. Dieser Schlüssel ist nur innerhalb eines einzelnen Arbeitsbereichs eindeutig.
run_id Zeichenfolge Die ID der Aufgabenausführung.
period_start_time Zeitstempel Die Startzeit für die Aufgabe oder für den Zeitraum.
period_end_time Zeitstempel Die Endzeit für die Aufgabe oder für den Zeitraum.
task_key Zeichenfolge Der Referenzschlüssel für einen Vorgang in einem Auftrag. Dieser Schlüssel ist nur innerhalb eines einzelnen Auftrags eindeutig.
compute_ids array Array mit den IDs des nicht serverlosen Jobs Compute und nicht der serverlosen SQL-Lagerhäuser, die von der Auftragsaufgabe verwendet werden.
result_state Zeichenfolge Das Ergebnis der Ausführung der Auftragsaufgabe.

Die möglichen Werte für die result_state Spalte sind:

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

Beispielabfragen

Dieser Abschnitt enthält Beispielabfragen, mit deren Hilfe Sie die Workflowtabellen optimal nutzen können.

Abrufen der neuesten Version von Aufträgen

Da die jobs und job_tasks Tabellen langsam geändert werden, wird jedes Mal, wenn eine Änderung vorgenommen wird, ein neuer Datensatz erstellt. Um die neueste Version eines Auftrags zu erhalten, können Sie nach der change_time Spalte sortieren.

SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.workflow.jobs QUALIFY rn=1

Tägliche Auftragsanzahl nach Arbeitsbereich

Diese Abfrage ruft die tägliche Auftragsanzahl nach Arbeitsbereich für die letzten 7 Tage ab:

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.workflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

Tägliche Auftragsstatusverteilung nach Arbeitsbereich

Diese Abfrage gibt die tägliche Auftragsanzahl nach Arbeitsbereich für die letzten 7 Tage zurück, verteilt durch das Ergebnis der Auftragsausführung. Die Abfrage entfernt alle Datensätze, bei denen sich die Aufträge in einem ausstehenden oder ausgeführten Zustand befinden.

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.workflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

Übersicht über am Längsten ausgeführte Aufträge

Diese Abfrage gibt die durchschnittliche Ausführungszeit des Auftrags zurück, gemessen in Sekunden. Die Datensätze werden nach Auftrag organisiert. Eine Top-90-Perzentil- und eine 95-Perzentil-Spalte zeigen die durchschnittliche Länge der längsten Ausführungen des Jobs.

with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
    FROM
        system.workflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
),
most_recent_jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM
    system.workflow.jobs QUALIFY rn=1
)
SELECT
    t1.workspace_id,
    t1.job_id,
    first(t2.name, TRUE) as name,
    COUNT(DISTINCT t1.run_id) as runs,
    MEAN(t1.duration) as mean_seconds,
    AVG(t1.duration) as avg_seconds,
    PERCENTILE(t1.duration, 0.9) as p90_seconds,
    PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
    job_run_duration t1
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

Auftragsausführungsanalyse

Diese Abfrage stellt eine verlaufsbezogene Laufzeit für einen bestimmten Auftrag bereit. Damit die Abfrage funktioniert, müssen Sie ein workspace_id und job_id einstellen.

Sie können auch die Dauer der Analyse bearbeiten, indem Sie die Anzahl der Tage im INTERVAL 60 DAYS Abschnitt aktualisieren.

with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        min(period_start_time) as run_start,
        max(period_start_time) as run_end,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration,
        FIRST(result_state, TRUE) as result_state
    FROM
        system.workflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
      AND workspace_id={workspace_id}
      AND job_id={job_id}
    GROUP BY ALL
    ORDER BY run_start DESC
),
most_recent_jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM
    system.workflow.jobs QUALIFY rn=1
)
SELECT
    t1.workspace_id,
    t1.job_id,
    t2.name,
    t1.run_id,
    t1.run_start,
    t1.run_end,
    t1.duration,
    t1.result_state
FROM job_run_duration t1
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)

Aufträge, die auf All-Purpose Compute ausgeführt werden

Diese Abfrage wird mit der compute.clusters Systemtabelle verknüpft, um zuletzt ausgeführte Aufträge zurückzugeben, die auf All-Purpose Compute ausgeführt werden, anstatt auf Jobs Compute.

with clusters AS (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
  FROM system.compute.clusters
  WHERE cluster_source="UI" OR cluster_source="API"
  QUALIFY rn=1
),
job_tasks_exploded AS (
  SELECT
    workspace_id,
    job_id,
    EXPLODE(compute_ids) as cluster_id
  FROM system.workflow.job_task_run_timeline
  WHERE period_start_time >= CURRENT_DATE() - INTERVAL 30 DAY
),
all_purpose_cluster_jobs AS (
  SELECT
    t1.*,
    t2.cluster_name,
    t2.owned_by,
    t2.dbr_version
  FROM job_tasks_exploded t1
    INNER JOIN clusters t2 USING (workspace_id, cluster_id)
)
SELECT * FROM all_purpose_cluster_jobs LIMIT 10;

Wiederholter Auftrag wird ausgeführt

Diese Abfrage sammelt eine Liste der wiederholten Auftragsausführungen mit der Anzahl der Wiederholungen für jede Ausführung.

with repaired_runs as (
  SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
  FROM system.workflow.job_run_timeline
  WHERE result_state IS NOT NULL
  GROUP BY ALL
  HAVING retries_count > 0
)
SELECT
  *
FROM repaired_runs
ORDER BY retries_count DESC
LIMIT 10;