기대치를 사용하여 데이터 품질 검사 구현하기

데이터 메트릭 함수(DMF)에서 값 반환하기는 유용한 정보를 제공하지만, 데이터에 대해 허용 가능한 것으로 간주되는 사항을 모르면 데이터 품질 문제를 나타내는지 여부를 알기 어려울 수 있습니다. 예를 들어, 특정 열에 NULL 값이 10개 미만인 테이블은 데이터 품질 검사를 통과한 것으로 간주할 수 있습니다. 이 경우, 값이 10 미만일 것으로 *예상*하며, 해당 값을 초과하는 경우에만 알림을 받고자 합니다.

*기대치*를 사용하면 데이터가 DMF에서 수행한 데이터 품질 검사를 통과하는지 여부에 대한 기준을 정의할 수 있습니다. DMF가 값을 반환하는 경우, 해당 값을 이 기준과 비교하여 데이터가 검사를 통과했는지 여부를 결정합니다. 실패한 반환 값은 기대치 위반으로 보고되므로 해당 데이터에 대해 적절한 조치를 취할 수 있습니다.

다음은 C1 열에 10개 미만의 NULL 값이 포함된 기대치를 생성합니다.

ALTER VIEW v1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (C1)
  EXPECTATION my_exp ( VALUE < 10);
Copy

시스템 DMFs 및 사용자 지정 DMFs 모두에 대한 기대치를 정의할 수 있습니다.

기대치를 충족하는 항목 정의하기

기대치에는 기대치가 충족되었는지 여부를 결정하는 부울 표현식이 포함됩니다. 이 표현식이 TRUE로 평가되는 경우 DMF 결과가 기대치와 일치했음을 의미합니다.

표현식 내에서 VALUE 키워드는 DMF에서 반환된 값을 나타냅니다. 예를 들어, 기대치에 대해 다음과 같은 정의가 있다고 가정해 보겠습니다.

EXPECTATION my_exp (VALUE < 5)
Copy

Snowflake는 기대치를 평가할 때 ``VALUE``를 DMF에서 반환된 값으로 바꿉니다. DMF에서 ``3``을 반환한 경우 표현식이 TRUE로 평가되므로 기대치가 충족됩니다.

표현식이 FALSE로 평가되는 경우 Snowflake는 이를 기대치 위반으로 보고합니다. 이러한 위반 사항 추적에 대한 자세한 내용은 기대치 위반 식별 섹션을 참조하세요.

표현식에는 다음 유형의 연산자가 포함될 수 있습니다.

표현식은 다른 테이블이나 뷰 또는 사용자 정의 함수(UDFs)를 참조할 수 없습니다.

기대치 만들기

DMF 간의 각 연결 및 오브젝트에는 하나 이상의 기대치가 있을 수 있습니다.

DMF를 테이블 또는 뷰와 연결할 때 기대치를 추가할 수도 있고, 나중에 연결에 추가할 수도 있습니다. 기존 기대치를 수정할 수도 있습니다.

기대치를 추가한 후에는 DMF가 일정에 따라 실행될 때까지 기다리지 않고 :ref:`수동으로 테스트<label-dmf_expectations_test>`할 수 있습니다.

DMF를 연결할 때 기대치 추가

ALTER TABLE 또는 ALTER VIEW 명령을 사용하여 DMF를 테이블 또는 뷰와 연결합니다. 연결을 생성하는 동일한 SQL 문에서 연결에 기대치를 추가할 수 있습니다.

예를 들어, DMF를 테이블에 연결할 때 기대치를 추가하는 구문은 다음과 같습니다. 뷰는 유사한 구문을 사용합니다. 이 미리 보기에는 강조 표시된 절을 보여줍니다.

  ALTER TABLE <table>
    ADD DATA METRIC FUNCTION <dmf>
      ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
      [ EXPECTATION <expectation_name> ( <expression> )
        [, <expectation_name> ( <expression> ) [ , ... ] ] ]
Copy

여기서

  • :samp:`{expectation_name}`은 기대치를 식별하는 데 사용되는 문자열입니다. 다른 연결에 속하는 한 동일한 이름으로 기대치를 생성할 수 있습니다.

  • expression`은 DMF가 예상 값을 반환했는지 여부를 결정하는 부울 표현식입니다. :ref:`label-dmf_expectation_expression 섹션을 참조하십시오.

예: 단일 기대치 추가

c1 열의 최대값을 확인하기 위해 MAX 시스템 DMF를 뷰 ``v1``에 연결한다고 가정해 보겠습니다. 최대값은 25에서 50 사이일 것으로 예상합니다.

