Sdílet prostřednictvím


Referenční informace k systémové tabulce úloh

Poznámka:

Schéma lakeflow bylo dříve známo jako workflow. Obsah obou schémat je identický. Pokud chcete, aby bylo schéma lakeflow viditelné, musíte ho povolit samostatně.

Tento článek obsahuje referenční informace o tom, jak pomocí systémových tabulek lakeflow monitorovat úlohy ve vašem účtu. Tyto tabulky zahrnují záznamy ze všech pracovních prostorů ve vašem účtu nasazené ve stejné cloudové oblasti. Pokud chcete zobrazit záznamy z jiné oblasti, musíte zobrazit tabulky z pracovního prostoru nasazeného v této oblasti.

Požadavky

Dostupné tabulky úloh

Všechny systémové tabulky související s úlohami se nacházejí ve schématu system.lakeflow. Schéma v současné době hostuje čtyři tabulky:

Stůl Popis Podporuje streamování. Období bezplatného uchovávání Zahrnuje globální nebo regionální data.
pracovní pozice (Public Preview) Sleduje všechny úlohy vytvořené v účtu. Ano 365 dní Regionální
job_tasks (Veřejná verze) Sleduje všechny pracovní úkoly, které probíhají v účtu. Ano 365 dní Regionální
job_run_timeline (Veřejná ukázka) Sleduje spuštění úlohy a související metadata. Ano 365 dní Regionální
job_task_run_timeline (Veřejná ukázka) Sleduje spuštění úloh a související metadata. Ano 365 dní Regionální

Podrobné referenční informace ke schématu

Následující části obsahují odkazy na schéma pro každou systémovou tabulku související s úlohami.

Schéma tabulky úloh

Tabulka jobs je pomalu se měnící tabulka dimenzí (SCD2). Když se řádek změní, vygeneruje se nový řádek a logicky nahradí předchozí řádek.

cesta k tabulce: system.lakeflow.jobs

Název sloupce Datový typ Popis Poznámky
account_id řetězec ID účtu, do které tato úloha patří
workspace_id string ID pracovního prostoru, do které tato úloha patří
job_id řetězec ID úlohy Pouze jedinečné v rámci jednoho pracovního prostoru
name řetězec Uživatelem zadaný název úlohy
description řetězec Popis úlohy zadaný uživatelem Toto pole je prázdné, pokud máte nakonfigurované klíče spravované zákazníkem.
Nenaplněno pro řádky generované před koncem srpna 2024
creator_id řetězec ID hlavní osoby, která úlohu vytvořila
tags řetězec Vlastní značky přiřazené uživatelem přidružené k této úloze
change_time časové razítko Čas poslední změny úlohy Časové pásmo zaznamenané jako +00:00 (UTC)
delete_time časové razítko Čas odstranění úlohy uživatelem Časové pásmo zaznamenané jako +00:00 (UTC)
run_as řetězec ID uživatele nebo služebního principála, jehož oprávnění se použijí pro spuštění úlohy

Příklad dotazu

-- Get the most recent version of a job
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.jobs QUALIFY rn=1

Schéma tabulky pracovních úkolů

Tabulka úkolů úloh je pomalu se měnící tabulka dimenzí (SCD2). Když se řádek změní, vygeneruje se nový řádek a logicky nahradí předchozí řádek.

cesta k tabulce: system.lakeflow.job_tasks

Název sloupce Datový typ Popis Poznámky
account_id string ID účtu, do které tato úloha patří
workspace_id řetězec ID pracovního prostoru, do které tato úloha patří
job_id řetězec ID úlohy Pouze jedinečné v rámci jednoho pracovního prostoru
task_key řetězec Referenční klíč pro úkol v úloze Pouze jedinečné v rámci jediného úkolu
depends_on_keys pole Klíče úkolů všech nadřazených závislostí tohoto úkolu
change_time časové razítko Čas poslední změny úkolu Časové pásmo zaznamenané jako +00:00 (UTC)
delete_time časové razítko Čas odstranění úkolu uživatelem Časové pásmo zaznamenané jako +00:00 (UTC)

Příklad dotazu

-- Get the most recent version of a job task
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.job_tasks QUALIFY rn=1

Schéma tabulky časové osy pro spuštění úlohy

Tabulka časového harmonogramu spuštění úlohy je neměnná a dokončená v době, kdy je vytvořena.

