스키마의 데이터 품질 모니터링하기
스키마의 데이터 품질 모니터링하기
데이터 메트릭 함수(DMF, Data Metric Function)를 테이블이나 뷰에 연결하면 정기적으로 실행되면서 데이터 품질에 대한 통찰을 주는 값을 반환해요. 이제 단일 SQL 문으로 스키마를 구성해서, 스키마 안의 모든 객체를 같은 DMF에 연결할 수 있어요.
본문
스키마 수준에서 연결할 수 있는 시스템 DMF는 다음 두 가지예요.
- ROW_COUNT — 스키마 안 객체의 데이터 용량(volume) 정보를 반환해요.
- FRESHNESS — 스키마 안 객체가 갱신되는 빈도를 정보로 반환해요.
스키마 수준에서 이 DMF 중 하나를 연결할 때, 테이블이나 뷰의 용량·신선도에 시간에 따른 이상치(anomaly)가 있는지를 Snowflake가 판단하게 지정할 수 있어요.
다음 예시는 my_schema 스키마의 모든 객체와 ROW_COUNT DMF 사이의 연결에 대해 이상 감지(anomaly detection)를 켜는 방법을 보여줘요.
ALTER SCHEMA my_schema
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
ANOMALY_DETECTION = TRUE;
Snowflake가 이상 감지 알고리즘을 학습시킨 뒤, my_schema 스키마 안 테이블·뷰의 용량에서 이상치를 자동으로 찾기 시작해요.
스키마에 DMF 추가하기
DMF를 스키마에 연결하면 스키마 안의 모든 객체가 그 DMF에 연결돼요.
문법:
ALTER SCHEMA <name>
ADD DATA METRIC FUNCTION
{ SNOWFLAKE.CORE.ROW_COUNT | SNOWFLAKE.CORE.FRESHNESS }
ON ()
[ ANOMALY_DETECTION = { TRUE | FALSE } ]
[ EXCLUDE_TABLE_TYPES = ( '<object_type>' [ , '<object_type>' ... ] ) ]
인자:
-
{ SNOWFLAKE.CORE.ROW_COUNT | SNOWFLAKE.CORE.FRESHNESS } ON ()— 시스템 DMF를 스키마 안 객체와 연결해요. 가능한 값은SNOWFLAKE.CORE.ROW_COUNT와SNOWFLAKE.CORE.FRESHNESS예요. -
ANOMALY_DETECTION = { TRUE | FALSE }—TRUE면 Snowflake가 DMF가 반환하는 값에서 이상치를 감지하기 위한 알고리즘을 사용해요. Snowflake는 스키마 전체가 아니라 객체마다 이상치를 감지해요. 기본값:FALSE. -
EXCLUDE_TABLE_TYPES = ( 'object_type', ... )— 지정한 타입의 객체를 모두 제외하며, Snowflake는 그 객체들과 DMF 사이의 연결을 만들지 않아요. 가능한 값:'DYNAMIC_TABLE''EVENT_TABLE''EXTERNAL_TABLE''ICEBERG_TABLE''MATERIALIZED_VIEW''TABLE''VIEW'
특정 타입 전체가 아니라 개별 객체 하나만 제외하려면 객체 수준에서 DMF 연결을 재정의(override)하면 돼요.
예시:
-- 스키마의 모든 객체에 FRESHNESS DMF 연결
ALTER SCHEMA my_schema
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON ();
-- 모든 객체에 ROW_COUNT 연결 + 이상 감지 켜기
ALTER SCHEMA my_schema
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
ANOMALY_DETECTION = TRUE;
-- 뷰와 구체화된 뷰는 제외하고 테이블에만 ROW_COUNT 연결
ALTER SCHEMA my_schema
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
EXCLUDE_TABLE_TYPES = ('VIEW', 'MATERIALIZED_VIEW');
객체 수준에서 설정 재정의하기
스키마 수준에서 DMF를 추가하면 Snowflake는 스키마 안 모든 객체와 DMF 사이에 객체 수준 연결을 만들어요. DMF가 객체에서 실행되는 방식을 바꾸고 싶다면 이 연결을 객체 수준에서 재정의할 수 있어요.
my_schema에 ROW_COUNT DMF를 추가할 때 이상 감지를 켰다고 가정해 볼게요. 테이블 my_schema.employees에서는 이상치를 감지하고 싶지 않다면 다음 명령을 실행해요.
ALTER TABLE employees
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
SET ANOMALY_DETECTION = FALSE;
특정 객체에서 DMF 실행을 멈추고 싶다면 그 객체에서 연결을 제거할 수도 있어요. 예를 들어 my_schema.employees 테이블에서 ROW_COUNT DMF를 더 이상 실행하지 않으려면:
ALTER TABLE employees
DROP DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ();
특정 객체에서 DMF가 실행되는 빈도를 바꾸기 위해 스키마 수준 스케줄을 재정의할 수도 있어요. 객체 수준 스케줄 설정에 대한 정보는 DMF 스케줄 조정 문서를 참고해요.
실행 스케줄 조정하기
기본적으로 스키마의 데이터 메트릭 스케줄은 60분이라 DMF가 스키마 안 각 객체에서 매시간 실행돼요. 이 기본값을 스키마 수준에서 바꾸거나 객체 수준에서 재정의할 수 있어요.
ALTER SCHEMA <name> SET DATA_METRIC_SCHEDULE = '<schedule>';
스케줄의 가능한 값은 객체 수준과 같아요. 스키마 수준에서 설정한 스케줄은 특정 테이블·뷰에서 재정의하지 않는 한 모든 객체에서 DMF가 실행되는 빈도를 제어해요.
DMF 일시 중지하기
스키마 수준에서 연결한 DMF를 일시 중지·재개하는 문법은 테이블 수준 연결과 같아요. 예를 들어 스키마 my_schema에 연결된 ROW_COUNT DMF를 일시 중지하려면:
ALTER SCHEMA my_schema
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
SUSPEND;
스키마 수준에서 설정된 연결 확인하기
다음 뷰와 함수로 어떤 객체가 DMF에 연결됐는지 확인할 수 있어요.
ACCOUNT_USAGE스키마의DATA_QUALITY_MONITORING_RESULTS뷰DATA_QUALITY_MONITORING_RESULTS테이블 함수
뷰와 함수 출력에는 level 컬럼이 있고, 가능한 값은 다음과 같아요.
TABLE— 누군가 객체에 직접 DMF를 연결했음.SCHEMA— 누군가 스키마에 DMF를 추가해서 객체와 DMF 사이의 연결이 생겼음.
스키마 수준 연결 추적하기
DATA_METRIC_FUNCTION_REFERENCES 함수를 호출하면 어떤 DMF가 스키마에 추가됐는지 알 수 있어요. 예를 들어 db1.my_schema 스키마에 추가된 DMF를 확인하려면:
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
REF_ENTITY_NAME => 'db1.my_schema',
REF_ENTITY_DOMAIN => 'schema'
)
);
접근 제어 요건
스키마에 DMF를 추가하려면 다음 권한과 역할이 필요해요.
- 스키마에 대한
OWNERSHIP - 계정에 대한
MANAGE DATA QUALITY - 계정에 대한
EXECUTE DATA METRIC FUNCTION SNOWFLAKE.DATA_METRIC_USER데이터베이스 역할
스키마 소유자가 계정에 대한 MANAGE DATA QUALITY 권한을 계속 갖고 있지 않으면 Snowflake는 DMF를 실행하지 않아요. 스키마 안 객체에서 DMF를 성공적으로 실행하려면 객체 소유자도 DMF를 객체에 연결할 때 필요한 것과 같은 권한을 가져야 해요.
고려 사항 및 제한 사항
FRESHNESSDMF는 뷰와 외부 테이블에 컬럼 인자가 필요해요. 그래서 스키마에FRESHNESSDMF를 추가하면 Snowflake는 객체 연결 시 뷰와 외부 테이블을 건너뛰어요.- 스키마 수준에서는 트리거 기반 스케줄(trigger-based schedule)을 설정할 수 없어요.