ALTER VIEW v1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.MAX ON (C1)
    EXPECTATION my_exp ( 25 < VALUE AND VALUE < 50);
Copy

MAX DMF가 예상 값 범위를 벗어나는 값을 반환하면 Snowflake는 이를 기대치 위반으로 기록합니다.

예: 여러 기대치 추가하기

테이블이 5분 이내에 업데이트되지 않으면 알림을 받고, 30분 동안 업데이트되지 않으면 다시 알림을 받고 싶다고 가정해 보겠습니다. 다음 기대치를 추가한 후 해당 기대치가 위반된 시점을 확인할 수 있습니다.

ALTER TABLE emp
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (last_updated)
  EXPECTATION lessThan5Mins (VALUE < 300), lessThan30Mins (VALUE < 1800);
Copy

기존 연결에 기대치 추가하기

ALTER TABLE 또는 ALTER VIEW 명령을 사용하여 DMF 및 테이블 또는 뷰 간의 기존 연결에 기대치를 추가합니다.

예를 들어, 테이블 및 DMF 간의 연결에 기대치를 추가하는 구문은 다음과 같습니다. 뷰는 유사한 구문을 사용합니다. 이 미리 보기에는 강조 표시된 절을 보여줍니다.

  ALTER TABLE <table>
    MODIFY DATA METRIC FUNCTION <dmf>
      ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
      [ ADD EXPECTATION <expectation_name> ( <expression> )
        [, <expectation_name> ( <expression> ) [ , ... ] ] ]
Copy

여기서

  • :samp:`{expectation_name}`은 기대치를 식별하는 데 사용되는 문자열입니다. 다른 연결에 속하는 한 동일한 이름으로 기대치를 생성할 수 있습니다.

  • expression`은 DMF가 예상 값을 반환했는지 여부를 결정하는 부울 표현식입니다. :ref:`label-dmf_expectation_expression 섹션을 참조하십시오.

이전에 NULL_COUNT 시스템 DMF를 테이블 my_table``의 ``c1 열에 연결했다고 가정해 보겠습니다. c1 열에 10개 이상의 NULL 값이 있을 때 알림을 받도록 기대치를 추가하려면 다음 코드를 실행합니다.

ALTER TABLE my_table
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
    ADD EXPECTATION my_exp (VALUE < 10);
Copy

NULL_COUNT의 결과가 15인 경우 기대치 위반으로 보고됩니다.

기존 기대치 수정하기

MODIFY EXPECTATION 절을 사용하여 이전에 연결에 추가한 기대치의 표현식을 변경합니다.

예를 들어, 이전에 테이블 t1 및 NULL_COUNT DMF 간의 연결에 my_exp 기대치를 추가했다고 가정해 보겠습니다. c1 열에 15개 이상의 NULL 값이 있을 때 위반되도록 기대치를 수정하려면 다음을 실행합니다.

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
    MODIFY EXPECTATION my_exp (VALUE < 15);
Copy

기대치의 이전 표현식은 ``VALUE < 15``로 바뀝니다.

기대치 테스트하기

기대치를 추가한 후 SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS 시스템 함수를 호출하여 기대치가 올바르게 추가되었는지 확인하고 해당 기대치가 현재 위반되는지 여부를 확인합니다.

예를 들어, DMF 및 테이블 t1 간의 연결에 하나 이상의 기대치를 추가했다고 가정해 보겠습니다. 해당 기대치가 현재 위반되었는지 확인하려면 다음을 실행합니다.

SELECT *
  FROM TABLE(SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS(
      REF_ENTITY_NAME => 'my_db.sch.t1'));
Copy

기대치 삭제하기

DROP EXPECTATION 절을 사용하여 연결에서 기대치를 제거하고 시스템에서 제거합니다.

예를 들어, 이전에 테이블 t1``의 ``c1 및 NULL_COUNT DMF 간의 연결에 my_exp 기대치를 추가했다고 가정해 보겠습니다. 연결 및 DMF에서 ``my_exp``를 제거하려면 다음 코드를 실행합니다.

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT on (c1)
    DROP EXPECTATION my_exp;
Copy

기대치 위반 식별

다음을 사용하여 기대치 위반을 식별할 수 있습니다.

SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW

데이터 품질 결과는 전용 이벤트 테이블 SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW에 기록됩니다.

오브젝트 및 DMF 간의 연결에 기대치가 있는 경우 Snowflake가 DMF의 결과를 계산할 때마다 테이블에 두 개의 행이 추가됩니다. 첫 번째 행에서는 DMF가 연결된 오브젝트, DMF 자체, 데이터 품질 검사 결과에 대한 정보를 기록합니다. 두 번째 행에서는 기대치 충족 또는 위반 여부를 포함하여 DMF 연결에 설정된 기대치와 관련된 정보를 기록합니다. 기대치가 여러 개인 경우 각 기대치에 대한 행이 있습니다.

