데이터 상태 검사 구성과 보고서 자료형
상태 검사(Check)는 대상과 검사 조건을 정의합니다. 보고서(CheckReport)는 검사를 실행한 결과와 그 시점의 검사 구성을 저장합니다. 이후 검사를 수정해도 기존 보고서 안의 구성 스냅샷은 바뀌지 않습니다.
아래 config는 생성 요청과 조회 응답의 전체 구성입니다. 검사 교체는 대상과 열 선택을 다시 받지 않는 별도 구성 형식을 사용합니다.
CheckReport
| 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
rid | string | 필수 | 상태 검사 보고서 RID |
check | Check object | 필수 | 보고서 생성 시점의 검사 구성 스냅샷 |
result | CheckResult object | 필수 | 검사 결과 |
createdTime | string, ISO 8601 | 필수 | 보고서 생성 시각 |
보고서 RID 형식의 예는 ri.data-health.main.check-report.a1b2c3d4-e5f6-7890-abcd-ef1234567890입니다.
Check
| 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
rid | string | 필수 | 검사 RID. 예: ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3 |
groups | list<CheckGroupRid> | 선택 | 검사 그룹 RID 목록 |
config | tagged union | 필수 | 아래 검사 유형 중 하나의 구성 |
intent | string | 선택 | 검사를 설정한 이유 |
createdBy | string | 선택 | 검사를 만든 사용자 식별자 |
updatedTime | string, ISO 8601 | 선택 | 마지막 갱신 시각 |
그룹 RID 예시는 ri.data-health.main.check-group.08e376a8-607d-4f44-b8dd-b4587be6ce9b입니다. intent에는 Check to ensure builds are passing. 같은 설명을 넣을 수 있습니다.
CheckResult
| 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
status | enum | 필수 | 실행 결과 상태 |
message | string | 선택 | 결과의 추가 설명 |
status는 PASSED, FAILED, WARNING, ERROR, NOT_APPLICABLE, NOT_COMPUTABLE 중 하나입니다.
{"status": "PASSED"}
config의 검사 유형
config.type으로 유형을 선택합니다. 각 유형은 아래 필드를 같은 객체에 넣습니다. 표의 필드는 별도 표시가 없으면 필수입니다.
| type | 검사 대상 | 유형별 필드 |
|---|---|---|
numericColumnRange | 수치 열의 값 범위 | 데이터셋 subject, columnName, numericBoundsConfig |
jobStatus | 데이터셋의 최근 작업 상태 | 데이터셋 subject, statusCheckConfig |
numericColumnMean | 수치 열 평균 | 데이터셋 subject, numericColumnCheckConfig |
dateColumnRange | 날짜 열 값의 범위 | 데이터셋 subject, columnName, dateBoundsConfig |
jobDuration | 작업 완료 소요 시간 | 데이터셋 subject, timeCheckConfig |
approximateUniquePercentage | 열의 대략적인 고유 값 비율 | 데이터셋 subject, percentageCheckConfig |
buildStatus | 데이터셋의 최근 빌드 상태 | 데이터셋 subject, statusCheckConfig |
columnType | 열 존재 및 선택적인 자료형 확인 | 데이터셋 subject, columnTypeConfig |
allowedColumnValues | 열 값이 허용 집합에 속하는지 확인 | 데이터셋 subject, columnName, severity; 선택적인 allowedValues, allowNull |
timeSinceLastUpdated | 마지막 데이터 갱신 이후 시간 | 데이터셋 subject, 트랜잭션 시간용 timeCheckConfig |
scheduleStatus | 최근 일정 실행 상태 | 일정 subject, statusCheckConfig |
nullPercentage | 열의 null 비율 | 데이터셋 subject, percentageCheckConfig |
scheduleDuration | 일정 완료 소요 시간 | 일정 subject, timeCheckConfig |
totalColumnCount | 전체 열 수 | 데이터셋 subject, columnCountConfig |
numericColumnMedian | 수치 열 중앙값 | 데이터셋 subject, numericColumnCheckConfig |
buildDuration | 빌드 완료 소요 시간 | 데이터셋 subject, timeCheckConfig |
schemaComparison | 기대 스키마와 비교 | 데이터셋 subject, schemaComparisonConfig |
primaryKey | 하나 이상 열의 고유성과 null이 아님을 확인 | 데이터셋 subject, primaryKeyConfig |
columnName은 문자열입니다. 예시 값은 amount, user_id, status 등이며 실제 열 이름을 사용합니다.
검사 대상 subject
데이터셋 대상에는 다음 두 필드가 모두 필요합니다.
| 필드 | 자료형 | 의미 |
|---|---|---|
datasetRid | string | 데이터셋 RID |
branchId | string | 브랜치 이름. 예: master |
V2 조회 요청의 branchName과 달리 이 중첩 대상의 필드는 branchId입니다.
{
"datasetRid": "ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da",
"branchId": "master"
}
일정 대상은 필수 문자열 scheduleRid를 사용합니다.
{"scheduleRid": "ri.scheduler.main.schedule.8843955e-37d1-4363-85eb-539833e10a41"}
심각도와 상태 검사
각 구성의 severity는 필수이며 MODERATE 또는 CRITICAL입니다. statusCheckConfig에는 필수 severity와 선택적인 escalationConfig가 있습니다.
| escalationConfig 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
failuresToCritical | integer | 필수 | CRITICAL로 올리는 실패 횟수 |
timeIntervalInSeconds | string, long | 선택 | 실패 횟수를 평가할 초 단위 시간 구간 |
다음은 30초 구간과 실패 횟수 1을 사용하는 가상 설정입니다. 예시 값은 기본값을 의미하지 않습니다.
{
"severity": "MODERATE",
"escalationConfig": {"failuresToCritical": 1, "timeIntervalInSeconds": "30"}
}
범위 구성
각 범위 구성 객체에는 범위와 severity가 필수입니다. 범위 안의 하한 및 상한은 각각 선택 항목입니다.
| 구성 객체 | 범위 필드 | 하한 | 상한 | 값 형식 |
|---|---|---|---|---|
numericBoundsConfig | numericBounds | lowerBound | upperBound | number, double |
dateBoundsConfig | dateBounds | lowerBound | upperBound | ISO 8601 시각 문자열 |
timeBounds 구성 | timeBounds | lowerBoundInSeconds | upperBoundInSeconds | long을 나타내는 문자열, 초 단위 |
percentageBounds 구성 | percentageBounds | lowerBoundPercentage | upperBoundPercentage | number, double, 0.0 이상 100.0 이하 |
수치 범위 예시:
{"numericBounds": {"lowerBound": 0.0, "upperBound": 1000.0}, "severity": "MODERATE"}
날짜 범위 예시:
{
"dateBounds": {"lowerBound": "2024-01-01T00:00:00Z", "upperBound": "2024-12-31T23:59:59Z"},
"severity": "MODERATE"
}
시간 범위와 백분율 범위 예시:
{
"timeBounds": {"lowerBoundInSeconds": "3600", "upperBoundInSeconds": "3600"},
"severity": "MODERATE"
}
{
"percentageBounds": {"lowerBoundPercentage": 50.0, "upperBoundPercentage": 50.0},
"severity": "MODERATE"
}
수치 열 평균과 중앙값
numericColumnCheckConfig는 다음 필드를 사용합니다.
| 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
columnName | string | 필수 | 대상 열 |
numericBounds | 심각도를 포함한 수치 범위 구성 | 선택 | 절대 값의 범위 |
trend | 추세 구성 | 선택 | 시간에 따른 변화 |
numericBounds와 trend 중 적어도 하나가 필요합니다. 둘 다 지정하면 절대 범위와 추세를 함께 검사합니다.
추세 구성
trend에는 필수 severity와 선택적인 trendType, differenceBounds가 있습니다. trendType과 differenceBounds 중 적어도 하나를 지정하며 둘 다 사용할 수도 있습니다. differenceBounds는 선택적인 double lowerBound, upperBound로 변화량 범위를 표현합니다.
| trendType | 조건 |
|---|---|
NON_INCREASING | 시간이 지나도 증가하지 않음 |
NON_DECREASING | 시간이 지나도 감소하지 않음 |
STRICTLY_INCREASING | 엄격히 증가 |
STRICTLY_DECREASING | 엄격히 감소 |
CONSTANT | 일정한 값 유지 |
{
"columnName": "amount",
"numericBounds": {
"numericBounds": {"lowerBound": 0.0, "upperBound": 1000.0},
"severity": "MODERATE"
},
"trend": {
"trendType": "NON_DECREASING",
"differenceBounds": {"lowerBound": 0.0, "upperBound": 1000.0},
"severity": "MODERATE"
}
}
중앙값 편차
medianDeviation 구성에는 필수 severity와 필수 내부 medianDeviation 객체가 있습니다.
| 내부 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
boundsType | enum | 선택 | 중앙값보다 낮은 편차, 높은 편차 또는 양쪽을 평가 |
dataPoints | integer | 필수 | 계산에 사용할 데이터 지점 수 |
deviationThreshold | number, double | 필수 | 편차 임계값 |
boundsType의 값은 LOWER_BOUND, UPPER_BOUND, TWO_TAILED입니다. 각각 중앙값 아래, 위, 양쪽의 유의한 편차를 평가합니다.
{
"medianDeviation": {"boundsType": "TWO_TAILED", "dataPoints": 10, "deviationThreshold": 2.0},
"severity": "MODERATE"
}
시간 및 백분율 검사
timeCheckConfig에는 선택적인 timeBounds 구성과 medianDeviation 구성이 있습니다. 작업, 빌드와 일정의 소요 시간 검사에 사용합니다. 검사를 생성하거나 교체할 때는 둘 중 적어도 하나를 지정해야 합니다.
timeSinceLastUpdated의 트랜잭션 시간 구성에는 이 두 필드 외에 선택적인 ignoreEmptyTransactions가 있습니다. 기본값은 true이며 실제 데이터 변경이 있는 트랜잭션만 마지막 갱신 시각 계산에 사용합니다. 이 구성도 생성하거나 교체할 때 timeBounds 또는 medianDeviation 중 하나 이상이 필요합니다.
percentageCheckConfig에는 필수 문자열 columnName, 선택적인 percentageBounds 구성, 선택적인 medianDeviation 구성이 있습니다. null 비율과 대략적인 고유 값 비율 검사에 사용합니다. 검사를 생성하거나 교체할 때는 두 검사 조건 중 적어도 하나를 지정해야 합니다. 교체 요청은 기존 대상 열을 유지하므로 columnName 필드를 받지 않습니다.
{
"columnName": "user_id",
"percentageBounds": {
"percentageBounds": {"lowerBoundPercentage": 50.0, "upperBoundPercentage": 50.0},
"severity": "MODERATE"
},
"medianDeviation": {
"medianDeviation": {"boundsType": "TWO_TAILED", "dataPoints": 10, "deviationThreshold": 2.0},
"severity": "MODERATE"
}
}
열 유형, 값과 개수
columnTypeConfig
필수 columnName, 필수 severity, 선택적인 expectedType을 지정합니다. expectedType을 생략하면 열의 존재를 확인하고, 지정하면 유형도 확인합니다.
열 유형 값은 ARRAY, BINARY, BOOLEAN, BYTE, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, LONG, MAP, SHORT, STRING, STRUCT, TIMESTAMP입니다.
{"columnName": "user_id", "expectedType": "STRING", "severity": "MODERATE"}
allowedColumnValues
필수 데이터셋 subject, 필수 columnName, 필수 severity, 선택적인 allowNull 불리언과 allowedValues 배열을 사용합니다. 배열 원소는 type과 필수 value를 가진 다음 네 유형 중 하나입니다.
| type | value 자료형 | 예시 |
|---|---|---|
date | ISO 8601 시각 문자열 | "2024-01-01T00:00:00Z" |
boolean | boolean | true |
string | string | "approved" |
numeric | number, double | 42.0 |
예를 들어 문자열 값은 {"type":"string","value":"approved"}로 표현합니다.
columnCountConfig
필수 expectedValue는 long을 나타내는 문자열이고 severity도 필수입니다.
{"expectedValue": "10", "severity": "MODERATE"}
스키마 비교
schemaComparisonConfig에는 expectedSchema, schemaComparisonType, severity가 모두 필요합니다. expectedSchema.columns는 선택적인 열 정보 목록입니다. 각 열 정보에는 필수 문자열 name과 선택적인 columnType이 있으며, 열 유형은 위의 15개 값 중 하나입니다.
| schemaComparisonType | 판정 |
|---|---|
EXACT_MATCH_ORDERED_COLUMNS | 열과 열 순서가 모두 같아야 함 |
EXACT_MATCH_UNORDERED_COLUMNS | 열은 같아야 하지만 순서는 무관 |
COLUMN_ADDITIONS_ALLOWED | 기대한 열이 있어야 하고 추가 열을 허용하며, 빠진 열 유형은 무시 |
COLUMN_ADDITIONS_ALLOWED_STRICT | 기대한 열이 있어야 하고 추가 열을 허용. 기대 열과 실제 열 모두 유형이 있어야 하며 정확히 같아야 함 |
{
"expectedSchema": {"columns": [{"name": "column", "columnType": "ARRAY"}]},
"schemaComparisonType": "EXACT_MATCH_ORDERED_COLUMNS",
"severity": "MODERATE"
}
기본 키 검사
primaryKeyConfig에는 선택적인 문자열 목록 columnNames와 필수 severity가 있습니다. 지정한 열들의 고유성과 null이 아닌 값을 검사합니다.
{"columnNames": ["user_id", "account_id"], "severity": "MODERATE"}
이 검사는 데이터셋 View에 기본 키와 중복 해결 계약을 추가하는 작업과 다릅니다. 여기서는 데이터 상태를 평가하고 결과를 보고서로 남깁니다.