Dokumentacja tabeli systemu zdarzeń potoku

Important

Ta tabela systemowa znajduje się w wersji beta.

Ten artykuł jest odwołaniem do tabeli systemowej pipeline_events , która rejestruje wpisy dziennika zdarzeń potoków lakeflow dla potoków na twoim koncie. Każdy wiersz jest niezmiennym zdarzeniem z dziennika zdarzeń potoku, przechwytywaniem przejść cyklu życia, postępem przepływu, metrykami jakości danych, błędami, zasobami klastra i innymi danymi operacyjnymi we wszystkich potokach i obszarach roboczych w regionie.

Requirements

  • Aby uzyskać dostęp do tej tabeli systemowej, użytkownicy muszą:

Pulpit zdarzeń pipeline

Gotowy dashboard wizualizuje zdrowie potoku, przepustowość, backlog, jakość danych oraz błędy z tej tabeli systemowej.

Rozbicie statusu potoku z liczbą błędów i ostrzeżeń

Niepowodzenia oczekiwane: niepowodzenie wierszy i maksymalny procent awarii w czasie

Aby zaimportować i korzystać z dashboardu, zobacz Monitor i zapytanie o zdarzenia.

Dostępne tabele zdarzeń potoków

Tabela Description Obsługuje przesyłanie strumieniowe Okres bezpłatnego przechowywania Obejmuje dane globalne lub regionalne
pipeline_events (Beta) Rejestruje wpisy dziennika zdarzeń potoku emitowane przez uruchomienia potoku Yes 13 miesięcy Regionalne

Uwaga

Schemat jest w lakeflow_pipeline_events_preview fazie beta. Przy ogólnej dostępności tabela przechodzi do schematu lakeflow (ostateczna ścieżka tabeli będzie ).system.lakeflow.pipeline_events Szczegóły schematu mogą się również zmieniać w tym czasie. Zapytania napisane względem schematu Beta muszą być aktualizowane, gdy tabela się przesuwa.

Szczegółowe odniesienie do schematu

Schemat tabeli zdarzeń potoku

Tabela zdarzeń potoku jest tylko do dołączania. Każdy wiersz rejestruje pojedyncze zdarzenie emitowane przez aktualizację potoku w momencie jego emisji, a wiersze nigdy nie są modyfikowane ani usuwane.

Pola, które są wypełniane w wierszu, zależą od typu zdarzenia. error, update_idi wiele origin.* pól podrzędnych są ustawiane tylko na zdarzeniach, w których mają zastosowanie, a struktura details pola również różni się w zależności od event_type.

Ta tabela umożliwia wykonywanie zapytań dotyczących historycznych działań potoku, tworzenie alertów dotyczących błędów potoku oraz korelowanie zachowania potoku z innymi tabelami systemowymi usługi Lakeflow.

Ścieżka tabeli: system.lakeflow_pipeline_events_preview.pipeline_events

Klucz podstawowy: (account_id, pipeline_event_id)

Nazwa kolumny Typ danych Description Notes
account_id ciąg Identyfikator konta, do którego należy to zdarzenie potoku
workspace_id ciąg Identyfikator obszaru roboczego, do którego należy to zdarzenie potoku
pipeline_id ciąg Identyfikator potoku, który emitował zdarzenie
update_id ciąg Identyfikator aktualizacji potoku, która emitowała zdarzenie
pipeline_event_id ciąg Unikatowy identyfikator globalny zdarzenia
event_type ciąg Typ zdarzenia (na przykład flow_progress, , update_progress) create_update Zobacz wartości typu zdarzenia dla pełnego zestawu wartości.
origin struktura Kontekstowe metadane dotyczące źródła zdarzenia, takiego jak dostawca chmury, region, typ potoku, nazwa tabeli lub przepływu oraz inne identyfikatory Zobacz pola struktury pochodzenia.
message ciąg Czytelny dla człowieka opis zdarzenia Może być pusty w przypadku niektórych zdarzeń.
level ciąg Poziom ważności zdarzenia Jeden z INFO, WARN, ERROR, METRICS. Zobacz wartości poziomów.
maturity_level ciąg Stabilność schematu zdarzeń Jeden z STABLE, EVOLVING, DEPRECATED. Zobacz wartości poziomu dojrzałości.
error struktura Szczegóły błędu. Wypełnione tylko dla zdarzeń, które zawierają informacje o błędzie Zobacz pola struktury błędu.
details wariant Ładunek specyficzny dla zdarzenia. Pola, które zawiera, zależą od event_type Zobacz pole Szczegóły.
event_time sygnatura czasowa Czas emisji zdarzenia przez potok Strefa czasowa zarejestrowana jako +00:00 (UTC).

Pola struktury początkowej

