자습서: 데이터 메트릭 함수 시작하기

소개

이 자습서는 Snowsight 의 워크시트를 사용하거나 SnowSQL 같은 CLI 클라이언트를 사용하여 완료할 수 있습니다. 간단히 코드 예제를 붙여넣고 실행해 보십시오.

이 자습서가 끝나면 다음에 대해 알 수 있습니다.

  • 데이터 품질을 측정하기 위해 사용자 지정 데이터 메트릭 함수(DMF)를 만듭니다.

  • 서버리스 크레딧 사용을 최적화하려면 DMF를 관리합니다.

  • 예약된 DMF 호출과 관련된 서버리스 크레딧 사용량을 모니터링합니다.

액세스 제어 설정

이 자습서를 완료하려면 다음을 포함하여 필요한 모든 액세스 권한이 있는 단일 사용자 지정 역할을 사용합니다.

  • 데이터베이스 생성, 스키마 생성, 스키마에 DMF 생성 및 스키마에 테이블 생성

  • 쿼리 작업을 수행하기 위한 웨어하우스 생성

  • 예약된 DMF를 호출한 결과가 포함된 뷰 쿼리

  • 서버리스 컴퓨팅 사용 정보가 포함된 뷰 쿼리

자습서 전체에서 사용할 dq_tutorial_role 역할을 만듭니다.

USE ROLE ACCOUNTADMIN;
CREATE ROLE IF NOT EXISTS dq_tutorial_role;
Copy

권한을 부여하고 애플리케이션 역할과 데이터베이스 역할을 dq_tutorial_role 에 부여합니다.

GRANT CREATE DATABASE ON ACCOUNT TO ROLE dq_tutorial_role;
GRANT EXECUTE DATA METRIC FUNCTION ON ACCOUNT TO ROLE dq_tutorial_role;
GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE dq_tutorial_role;
GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE dq_tutorial_role;
GRANT DATABASE ROLE SNOWFLAKE.DATA_METRIC_USER TO ROLE dq_tutorial_role;
Copy

데이터가 포함된 테이블을 쿼리할 웨어하우스를 만들고 역할에 대한 USAGE 권한을 dq_tutorial_role 역할에 부여합니다.

CREATE WAREHOUSE IF NOT EXISTS dq_tutorial_wh;
GRANT USAGE ON WAREHOUSE dq_tutorial_wh TO ROLE dq_tutorial_role;
Copy

dq_tutorial_role 역할에 대한 권한을 확인합니다.

SHOW GRANTS TO ROLE dq_tutorial_role;
Copy

역할 계층 구조를 설정하고 이 자습서를 완료할 수 있는 사용자에게 역할을 부여(jsmith 값을 대체)합니다.

GRANT ROLE dq_tutorial_role TO ROLE SYSADMIN;
GRANT ROLE dq_tutorial_role TO USER jsmith;
Copy

데이터 설정

이 자습서의 데이터와 DMF를 쉽게 관리하려면 이러한 오브젝트를 포함할 전용 데이터베이스를 만듭니다.

테이블 만들기

USE ROLE dq_tutorial_role;
CREATE DATABASE IF NOT EXISTS dq_tutorial_db;
CREATE SCHEMA IF NOT EXISTS sch;

CREATE TABLE customers (
  account_number NUMBER(38,0),
  first_name VARCHAR(16777216),
  last_name VARCHAR(16777216),
  email VARCHAR(16777216),
  phone VARCHAR(16777216),
  created_at TIMESTAMP_NTZ(9),
  street VARCHAR(16777216),
  city VARCHAR(16777216),
  state VARCHAR(16777216),
  country VARCHAR(16777216),
  zip_code NUMBER(38,0)
);
Copy

테이블에 값 삽입

테이블에 값을 삽입하려면:

USE WAREHOUSE dq_tutorial_wh;

INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code)
  VALUES (1589420, 'san francisco', 'usa', 'john.doe@', 'john', 'doe', 1234567890, null, null, null);

INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code)
  VALUES (8028387, 'san francisco', 'usa', 'bart.simpson@example.com', 'bart', 'simpson', 1012023030, null, 'market st', 94102);

INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code)
  VALUES
    (1589420, 'san francisco', 'usa', 'john.doe@example.com', 'john', 'doe', 1234567890, 'ca', 'concar dr', 94402),
    (2834123, 'san mateo', 'usa', 'jane.doe@example.com', 'jane', 'doe', 3641252911, 'ca', 'concar dr', 94402),
    (4829381, 'san mateo', 'usa', 'jim.doe@example.com', 'jim', 'doe', 3641252912, 'ca', 'concar dr', 94402),
    (9821802, 'san francisco', 'usa', 'susan.smith@example.com', 'susan', 'smith', 1234567891, 'ca', 'geary st', 94121),
    (8028387, 'san francisco', 'usa', 'bart.simpson@example.com', 'bart', 'simpson', 1012023030, 'ca', 'market st', 94102);
Copy

DMFs를 만들고 작업합니다.

다음 섹션에서는 유효하지 않은 이메일 주소의 수를 측정하기 위해 사용자 정의 DMF를 생성한 후 다음을 수행합니다.

  • DMF를 5분마다 실행되도록 예약합니다.

  • DMF 테이블 참조를 확인합니다(DMF가 설정된 테이블 찾기).

  • 예약된 DMF를 호출한 결과가 포함된 기본 제공 뷰를 쿼리합니다.

  • 불필요한 서버리스 크레딧 사용을 피하려면 테이블에서 DMF를 설정 해제합니다.

