계보 시스템 테이블 참조
Important
이 시스템 테이블은 공개 미리 보기로 제공됩니다. 테이블에 액세스하려면 system
카탈로그에서 스키마를 사용하도록 설정해야 합니다. 자세한 내용은 시스템 테이블 스키마 사용을 참조하세요.
해당 문서는 두 계보 시스템 테이블을 소개합니다. 이러한 시스템 테이블은 Unity 카탈로그의 데이터 계보 기능을 기반으로 하므로 계보 데이터를 프로그래밍 방식으로 쿼리하여 의사 결정 및 보고서에 활용할 수 있습니다.
참고 항목
두 계보 테이블은 모든 읽기/쓰기 이벤트의 하위 집합을 나타내며, 계보를 항상 캡처할 수 있는 것은 아닙니다. 계보를 유추할 수 있는 경우에만 레코드가 내보내집니다.
표 계보 테이블
표 계보 시스템 테이블은 Unity Catalog 테이블 또는 경로에서 각 읽기 또는 쓰기 이벤트에 대한 레코드를 포함합니다. 여기에는 읽기 또는 쓰기 이벤트로 업데이트된 작업 실행, Notebook 실행 및 대시보드가 포함되나 이에 국한되지 않습니다.
테이블 경로: 이 시스템 테이블은 .에 있습니다 system.access.table_lineage
.
열 계보 테이블
열 계보 테이블에는 소스가 없는 이벤트가 포함되지 않습니다. 예를 들어 명시적 값을 사용하여 열에 삽입하는 경우 캡처되지 않습니다. 열을 읽는 경우 출력을 작성할지 여부에 관계없이 캡처됩니다. Delta Live Tables에는 열 계보가 지원되지 않습니다.
테이블 경로: 이 시스템 테이블은 .에 있습니다 system.access.column_lineage
.
계보 시스템 테이블 스키마
계보 시스템 테이블은 다음 스키마를 사용합니다. 테이블 계보 스키마에는 source_column_name
및 target_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_type 이 NULL 면, entity_id 은 NULL 입니다. |
- 전자 필기장: 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_type 이 NULL 면, entity_run_id 은 NULL 입니다. |
- 전자 필기장: 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_type
이null
로 표시되는 경우는 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_lineage
를 system.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"))