어설션 정보
어설션은 쿼리에 지정된 하나 이상의 규칙을 위반하는 행을 찾는 데이터 품질 테스트 쿼리입니다. 쿼리가 행을 반환하면 어설션이 실패합니다. Dataform은 SQL 워크플로를 업데이트할 때마다 어설션을 실행하고 어설션이 실패하면 알림을 제공합니다.
Dataform은 컴파일된 어설션 쿼리 결과가 포함된 뷰를 BigQuery에 자동으로 만듭니다. dataform.json 파일에서 구성된 대로 Dataform은 어설션 결과를 검사할 수 있는 어설션 스키마에서 이러한 뷰를 만듭니다.
예를 들어 기본 dataform_assertions
스키마의 경우 Dataform은 BigQuery에서 dataform_assertions.assertion_name
형식으로 뷰를 만듭니다.
모든 Dataform 테이블 유형(테이블, 증분 테이블, 뷰, 구체화된 뷰)에 대한 어설션을 만들 수 있습니다.
다음과 같은 방법으로 어설션을 만들 수 있습니다.
-
테이블의
config
블록에 기본 제공 어설션을 추가하고 조건을 지정할 수 있습니다. -
고급 사용 사례 또는 Dataform에서 생성되지 않은 데이터 세트의 경우 별도의 SQLX 파일에 커스텀 어설션을 수동으로 작성합니다.
시작하기 전에
필요한 역할
어설션을 만드는 데 필요한 권한을 얻으려면 관리자에게 작업공간의 Dataform 편집자(roles/dataform.editor
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
기본 제공 어설션 만들기
기본 제공 Dataform 어설션을 테이블의 config
블록에 추가할 수 있습니다. Dataform은 테이블 생성 후 이러한 어설션을 실행합니다. Dataform이 테이블을 게시한 후 어설션을 검사할 수 있습니다.
테이블의 config
블록에서 다음 어설션을 만들 수 있습니다.
nonNull
이 조건은 지정된 열이 모든 테이블 행에서 null이 아니라는 어설션을 만듭니다. 이 조건은 null이 될 수 없는 열에 사용됩니다.
다음 코드 샘플은 테이블의
config
블록에 있는nonNull
어설션을 보여줍니다.
config {
type: "table",
assertions: {
nonNull: ["user_id", "customer_id", "email"]
}
}
SELECT ...
rowConditions
이 조건은 모든 테이블 행이 정의한 커스텀 로직을 따른다는 어설션을 만듭니다. 각 행 조건은 커스텀 SQL 표현식이며 각 테이블 행은 각 행 조건에 대해 평가됩니다. 테이블 행이 행 조건을 위반하는 경우 어설션이 실패합니다.
다음 코드 샘플은 증분 테이블의
config
블록에 있는 커스텀rowConditions
어설션을 보여줍니다.
config {
type: "incremental",
assertions: {
rowConditions: [
'signup_date is null or signup_date > "2022-08-01"',
'email like "%@%.%"'
]
}
}
SELECT ...
uniqueKey
이 조건은 지정된 열에서 동일한 값을 가진 테이블 행이 없다는 어설션을 만듭니다.
다음 코드 샘플은 뷰의
config
블록에 있는uniqueKey
어설션을 보여줍니다.
config {
type: "view",
assertions: {
uniqueKey: ["user_id"]
}
}
SELECT ...
uniqueKeys
이 조건은 지정된 열에서 동일한 값을 가진 테이블 행이 없다는 어설션을 만듭니다. 지정된 모든 열에 대해 동일한 값을 가진 테이블에 행이 두 개 이상 있으면 어설션이 실패합니다.
다음 코드 샘플은 테이블의
config
블록에 있는uniqueKeys
어설션을 보여줍니다.
config {
type: "table",
assertions: {
uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
}
}
SELECT ...
config
블록에 어설션 추가
테이블의 구성 블록에 어설션을 추가하려면 다음 단계를 따르세요.
- 개발 작업공간의 파일 창에서 테이블 정의 SQLX 파일을 선택합니다.
- 테이블 파일의
config
블록에assertions: {}
를 입력합니다. assertions: {}
내에서 어설션을 추가합니다.
다음 코드 샘플은 config
블록에 추가된 조건을 보여줍니다.
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
rowConditions: [
'signup_date is null or signup_date > "2019-01-01"',
'email like "%@%.%"'
]
}
}
SELECT ...
SQLX로 수동 어설션 만들기
수동 어설션은 전용 SQLX 파일에서 작성하는 SQL 쿼리입니다. 수동 어설션 SQL 쿼리는 0개의 행을 반환해야 합니다. 쿼리가 실행될 때 행을 반환하면 어설션이 실패합니다.
새 SQLX 파일에 수동 어설션을 추가하려면 다음 단계를 따르세요.
- 파일 창에서
definitions/
옆에 있는더보기 메뉴를 클릭합니다.
- 파일 만들기를 클릭합니다.
파일 경로 추가 필드에 파일 이름 다음에
.sqlx
를 입력합니다. 예를 들면definitions/custom_assertion.sqlx
입니다.파일 이름에는 숫자, 문자, 하이픈, 밑줄만 포함할 수 있습니다.
파일 만들기를 클릭합니다.
파일 창에서 새 파일을 클릭합니다.
파일에 다음을 입력합니다.
config { type: "assertion" }
config
블록 아래에 SQL 쿼리 또는 여러 쿼리를 작성합니다.
다음 코드 샘플은 a
, b
, c
필드가 sometable
에서 NULL
이 아님을 어설션하는 SQLX 파일의 수동 어설션을 보여줍니다.
config { type: "assertion" }
SELECT
*
FROM
${ref("sometable")}
WHERE
a IS NULL
OR b IS NULL
OR c IS NULL
어설션을 종속 항목으로 추가
테이블 B
가 어설션이 있는 테이블 A
에 종속되면 테이블 A
어설션의 실패가 Dataform에서 테이블 B
를 만드는 것을 차단하지 않습니다. 테이블 A
어설션이 전달된 경우에만 테이블 B
를 실행하려면 테이블 B
의 config
블록에서 이러한 어설션을 dependencies: [ "" ]
에 종속 항목으로 추가합니다.
다음 코드 샘플은 A
테이블에 추가된 어설션을 보여줍니다.
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
}
}
다음 코드 샘플은 B
테이블에 종속 항목으로 추가된 테이블 A
어설션을 보여줍니다.
config {
type: "table",
dependencies: [ "A_uniqueKey", "A_nonNull"]
}
특정 수동 어설션이 전달될 때만 테이블을 실행하려면 수동 어설션 SQLX 파일을 config
블록의 dependencies: [ "" ]
에 추가하면 됩니다.
다음 코드 샘플은 뷰에 종속 항목으로 추가된 수동 어설션을 보여줍니다.
config {
type: "view",
dependencies: [ "manual_assertion"]
}
어설션 파일 또는 config
블록의 어설션이 있는 테이블을 테이블 종속 항목으로 추가하려면 다음 단계를 따르세요.
- 개발 작업공간의 파일 창에서
definitions/
를 펼칩니다. - 테이블 SQLX 파일을 선택합니다.
- 테이블 파일의
config
블록에dependencies: [ "" ]
를 입력합니다. dependencies: [ "" ]
내에서 테이블 종속 항목으로 설정하려는 테이블 어설션 이름 또는 수동 어설션의 파일 이름을 입력합니다. 어설션 이름은 METADATA 패널에서 찾을 수 있습니다.- 다른 어설션을 수정된 테이블에 종속 항목으로 추가하려면 4단계를 반복합니다.
다음 코드 샘플에서는 manual_assertion assertion
파일과 테이블에 종속 항목으로 추가된 sometable
테이블의 어설션을 보여줍니다.
config {
type: "table",
dependencies: [ "manual_assertion", "sometable_nonNull" , "sometable_rowConditions"]
}
SELECT * FROM ${ref("referenced_table")} LEFT JOIN ...
다음 단계
- 어설션 유형에 대한 자세한 내용은 Dataform API를 참조하세요.
- 자바스크립트로 어설션을 정의하는 방법을 알아보려면 자바스크립트로 SQL 워크플로 만들기를 참조하세요.
- 워크플로를 수동으로 실행하는 방법은 실행 트리거를 참조하세요.