resource_attribute 열의 snow.data_metric.record_type 필드는 행이 기대치에 해당하는지 여부를 나타냅니다. 이 필드에는 다음의 두 가지 가능한 값이 있습니다.

  • EXPECTATION_VIOLATION_STATUS - 행이 기대치에 해당함을 나타냅니다.

  • EVALUATION_RESULT - 행이 DMF의 평가에 해당함을 나타냅니다.

행이 기대치에 해당하는 경우, resource_attribute 열에는 기대치와 관련된 다음 필드도 포함됩니다.

  • snow.data_metric.expectation_id - 시스템 생성 식별자입니다.

  • snow.data_metric.expectation_name - 연결에 추가될 때 기대치의 이름입니다.

  • snow.data_metric.expectation_expression - 기대치의 표현식입니다.

행이 기대치의 평가에 해당하는지 확인한 후 value 열을 사용하여 기대치가 위반되었는지 여부를 확인합니다. TRUE인 경우 기대치가 위반되었습니다.

DATA_QUALITY_MONITORING_EXPECTATION_STATUS 뷰

SNOWFLAKE.LOCAL 스키마에 있는 :doc:`/sql-reference/local/data_quality_monitoring_expectation_status`는 이벤트 테이블의 정보를 평면화하여 DMF 결과에 더 쉽게 액세스할 수 있습니다.

DATA_QUALITY_MONITORING_EXPECTATION_STATUS 함수

DATA_QUALITY_MONITORING_EXPECTATION_STATUS 테이블 함수는 DATA_QUALITY_MONITORING_EXPECTATION_STATUS 뷰에서 제공되는 정보와 동일한 정보를 제공하는 행을 반환합니다. 함수는 뷰와 다른 액세스 제어 모델을 사용합니다.

기대치 사용 추적하기

Snowflake는 계정의 모든 기대치를 추적합니다. 함수 실행 또는 :ref:`ACCOUNT_USAGE 쿼리 뷰<label-expectations_monitor_view>`를 수행하여 다음 작업 수행을 포함한 기대치 사용을 모니터링합니다.

  • DMF와의 연결에 대해 정의된 기대치가 있는 오브젝트를 모니터링합니다.

  • 오브젝트와의 연결에 대해 정의된 기대치가 있는 DMFs를 모니터링합니다.

  • 오브젝트 및 DMF 간의 특정 연결에 대해 정의된 기대치가 있는지 확인합니다.

  • 데이터 품질 검사를 더 잘 이해하기 위해 기대치의 부울 표현식을 확인합니다.

함수를 실행하여 기대치를 추적합니다.

DATA_METRIC_FUNCTION_EXPECTATIONS 함수를 실행하여 특정 오브젝트, 특정 DMF 또는 오브젝트 및 DMF 간의 연결에 대해 정의된 기대치를 출력할 수 있습니다.

예: 특정 오브젝트에 대한 기대치

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      REF_ENTITY_NAME => 'my_table',
      REF_ENTITY_DOMAIN => 'table'));
Copy

예: 특정 DMF에 대한 기대치

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT'));
Copy

예: 오브젝트 및 DMF 간의 특정 연결에 대한 기대치

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT',
      REF_ENTITY_NAME => 'my_table',
      REF_ENTITY_DOMAIN => 'table'));
Copy

기대치를 추적하기 위해 뷰 쿼리하기

ACCOUNT_USAGE 스키마의 :doc:`/sql-reference/account-usage/data_metric_function_expectations`에는 계정에 대한 모든 기대치가 포함됩니다. 뷰를 쿼리하여 계정 내에서 기대치의 사용을 추적하고 각 기대치의 부울 표현식을 결정할 수 있습니다.

예: Snowflake 계정에 대한 모든 기대치 반환

SELECT * FROM snowflake.account_usage.data_metric_function_expectations
  ORDER BY expectation_name;
Copy

예: 특정 데이터 메트릭 함수에 대한 기대치 식별

SELECT expectation_name,
    ref_database_name as object_database,
    ref_schema_name as object_schema,
    ref_entity_name as object_name
  FROM snowflake.account_usage.data_metric_function_expectations
  WHERE
    metric_database_name = 'SNOWFLAKE' AND
    metric_schema_name = 'CORE' AND
    metric_name = 'ROW_COUNT'
  ORDER BY expectation_name;
Copy