Informazioni di riferimento sulla tabella di sistema degli eventi della pipeline

Importante

Questa tabella di sistema è in beta.

Questo articolo è un riferimento per la tabella di pipeline_events sistema, che registra le voci del registro eventi di Lakeflow pipelines per le pipeline nell'account. Ogni riga è un evento non modificabile dal registro eventi della pipeline, acquisisce transizioni del ciclo di vita, avanzamento del flusso, metriche di qualità dei dati, errori, risorse del cluster e altri dati operativi in tutte le pipeline e aree di lavoro all'interno di un'area.

Requisiti

  • Per accedere a questa tabella di sistema, gli utenti devono:

Dashboard degli eventi della pipeline

Un dashboard preassemblato visualizza lo stato della pipeline, la produttività, il backlog, la qualità dei dati e gli errori da questa tabella di sistema.

Divisione dello stato della pipeline con conteggio di errori e avvisi

Fallimenti delle aspettative: righe fallite e percentuale massima di fallimento nel tempo

Per importare e utilizzare la dashboard, vedi Monitorare e interrogare eventi.

Tabelle degli eventi della pipeline disponibili

Tabella Description Supporta lo streaming Periodo di conservazione gratuito Includono dati globali o regionali
pipeline_events (Beta) Registra le voci del registro eventi della pipeline generate dalle esecuzioni della pipeline Sì 13 mesi Regionale

Nota

Lo schema è lakeflow_pipeline_events_preview durante la Beta. Alla disponibilità generale, la tabella si sposta allo lakeflow schema (il percorso finale della tabella sarà system.lakeflow.pipeline_events). Anche i dettagli dello schema potrebbero cambiare in questo momento. Le query scritte sullo schema Beta devono essere aggiornate quando la tabella si sposta.

Informazioni di riferimento dettagliate sullo schema

Schema della tabella degli eventi della pipeline

La tabella degli eventi della pipeline è di sola accodamento. Ogni riga registra un singolo evento generato da un aggiornamento della pipeline al momento dell'emissione e le righe non vengono mai modificate o eliminate sul posto.

I campi popolati in una riga dipendono dal tipo di evento. error, update_ide molti origin.* sottocampi vengono impostati solo sugli eventi in cui si applicano e la struttura del details campo varia anche in base a event_type.

Usare questa tabella per eseguire query sull'attività della pipeline cronologica, creare avvisi in caso di errori della pipeline e correlare il comportamento della pipeline con altre tabelle di sistema Lakeflow.

Percorso tabella: system.lakeflow_pipeline_events_preview.pipeline_events

Chiave primaria: (account_id, pipeline_event_id)

Nome della colonna Tipo di dati Description Note
account_id string ID dell'account a cui appartiene questo evento della pipeline
workspace_id string ID dell'area di lavoro a cui appartiene questo evento della pipeline
pipeline_id string ID della pipeline che ha generato l'evento
update_id string ID dell'aggiornamento della pipeline che ha generato l'evento
pipeline_event_id string Identificatore univoco globale per l'evento
event_type string Tipo di evento (ad esempio, flow_progress, update_progress, create_update) Vedi valori del tipo Evento per l'insieme completo di valori.
origin struct Metadati contestuali sull'origine dell'evento, ad esempio provider di servizi cloud, area, tipo di pipeline, tabella o nomi di flusso e altri identificatori Vedi campi di struttura di origine.
message string Descrizione leggibile dell'evento Può essere vuoto per alcuni eventi.
level string Livello di gravità dell'evento Uno di INFO, WARN, ERROR, METRICS. Vedi valori di Livello.
maturity_level string Stabilità dello schema degli eventi Uno di STABLE, EVOLVING, DEPRECATED. Vedi Valori del livello di maturità.
error struct Dettagli errore. Popolato solo per gli eventi che contengono informazioni sugli errori Vedi Campi di struct di errore.
details variante Payload specifico dell'evento. I campi che contiene dipendono da event_type Vedi il campo Dettagli.
event_time Marca temporale Ora in cui l'evento è stato generato dalla pipeline Fuso orario registrato come +00:00 (UTC).

Campi di struct di origine