Pole podrzędne Typ danych Description
cloud ciąg Dostawca usług w chmurze (na przykład AWS, , AZUREGCP)
region ciąg Region dostawcy usług w chmurze
org_id bigint Identyfikator organizacji obszaru roboczego
pipeline_type ciąg Typ potoku
pipeline_name ciąg Podana przez użytkownika nazwa potoku
cluster_id ciąg Identyfikator klastra obliczeniowego kopii zapasowej aktualizacji potoku
maintenance_id ciąg Identyfikator aktualizacji konserwacji, jeśli zdarzenie pochodzi z przebiegu konserwacji
dataset_name ciąg Nazwa zestawu danych (tabeli lub widoku), do których odnosi się zdarzenie
sink_name ciąg Nazwa ujścia zdarzenia odnosi się do
catalog_name ciąg Nazwa wykazu wykazu aparatu Unity
schema_name ciąg Nazwa schematu wykazu aparatu Unity
flow_id ciąg Identyfikator przepływu, do który odwołuje się zdarzenie
flow_name ciąg Nazwa przepływu, do których odnosi się zdarzenie
batch_id bigint Identyfikator mikrosadowy przepływów przesyłania strumieniowego. bigint w celu zachowania zgodności
request_id ciąg Identyfikator żądania, który zainicjował akcję
materialization_name ciąg Nazwa materializacji
operation_id ciąg Identyfikator operacji
source_name ciąg Nazwa źródła danych
uc_table_id ciąg Identyfikator tabeli wykazu aparatu Unity
ingestion_source_type ciąg Typ źródła pozyskiwania (na przykład SQL_SERVER, SALESFORCE)
ingestion_source_connection_name ciąg Nazwa połączenia dla źródła pozyskiwania
ingestion_source_catalog_name ciąg Nazwa katalogu źródłowego w systemie nadrzędnym
ingestion_source_schema_name ciąg Nazwa schematu źródłowego w systemie nadrzędnym
ingestion_source_table_name ciąg Nazwa tabeli źródłowej w systemie nadrzędnym
ingestion_source_table_version ciąg Wersja tabeli źródłowej, jeśli ma zastosowanie

Pola struktury błędu

Pole podrzędne Typ danych Description
fatal boolean Czy błąd spowodował zakończenie aktualizacji
exceptions array<, struktura> Łańcuch wyjątków skojarzonych z błędem (ostatnia główna przyczyna)
exceptions[].sql_state ciąg Kod SQLSTATE, jeśli jest dostępny
exceptions[].error_class ciąg Klasa błędów usługi Databricks, jeśli jest dostępna

Pole szczegółów

Kolumna details to VARIANT, a pola, które zawiera, zależą od .event_type Aby uzyskać pola dostępne w poszczególnych typach zdarzeń, zobacz Schemat dziennika zdarzeń potoku. variant_get Użyj funkcji lub składni kropki, aby odczytać zagnieżdżone wartości. Zapoznaj się z poniższymi przykładowymi zapytaniami, aby uzyskać typowe wzorce dostępu.

Klucz event_type owija ładunek. Na przykład flow_progress metryki zdarzenia są w , a nie $.flow_progress.metrics.$.metrics Umieść klucz typu zdarzenia w każdej ścieżce.

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

Duże wydarzenia

Gdy zdarzenie jest zbyt duże, by go przechowywać w całości, tabela przechowuje skróconą kopię swojego details. Skrócone zdarzenie ma truncation pole w , $.truncationobok klucza typu zdarzenia. Jego tablica wymienia truncated_fields każde skrócone pole o field_name, na przykład details. Inne wydarzenia nie mają truncation pola.

Typ zdarzenia Co jest skrócone
flow_definition, dataset_definition schema zachowuje pierwsze 2 500 kolumn.
flow_progress data_quality.expectations utrzymuje 1000 oczekiwań, zaczynając od oczekiwań po nieudanych płytach.

Przykłady zapytań

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

Typowe wzorce sprzężenia

Dołącz do tabeli, pipelines aby filtrować według nazwy potoku

Tabela pipelines jest powoli zmieniającym się wymiarem (SCD2). Przed dołączeniem weź najnowszą wersję każdego potoku.

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

Dołącz do pipeline_update_timelineupdate_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

Ustawianie alertów

Alerty pipeline_events dotyczące usługi Databricks można tworzyć przy użyciu alertów SQL usługi Databricks. Napisz zapytanie SQL względem pipeline_events (opcjonalnie połączone z innymi tabelami systemu Lakeflow), zaplanuj je w usłudze SQL Warehouse i skonfiguruj miejsce docelowe powiadomień (e-mail, Slack, webhook, PagerDuty).

Kilka przydatnych punktów początkowych:

Alarm, gdy w ciągu ostatnich N minut nie pojawiły się żadne zdarzenia dotyczące działającego pipeline'u

Służy do wykrywania zablokowanych lub dyskretnie zakończonych niepowodzeniem potoków.

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

Alert, gdy zaległości dla określonego przepływu są zbyt wysokie

Zaległości są raportowane przy flow_progress zdarzeniach jako , backlog_bytesa dla źródeł plików także jako backlog_files. Wyzwalaj, gdy ostatni odczyt przekroczy próg (na przykład 100 MB nieprzetworzonej pracy). Nie każde źródło podaje wszystkie wskaźniki, więc filtruj ten, który Twoje źródło wypełnia.

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

Aby zobaczyć, które źródło jest za nim, $.flow_progress.metrics.source_metrics jest to zestaw odczytów dla źródła, z których każde jest obok source_name tego backlog_bytesbacklog_records źródła , lub backlog_files.