다음 경우에 DMF를 만듭니다.

지정된 정규식과 일치하지 않는 열의 이메일 주소 수를 반환하는 데이터 메트릭 함수(DMF)를 만듭니다.

CREATE DATA METRIC FUNCTION IF NOT EXISTS
  invalid_email_count (ARG_T table(ARG_C1 STRING))
  RETURNS NUMBER AS
  'SELECT COUNT_IF(FALSE = (
    ARG_C1 REGEXP ''^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$''))
    FROM ARG_T';
Copy

테이블에 대한 일정 설정

DMF 일정은 테이블의 모든 DMFs가 실행되는 시점을 정의합니다. 현재 가장 짧은 시간 간격은 5분입니다.

ALTER TABLE customers SET DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

참고

자습서의 목적상 일정은 5분으로 설정되어 있습니다. 그러나 DMF 사용 사례를 최적화한 후에는 테이블에 영향을 미치는 DML 작업과 관련된 cron 식 또는 트리거 이벤트와 같은 다른 일정 설정을 실험해 봅니다.

DMFs를 테이블에 설정하고 참조를 확인

DMF를 테이블에 연결합니다.

ALTER TABLE customers ADD DATA METRIC FUNCTION
  invalid_email_count ON (email);
Copy

일정이 5분으로 설정되어 있으므로 Snowflake가 DMF를 호출하고 결과를 처리하려면 5분을 기다려야 합니다. 현재는, DATA_METRIC_FUNCTION_REFERENCES Information Schema 테이블 함수를 호출하여 DMF가 테이블과 연결되어 있는지 확인할 수 있습니다.

SELECT * FROM TABLE(INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
  REF_ENTITY_NAME => 'dq_tutorial_db.sch.customers',
  REF_ENTITY_DOMAIN => 'TABLE'));
Copy

DMF 결과 보기

예약된 DMF를 호출한 결과는 DATA_QUALITY_MONITORING_RESULTS 뷰에 저장됩니다. 유효하지 않은 이메일 주소의 수를 확인하려면 DATA_QUALITY_MONITORING_RESULTS 뷰에 쿼리하여 예약된 DMF를 호출한 결과를 확인합니다.

SELECT scheduled_time, measurement_time, table_name, metric_name, value
FROM SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS
WHERE TRUE
AND METRIC_NAME = 'INVALID_EMAIL_COUNT'
AND METRIC_DATABASE = 'DQ_TUTORIAL_DB'
LIMIT 100;
Copy

결과는 value 열에 1 이 포함되어 있음을 보여줍니다. 이 숫자는 부적절하게 형식이 지정된 이메일 주소 하나에 해당하며, 테이블에 값 삽입 섹션의 첫 번째 INSERT 문에 해당합니다.

테이블에서 DMFs 설정 해제

DMF의 정의, 일정 및 예상 결과를 기반으로 DMF가 예상대로 작동하고 있음을 확인했습니다.

불필요한 서버리스 크레딧 사용을 방지하려면 테이블에서 DMF를 설정 해제합니다.

ALTER TABLE customers DROP DATA METRIC FUNCTION
  invalid_email_count ON (email);
Copy

서버리스 크레딧 소비량 보기

예약된 데이터 메트릭 함수(DMFs)를 호출하려면 서버리스 컴퓨팅 리소스 가 필요합니다. Account Usage 뷰 DATA_QUALITY_MONITORING_USAGE_HISTORY 를 쿼리하여 DMF 서버리스 컴퓨팅 비용 을 확인할 수 있습니다.

뷰에는 1~2시간의 지연 시간이 있으므로 뷰를 쿼리하기 전에 해당 시간이 경과할 때까지 기다립니다. 나중에 이 단계로 돌아올 수 있습니다.

뷰를 쿼리하고 예약된 DMF의 시간 간격을 포함하도록 결과를 필터링합니다.

USE ROLE dq_tutorial_role;
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_QUALITY_MONITORING_USAGE_HISTORY
WHERE TRUE
AND START_TIME >= CURRENT_TIMESTAMP - INTERVAL '3 days'
LIMIT 100;
Copy

정리, 요약 및 추가 리소스

축하합니다! 이 자습서를 성공적으로 완료했습니다.

시간을 내어 이 자습서에 살펴본 내용에 대한 간략한 요약과 주요 사항을 복습하십시오.

이 자습서에서 생성한 오브젝트를 삭제하여 정리해 보십시오. Snowflake 설명서의 다른 항목을 검토하여 자세히 알아보십시오.

요약 및 주요 사항

요약하면, 다음을 수행하는 방법을 배웠습니다.

  • 사용자 지정 DMF를 생성하여 데이터 품질을 측정하고 DMF를 관리하여 서버리스 크레딧 사용을 최적화합니다.

  • 예약된 DMF 호출과 관련된 서버리스 크레딧 사용량을 모니터링합니다.

자습서 오브젝트 삭제

자습서를 반복할 계획이라면, 생성한 오브젝트를 보관할 수 있습니다.

그렇지 않은 경우 다음과 같이 자습서 오브젝트를 삭제합니다.

USE ROLE ACCOUNTADMIN;
DROP DATABASE dq_tutorial_db;
DROP WAREHOUSE dq_tutorial_wh;
DROP ROLE dq_tutorial_role;
Copy

다음에는 무엇을 해야 합니까?

다음 리소스를 활용하여 Snowflake에 대해 계속 알아보십시오.