Referenz zur Pipelineereignisse-Systemtabelle

Important

Diese Systemtabelle befindet sich in Der Betaversion.

Dieser Artikel ist ein Verweis auf die Systemtabelle, in der pipeline_eventsLakeflow-Pipelines-Ereignisprotokolleinträge für Pipelines in Ihrem Konto aufgezeichnet werden. Jede Zeile ist ein unveränderliches Ereignis aus dem Pipelineereignisprotokoll, das Erfassen von Lebenszyklusübergängen, der Ablauffortschritt, Datenqualitätsmetriken, Fehler, Clusterressourcen und andere Betriebsdaten in allen Pipelines und Arbeitsbereichen innerhalb einer Region.

Requirements

  • Um auf diese Systemtabelle zuzugreifen, müssen Benutzer eine der folgenden Aktionen ausführen:
    • Seien Sie sowohl ein Metastore-Administrator als auch ein Kontoadministrator, oder ...
    • Verfügen Sie über USE- und SELECT-Berechtigungen für die Systemschemata. Siehe Gewähren des Zugriffs auf Systemtabellen.

Pipeline-Ereignis-Dashboard

Ein vorgefertigtes Dashboard visualisiert die Gesundheit der Pipeline, den Durchsatz, den Rückstau, die Datenqualität und Fehler aus dieser Systemtabelle.

Pipeline-Statusaufschlüsselung mit Fehler- und Warnauszählungen

Erwartungsfehler: ausgefallene Zeilen und maximaler Ausfallprozentsatz über die Zeit

Um das Dashboard zu importieren und zu verwenden, siehe Überwachen und Abfrageereignisse.

Verfügbare Pipeline-Ereignistabellen

Table Beschreibung Unterstützt Streaming Kostenfreier Aufbewahrungszeitraum Einschließlich globaler oder regionaler Daten
pipeline_events (Beta) Zeichnet Pipelineereignisprotokolleinträge auf, die von Pipelineausführungen ausgegeben werden Yes 13 Monate Länderspezifisch

Note

Das Schema ist lakeflow_pipeline_events_preview während der Beta-Phase. Bei der allgemeinen Verfügbarkeit wechselt die Tabelle zum Schema lakeflow (der endgültige Tabellenpfad ist system.lakeflow.pipeline_events). Auch die Details des Schemas könnten sich zu diesem Zeitpunkt ändern. Abfragen, die gegen das Beta-Schema geschrieben werden, müssen aktualisiert werden, wenn sich die Tabelle bewegt.

Detaillierte Schemareferenz

Tabellenschema für Pipelineereignisse

Die Pipelineereignissetabelle ist nur anzufügen. Jede Zeile zeichnet ein einzelnes Ereignis auf, das von einer Pipelineaktualisierung zum Zeitpunkt der Ausgabe ausgegeben wird, und Zeilen werden nie geändert oder gelöscht.

Welche Felder in einer Zeile aufgefüllt werden, hängt vom Ereignistyp ab. error, update_idund viele origin.* Unterfelder werden nur für Ereignisse festgelegt, bei denen sie angewendet werden, und die Struktur des details Felds variiert ebenfalls nach event_type.

Verwenden Sie diese Tabelle, um historische Pipelineaktivitäten abzufragen, Um Warnungen zu Pipelinefehlern zu erstellen und das Pipelineverhalten mit anderen Lakeflow-Systemtabellen zu korrelieren.

Tabellenpfad: system.lakeflow_pipeline_events_preview.pipeline_events

Primärschlüssel: (account_id, pipeline_event_id)

