다음을 통해 공유


계보 시스템 테이블 참조

Important

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

해당 문서는 두 계보 시스템 테이블을 소개합니다. 이러한 시스템 테이블은 Unity 카탈로그의 데이터 계보 기능을 기반으로 하므로 계보 데이터를 프로그래밍 방식으로 쿼리하여 의사 결정 및 보고서에 활용할 수 있습니다.

참고 항목

두 계보 테이블은 모든 읽기/쓰기 이벤트의 하위 집합을 나타내며, 계보를 항상 캡처할 수 있는 것은 아닙니다. 계보를 유추할 수 있는 경우에만 레코드가 내보내집니다.

표 계보 테이블

표 계보 시스템 테이블은 Unity Catalog 테이블 또는 경로에서 각 읽기 또는 쓰기 이벤트에 대한 레코드를 포함합니다. 여기에는 읽기 또는 쓰기 이벤트로 업데이트된 작업 실행, Notebook 실행 및 대시보드가 포함되나 이에 국한되지 않습니다.

테이블 경로: 이 시스템 테이블은 .에 있습니다 system.access.table_lineage.

열 계보 테이블

열 계보 테이블에는 소스가 없는 이벤트가 포함되지 않습니다. 예를 들어 명시적 값을 사용하여 열에 삽입하는 경우 캡처되지 않습니다. 열을 읽는 경우 출력을 작성할지 여부에 관계없이 캡처됩니다. Delta Live Tables에는 열 계보가 지원되지 않습니다.

테이블 경로: 이 시스템 테이블은 .에 있습니다 system.access.column_lineage.

계보 시스템 테이블 스키마

계보 시스템 테이블은 다음 스키마를 사용합니다. 테이블 계보 스키마에는 source_column_nametarget_column_name가 포함되지 않습니다.

열 이름 데이터 형식 설명 예시
account_id string Azure Databricks 계정의 ID입니다. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id string Unity 카탈로그 메타스토어의 ID입니다. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id string 작업 영역의 ID 123456789012345
entity_type string 계보 트랜잭션이 캡처된 엔터티의 형식입니다. 값은 NOTEBOOK, JOB, PIPELINE, DASHBOARD_V3 (대시보드), DBSQL_DASHBOARD (레거시 대시보드), DBSQL_QUERY 또는 NULL입니다. NOTEBOOK
entity_id string 계보 트랜잭션이 캡처된 엔터티의 ID입니다. entity_typeNULL면, entity_idNULL입니다. - ‬전자 필기장: 23098402394234
- 작업: 23098402394234
- Databricks SQL 쿼리: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- 대시보드: 01ef070d110715f2b6d3061b8bda89ea
- 레거시 대시보드: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- 파이프라인: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string 엔터티의 고유한 실행을 설명하는 ID 또는 NULL 입니다. 각 엔터티 형식에 따라 다릅니다.

- ‬전자 필기장: command_run_id
- 작업: job_run_id
- Databricks SQL 쿼리: query_run_id
- 대시보드: query_run_id
- 레거시 대시보드: query_run_id
- 파이프라인: pipeline_update_id

entity_typeNULL면, entity_run_idNULL입니다.
- ‬전자 필기장: e3cr5a10-de6f-6206-fdfa-4f5505d68d55
- 작업: 51090402394234
- Databricks SQL 쿼리: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- 대시보드: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
- 레거시 대시보드: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
- 파이프라인: c5am1e0r-on2f-4206-adfa-4f6605d68d88
source_table_full_name string 원본 테이블을 식별하는 세 부분으로 구성된 이름입니다. catalog.schema.table
source_table_catalog string 원본 테이블의 카탈로그입니다. catalog
source_table_schema string 원본 테이블의 스키마입니다. schema
source_table_name string 원본 테이블의 이름입니다. table
source_path string 원본 테이블의 클라우드 스토리지 위치 또는 클라우드 스토리지에서 직접 읽는 경로입니다. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type string 원본의 형식입니다. 값은 TABLE, PATH, VIEW 또는 STREAMING_TABLE입니다. TABLE
source_column_name string 소스 열의 이름입니다. date
target_table_full_name string 대상 테이블을 식별하는 세 부분으로 구성된 이름입니다. catalog.schema.table
target_table_catalog string 대상 테이블의 카탈로그입니다. catalog
target_table_schema string 대상 테이블의 스키마입니다. schema
target_table_name string 대상 테이블의 이름입니다. table
target_path string 대상 테이블의 클라우드 스토리지 위치입니다. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type string 대상의 유형입니다. 값은 TABLE, PATH, VIEW 또는 STREAMING TABLE입니다. TABLE
target_column_name string 대상 열의 이름입니다. date
created_by string 이 계보를 생성한 사용자입니다. Azure Databricks 사용자 이름, Azure Databricks 서비스 주체 ID, "System-User" 또는 사용자 정보를 캡처할 수 없는 경우 NULL 일 수 있습니다. crampton.rods@email.com
event_time timestamp 계보가 생성된 시간의 타임스탬프입니다. 표준 시간대 정보는 UTC를 나타내는 +00:00와 함께 값의 끝에 기록됩니다. 2023-06-20T19:47:21.194+00:00
event_date date 계보가 생성된 날짜입니다. 분할된 열입니다. 2023-06-20

