데이터 품질 문제 해결¶
데이터 품질 메트릭(DMFs)을 사용하면 테이블에 품질 문제가 있을 수 있는 레코드 수를 파악할 수 있습니다. 예를 들어, SNOWFLAKE.CORE.NULL_COUNT는 특정 열에 NULL 값이 포함된 레코드가 몇 개 있는지 파악할 수 있습니다.
이러한 품질 문제를 해결하기 위해 SYSTEM$DATA_METRIC_SCAN 시스템 함수를 호출하여 DMF가 데이터 품질 검사에 실패한 데이터를 포함하는 것으로 식별한 개별 레코드를 반환할 수 있습니다. 예를 들어, SYSTEM$DATA_METRIC_SCAN 함수에 NULL_COUNT DMF를 인자로 전달하면 NULL 값을 포함하는 레코드 수뿐만 아니라 NULL 값을 포함하는 실제 레코드 수를 얻을 수 있습니다.
지원되는 DMFs¶
SYSTEM$DATA_METRIC_SCAN 함수는 DMF를 인자로 받아 DMF가 문제가 있는 데이터를 포함하는 것으로 식별한 레코드를 반환합니다. 다음 시스템 DMFs를 인자로 사용할 수 있습니다.
SNOWFLAKE.CORE.NULL_COUNT
SNOWFLAKE.CORE.NULL_PERCENT
SNOWFLAKE.CORE.BLANK_COUNT
SNOWFLAKE.CORE.BLANK_PERCENT
SNOWFLAKE.CORE.DUPLICATE_COUNT
제한 사항 및 고려 사항¶
사용자 지정 DMFs는 SYSTEM$DATA_METRIC_SCAN 함수의 인자로 사용할 수 없습니다.
테이블이 마스킹 정책이나 행 액세스 정책과 같은 정책으로 보호되는 경우 함수를 실행할 때 사용자의 역할에 따라 결과가 달라지므로 SYSTEM$DATA_METRIC_SCAN 함수는 예기치 않거나 불완전한 데이터를 반환할 수 있습니다.
SYSTEM$DATA_METRIC_SCAN 함수 호출하기¶
SYSTEM$DATA_METRIC_SCAN 함수를 호출하면 이 함수는 DMF가 포함된 테이블을 분석하여 가능한 데이터 품질 문제를 식별합니다. SYSTEM$DATA_METRIC_SCAN 함수에 테이블 이름, DMF, DMF에 전달되는 모든 인자를 전달하여 문제가 있는 레코드를 식별할 수 있도록 해야 합니다. 예를 들어, SNOWFLAKE.CORE.NULL_COUNT 시스템 메트릭 함수가 특정 열에 있는 NULL 값의 총 개수를 반환한다고 가정하면 다음은 과거 특정 시점에 존재했던 테이블 버전에서 SSN
열에 NULL 값이 있는 employeesTable
테이블의 행을 반환합니다.
SELECT *
FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => '<governance.sch.employeesTable>'
,METRIC_NAME => '<snowflake.core.null_count>'
,ARGUMENT_NAME => '<SSN>'
,AT_TIMESTAMP => '<2024-08-28 02:00:00 -0700>'
));
테이블 또는 뷰에서 과거 DMF 평가 결과를 확인하려면 AT_TIMESTAMP 인자를 전달하면 됩니다. AT_TIMESTAMP 인자를 사용하면 타임스탬프 문자열을 형변환하여 ‘2024-08-28 02:00:00 -0700’ 타임스탬프에 테이블에 존재했던 레코드만 반환하도록 Time Travel 을 사용할 수 있습니다.
SYSTEM$DATA_METRIC_SCAN을 사용하여 데이터 수정하기¶
SYSTEM$DATA_METRIC_SCAN 함수는 행 세트를 반환하는 테이블 함수 입니다. 이 함수의 출력은 DML 문 내에서 데이터 품질 검사에 실패한 데이터가 포함된 것으로 확인된 레코드에 대한 작업을 수행하기 위해 사용할 수 있습니다.
t
테이블의 email
열에 있는 빈 값을 NULL 값으로 바꾸고 싶다고 가정해 보겠습니다. BLANK_COUNT 데이터 메트릭 함수는 빈 값을 식별하므로 다음 문을 실행할 수 있습니다.
UPDATE T
SET email = null
WHERE T.ID IN (SELECT ID FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => '<t>'
,METRIC_NAME => '<snowflake.core.blank_count>'
,ARGUMENT_NAME => '<email>'
)));