작업 시스템 테이블 참조

Important

이 기능은 공개 미리 보기 상태입니다. 카탈로그에 표시 system 하려면 스키마를 사용하도록 설정해야 합니다. 자세한 내용은 시스템 테이블 스키마 사용을 참조 하세요.

참고 항목

스키마는 lakeflow 이전에 .로 workflow알려져 있었습니다. 두 스키마의 콘텐츠는 동일합니다. 스키마를 lakeflow 표시하려면 스키마를 별도로 사용하도록 설정해야 합니다.

이 문서에서는 시스템 테이블을 사용하여 계정의 lakeflow 작업을 모니터링하는 방법에 대한 참조를 제공합니다. 이러한 테이블에는 동일한 클라우드 지역에 배포된 계정의 모든 작업 영역 레코드가 포함됩니다. 다른 지역의 레코드를 보려면 해당 지역에 배포된 작업 영역에서 테이블을 확인해야 합니다.

system.lakeflow는 계정 관리자가 사용하도록 설정해야 합니다. SystemSchemas API사용하여 사용하도록 설정할 수 있습니다.

작업 비용 및 상태 관찰성을 위해 이러한 테이블을 사용하는 예제는 시스템 테이블을 사용하여 작업 비용 모니터링을 참조 하세요.

사용 가능한 작업 테이블

모든 작업 관련 시스템 테이블은 스키마에 system.lakeflow 있습니다. 현재 스키마는 다음 네 개의 테이블을 호스팅합니다.

  • jobs: 작업의 생성, 삭제 및 기본 정보를 추적합니다.
  • job_tasks: 작업 작업의 생성, 삭제 및 기본 정보를 추적합니다.
  • job_run_timeline: 작업 실행의 시작, 끝 및 결과 상태를 기록합니다.
  • job_task_run_timeline: 작업 작업의 시작, 종료 및 결과 상태를 기록합니다.

작업 테이블 스키마

테이블은 jobs 느린 변경 차원 테이블입니다. 행이 변경되면 새 행이 내보내집니다. 논리적으로 이전 행을 대체합니다.

이 표에서는 다음 스키마를 사용합니다.

열 이름 데이터 형식 설명
account_id string 이 작업이 속한 계정의 ID입니다.
workspace_id string 이 작업이 속한 작업 영역의 ID입니다.
job_id string 작업의 ID입니다. 이 키는 단일 작업 영역 내에서만 고유합니다.
name string 사용자가 제공한 작업의 이름입니다.
creator_id string 작업을 만든 보안 주체의 ID입니다.
tags string 이 작업과 연결된 사용자가 제공한 사용자 지정 태그입니다.
change_time timestamp 작업이 마지막으로 수정된 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
delete_time timestamp 사용자가 작업을 삭제한 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
run_as string 작업 실행에 사용 권한이 사용되는 사용자 또는 서비스 주체의 ID입니다.

작업 작업 테이블 스키마

테이블은 job_tasks 느린 변경 차원 테이블입니다. 행이 변경되면 새 행이 내보내집니다. 논리적으로 이전 행을 대체합니다.

이 표에서는 다음 스키마를 사용합니다.

열 이름 데이터 형식 설명
account_id string 이 작업이 속한 계정의 ID입니다.
workspace_id string 이 작업이 속한 작업 영역의 ID입니다.
job_id string 작업의 ID입니다. 이 키는 단일 작업 영역 내에서만 고유합니다.
task_key string 작업의 작업에 대한 참조 키입니다. 이 키는 단일 작업 내에서만 고유합니다.
depends_on_keys 배열 이 작업의 모든 업스트림 종속성의 작업 키입니다.
change_time timestamp 작업이 마지막으로 수정된 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
delete_time timestamp 사용자가 작업을 삭제한 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.

작업 실행 타임라인 테이블 스키마

테이블이 job_run_timeline 생성될 때 변경할 수 없으며 완료됩니다.

이 표에서는 다음 스키마를 사용합니다.

열 이름 데이터 형식 설명
account_id string 이 작업이 속한 계정의 ID입니다.
workspace_id string 이 작업이 속한 작업 영역의 ID입니다.
job_id string 작업의 ID입니다. 이 키는 단일 작업 영역 내에서만 고유합니다.
run_id string 작업 실행의 ID입니다.
period_start_time timestamp 실행 또는 기간의 시작 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
period_end_time timestamp 실행 또는 기간의 종료 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
trigger_type string 실행을 실행할 수 있는 트리거의 유형입니다.
result_state string 작업 실행의 결과입니다. 이 표 아래의 가능한 값을 참조하세요.