Spaltenname Datentyp Beschreibung Notes
account_id string Die ID des Kontos, zu dem dieses Pipelineereignis gehört
workspace_id string Die ID des Arbeitsbereichs, zu dem dieses Pipelineereignis gehört
pipeline_id string Die ID der Pipeline, die das Ereignis ausgegeben hat
update_id string Die ID des Pipelineupdates, das das Ereignis ausgegeben hat
pipeline_event_id string Weltweit eindeutige Kennung für das Ereignis
event_type string Der Typ des Ereignisses (z flow_progress. B. , update_progress, create_update) Siehe Ereignistypwerte für den vollständigen Wertsatz.
origin struct Kontextmetadaten über den Ursprung des Ereignisses wie Cloudanbieter, Region, Pipelinetyp, Tabellen- oder Flussnamen und andere Bezeichner Siehe Origin-Strukturfelder.
message string Lesbare Beschreibung des Ereignisses Kann für einige Ereignisse leer sein.
level string Schweregrad des Ereignisses Einer von INFO, WARN, ERROR, METRICS. Siehe Level-Werte.
maturity_level string Stabilität des Ereignisschemas Einer von STABLE, EVOLVING, DEPRECATED. Siehe Werte des Fälligkeitsniveaus.
error struct Fehlerdetails. Nur für Ereignisse mit Fehlerinformationen aufgefüllt Siehe Fehlerstrukturfelder.
details Variante Ereignisspezifische Nutzlast. Die darin enthaltenen Felder hängen vom event_type Siehe Details-Feld.
event_time timestamp Die Uhrzeit, zu der das Ereignis von der Pipeline ausgegeben wurde Zeitzone aufgezeichnet als +00:00 (UTC).

Ursprungsstrukturfelder

Unterfeld Datentyp Beschreibung
cloud string Cloudanbieter (z AWS. B. , AZURE, GCP)
region string Cloudanbieterregion
org_id BIGINT Arbeitsbereichsorganisations-ID
pipeline_type string Der Typ der Pipeline
pipeline_name string Der vom Benutzer angegebene Name der Pipeline
cluster_id string Die Computecluster-ID, die das Pipelineupdate sichert
maintenance_id string Die ID des Wartungsupdates, wenn das Ereignis von einer Wartungsausführung stammt
dataset_name string Der Name des Datasets (Tabelle oder Ansicht), auf das sich das Ereignis bezieht
sink_name string Der Name der Spüle, auf die sich das Ereignis bezieht
catalog_name string Der Name des Unity-Katalogkatalogs
schema_name string Der Schemaname des Unity-Katalogs
flow_id string Die ID des Flusses, auf den sich das Ereignis bezieht
flow_name string Der Name des Flusses, auf den sich das Ereignis bezieht
batch_id BIGINT Die Mikrobatch-ID für Streamingflüsse. bigint aus Gründen der Kompatibilität
request_id string Die Anforderungs-ID, die die Aktion initiiert hat
materialization_name string Der Materialisierungsname
operation_id string Die Vorgangs-ID
source_name string Der Name der Datenquelle.
uc_table_id string Die Tabellen-ID des Unity-Katalogs
ingestion_source_type string Der Typ der Aufnahmequelle (z SQL_SERVER. B. , SALESFORCE)
ingestion_source_connection_name string Der Verbindungsname für die Aufnahmequelle
ingestion_source_catalog_name string Der Name des Quellkatalogs im Upstreamsystem
ingestion_source_schema_name string Der Quellschemaname im Upstreamsystem
ingestion_source_table_name string Der Name der Quelltabelle im Upstreamsystem
ingestion_source_table_version string Die Quelltabellenversion, sofern zutreffend

Fehlerstrukturfelder

Unterfeld Datentyp Beschreibung
fatal boolean Gibt an, ob der Fehler dazu führte, dass das Update beendet wurde.
exceptions Arraystruktur<> Kette von Ausnahmen, die dem Fehler zugeordnet sind (Stammursache zuletzt)
exceptions[].sql_state string SQLSTATE-Code, falls verfügbar
exceptions[].error_class string Databricks-Fehlerklasse, falls verfügbar

Detailsfeld

Die details Spalte ist ein VARIANT, und die darin enthaltenen Felder hängen von der event_type. Die unter den einzelnen Ereignistypen verfügbaren Felder finden Sie unter Pipeline-Ereignisprotokollschema. Verwenden Sie die variant_get Funktions- oder Punktsyntax, um geschachtelte Werte zu lesen. In den folgenden Beispielabfragen finden Sie typische Zugriffsmuster.

Der event_type Schlüssel umhüllt die Nutzlast. Zum Beispiel sind die Metriken eines Ereignisses flow_progress bei $.flow_progress.metrics, nicht $.metrics. Fügen Sie den Ereignistypschlüssel in jeden Pfad ein.