Sottocampo Tipo di dati Description
cloud string Provider di servizi cloud (ad esempio, AWS, AZURE, GCP)
region string Area del provider di servizi cloud
org_id bigint ID organizzazione dell'area di lavoro
pipeline_type string Tipo di pipeline
pipeline_name string Il nome della pipeline fornito dall'utente
cluster_id string ID del cluster di calcolo che esegue il backup dell'aggiornamento della pipeline
maintenance_id string ID dell'aggiornamento della manutenzione, se l'evento proviene da un'esecuzione di manutenzione
dataset_name string Il nome del set di dati (tabella o vista) a cui fa riferimento l'evento
sink_name string Il nome del sink a cui fa riferimento l'evento
catalog_name string Nome del catalogo unity
schema_name string Nome dello schema del catalogo Unity
flow_id string ID del flusso a cui fa riferimento l'evento
flow_name string Il nome del flusso a cui fa riferimento l'evento
batch_id bigint ID micro-batch per i flussi di streaming. bigint per la compatibilità
request_id string ID richiesta che ha avviato l'azione
materialization_name string Nome della materializzazione
operation_id string ID operazione
source_name string Nome dell'origine dati
uc_table_id string ID tabella del catalogo Unity
ingestion_source_type string Tipo di origine di inserimento (ad esempio, SQL_SERVER, SALESFORCE)
ingestion_source_connection_name string Nome della connessione per l'origine di inserimento
ingestion_source_catalog_name string Nome del catalogo di origine nel sistema upstream
ingestion_source_schema_name string Nome dello schema di origine nel sistema upstream
ingestion_source_table_name string Nome della tabella di origine nel sistema upstream
ingestion_source_table_version string Versione della tabella di origine, se applicabile

Campi di struct di errore

Sottocampo Tipo di dati Description
fatal boolean Indica se l'errore ha causato l'interruzione dell'aggiornamento
exceptions Struct matrice<> Catena di eccezioni associate all'errore (ultima causa radice)
exceptions[].sql_state string Codice SQLSTATE, se disponibile
exceptions[].error_class string Classe di errore di Databricks, se disponibile

Campo dettagli

La details colonna è un VARIANToggetto e i campi che contiene dipendono da event_type. Per i campi disponibili in ogni tipo di evento, vedere Schema del registro eventi della pipeline. Usare la sintassi della variant_get funzione o del punto per leggere i valori annidati. Vedere le query di esempio seguenti per i modelli di accesso tipici.

La event_type chiave avvolge il carico utile. Ad esempio, le metriche di un flow_progress evento sono a $.flow_progress.metrics, non $.metrics. Includi la chiave di tipo evento in ogni percorso.

-- 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

Grandi eventi

Quando un evento è troppo grande per essere memorizzato per intero, la tabella memorizza una copia abbreviata del suo details. Un evento accorciato ha un truncation campo in $.truncation, accanto alla chiave di tipo evento. Il suo truncated_fields array elenca ogni campo abbreviato con field_name, ad esempio details. Altri eventi non hanno un truncation campo.

Tipo di evento Cosa viene abbreviato
flow_definition, dataset_definition schema conserva le prime 2.500 colonne.
flow_progress data_quality.expectations mantiene 1.000 aspettative, partendo da aspettative che non hanno mai avuto record.

Interrogazioni di esempio

-- 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

Modelli di join comuni

Creare un join con la tabella per filtrare in base al nome della pipelines pipeline

La pipelines tabella è una dimensione a modifica lenta (SCD2). Prima di creare un join, prendere la versione più recente di ogni pipeline.

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

Partecipa con pipeline_update_timeline in 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

Impostazione degli avvisi

È possibile creare avvisi per pipeline_events l'uso degli avvisi SQL di Databricks. Scrivere una query SQL su pipeline_events (facoltativamente unita ad altre tabelle di sistema Lakeflow), pianificarla in un'istanza di SQL Warehouse e configurare una destinazione di notifica (posta elettronica, Slack, webhook, PagerDuty).

Alcuni punti di partenza utili:

Avviso quando non sono arrivati eventi per una pipeline in corso negli ultimi N minuti

Usare questa opzione per rilevare pipeline bloccate o con errori invisibile all'utente.

-- 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

Avvisare quando il backlog per un flusso specifico è troppo elevato

L'arretrato viene riportato sugli flow_progress eventi come backlog_bytes, e per le fonti dei file anche come backlog_files. Si attiva quando la lettura più recente supera una soglia (ad esempio, 100 MB di lavoro non elaborato). Non tutte le fonti riportano ogni metrica, quindi filtra su quella che la tua fonte popola.

-- 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

Per vedere quale sorgente è indietro, $.flow_progress.metrics.source_metrics è una serie di letture per fonte, ciascuna con source_name accanto a backlog_bytesquella di quella fonte , backlog_records o backlog_files.

Avviso per le cadute di qualità dei dati in una pipeline

