데이터 메트릭 함수 작업

이 항목의 각 예제를 시도하기 전에 사용 중인 역할이 필요한 액세스 제어 요구 사항 을 충족하는지 확인하십시오.

고유 DMF 만들기

데이터 품질 검사를 수행할 수 있는 시스템 데이터 품질 메트릭 함수(DMF) 가 없는 경우 CREATE DATA METRIC FUNCTION 명령을 사용하여 자체적으로 DMF 를 생성할 수 있습니다.

예제: 단일 테이블 인자를 사용한 사용자 정의 DMF

COUNT 함수를 호출하여 테이블의 처음 세 열에 양수가 있는 행의 총 개수를 반환하는 DMF 를 만듭니다.

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy
예제: 여러 테이블 인자를 사용하여 참조 검사 성능 수행하기

사용자 정의 DMF 에는 테이블을 허용하는 인자가 두 개 이상 있을 수 있습니다. DMF 를 테이블에 추가하면 해당 테이블이 첫 번째 인자로 사용됩니다. 테이블을 허용하는 추가 인자가 있는 경우 두 번째 테이블의 정규화된 이름도 지정해야 합니다. 이 기능은 서로 다른 데이터 세트에서 참조 무결성, 일치 및 비교 또는 조건부 검사를 간소화합니다.

기본 키/외래 키 관계로 정의된 참조 무결성을 검증하고 싶다고 가정해 보겠습니다. 이 경우 DMF 를 생성하여 소스 테이블의 모든 레코드가 참조된 테이블에 해당 레코드가 있는지 확인할 수 있습니다. 다음 사용자 정의 DMF 는 한 테이블의 열 값이 다른 테이블의 열에 해당하는 값이 없는 기록의 수를 반환합니다.

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.referential_check(
  arg_t1 TABLE (arg_c1 INT), arg_t2 TABLE (arg_c2 INT))
RETURNS NUMBER AS
 'SELECT COUNT(*) FROM arg_t1
  WHERE arg_c1 NOT IN (SELECT arg_c2 FROM arg_t2)';
Copy

이제 salesorders 테이블의 sp_id 로 식별되는 모든 주문이 salespeople 테이블의 sp_id 로 다시 매핑되는지 확인하려고 한다고 가정해 보겠습니다. salesorders 테이블에 salespeople 테이블을 다른 테이블 인자로 지정하면서 DMF 를 추가할 수 있습니다.

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION governance.dmfs.referential_check
    ON (sp_id, TABLE (my_db.sch1.salespeople(sp_id)));
Copy

출력은 salesorders 테이블에서 sp_id 열의 값이 salespeople 테이블의 sp_id 열에 나타나지 않는 행의 수를 반환합니다. 값이 0보다 크면 salesorderssalespeople 의 기록에 매핑되지 않는 sp_id 값이 있음을 나타냅니다.

수동으로 DMF 호출

다음 구문을 사용하여 DMF를 호출합니다.

SELECT <data_metric_function>(<query>)
Copy

여기서

data_metric_function

시스템 DMF 또는 사용자 정의 DMF를 지정합니다.

query

테이블 또는 뷰에 SQL 쿼리를 지정합니다.

쿼리의 열은 DMF 서명의 열 인자와 일치해야 합니다.

참고

이러한 시스템 DMFs는 인자를 받지 않기 때문에 이 구문을 따르지 않습니다.

DMF를 직접 호출하여 결과를 확인합니다.

SELECT governance.dmfs.count_positive_numbers(
    SELECT c1,
           c2,
           c3
    FROM t
  );
Copy

테이블이나 뷰에 DMF를 설정하고 실행하도록 예약하면 이벤트 테이블에서 생성된 뷰를 쿼리하여 결과를 확인할 수 있습니다. 자세한 내용은 DMF 결과 보기 섹션을 참조하십시오.

테이블 또는 뷰에 DMF 추가 또는 삭제

ALTER TABLE 또는 ALTER VIEW 명령을 사용하여 다음을 수행합니다.

  • ALTER TABLE 을 사용하여 테이블에 DMF를 추가합니다.

    ALTER TABLE t
      ADD DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
        ON (c1, c2, c3);
    
    Copy
  • ALTER TABLE 명령을 사용하여 테이블에서 DMF를 삭제합니다.

    ALTER TABLE t
      DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
        ON (c1, c2, c3);
    
    Copy