cesta k tabulce: system.lakeflow.job_run_timeline

Název sloupce Datový typ Popis Poznámky
account_id řetězec ID účtu, do které tato úloha patří
workspace_id řetězec ID pracovního prostoru, do které tato úloha patří
job_id string ID úlohy Tento klíč je jedinečný pouze v rámci jednoho pracovního prostoru.
run_id řetězec ID spuštění úlohy
period_start_time časové razítko Počáteční čas pro běh nebo časové období Informace o časovém pásmu se zaznamenávají na konci hodnoty s +00:00 představujícím UTC.
period_end_time časové razítko Koncový čas pro běh nebo pro časové období Informace o časovém pásmu se zaznamenávají na konci hodnoty s +00:00 představujícím UTC.
trigger_type string Typ spouštěče, který může spustit běh Možné hodnoty najdete v tématu Hodnoty typu triggeru
run_type řetězec Typ spuštění úlohy Možné hodnoty najdete v tématu Hodnoty typu běhu
run_name řetězec Název spuštění zadaný uživatelem, který je přidružen k této úloze
compute_ids pole Pole obsahující identifikátory výpočtových úloh pro spuštění nadřazené úlohy Slouží k identifikaci clusteru úloh podle druhů spuštění WORKFLOW_RUN. Další informace o výpočetních prostředcích najdete v tabulce job_task_run_timeline.
Nenaplněno pro řádky generované před koncem srpna 2024
result_state řetězec Výsledek spuštění úlohy Pro možné hodnoty se podívejte na hodnoty stavu výsledku
termination_code řetězec Kód ukončení spuštění úlohy Možné hodnoty viz hodnoty kódu ukončení.
Nenaplněno pro řádky generované před koncem srpna 2024
job_parameters mapa Parametry na úrovni úlohy použité při spuštění úlohy V tomto poli nejsou zahrnutá zastaralá nastavení notebook_params.
Nenaplněno pro řádky generované před koncem srpna 2024

Příklad dotazu

-- This query gets the daily job count for a workspace for the last 7 days:
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

-- This query returns the daily job count for a workspace for the last 7 days, distributed by the outcome of the job run.
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

-- This query returns the average time of job runs, measured in seconds. The records are organized by job. A top 90 and a 95 percentile column show the average lengths of the job's longest runs.
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.lakeflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
)
SELECT
    t1.workspace_id,
    t1.job_id,
    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
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

-- This query provides a historical runtime for a specific job based on the `run_name` parameter. For the query to work, you must set the `run_name`.
SELECT
  workspace_id,
  run_id,
  SUM(period_end_time - period_start_time) as run_time
FROM system.lakeflow.job_run_timeline
WHERE
  run_type="SUBMIT_RUN"
  AND run_name = :run_name
  AND period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
GROUP BY ALL

