Data Expectations로 빌드 조건 정의
Data Expectations는 데이터셋, 가상 테이블과 Iceberg 테이블의 변환 입력 또는 출력에 코드로 정의하는 데이터 요구 조건입니다. 빌드 도중 조건을 검사하여 실패하면 출력을 중단하거나 경고와 함께 계속할 수 있습니다. 결과는 Data Health에 보고합니다.
빌드가 끝난 뒤 상태를 관찰하는 일반 상태 검사와 달리 빌드의 일부로 실행하므로 잘못된 출력이 하위 데이터로 이어지기 전에 중단할 수 있습니다. 요구 조건을 Code Repositories에서 관리하므로 보호 브랜치의 코드 검토 절차가 변경에도 적용됩니다. 개발 브랜치에서 빌드하여 병합 전에 조건 충족 여부를 확인할 수 있습니다.
구성 요소
| 개념 | 의미 |
|---|---|
| Expectation | 데이터 구조나 내용에 대한 강한 자료형을 가진 요구 조건입니다. 예를 들어 특정 열이 null이 아니어야 한다는 조건입니다. |
| Check | 하나 또는 여러 expectation을 조합하여 변환의 입력 또는 출력 하나에 연결한 이름 있는 검사입니다. |
| Pre-condition | 입력에 붙인 검사입니다. 입력 구조와 내용에 대한 전제를 확인합니다. |
| Post-condition | 출력에 붙인 검사입니다. 출력 SLA와 하위 의존 데이터의 요구를 확인합니다. |
| Check result | 빌드 중 검사를 실행한 결과와 세부 expectation별 평가 내역입니다. |
정의와 등록
변환 코드에서 입력 또는 출력에 검사를 연결합니다. Check 이름은 한 변환 안에서 유일해야 합니다. 조건과 함께 실패 시 빌드를 중단할지 경고만 남기고 계속할지도 정의합니다.
해당 브랜치의 CI가 검사를 등록합니다. 보호 브랜치의 expectation을 변경하려면 다른 코드와 같이 pull request를 거칩니다. 기본 브랜치에 병합하기 전 개발 브랜치에서 실제 데이터셋을 빌드하여 기대 조건과 변경 내용이 맞는지 확인하는 것을 권장합니다.
빌드 실행과 중단 범위
등록한 검사는 빌드 실행 작업의 일부로 동작합니다. 조건 실패는 Builds와 데이터셋 History에 표시됩니다. 실패 처리를 FAIL로 정의했다면 실행 작업 상태가 Aborted로 바뀌고 오류가 표시됩니다. Job timeline의 Expectations 표시를 선택하면 세부 결과를 볼 수 있습니다.
Pre-condition이 실패하면 그 검사를 실행한 변환의 출력이 중단됩니다. 검사를 붙인 입력 데이터셋의 과거 빌드를 되돌리는 동작은 아닙니다. 입력 데이터셋을 만드는 빌드 자체를 막으려면 그 입력을 생성하는 변환의 출력에 post-condition을 정의해야 합니다.
결과 모니터링과 이름 변경
검사 실행마다 결과를 Data Health에 보고합니다. Dataset Preview의 Health에서 최신 결과를 보고 다른 상태 검사와 같이 알림과 이슈 트리거를 구성할 수 있습니다.
모니터링에서 검사는 이름으로 식별합니다. 이름을 유지해야 이력과 개별 모니터링 설정이 이어집니다. 이름을 변경하는 것은 이전 검사를 없애고 새 검사를 만드는 것과 같으므로 단순한 표시 이름 수정처럼 취급하면 안 됩니다.
증분 변환에서도 전체 데이터 검사
변환이 증분 실행되더라도 모든 검사는 전체 데이터셋을 대상으로 실행합니다. 새로 추가하는 트랜잭션만 검사하지 않습니다.
가상 예시로 출력에 기본 키 유일성 검사가 있고 새 증분 트랜잭션에 이전 트랜잭션에서 이미 쓴 키가 들어오면 검사가 실패합니다. 새 트랜잭션 안에서는 키가 한 번만 등장하더라도 전체 출력에서는 중복이기 때문입니다.