참고

ALTER VIEW 명령을 사용하여 구체화된 뷰 열에 DMF를 추가하거나 구체화된 뷰 열에서 DMF를 삭제합니다.

실행할 DMFs 예약

테이블에서 데이터 품질 측정을 자동화하기 위해 DMFs를 실행하도록 예약할 수 있습니다.

Snowflake는 테이블에 대한 OWNERSHIP 권한이 있는 역할인 테이블 소유자 역할을 사용하여 예약된 DMF를 호출합니다. 테이블 소유자 역할에는 다음과 같은 권한이 있어야 합니다.

  • 사용자 정의 DMF에 대한 USAGE 권한과 사용자 정의 DMF를 저장하는 데이터베이스 및 스키마에 대한 USAGE 권한.

  • DMF가 시스템 DMF인 경우 DATA_METRIC_USER 데이터베이스 역할.

  • 계정에 대한 EXECUTE DATA METRIC FUNCTION 권한.

테이블, 뷰 또는 구체화된 뷰의 DATA_METRIC_SCHEDULE 오브젝트 매개 변수를 사용하면 DMFs의 실행 시점을 예약할 수 있습니다. 테이블이나 뷰의 모든 데이터 메트릭 함수는 동일한 일정을 따릅니다.

DMF의 실행 일정을 예약하는 방법은 다음의 세 가지입니다.

  • 지정된 시간(분) 후에 실행되도록 DMF를 설정합니다.

  • 특정 빈도로 실행되도록 DMF를 예약하려면 cron 식을 사용합니다.

  • 트리거 이벤트를 사용하여 테이블에 새 행을 삽입하는 등 테이블에 DML 변경 이 있을 때 DMF가 실행되도록 예약합니다. 하지만:

예:

데이터 메트릭 함수 일정을 5분마다 실행되도록 설정합니다.

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

데이터 메트릭 함수 일정을 매일 AM 8:00에 실행되도록 설정합니다.

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
Copy

데이터 메트릭 함수 일정을 평일 AM 8:00에만 실행되도록 설정합니다.

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
Copy

데이터 메트릭 함수 일정을 매일 UTC 0600, 1200, 1800에 3회 실행되도록 설정합니다.

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
Copy

새 행 삽입과 같은 일반 DML 작업으로 테이블이 수정될 때 데이터 메트릭 함수가 실행되도록 설정합니다.

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
Copy

SHOW PARAMETERS 명령을 사용하여 지원되는 테이블 오브젝트에 대한 DMF 일정을 볼 수 있습니다.

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;
Copy
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| key                  | value                          | default | level | description                                                                                                                  | type   |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| DATA_METRIC_SCHEDULE | USING CRON 0 6,12,18 * * * UTC |         | TABLE | Specify the schedule that data metric functions associated to the table must be executed in order to be used for evaluation. | STRING |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+

뷰 및 구체화된 뷰 오브젝트의 경우 TABLE 을 오브젝트 도메인으로 지정하고 다음과 같이 일정을 확인할 수 있습니다.

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE mydb.public.my_view;
Copy

참고

테이블에서 DMF를 수정하면 테이블에 할당된 이전 DMFs에 일정 변경 사항이 적용되기까지 10분의 지연 시간이 있습니다. 단, 테이블에 새로 DMF를 할당하는 경우에는 10분 지연이 적용되지 않습니다. 예상되는 DMF 비용 에 맞춰 DMF 스케줄링 및 DMF 설정 취소 작업을 신중하게 계획해야 합니다.

또한 DATA_QUALITY_MONITORING_RESULTS 뷰를 쿼리하는 등 DMF 결과를 평가할 때는 쿼리에서 measurement_time 열을 평가의 기준으로 지정합니다. DMF 평가를 시작하는 내부 프로세스가 있으며, 예약된 시간과 측정 시간 사이에 INSERT 연산과 같은 테이블 업데이트가 발생할 수 있습니다. measurement_time 열을 사용하면 측정 시간이 DMF의 평가 시간을 나타내므로 DMF 결과를 더 정확하게 평가할 수 있습니다.

DMF 결과 보기

DMF 결과를 보려면 먼저 결과에 대한 액세스 권한을 관리한 다음 결과 보기 방법을 선택해야 합니다.