계보 시스템 테이블 읽기

계보 시스템 테이블을 분석할 때 다음 사항을 고려해야 합니다.

  • entity_type의 경우 Azure Databricks는 Delta Live Tables, Notebook, 작업, Databricks SQL 쿼리 및 대시보드를 지원합니다. 다른 엔터티의 이벤트는 지원되지 않습니다.
  • entity_typenull로 표시되는 경우는 Azure Databricks 엔터티가 이벤트에 관여하지 않음을 의미합니다. 예를 들어 JDBC 쿼리 또는 사용자가 Azure Databricks UI의 샘플 데이터 탭을 클릭한 결과일 수 있습니다.
  • 이벤트가 읽기인지 쓰기인지 확인하기 위해 소스 유형과 대상 유형을 볼 수 있습니다.
    • 읽기 전용: 소스 유형이 null이 아니지만 대상 유형은 null입니다.
    • 쓰기 전용: 대상 유형은 null이 아니지만 소스 유형은 null입니다.
    • 읽기 및 쓰기: 소스 유형 및 대상 유형이 null이 아닙니다.

계보 시스템 테이블 예제

계보가 시스템 테이블에 어떻게 기록되는지에 대한 예제로, 다음은 쿼리 예제와 그 쿼리가 생성하는 계보 레코드입니다.

CREATE OR REPLACE TABLE car_features
AS SELECT *,  in1+in2 as premium_feature_set
FROM car_features_exterior
JOIN car_features_interior
USING(id, model);

레코드 system.access.table_lineage은 다음과 같습니다.

entity_type entity_id source_table_name target_table_name created_by event_time
NOTEBOOK 27080565267 car_features_exterior car_features crampton@email.com 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features crampton@email.com 2023-01-25T16:19:58.908+0000

레코드 system.access.column_lineage은 다음과 같습니다.

entity_type entity_id source_table_name target_table_name source_column_name target_column_name event_time
NOTEBOOK 27080565267 car_features_interior car_features in1 premium_feature_set 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features in2 premium_feature_set 2023-01-25T16:19:58.908+0000

참고 항목

위의 예제에서는 모든 계보 열이 표시되지 않습니다. 전체 스키마는 위의 계보 스키마를 참조하세요.

외부 테이블 쿼리 문제 해결

클라우드 스토리지 경로를 사용하여 외부 테이블을 참조하는 경우 연결된 계보 레코드에는 테이블 이름이 아닌 경로 이름만 포함됩니다. 예를 들어 이 쿼리의 계보 레코드에는 테이블 이름이 아닌 경로 이름이 포함됩니다.

SELECT * FROM delta.`abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1`;

경로에서 참조하는 외부 테이블에 대한 계보 레코드를 쿼리하려는 경우 source_table_full_name 또는 target_table_full_name 대신 source_path 또는 target_path를 사용하여 쿼리를 필터링해야 합니다. 예를 들어 다음 쿼리는 외부 테이블에 대한 모든 계보 레코드를 가져옵니다.

SELECT *
FROM system.access.table_lineage
WHERE
  source_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1" OR
  target_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1";

예: 외부 테이블 이름을 기반으로 계보 레코드 검색하기

계보를 찾기 위해 클라우드 스토리지 경로를 수동으로 검색하지 않으려면 다음 함수를 사용해 테이블 이름으로 계보 데이터를 가져올 수 있습니다. 열 계보를 쿼리하려는 경우 함수에서 system.access.table_lineagesystem.access.column_lineage로 바꿀 수도 있습니다.

def getLineageForTable(table_name):
  table_path = spark.sql(f"describe detail {table_name}").select("location").head()[0]

  df = spark.read.table("system.access.table_lineage")
  return df.where(
    (df.source_table_full_name == table_name)
    | (df.target_table_full_name == table_name)
    | (df.source_path == table_path)
    | (df.target_path == table_path)
  )

그 후에 다음 명령을 사용하여 함수를 호출하고 외부 테이블에 대한 계보 레코드를 표시합니다.

display(getLineageForTable("table_name"))