Alert dotyczący spadku jakości danych w potoku

Każde flow_progress zdarzenie zgłasza liczbę wierszy porzuconych przez EXPECT … DROP oczekiwania. Sumuj je na zbiór danych w oknie aktualizacji i ostrzegaj, gdy łączna liczba przekroczy próg.

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

Bądź ostrożny, gdy przepływ przetwarza zbyt mało wierszy

flow_progress Zdarzenia raportują metrics.num_output_rows jako liczba na mikro-partię, więc sumowanie zdarzeń w oknie daje wiersze zapisane nad tym oknem. Stwórz alert, gdy przepustowość spadnie poniżej oczekiwanego progu. Na przykład przepływ, który normalnie zapisuje tysiące wierszy na godzinę, ale generuje niemal zero, może wskazywać na źle skonfigurowane źródło.

To zapytanie raportuje tylko przepływy, które wygenerowały zdarzenie flow_progress z liczbą wierszy w oknie. Całkowicie zatrzymany przepływ nie emituje żadnych zdarzeń, więc połącz ten alert z powyższym alertem o brakujących zdarzeniach.

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

Porady dotyczące alertów produkcyjnych

  • Filtruj według pipeline_id (i workspace_id jeśli utrzymujesz alerty dla obszaru roboczego), aby każdy alert był przeznaczony dla określonego zakresu, a nie całego konta.
  • Wybierz cykl oceny zgodny z poufnością alertu. Użyj krótkiego interwału (na przykład co 5 minut) dla sygnałów szybkiej awarii i dłuższego interwału (na przykład godzinowego) dla trendów listy prac i jakości danych. W większości przypadków działa warunek "wyzwalacz, gdy zapytanie zwraca więcej niż 0 wierszy".

Wartości odniesienia

Wartości poziomów

Value Description
INFO Normalne działanie potoku (postęp przepływu, przejścia cyklu życia aktualizacji, zmiany konfiguracji).
WARN Problemy niekrytyczne, z których potok został odzyskany lub które mogą wymagać uwagi.
ERROR Błędy, które uniemożliwiły potokowi wykonywanie postępów w przepływie lub aktualizacji.
METRICS Pomiary ilościowe emitowane podczas wykonywania (liczba wierszy, przepływność, opóźnienie).

Wartości poziomu dojrzałości

Value Description
STABLE Schemat zdarzenia jest stabilny. Zmiany powodujące niezgodność nie są oczekiwane. Bezpieczne tworzenie zapytań produkcyjnych i alertów dotyczących.
EVOLVING Schemat zdarzeń może ulec zmianie w przyszłych wersjach. Używaj z ostrożnością.
DEPRECATED Typ zdarzenia lub schemat są przestarzałe i zostaną usunięte w przyszłych wersjach. Zmigruj ją.

Wartości typu zdarzenia

Pole event_type jest wyliczeniem. Pełny zestaw wartości:

Value Description
create_update Zażądano nowej aktualizacji potoku.
update_progress Aktualizacja potoku została przeniesiona przez stan cyklu życia.
flow_progress Przepływ (zestaw danych) w ramach aktualizacji przeszedł przez stan.
flow_definition Metadane statyczne dotyczące przepływu.
dataset_definition Metadane statyczne dotyczące zestawu danych.
sink_definition Metadane statyczne dotyczące ujścia danych wyjściowych.
deprecation Funkcja przestarzała została użyta przez potok.
autoscale Decyzja dotycząca skalowania automatycznego klastra.
unsupported_operation Operacja, która nie jest obsługiwana w bieżącej konfiguracji.
cluster_resources Miejsce zadania i metryki autoskalowania dla obliczeń zapasowych.
planning_information Informacje o fazie planowania aktualizacji.
gc_pressure Obciążenie odzyskiwania pamięci na sterowniku lub funkcjach wykonawczych.
abnormal_termination Aktualizacja została przerwana nieprawidłowo.
disk_space Wykorzystanie miejsca na dysku w klastrze.
hook_progress Postęp cyklu życia haka potoku.
dataset_life_cycle Zdarzenie cyklu życia zestawu danych.
background_operation Operacja w tle przeszła przez stan.
remote_api_usage Potok wykonał wywołanie interfejsu API ruchu wychodzącego.
operation_progress Postęp operacji ogólnej.
stream_progress Postęp dla zapytania przesyłania strumieniowego z kopią zapasową przepływu.
rewind_summary Podsumowanie operacji przewijania rurociągu.
advisory Komunikat doradczy z aparatu.
runtime_details Szczegółowa konfiguracja środowiska uruchomieniowego.
resource_info Informacje o zasobie (klaster, typ wystąpienia itp.).
file_notification_set_up Stan konfiguracji powiadomień dotyczących plików (w przypadku źródeł plików w chmurze).
behavior_change_in_spark_connect Powiadomienie o zmianie zachowania w obszarze Spark Connect.
user_action Akcja zainicjowana przez użytkownika względem potoku.
user_code_context Kontekst dotyczący kodu użytkownika powiązanego z wydarzeniem.