DMF 결과에 대한 액세스 관리하기

다음 섹션에서 자세히 설명하는 세 가지 옵션으로 예약된 DMF의 결과에 액세스할 수 있습니다.

DMF 결과에 대한 액세스를 관리하는 방법에 따라 다음 시스템 애플리케이션 역할을 다른 계정 수준 역할에 부여합니다.

애플리케이션 역할

참고

DATA_QUALITY_MONITORING_ADMIN

옵션 1, 2, 3을 사용할 수 있습니다.

이 애플리케이션 역할을 부여받은 역할은 다른 역할에 DATA_QUALITY_MONITORING_VIEWER 및 DATA_QUALITY_MONITORING_LOOKUP 애플리케이션 역할을 부여할 수 있습니다.

ACCOUNTADMIN 역할이 부여된 사용자는 다른 역할에 DATA_QUALITY_MONITORING_ADMIN 애플리케이션 역할을 부여할 수 있습니다.

DATA_QUALITY_MONITORING_VIEWER

옵션 2 및 3.

DATA_QUALITY_MONITORING_LOOKUP

옵션 3만.

예를 들어, GRANT APPLICATION ROLE 명령을 사용하여 DATA_QUALITY_MONITORING_VIEWER 시스템 애플리케이션 역할을 analyst 사용자 지정 역할에 부여합니다.

USE ROLE ACCOUNTADMIN;
GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE analyst;
Copy

계정 역할에서 시스템 애플리케이션 역할을 취소하려면 REVOKE APPLICATION ROLE 명령을 사용합니다.

또한 시스템 DMFs 의 결과에 대한 액세스를 관리하려면 결과에 액세스할 수 있는 계정 역할에 SNOWFLAKE.DATA_METRIC_USER 데이터베이스 역할을 부여합니다. 자세한 내용은 GRANT DATABASE ROLE 섹션을 참조하십시오.

선택 사항

예약된 DMF 결과를 보려면 다음 옵션 중 하나를 선택합니다.

옵션 1: 전용 이벤트 테이블 쿼리

이 옵션을 사용하면 원시 데이터에 액세스할 수 있으며, 결과를 분석하려는 방식에 따라 뷰, 테이블 함수 또는 저장 프로시저를 만드는 등 파생된 오브젝트를 사용하여 데이터를 더 자유롭게 후처리할 수 있습니다. 또한 이러한 파생 오브젝트를 생성하면 다양한 역할에 대해 이러한 오브젝트에 대한 액세스 권한을 선택적으로 부여할 수 있습니다. 예를 들어, 데이터 엔지니어는 결과를 얻기 위한 접근법을 유지하기 위해 저장 프로시저에 액세스할 수 있으며, 데이터 분석가는 뷰에 액세스하여 결과를 분석할 수 있습니다.

이벤트 테이블의 이름은 SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW 입니다.

이벤트 테이블 열에 대한 정보는 이벤트 테이블 열 섹션을 참조하십시오.

이벤트 테이블을 쿼리하는 대표적인 예제는 로깅 및 추적 자습서 섹션을 참조하십시오.

옵션 2: DATA_QUALITY_MONITORING_RESULTS 뷰 쿼리

이 옵션을 사용하면 이벤트 테이블의 원시 데이터를 평면화하여 DMF 결과에 더 쉽게 액세스할 수 있도록 하는 DATA_QUALITY_MONITORING_RESULTS 뷰를 쿼리할 수 있습니다. 또한 이 옵션은 데이터 후처리가 필요하지 않고 원시 데이터에 대한 액세스 권한을 부여하지 않으려는 경우에 가장 적합합니다.

뷰는 공유 SNOWFLAKE 데이터베이스 SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS 의 LOCAL 스키마에 있습니다.

자세한 내용은 DATA_QUALITY_MONITORING_RESULTS 뷰를 참조하십시오.

참고

SNOWFLAKE.GOVERNANCE_VIEWER 데이터베이스 역할에는 DATA_QUALITY_MONITORING_RESULTS 뷰를 쿼리할 수 있는 액세스 권한이 없습니다.

옵션 3: DATA_QUALITY_MONITORING_RESULTS 테이블 함수 호출

