Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Essere sia un amministratore del metastore che un amministratore dell'account oppure
- Disporre delle autorizzazioni
USEeSELECTper gli schemi di sistema. Vedere Concedere l'accesso alle tabelle di sistema.
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.
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_ida (eworkspace_idse 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. |