-- This query collects a list of retried job runs with the number of retries for each run.
with repaired_runs as (
    SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
    FROM system.lakeflow.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;

schéma tabulky plánu spuštění úlohy

Tabulka časové osy běhu úlohy je neměnná a dokončená při jejím vytvoření.

cesta k tabulce: system.lakeflow.job_task_run_timeline

Název sloupce Datový typ Popis Poznámky
account_id řetězec ID účtu, do které tato úloha patří
workspace_id řetězec ID pracovního prostoru, do které tato úloha patří
job_id string ID úlohy Pouze jedinečné v rámci jednoho pracovního prostoru
run_id řetězec ID spuštění této úlohy
job_run_id řetězec ID spuštění úlohy Nenaplněno pro řádky generované před koncem srpna 2024
parent_run_id řetězec ID nadřazeného spuštění Nenaplněno pro řádky generované před koncem srpna 2024
period_start_time časové razítko Čas zahájení úkolu nebo časového období Informace o časovém pásmu se zaznamenávají na konci hodnoty s +00:00 představujícím UTC.
period_end_time časové razítko Koncový čas úkolu nebo časového období Informace o časovém pásmu se zaznamenávají na konci hodnoty s +00:00 představujícím UTC.
task_key řetězec Referenční klíč pro úkol v úloze Tento klíč je jedinečný pouze v rámci jedné úlohy.
compute_ids pole Pole compute_ids obsahuje ID clusterů úloh, interaktivních clusterů a sql warehouse používaných úlohou.
result_state řetězec Výsledek spuštění úkolové úlohy Pro možné hodnoty se podívejte na hodnoty stavu výsledku
termination_code řetězec Kód ukončení spuštění úlohy Pro možné hodnoty viz hodnoty kódů ukončení.
Nenaplněno pro řádky generované před koncem srpna 2024

Běžné vzory spojení

Následující části obsahují ukázkové dotazy, které zvýrazňují běžně používané vzory spojení pro systémové tabulky úloh.

Spojit tabulky úloh a časových os spuštění úloh

Obohatit spuštění úlohy názvem úlohy

with jobs as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
    FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
    job_run_timeline.*
    jobs.name
FROM system.lakeflow.job_run_timeline
    LEFT JOIN jobs USING (workspace_id, job_id)

Sloučit časovou posloupnost spuštění úlohy a tabulky využití

Obohaťte každý fakturační protokol metadaty ze spuštění úlohy

SELECT
    t1.*,
    t2.*
FROM system.billing.usage t1
    LEFT JOIN system.lakeflow.job_run_timeline t2
        ON t1.workspace_id = t2.workspace_id
            AND t1.usage_metadata.job_id = t2.job_id
            AND t1.usage_metadata.job_run_id = t2.run_id
            AND t1.usage_start_time >= date_trunc("Hour", t2.period_start_time)
            AND t1.usage_start_time < date_trunc("Hour", t2.period_end_time) + INTERVAL 1 HOUR
WHERE
    billing_origin_product="JOBS"

Výpočet nákladů na spuštění úlohy

Tento dotaz se spojí se systémovou tabulkou billing.usage a vypočítá náklady na spuštění úlohy.

with jobs_usage AS (
  SELECT
    *,
    usage_metadata.job_id,
    usage_metadata.job_run_id as run_id,
    identity_metadata.run_as as run_as
  FROM system.billing.usage
  WHERE billing_origin_product="JOBS"
),
jobs_usage_with_usd AS (
  SELECT
    jobs_usage.*,
    usage_quantity * pricing.default as usage_usd
  FROM jobs_usage
    LEFT JOIN system.billing.list_prices pricing ON
      jobs_usage.sku_name = pricing.sku_name
      AND pricing.price_start_time <= jobs_usage.usage_start_time
      AND (pricing.price_end_time >= jobs_usage.usage_start_time OR pricing.price_end_time IS NULL)
      AND pricing.currency_code="USD"
),
jobs_usage_aggregated AS (
  SELECT
    workspace_id,
    job_id,
    run_id,
    FIRST(run_as, TRUE) as run_as,
    sku_name,
    SUM(usage_usd) as usage_usd,
    SUM(usage_quantity) as usage_quantity
  FROM jobs_usage_with_usd
  GROUP BY ALL
)
SELECT
  t1.*,
  MIN(period_start_time) as run_start_time,
  MAX(period_end_time) as run_end_time,
  FIRST(result_state, TRUE) as result_state
FROM jobs_usage_aggregated t1
  LEFT JOIN system.lakeflow.job_run_timeline t2 USING (workspace_id, job_id, run_id)
GROUP BY ALL
ORDER BY usage_usd DESC
LIMIT 100

Získejte protokoly o využití pro úlohy SUBMIT_RUN

SELECT
  *
FROM system.billing.usage
WHERE
  EXISTS (
      SELECT 1
      FROM system.lakeflow.job_run_timeline
      WHERE
        job_run_timeline.job_id = usage_metadata.job_id
        AND run_name = :run_name
        AND workspace_id = :workspace_id
  )

Připojit k tabulkám spuštění úlohy a časovou osu a clustery

Obohaťte spuštění úloh o metadata clusterů

with clusters as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
    FROM system.compute.clusters QUALIFY rn=1
),
exploded_task_runs AS (
  SELECT
    *,
    EXPLODE(compute_ids) as cluster_id
  FROM system.lakeflow.job_task_run_timeline
  WHERE array_size(compute_ids) > 0
)
SELECT
  exploded_task_runs.*,
  clusters.*
FROM exploded_task_runs t1
  LEFT JOIN clusters t2
    USING (workspace_id, cluster_id)

Vyhledání úloh běžících na univerzálních výpočetních jednotkách

