期待値を使用してデータ品質チェックを実装する

データメトリック関数(DMF)からの戻り値は、有用な情報を提供しますが、データに対して許容できることをわかっていないと、それがデータ品質の問題を示しているかどうかを知るのは難しい場合があります。たとえば、データ品質チェックに合格するものとして、特定の列に10個未満の NULL 値を含むテーブルを考えるかもしれません。この場合、値が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 とオブジェクト間の各関連付けは、1つ以上の期待値を持つことができます。

DMF をテーブルまたはビューに関連付けるときに、期待値を追加できます。後から関連付けに追加することもできます。また、既存の期待値を変更することもできます。

期待値を追加すると、DMF がスケジュールに基づいて実行されるまで待機することなく、手動でテスト できます。

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

条件:

  • expectation_name は、期待値を識別するために使用される文字列です。異なる関連付けに属している限り、同じ名前の期待値を作成できます。

  • expression は DMF が期待値を返したかどうかを決定するブール式です。期待値を満たすものを定義する をご参照ください。

例:単一の期待値を追加する

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

既存の関連付けに期待値を追加する

ALTERTABLE または ALTERVIEW コマンドを使用して、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

条件:

  • expectation_name は、期待値を識別するために使用される文字列です。異なる関連付けに属している限り、同じ名前の期待値を作成できます。

  • expression は DMF が期待値を返したかどうかを決定するブール式です。期待値を満たすものを定義する をご参照ください。

以前、NULL_COUNTDMF システムをテーブル 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の場合、期待値違反として報告されます。

既存の期待値を変更する

MODIFYEXPECTATION 句を使用して、以前に関連付けに追加した期待値の式を変更します。

たとえば、以前に期待値 my_expt1 と NULL_COUNTDMF の関連付けに追加したとします。列 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 の関連付けに1つ以上の期待値を追加したとします。これらの期待値が現在違反になるかどうかを確認するには、次を実行します。

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

期待値をドロップする

DROPEXPECTATION 句を使用して、関連付けから期待値を削除し、システムから削除します。

たとえば、以前期待値 my_exp をテーブル t1 の列 c1 と NULL_COUNT DMF の関連付けに追加したとします。関連付けと 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 の結果を計算するたびに2つの行がテーブルに追加されます。1つ目の行は、DMF が関連付けられているオブジェクト、DMF 自体、およびデータ品質チェックの結果に関する情報を記録します。2行目は、期待値を満たしているか、期待値に違反しているかなど、DMF の関連付けに設定された期待値に関連する情報を記録します。複数の期待値がある場合は、期待値ごとに行があります。

resource_attribute 列の snow.data_metric.record_type フィールドは、行が期待値に対応するかどうかを示します。このフィールドには2つの可能な値があります。

  • 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 スキーマに存在する DATA_QUALITY_MONITORING_EXPECTATION_STATUS ビュー は、イベントテーブルの情報をフラット化して、DMF の結果にアクセスしやすくします。

DATA_QUALITY_MONITORING_EXPECTATION_STATUS 関数

DATA_QUALITY_MONITORING_EXPECTATION_STATUS テーブル関数は、DATA_QUALITY_MONITORING_EXPECTATION_STATUS ビューで利用可能なものと同じ情報を提供する行を返します。関数は、ビューとは異なるアクセス制御モデルを使用します。

期待値の使用を追跡する

Snowflakeは、アカウントのすべての期待値を追跡します。関数を実行する、または ACCOUNT_USAGE ビューをクエリ して、次のタスクの実行など、期待値の使用を監視できます。

  • 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 スキーマの 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