-- Using variant_get (lets you cast to a specific type)
SELECT
  pipeline_id,
  event_time,
  variant_get(details, '$.flow_progress.status', 'STRING')                       AS flow_status,
  variant_get(details, '$.flow_progress.metrics.num_output_rows', 'BIGINT')      AS rows_written,
  variant_get(details, '$.flow_progress.metrics.backlog_bytes', 'BIGINT')        AS backlog_bytes
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events
WHERE
  event_type = 'flow_progress'
  AND event_time >= current_timestamp() - INTERVAL 1 HOUR
-- Using dot syntax (returns VARIANT, cast when needed)
SELECT
  pipeline_id,
  event_time,
  details:flow_progress.status::STRING               AS flow_status,
  details:flow_progress.metrics.num_output_rows::BIGINT AS rows_written
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events
WHERE
  event_type = 'flow_progress'
  AND event_time >= current_timestamp() - INTERVAL 1 HOUR

Beispielabfragen

-- Flow throughput for a specific pipeline
SELECT
  origin.flow_name,
  date_trunc('HOUR', event_time) AS hour,
  SUM(variant_get(details, '$.flow_progress.metrics.num_output_rows', 'BIGINT')) AS rows_written
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events
WHERE
  pipeline_id = '<your-pipeline-id>'
  AND event_type = 'flow_progress'
  AND event_time >= current_timestamp() - INTERVAL 7 DAYS
GROUP BY
  origin.flow_name,
  date_trunc('HOUR', event_time)
ORDER BY
  hour DESC,
  rows_written DESC
-- The latest error for each pipeline that has errored in the last 7 days, with the outermost exception.
-- The exception chain is ordered with the root cause last, so read element -1 for the root cause.
-- On many errors only the first element carries error_class and sql_state.
SELECT
  workspace_id,
  pipeline_id,
  event_time,
  event_type,
  message,
  error.exceptions[0].error_class AS exception_error_class,
  error.exceptions[0].sql_state   AS exception_sql_state
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events
WHERE
  level = 'ERROR'
  AND event_time >= current_timestamp() - INTERVAL 7 DAYS
QUALIFY
  ROW_NUMBER() OVER (PARTITION BY workspace_id, pipeline_id ORDER BY event_time DESC) = 1
ORDER BY
  event_time DESC
-- Data quality: failed expectations by dataset, per update, in the last 1 day
SELECT
  pipeline_id,
  update_id,
  origin.dataset_name,
  expectation.name AS expectation_name,
  SUM(expectation.failed_records) AS failed_records
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events
  LATERAL VIEW explode(variant_get(details, '$.flow_progress.data_quality.expectations', 'ARRAY<STRUCT<name:STRING,dataset:STRING,passed_records:BIGINT,failed_records:BIGINT>>')) AS expectation
WHERE
  event_type = 'flow_progress'
  AND event_time >= current_timestamp() - INTERVAL 1 DAY
GROUP BY
  pipeline_id,
  update_id,
  origin.dataset_name,
  expectation.name
HAVING
  SUM(expectation.failed_records) > 0
ORDER BY
  failed_records DESC

Allgemeine Verknüpfungsmuster

Mit der pipelines Tabelle verbinden, um nach Pipelinenamen zu filtern

Die pipelines Tabelle ist eine langsam ändernde Dimension (SCD2). Nehmen Sie die neueste Version jeder Pipeline vor dem Beitritt vor.

WITH latest_pipelines AS (
  SELECT *
  FROM system.lakeflow.pipelines
  QUALIFY ROW_NUMBER() OVER (PARTITION BY workspace_id, pipeline_id ORDER BY change_time DESC) = 1
)
SELECT
  p.name AS pipeline_name,
  e.event_time,
  e.event_type,
  e.level,
  e.message
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events e
JOIN
  latest_pipelines p
  ON e.workspace_id = p.workspace_id
  AND e.pipeline_id = p.pipeline_id
WHERE
  e.level = 'ERROR'
  AND e.event_time >= current_timestamp() - INTERVAL 24 HOURS