Tento dotaz se spojí se systémovou tabulkou compute.clusters, aby vrátil recentní úlohy, které běží na univerzálním výpočetním prostředí místo výpočetního prostředí pro úlohy.

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.lakeflow.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;

řídicí panel monitorování úloh

Následující řídicí panel používá systémové tabulky, které vám pomůžou začít monitorovat úlohy a provozní stav. Zahrnuje běžné případy použití, jako je sledování výkonu úloh, monitorování selhání a využití prostředků.

řídicí panel pro sledování nákladů na úlohy

Informace o stažení řídicího panelu najdete v tématu Monitorování nákladů na úlohy & výkonu pomocí systémových tabulek

Řešení problémů

Úloha není zaznamenána v tabulce lakeflow.jobs

Pokud úloha není v systémových tabulkách viditelná:

  • Úloha nebyla změněna za posledních 365 dnů.
    • Upravte všechna pole úlohy, která jsou ve schématu, a vygenerujte nový záznam.
  • Úloha byla vytvořena v jiné oblasti.
  • Nedávné vytvoření pracovních míst (zpoždění aktualizace tabulky)

Nejde najít úlohu zobrazenou v tabulce job_run_timeline

Ne všechna spuštění úloh jsou viditelná všude. I když se položky JOB_RUN zobrazují ve všech tabulkách souvisejících s úlohami, WORKFLOW_RUN (spuštění pracovního postupu poznámkového bloku) se zaznamenávají jenom v job_run_timeline a SUBMIT_RUN (jednorázová odeslaná spuštění) se zaznamenávají jenom v obou tabulkách časové osy. Tato spuštění nejsou přenášena do jiných tabulek systému úloh, jako jsou jobs nebo job_tasks.

Podrobný rozpis toho, kde je každý typ spuštění viditelný a přístupný, najdete v následující tabulce typy spuštění.

Průběh úlohy není viditelný v tabulce billing.usage

V system.billing.usage je usage_metadata.job_id naplněn pouze pro úlohy, které běží na výpočetních nebo bezserverových prostředcích.

Kromě toho úlohy WORKFLOW_RUN nemají vlastní přiřazení usage_metadata.job_id ani usage_metadata.job_run_id v system.billing.usage. Místo toho se jejich využití výpočetních prostředků přiřadí nadřazenému poznámkovému bloku, který je spustil. To znamená, že když poznámkový blok spustí pracovní postup, zobrazí se všechny výpočetní náklady v rámci spotřeby nadřazeného poznámkového bloku, a ne jako samostatná úloha pracovního postupu.

Další informace najdete v referenci metadat použití .

Vypočítat náklady na úlohu běžící na univerzálním výpočetním prostředí

Přesný výpočet nákladů pro úlohy běžící na výpočetních kapacitách pro specifické účely není možný s přesností 100%. Když se úloha spustí na interaktivním výpočetním prostředí (pro celý účel), na stejném výpočetním prostředku často běží současně několik úloh, jako jsou poznámkové bloky, dotazy SQL nebo jiné úlohy. Vzhledem k tomu, že jsou prostředky clusteru sdílené, neexistuje žádné přímé mapování 1:1 mezi výpočetními náklady a spuštěním jednotlivých úloh.

Pro přesné sledování nákladů na úlohy doporučuje Databricks spouštět úlohy na dedikovaných výpočetních prostředcích nebo bezserverových výpočetních prostředcích, kde usage_metadata.job_id a usage_metadata.job_run_id umožňují přesné určení nákladů.

Pokud potřebujete použít výpočetní prostředky pro všechny účely, můžete:

  • Monitorujte celkové náklady a využití clusteru v system.billing.usage na základě usage_metadata.cluster_id.
  • Sledujte metriky doby běhu úloh samostatně.
  • Vezměte v úvahu, že jakýkoli odhad nákladů bude přibližný kvůli sdíleným prostředkům.

Další informace o přisuzování nákladů najdete v referenčních informací k metadatem využití.

Referenční hodnoty

Následující část obsahuje odkazy na vybrané sloupce v tabulkách souvisejících s úlohami.

hodnoty typu triggeru

Možné hodnoty pro sloupec trigger_type jsou:

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

hodnoty typu spuštění

Možné hodnoty pro sloupec run_type jsou:

Typ Popis Umístění uživatelského rozhraní Koncový bod rozhraní API Systémové tabulky
JOB_RUN Standardní provádění úloh Uživatelské rozhraní pro úlohy a jejich běh /jobs a /jobs/běhy konečných bodů pracovní pozice, činnosti úlohy, plán spuštění úloh, plán spuštění úkolů úloh
SUBMIT_RUN Jednorázové spuštění přes POST /jobs/runs/submit Pouze uživatelské rozhraní Job Runs /jobs/runs koncové body pouze časová osa spuštění úlohy, časová osa spuštění úkolu úlohy
WORKFLOW_RUN Iniciováno spuštění z pracovního postupu poznámkového bloku Nezobrazuje se Nedostupné časová osa spuštění úlohy

hodnoty výsledkového stavu

Možné hodnoty pro sloupec result_state jsou:

Stát Popis
SUCCEEDED Běh byl úspěšně dokončen.
FAILED Běh se dokončil s chybou
SKIPPED Spuštění nebylo nikdy provedeno, protože nebyla splněna podmínka.
CANCELLED Běh byl zrušen na žádost uživatele.
TIMED_OUT Běh byl zastaven po dosažení časového limitu.
ERROR Běh se dokončil s chybou
BLOCKED Spuštění bylo zablokováno kvůli vstupní závislosti.

hodnoty ukončovacího kódu

Možné hodnoty pro sloupec termination_code jsou:

Kód ukončení Popis
SUCCESS Běh byl úspěšně dokončen.
CANCELLED Spuštění bylo během provádění zrušeno platformou Databricks; Například pokud byla překročena maximální doba běhu.
SKIPPED Spuštění neproběhlo, například pokud selhalo spuštění nadřazené úlohy, nebyla splněna podmínka typu závislosti nebo neexistovaly žádné věcné úlohy k provedení.
DRIVER_ERROR Při komunikaci se Spark Driverem došlo k chybě.
CLUSTER_ERROR Spuštění selhalo kvůli chybě clusteru.
REPOSITORY_CHECKOUT_FAILED Dokončení rezervace se nezdařilo kvůli chybě při komunikaci se službou třetí strany
INVALID_CLUSTER_REQUEST Spuštění selhalo, protože vydalo neplatný požadavek na spuštění clusteru.
WORKSPACE_RUN_LIMIT_EXCEEDED Pracovní prostor dosáhl limitu maximálního počtu současně aktivních úloh. Zvažte plánování běhů v delším časovém rámci.
FEATURE_DISABLED Spuštění se nezdařilo, protože se pokusilo o přístup k funkci, která není dostupná v rámci pracovního prostoru.
CLUSTER_REQUEST_LIMIT_EXCEEDED Počet žádostí o vytvoření, spuštění a přenesení clusteru překročil limit přidělené rychlosti. Zvažte rozložení spuštění v delším časovém rámci.
STORAGE_ACCESS_ERROR Spuštění selhalo kvůli chybě při přístupu k úložišti blobů zákazníka
RUN_EXECUTION_ERROR Běh byl dokončen se selháním úloh.
UNAUTHORIZED_ERROR Spuštění procesu selhalo kvůli potížím s oprávněním při přístupu k prostředku
LIBRARY_INSTALLATION_ERROR Spuštění se nezdařilo při instalaci knihovny požadované uživatelem. Příčiny mohou zahrnovat, ale nejsou omezeny na: zadaná knihovna je neplatná, uživatel nemá dostatečná oprávnění k instalaci této knihovny atd.
MAX_CONCURRENT_RUNS_EXCEEDED Naplánované spuštění překračuje limit maximálního počtu souběžných spuštění nastavených pro úlohu.
MAX_SPARK_CONTEXTS_EXCEEDED Spuštění je naplánované v clusteru, který dosáhl svého maximálního počtu kontextů, který je určený k vytvoření.
RESOURCE_NOT_FOUND Prostředek nezbytný ke spuštění neexistuje.
INVALID_RUN_CONFIGURATION Spuštění selhalo kvůli neplatné konfiguraci.
CLOUD_FAILURE Spuštění selhalo kvůli problému s poskytovatelem cloudu
MAX_JOB_QUEUE_SIZE_EXCEEDED Spuštění bylo přeskočeno, protože bylo dosaženo limitu velikosti fronty na úrovni pracovního procesu.