열에 사용할 수 있는 result_state 값은 다음과 같습니다.

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

열에 사용할 수 있는 trigger_type 값은 다음과 같습니다.

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

작업 작업 실행 타임라인 테이블 스키마

테이블이 job_task_run_timeline 생성될 때 변경할 수 없으며 완료됩니다.

이 표에서는 다음 스키마를 사용합니다.

열 이름 데이터 형식 설명
account_id string 이 작업이 속한 계정의 ID입니다.
workspace_id string 이 작업이 속한 작업 영역의 ID입니다.
job_id string 작업의 ID입니다. 이 키는 단일 작업 영역 내에서만 고유합니다.
run_id string 작업 실행의 ID입니다.
period_start_time timestamp 작업 또는 기간의 시작 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
period_end_time timestamp 작업 또는 기간의 종료 시간입니다. 표준 시간대 정보는 UTC를 나타내는 값 +00:00 의 끝에 기록됩니다.
task_key string 작업의 작업에 대한 참조 키입니다. 이 키는 단일 작업 내에서만 고유합니다.
compute_ids 배열 비 서버리스 작업 컴퓨팅 및 작업 태스크에서 사용되는 서버리스가 아닌 SQL 웨어하우스의 ID를 포함하는 배열입니다.
result_state string 작업 태스크 실행의 결과입니다.

열에 사용할 수 있는 result_state 값은 다음과 같습니다.

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

예제 쿼리

이 섹션에는 레이크플로 테이블을 최대한 활용하는 데 사용할 수 있는 샘플 쿼리가 포함되어 있습니다.

최신 버전의 작업 가져오기

jobs 테이블과 job_tasks 테이블이 차원 테이블을 천천히 변경하기 때문에 변경될 때마다 새 레코드가 만들어집니다. 작업의 최신 버전을 얻으려면 열을 순서대로 정렬할 change_time 수 있습니다.

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

작업 영역별 일일 작업 수

이 쿼리는 지난 7일 동안 작업 영역별 일일 작업 수를 가져옵니다.

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

작업 영역별 일별 작업 상태 분포

이 쿼리는 작업 실행 결과에 따라 배포된 지난 7일 동안 작업 영역별 일일 작업 수를 반환합니다. 쿼리는 작업이 보류 중이거나 실행 중인 상태인 레코드를 모두 제거합니다.

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

가장 오래 실행되는 작업 개요

이 쿼리는 작업 실행의 평균 시간을 초 단위로 반환합니다. 레코드는 작업별로 구성됩니다. 상위 90개 열과 95개의 백분위수 열은 작업에서 가장 긴 실행의 평균 길이를 표시합니다.

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
),
most_recent_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
    t1.workspace_id,
    t1.job_id,
    first(t2.name, TRUE) as name,
    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
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

작업 실행 분석

이 쿼리는 특정 작업에 대한 기록 런타임을 제공합니다. 쿼리가 작동하려면 다음을 workspace_id job_id설정해야 합니다.

섹션의 일 INTERVAL 60 DAYS 수를 업데이트하여 분석 기간을 편집할 수도 있습니다.

with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        min(period_start_time) as run_start,
        max(period_start_time) as run_end,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration,
        FIRST(result_state, TRUE) as result_state
    FROM
        system.lakeflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
      AND workspace_id={workspace_id}
      AND job_id={job_id}
    GROUP BY ALL
    ORDER BY run_start DESC
),
most_recent_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
    t1.workspace_id,
    t1.job_id,
    t2.name,
    t1.run_id,
    t1.run_start,
    t1.run_end,
    t1.duration,
    t1.result_state
FROM job_run_duration t1
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)

다목적 컴퓨팅에서 실행되는 작업

이 쿼리는 시스템 테이블과 compute.clusters 조인되어 작업 컴퓨팅 대신 다목적 컴퓨팅에서 실행 중인 최근 작업을 반환합니다.

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;

다시 시도된 작업 실행

이 쿼리는 각 실행에 대한 재시도 횟수와 함께 재시도된 작업 실행 목록을 수집합니다.

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;