ORDER BY
  e.event_time DESC

Teilnehmen mit pipeline_update_timeline am update_id

WITH updates AS (
  SELECT
    workspace_id,
    pipeline_id,
    update_id,
    MIN(period_start_time) AS update_start,
    MAX(CASE WHEN result_state IS NOT NULL THEN period_end_time END) AS update_end
  FROM
    system.lakeflow.pipeline_update_timeline
  WHERE
    pipeline_id = '<your-pipeline-id>'
  GROUP BY
    workspace_id,
    pipeline_id,
    update_id
)
SELECT
  u.update_start,
  u.update_end,
  e.event_time,
  e.event_type,
  e.level,
  e.message
FROM
  updates u
JOIN
  system.lakeflow_pipeline_events_preview.pipeline_events e
  ON e.workspace_id = u.workspace_id
  AND e.update_id = u.update_id
ORDER BY
  u.update_start DESC,
  e.event_time ASC

Benachrichtigungen einrichten

Sie können Benachrichtigungen über pipeline_events die Verwendung von Databricks SQL-Warnungen erstellen. Schreiben Sie eine SQL-Abfrage anhand pipeline_events (optional verknüpft mit anderen Lakeflow-Systemtabellen), planen Sie sie in einem SQL-Lager, und konfigurieren Sie ein Benachrichtigungsziel (E-Mail, Slack, Webhook, PagerDuty).

Einige nützliche Ausgangspunkte:

Alarm, wenn in den letzten N Minuten keine Ereignisse für eine laufende Pipeline eingetreten sind

Verwenden Sie diese Eigenschaft, um hängen gebliebene oder im Hintergrund fehlerhafte Pipelines zu erkennen.

-- Returns one row per pipeline with a currently-running update that has emitted no event
-- in the last 30 minutes. The alert can trigger when this query returns any rows.
WITH running_pipelines AS (
  SELECT
    workspace_id,
    pipeline_id
  FROM
    system.lakeflow.pipeline_update_timeline
  QUALIFY
    ROW_NUMBER() OVER (PARTITION BY workspace_id, pipeline_id ORDER BY period_end_time DESC) = 1
    AND result_state IS NULL
),
last_event AS (
  SELECT
    workspace_id,
    pipeline_id,
    MAX(event_time) AS last_event_time
  FROM
    system.lakeflow_pipeline_events_preview.pipeline_events
  GROUP BY
    workspace_id,
    pipeline_id
)
SELECT
  r.workspace_id,
  r.pipeline_id,
  le.last_event_time
FROM
  running_pipelines r
  LEFT JOIN last_event le USING (workspace_id, pipeline_id)
WHERE
  le.last_event_time IS NULL
  OR le.last_event_time < current_timestamp() - INTERVAL 30 MINUTES

Warnung, wenn der Backlog für einen bestimmten Fluss zu hoch ist

Backlog wird bei Ereignissen als flow_progressbacklog_bytesgemeldet, und für Dateiquellen auch als backlog_files. Auslösen, wenn die aktuellste Messung eine Schwelle überschreitet (zum Beispiel 100 MB unverarbeitete Arbeit). Nicht jede Quelle meldet jede Metrik, also filtere nach der Kennzahl, die deine Quelle befüllt.

-- Returns the most recent backlog reading per flow for a given pipeline.
-- The alert can trigger when backlog_bytes exceeds the threshold for any flow.
WITH latest_flow_progress AS (
  SELECT
    workspace_id,
    pipeline_id,
    origin.flow_name,
    event_time,
    CASE
      WHEN variant_get(details, '$.flow_progress.status', 'STRING') = 'COMPLETED' THEN 0
      ELSE variant_get(details, '$.flow_progress.metrics.backlog_bytes', 'BIGINT')
    END AS backlog_bytes
  FROM
    system.lakeflow_pipeline_events_preview.pipeline_events
  WHERE
    pipeline_id = '<your-pipeline-id>'
    AND event_type = 'flow_progress'
    AND event_time >= current_timestamp() - INTERVAL 1 HOUR
    AND (
      variant_get(details, '$.flow_progress.metrics.backlog_bytes', 'BIGINT') IS NOT NULL
      OR variant_get(details, '$.flow_progress.status', 'STRING') = 'COMPLETED'
    )
  QUALIFY
    ROW_NUMBER() OVER (PARTITION BY workspace_id, pipeline_id, origin.flow_name ORDER BY event_time DESC) = 1
)
SELECT *
FROM latest_flow_progress
WHERE backlog_bytes > 100000000

