다른 입력 데이터셋과 비교하는 기대 조건
E.dataset_ref()는 같은 변환에 연결된 입력을 가리킵니다. 인자는 countries=Input(...)에서 등호 앞에 있는 입력 이름인 "countries"이며, compute 함수의 인자 이름과도 대응합니다. 데이터셋 RID, Compass 경로나 화면의 표시 이름을 넣는 자리가 아닙니다. 비교할 자산은 변환의 입력으로 선언되어 있어야 합니다.
외래 값의 참조 무결성
Foreign value expectation은 Experimental 기능입니다. 플랫폼 인스턴스에 제공되지 않을 수 있고 개발 중 기능이 변경될 수 있습니다. 데이터셋 간 조인을 수행하므로 검사 비용이 클 수 있습니다.
E.col("pk").is_in_foreign_col(E.dataset_ref("other_dataset").col("fk"))는 검사 대상 열의 값이 다른 입력의 지정 열에 존재하는지 확인합니다. NULL은 무시합니다. NULL까지 금지하려면 별도의 non_null() 조건을 적용합니다.
아래 예제는 거래의 country_code가 국가 입력에 있는지 검사합니다. 거래를 그대로 복사하므로 출력 행 수가 거래 입력과 같은지도 별도 Check로 확인합니다. 경로는 가상의 값입니다.
from transforms import expectations as E
from transforms.api import Check, Input, Output, transform
@transform.using(
output=Output(
"/Example Project/Outputs/validated_transactions",
checks=[
Check(
E.col("country_code").is_in_foreign_col(
E.dataset_ref("countries").col("country_code")
),
"Country code exists",
on_error="FAIL",
),
Check(
E.count().equals(E.dataset_ref("transactions").count()),
"Transaction row count preserved",
on_error="FAIL",
),
],
),
transactions=Input("/Example Project/Inputs/transactions"),
countries=Input("/Example Project/Inputs/countries"),
)
def compute(output, transactions, countries):
output.write_table(transactions.polars())
국가 입력은 compute 본문에서 직접 읽지 않더라도 expectation이 참조하므로 입력으로 선언하고 함수 인자로 받습니다. 참조 검사 자체가 출력 행을 삭제하거나 다른 값으로 바꾸지는 않습니다.
데이터셋 간 행 수 비교
E.count()는 검사 대상의 행 수이며 E.dataset_ref("입력_이름").count()는 참조 입력의 행 수입니다. 다음 다섯 연산자를 사용할 수 있습니다.
| 표현식 | 관계 |
|---|---|
E.count().equals(E.dataset_ref("transactions").count()) | 같은 행 수 |
E.count().lt(E.dataset_ref("transactions").count()) | 입력보다 적음 |
E.count().lte(E.dataset_ref("transactions").count()) | 입력 이하 |
E.count().gte(E.dataset_ref("transactions").count()) | 입력 이상 |
E.count().gt(E.dataset_ref("transactions").count()) | 입력보다 많음 |
필터나 조인을 수행하는 변환에서는 계산이 의도한 행 수 관계에 맞춰 선택합니다. 행 수가 같다는 조건은 행의 내용이나 기본 키가 같다는 조건과 구분합니다.