Ogni flow_progress evento segnala il numero di righe eliminate dalle EXPECT … DROP aspettative. Sommare questi dati per ogni dataset durante una finestra di aggiornamento e avvisare quando il totale supera una soglia.

-- 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

Avvisa quando un flusso elabora troppe righe

flow_progress gli eventi riportano metrics.num_output_rows come conteggio per micro-lotto, quindi sommando gli eventi in una finestra si ottengono le righe scritte sopra quella finestra. Crea un avviso quando la produttività scende sotto un minimo previsto. Ad esempio, un flusso che normalmente scrive migliaia di righe all'ora ma produce quasi zero può indicare una sorgente mal configurata.

Questa query riporta solo i flussi che hanno emesso un flow_progress evento con un conteggio di righe nella finestra. Un flusso completamente bloccato non emette eventi, quindi abbina questo allarme all'allarme di eventi mancanti sopra.

-- 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

Suggerimenti per gli avvisi di produzione

  • Filtrare in base pipeline_id a (e workspace_id se si mantengono gli avvisi per area di lavoro) in modo che ogni avviso sia destinato a un ambito specifico anziché all'intero account.
  • Scegliere una frequenza di valutazione corrispondente alla sensibilità dell'avviso. Usare un intervallo breve (ad esempio, ogni 5 minuti) per i segnali di errore rapido e un intervallo più lungo (ad esempio, ogni ora) per le tendenze di backlog e qualità dei dati. Una condizione "trigger quando la query restituisce più di 0 righe" funziona per la maggior parte dei casi.

Valori di riferimento

Valori dei livelli

Value Description
INFO Attività normale della pipeline (avanzamento del flusso, transizioni del ciclo di vita degli aggiornamenti, modifiche alla configurazione).
WARN Problemi non irreversibili della pipeline recuperati o che potrebbero richiedere attenzione.
ERROR Errori che impedivano alla pipeline di eseguire lo stato di avanzamento in un flusso o in un aggiornamento.
METRICS Misurazioni quantitative generate durante l'esecuzione (conteggi delle righe, velocità effettiva, latenza).

Valori dei livelli di maturità

Value Description
STABLE Lo schema dell'evento è stabile. Le modifiche di rilievo non sono previste. Creare query e avvisi di produzione sicuri.
EVOLVING Lo schema degli eventi può cambiare nelle versioni future. Usare con cura.
DEPRECATED Il tipo di evento o lo schema è deprecato e verrà rimosso nelle versioni future. Esegui la migrazione.

Valori del tipo di evento

Il event_type campo è un'enumerazione. Set completo di valori:

Value Description
create_update È stato richiesto un nuovo aggiornamento della pipeline.
update_progress Un aggiornamento della pipeline è passato attraverso uno stato del ciclo di vita.
flow_progress Flusso (set di dati) all'interno di un aggiornamento sottoposto a transizione attraverso uno stato.
flow_definition Metadati statici relativi a un flusso.
dataset_definition Metadati statici relativi a un set di dati.
sink_definition Metadati statici relativi a un sink di output.
deprecation Una funzionalità deprecata è stata usata dalla pipeline.
autoscale Decisione di scalabilità automatica del cluster.
unsupported_operation Operazione non supportata nella configurazione corrente.
cluster_resources Slot di attività e metriche di scalabilità automatica per il calcolo di backup.
planning_information Informazioni sulla fase di pianificazione per l'aggiornamento.
gc_pressure Pressioni di Garbage Collection su driver o executor.
abnormal_termination Aggiornamento terminato in modo anomalo.
disk_space Pressione dello spazio su disco nel cluster.
hook_progress Stato del ciclo di vita di un hook della pipeline.
dataset_life_cycle Evento del ciclo di vita del set di dati.
background_operation Un'operazione in background è passata attraverso uno stato.
remote_api_usage La pipeline ha effettuato una chiamata API in uscita.
operation_progress Stato di avanzamento per un'operazione generica.
stream_progress Stato di avanzamento per una query di streaming che esegue il backup di un flusso.
rewind_summary Riepilogo di un'operazione di riavvolgimento di un oleodotto.
advisory Messaggio di avviso dal motore.
runtime_details Configurazione dettagliata del runtime.
resource_info Informazioni sulle risorse (cluster, tipo di istanza e così via).
file_notification_set_up Stato di installazione delle notifiche file (per le origini dei file cloud).
behavior_change_in_spark_connect Notifica di modifica del comportamento in Spark Connect.
user_action Azione avviata dall'utente sulla pipeline.
user_code_context Contesto sul codice utente associato all'evento.