Um zu sehen, welche Quelle dahinterliegt, $.flow_progress.metrics.source_metrics gibt es ein Array von Pro-Source-Lesungen, jede mit source_name neben dem von dieser Quelle backlog_bytes, backlog_records oder backlog_files.

Warnung über Datenqualitätsverluste in einer Pipeline

Jedes flow_progress Ereignis meldet die Anzahl der Zeilen, die nach EXPECT … DROP Erwartungen verworfen wurden. Summieren Sie diese pro Datensatz über ein Aktualisierungsfenster und warnen Sie, wenn die Gesamtzahl eine Schwelle überschreitet.

-- Returns datasets where more than 100 rows were dropped by expectations, per update, in the last hour.
SELECT
  pipeline_id,
  update_id,
  origin.dataset_name,
  SUM(variant_get(details, '$.flow_progress.data_quality.dropped_records', 'BIGINT')) AS dropped_records
FROM
  system.lakeflow_pipeline_events_preview.pipeline_events
WHERE
  event_type = 'flow_progress'
  AND event_time >= current_timestamp() - INTERVAL 1 HOUR
GROUP BY
  pipeline_id,
  update_id,
  origin.dataset_name
HAVING
  SUM(variant_get(details, '$.flow_progress.data_quality.dropped_records', 'BIGINT')) > 100

Alarmieren, wenn ein Flow zu wenige Zeilen verarbeitet

flow_progress Ereignisse werden als Menge pro Mikro-Batch gemeldet metrics.num_output_rows , sodass die Summe der Ereignisse in einem Fenster die über diesem Fenster geschriebenen Zeilen ergibt. Erstellen Sie eine Warnung, wenn der Durchsatz unter einen erwarteten Unterboden fällt. Zum Beispiel kann ein Flow, der normalerweise Tausende von Zeilen pro Stunde schreibt, aber nahezu null erzeugt, auf eine falsch konfigurierte Quelle hinweisen.

Diese Abfrage meldet nur Flüche, die ein flow_progress Ereignis mit einer Zeilenanzahl im Fenster ausgelöst haben. Ein vollständig gestoppter Fluss sendet keine Ereignisse, also kombinieren Sie diese Warnung mit der oben genannten Warnung für fehlende Ereignisse.

-- Returns active flows (latest status not terminal) that wrote fewer than 100 rows in the last hour.
-- The alert can trigger when this query returns any rows.
WITH flow_state AS (
  SELECT
    pipeline_id,
    origin.flow_name,
    event_time,
    variant_get(details, '$.flow_progress.status', 'STRING') AS status,
    variant_get(details, '$.flow_progress.metrics.num_output_rows', 'BIGINT') AS num_output_rows,
    ROW_NUMBER() OVER (PARTITION BY pipeline_id, origin.flow_name ORDER BY event_time DESC) AS rn
  FROM
    system.lakeflow_pipeline_events_preview.pipeline_events
  WHERE
    pipeline_id = '<your-pipeline-id>'
    AND event_type = 'flow_progress'
    AND event_time >= current_timestamp() - INTERVAL 1 HOUR
),
active_flows AS (
  SELECT
    pipeline_id,
    flow_name
  FROM
    flow_state
  WHERE
    rn = 1
    AND status NOT IN ('COMPLETED', 'FAILED', 'SKIPPED', 'STOPPED', 'EXCLUDED')
)
SELECT
  f.pipeline_id,
  f.flow_name,
  SUM(f.num_output_rows) AS rows_written_last_hour
FROM
  flow_state f
  JOIN active_flows a USING (pipeline_id, flow_name)
WHERE
  f.num_output_rows IS NOT NULL
GROUP BY
  f.pipeline_id,
  f.flow_name
HAVING
  SUM(f.num_output_rows) < 100