이 옵션을 사용하면 DATA_QUALITY_MONITORING_RESULTS 테이블 함수를 호출하여 DMF 결과를 볼 수 있습니다. 이 함수는 DATA_QUALITY_MONITORING_RESULTS 뷰와 동일한 열을 반환합니다. 하지만 함수를 호출할 때는 1개의 테이블만 지정할 수 있습니다. 이 옵션은 데이터 메트릭 함수 결과를 단일 테이블로 제한하고 다른 테이블이나 이벤트 테이블의 측정값에 대한 액세스를 제공하지 않으려는 경우에 가장 좋습니다.

SNOWFLAKE.DATA_QUALITY_MONITORING_LOOKUP 애플리케이션 역할 외에도 DATA_QUALITY_MONITORING_RESULTS 테이블 함수를 호출하는 데 사용되는 역할에는 다음 권한이 필요합니다.

  • 테이블에 대한 OWNERSHIP 또는 SELECT.

  • DMF에 대한 OWNERSHIP 또는 USAGE.

DMF의 속성 보기

속성을 보려면 DMF를 설명합니다.

DESC FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy
+-----------+---------------------------------------------------------------------+
| property  | value                                                               |
+-----------+---------------------------------------------------------------------+
| signature | (ARG_T TABLE(ARG_C1 NUMBER, ARG_C2 NUMBER, ARG_C3 NUMBER))          |
| returns   | NUMBER(38,0)                                                        |
| language  | SQL                                                                 |
| body      | SELECT COUNT(*) FROM arg_t WHERE arg_c1>0 AND arg_c2>0 AND arg_c3>0 |
+-----------+---------------------------------------------------------------------+

DMF 보안 설정

ALTER FUNCTION 명령을 사용하여 DMF 보안을 설정할 수 있습니다. 함수 보안의 의미에 대한 자세한 내용은 Secure UDF와 저장 프로시저로 민감한 정보 보호하기 섹션을 참조하십시오.

ALTER FUNCTION governance.dmfs.count_positive_numbers(
 TABLE(
   NUMBER,
   NUMBER,
   NUMBER
))
SET SECURE;
Copy

DMFs 나열

SHOW DATA METRIC FUNCTIONS 또는 SHOW FUNCTIONS 명령을 사용하여 계정, 데이터베이스 또는 스키마에 DMFs를 목록으로 표시합니다.

SHOW DATA METRIC FUNCTIONS IN ACCOUNT;
Copy

또는 Information Schema FUNCTIONS 뷰 또는 Account Usage FUNCTIONS 뷰 를 쿼리하여 지정된 데이터베이스 또는 계정의 DMFs 를 목록으로 만들 수 있습니다.

is_data_metric 열은 함수가 DMF인지 여부를 지정합니다.

DMF에 태그 설정

ALTER FUNCTION 명령을 사용하여 DMF에 태그를 설정합니다.

ALTER FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(NUMBER, NUMBER, NUMBER))
  SET TAG governance.tags.quality = 'counts';
Copy

DMF 참조 추적

DATA_METRIC_FUNCTION_REFERENCES Account Usage 뷰를 쿼리하여 계정의 DMF 참조를 볼 수 있습니다. 지정된 테이블 또는 뷰와 연결된 DMFs 또는 지정된 DMF 와 연결된 테이블 또는 뷰를 식별하기 위해 DATA_METRIC_FUNCTION_REFERENCES Information Schema 테이블 함수를 호출할 수도 있습니다.

예:

해당 테이블 또는 뷰에 DMF가 count_positive_numbers 로 설정된 각 오브젝트(테이블 또는 뷰)에 대한 행을 반환합니다.

USE DATABASE governance;
USE SCHEMA INFORMATION_SCHEMA;
SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      METRIC_NAME => 'governance.dmfs.count_positive_numbers'
    )
  );
Copy

hr.tables.empl_info 테이블에 할당된 각 DMF에 대한 행을 반환합니다.

USE DATABASE governance;
USE SCHEMA INFORMATION_SCHEMA;
SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      REF_ENTITY_NAME => 'hr.tables.empl_info',
      REF_ENTITY_DOMAIN => 'table'
    )
  );
Copy

시스템에서 DMF 삭제

시스템에서 DMF를 삭제합니다.

DROP FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy

제한 사항

자세한 내용은 데이터 품질 제한 섹션을 참조하십시오.