期待値を使用してデータ品質チェックを実装する¶
データメトリック関数(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);
DMFs とカスタム DMFs 両方の期待値を定義できます。
期待値を満たすものを定義する¶
期待値には、期待値を満たすかどうかを決定するブール式が含まれます。この式が TRUE として評価された場合、DMF の結果が期待と一致したことを意味します。
式内で、キーワード VALUE
は DMF によって返される値を表しています。たとえば、次のような期待値の定義があるとします。
EXPECTATION my_exp (VALUE < 5)
期待値を評価するとき、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> ) [ , ... ] ] ]
条件:
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);
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);
既存の関連付けに期待値を追加する¶
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> ) [ , ... ] ] ]
条件:
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);
NULL_COUNT の結果が15の場合、期待値違反として報告されます。
既存の期待値を変更する¶
MODIFYEXPECTATION 句を使用して、以前に関連付けに追加した期待値の式を変更します。
たとえば、以前に期待値 my_exp
を t1
と NULL_COUNTDMF の関連付けに追加したとします。列 c1
に15以上の NULL 値がある場合に違反になるように期待値を変更するには、次を実行します。
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
MODIFY EXPECTATION my_exp (VALUE < 15);
期待値の以前の式は、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'));
期待値をドロップする¶
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;
期待値違反を識別する¶
次を使用して期待値違反を識別できます。
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW --- rawデータ品質の結果を記録する専用のイベントテーブル。
DATA_QUALITY_MONITORING_EXPECTATION_STATUS ビュー --- フラット化された結果を含む SNOWFLAKE.LOCAL スキーマのビュー。
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 関数 --- 期待値の結果を返すテーブル関数。
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'));
例: 特定の DMF に存在する期待値。
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT'));
例: オブジェクトと 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'));
ビューをクエリして期待値を追跡する¶
ACCOUNT_USAGE スキーマの DATA_METRIC_FUNCTION_EXPECTATIONS ビュー には、アカウントのすべての期待値が含まれています。ビューをクエリして、アカウント内の期待値の使用状況を追跡し、各期待値のブール式を決定できます。
例: Snowflakeアカウントのすべての期待値を返します。
SELECT * FROM snowflake.account_usage.data_metric_function_expectations
ORDER BY expectation_name;
例: 特定のデータメトリック関数の期待値を特定します。
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;