データ品質問題の修復¶
データ品質メトリクス(DMFs)を使用すると、テーブル内のどれだけの記録に品質上の問題があるかを特定することができます。例えば、 SNOWFLAKE.CORE.NULL_COUNT DMF は、特定の列に NULL の値を含む記録の数を特定することができます。
これらの可能性のある品質問題を修正するために、 SYSTEM$DATA_METRIC_SCAN システム関数を呼び出して、 DMF によってデータ品質チェックに失敗したデータが含まれていると識別された個々の記録を返すことができます。例えば、 SYSTEM$DATA_METRIC_SCAN 関数に引数として NULL_COUNT DMF を渡すと、 NULL 値を含む記録の数だけでなく、 NULL 値を含む実際の記録を取得することができます。
サポートされた DMFs¶
SYSTEM$DATA_METRIC_SCAN 関数は、 DMF を引数として受け取り、 DMF によって問題のあるデータを含むと特定された記録を返します。引数として以下のシステム DMFs を使用できます:
制限と考慮事項¶
SYSTEM$DATA_METRIC_SCAN 関数の引数としてカスタム DMFs を使用することはできません。
テーブルがマスキングポリシーや行アクセスポリシーなどのポリシーで保護されている場合、関数を実行したときのユーザーのロールによって結果が異なるため、 SYSTEM$DATA_METRIC_SCAN 関数は予期しないデータや不完全なデータを返すことがあります。
SYSTEM$DATA_METRIC_SCAN 関数の呼び出し¶
SYSTEM$DATA_METRIC_SCAN 関数を呼び出すと、 DMF を持つテーブルを分析し、データ品質に問題がある可能性を特定します。SYSTEM$DATA_METRIC_SCAN 関数には以下の引数を渡す必要があります: テーブル名、 DMF 、問題のある記録を特定するために DMF に渡される引数。
例えば、 SNOWFLAKE.CORE.NULL_COUNT システムメトリック関数が特定の列の NULL 値の総数を返すとすると、以下は SSN
列に NULL 値を持つ employeesTable
テーブルの行を返します。
SELECT *
FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => 'governance.sch.employeesTable'
,METRIC_NAME => 'snowflake.core.null_count'
,ARGUMENT_NAME => 'SSN'
,AT_TIMESTAMP => '2024-08-28 02:00:00 -0700'
));
過去のテーブルやビューの DMF 評価結果をチェックするには、 AT_TIMESTAMP 引数を渡します。AT_TIMESTAMP 引数を使うと、 Time Travel を使ってタイムスタンプ文字列をキャストし、「2024-08-28 02:00:00 -0700」のタイムスタンプでテーブルに存在した記録だけを返すことができます。
ACCEPTED_VALUES に DMF¶
SYSTEM$DATA_METRIC_SCAN 関数を呼び出して、:doc:`ACCEPTED_VALUES</sql-reference/functions/dmf_accepted_values>`DMF によってデータ品質の問題を含むものとして識別される記録を返す場合は、追加の引数を指定する必要があります。この引数 ARGUMENT_EXPRESSION を使用すると、返す行を決定するブール式を指定できます。列の値が式と一致 しない 場合、行が返されます。
次のコマンドは、age
列の値が5以下である行(つまり、ARGUMENT_EXPRESSION で指定された条件に一致 しない 行)を返します。
SELECT *
FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => 'governance.sch.employeesTable',
METRIC_NAME => 'snowflake.core.accepted_values',
ARGUMENT_NAME => 'age',
ARGUMENT_EXPRESSION => 'age > 5'
));
SYSTEM$DATA_METRIC_SCAN を使ってデータを修正する¶
SYSTEM$DATA_METRIC_SCAN 関数は、行のセットを返す テーブル関数 です。この関数の出力は、 DML ステートメント内で使用することができ、データ品質チェックに不合格となったデータを含むと特定された記録に対してアクションを起こすことができます。
t
テーブルの email
列の空白値を NULL 値で置き換えたいとします。BLANK_COUNT データメトリック関数はブランク値を識別するので、以下のステートメントを実行できます:
UPDATE T
SET email = null
WHERE T.ID IN (SELECT ID FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => 't'
,METRIC_NAME => 'snowflake.core.blank_count'
,ARGUMENT_NAME => 'email'
)));