Tipps für Produktionswarnungen

  • Filtern Sie nach pipeline_id (und workspace_id wenn Sie Warnungen pro Arbeitsbereich verwalten), sodass jede Warnung auf einen bestimmten Bereich anstatt auf das gesamte Konto ausgerichtet ist.
  • Wählen Sie einen Auswertungsrhythmen aus, der der Vertraulichkeit der Warnung entspricht. Verwenden Sie ein kurzes Intervall (z. B. alle 5 Minuten) für Schnelle-Fail-Signale und ein längeres Intervall (z. B. stündlich) für Backlog- und Datenqualitätstrends. Eine "Trigger when query returns more than 0 rows" condition works for most cases.

Referenzwerte

Levelwerte

Value Beschreibung
INFO Normale Pipelineaktivität (Flussfortschritt, Aktualisierungslebenszyklusübergänge, Konfigurationsänderungen).
WARN Nicht schwerwiegende Probleme, von denen die Pipeline wiederhergestellt wurde oder die Aufmerksamkeit erfordern kann.
ERROR Fehler, die verhinderten, dass die Pipeline Fortschritte bei einem Fluss oder einer Aktualisierung macht.
METRICS Quantitative Messungen, die während der Ausführung ausgegeben werden (Zeilenanzahl, Durchsatz, Latenz).

Reifestufenwerte

Value Beschreibung
STABLE Das Ereignisschema ist stabil. Unterbrechungsänderungen werden nicht erwartet. Sicher, produktionsbezogene Abfragen und Warnungen zu erstellen.
EVOLVING Das Ereignisschema kann sich in zukünftigen Versionen ändern. Verwenden Sie mit Sorgfalt.
DEPRECATED Der Ereignistyp oder das Schema ist veraltet und wird in zukünftigen Versionen entfernt. Migrieren Sie es aus.

Ereignistypwerte

Das event_type Feld ist eine Aufzählung. Der vollständige Wertesatz:

Value Beschreibung
create_update Es wurde ein neues Pipelineupdate angefordert.
update_progress Ein Pipelineupdate wurde über einen Lebenszyklusstatus übertragen.
flow_progress Ein Fluss (Dataset) innerhalb einer Aktualisierung, die über einen Zustand übertragen wird.
flow_definition Statische Metadaten zu einem Fluss.
dataset_definition Statische Metadaten zu einem Dataset.
sink_definition Statische Metadaten zu einer Ausgabesenke.
deprecation Ein veraltetes Feature wurde von der Pipeline verwendet.
autoscale Automatische Cluster-Skalierungsentscheidung.
unsupported_operation Ein Vorgang, der in der aktuellen Konfiguration nicht unterstützt wird.
cluster_resources Task-Slot- und Autoskalierungsmetriken für die Backing-Berechnung.
planning_information Planungsphaseninformationen für das Update.
gc_pressure Garbage Collection druck on driver or executors.
abnormal_termination Das Update wurde nicht ordnungsgemäß beendet.
disk_space Speicherplatzdruck auf dem Cluster.
hook_progress Lebenszyklusfortschritt eines Pipeline-Hooks.
dataset_life_cycle Ein Dataset-Lebenszyklusereignis.
background_operation Ein Hintergrundvorgang wurde durch einen Zustand übertragen.
remote_api_usage Die Pipeline hat einen ausgehenden API-Aufruf ausgeführt.
operation_progress Fortschritt für einen generischen Vorgang.
stream_progress Fortschritt für eine Streamingabfrage, die einen Fluss zurückgibt.
rewind_summary Zusammenfassung einer Pipeline-Rückspuloperation .
advisory Eine Empfehlungsnachricht vom Modul.
runtime_details Detaillierte Laufzeitkonfiguration.
resource_info Ressourceninformationen (Cluster, Instanztyp usw.).
file_notification_set_up Dateibenachrichtigungseinrichtungsstatus (für Clouddateienquellen).
behavior_change_in_spark_connect Verhaltensänderungsbenachrichtigung unter Spark Connect.
user_action Eine vom Benutzer initiierte Aktion für die Pipeline.
user_code_context Kontext zum Benutzercode, der mit dem Ereignis verbunden ist.