리니지 활용 시나리오
시나리오 1: 스키마 변경 영향도 분석
silver_orders 테이블의 amount 컬럼을 total_amount로 이름을 변경하려 합니다.
시나리오 2: 데이터 품질 이슈 역추적
gold_daily_revenue 테이블에서 특정 날짜의 매출이 비정상적으로 낮습니다.
테이블 리니지 vs 컬럼 리니지 내부 동작
리니지 수집 메커니즘
Unity Catalog의 리니지는 쿼리 실행 시 자동으로 수집됩니다. 별도의 설정이나 에이전트 설치가 필요하지 않습니다.| 단계 | 설명 |
|---|---|
| 1. 쿼리 파싱 | SQL/Spark 쿼리를 파싱하여 AST(Abstract Syntax Tree)를 생성합니다 |
| 2. 논리 계획 분석 | Catalyst Optimizer의 논리 계획에서 소스/타겟 테이블과 컬럼을 추출합니다 |
| 3. 변환 추적 | 각 컬럼이 어떤 소스 컬럼에서 파생되었는지 (SELECT, JOIN, CASE WHEN 등) 추적합니다 |
| 4. 메타데이터 저장 | 추출된 리니지 정보를 UC 메타스토어의 리니지 테이블에 저장합니다 |
| 5. 주기적 집계 | 시스템 테이블(system.lineage.*)에 집계하여 조회 가능하게 합니다 |
테이블 리니지 상세
컬럼 리니지 상세
컬럼 리니지는 테이블 리니지보다 더 세밀합니다. SQL의 표현식을 분석 하여 컬럼 간 관계를 추적합니다.| SQL 패턴 | 리니지 추적 여부 | 설명 |
|---|---|---|
SELECT a FROM t | ✅ 직접 매핑 | t.a → result.a |
SELECT a + b AS total FROM t | ✅ 복합 매핑 | t.a, t.b → result.total |
SELECT CASE WHEN ... END AS status | ✅ 조건부 매핑 | 관련 컬럼 모두 추적 |
SELECT * FROM t1 JOIN t2 ON ... | ✅ JOIN 추적 | 양쪽 테이블의 컬럼 모두 추적 |
SELECT a FROM t WHERE b > 10 | ⚠️ 부분 추적 | a의 리니지는 추적, WHERE의 b는 필터로 기록 |
| UDF(User Defined Function) | ❌ 제한적 | UDF 내부의 컬럼 변환은 추적하기 어려움 |
| Dynamic SQL (문자열 조합) | ❌ 불가 | 런타임에 생성되는 SQL은 파싱 불가 |