データ品質の異常検出¶
データメトリック関数( DMF )からの戻り値は、有用な情報を提供しますが、それがデータ品質の問題を示しているかどうかを知るのは難しい場合があります。許容値がわかっていれば 期待値 を定義できますが、考えられるすべてのデータ品質問題を特定するための十分な手動ルールを定義するのは難しい場合があります。
ソリューションとして、Snowflakeは、 DMF によって返される値の異常を検出できるアルゴリズムを提供します。Snowflakeは、このアルゴリズムを過去のデータでトレーニングし、予測範囲を上回る、または下回る戻り値を自動的に識別します。
以下の DMFs システムの異常検出を有効にすることができます。
次の例は、 ROW_COUNT DMF およびテーブル t1 の関連付けの異常検出を有効にする方法を示しています。
ALTER TABLE t1
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
ANOMALY_DETECTION = TRUE;
Snowflakeはアルゴリズムをトレーニングした後、テーブル t1 のボリュームの異常の識別を自動的に開始します。
トレーニング期間について¶
異常検出を有効にすると、Snowflakeは履歴データに関する異常検出アルゴリズムをトレーニングします。トレーニング期間の長さは、 DMF の実行頻度によって異なります。
頻繁に実行される DMFs の場合 、Snowflakeが異常検出を開始するには少なくとも2週間の DMF データが必要です。この2週間という期間は、週次季節性を確立するために不可欠です。DMF が2週間より長く実行されている場合、Snowflakeは最大60日のデータでアルゴリズムをトレーニングします。この長いトレーニング期間は、月次季節性を確立し、精度が向上します。Snowflakeは、高い信頼性で異常を検出するために、60日のデータでアルゴリズムをトレーニングすることをお勧めしています。
頻繁に実行されない、またはトリガーベースのスケジュールで実行される DMFs の場合 、アルゴリズムをトレーニングするためには少なくとも2つのデータポイントが必要です。たとえば、 DMF が毎月実行される場合、Snowflakeはアルゴリズムをトレーニングするために過去2か月間を振り返ります。
Snowflakeがまだトレーニング期間中かどうかは、 DATA_METRIC_FUNCTION_REFERENCES 関数を実行することで特定できます。異常検出が有効になっているが、アルゴリズムがまだトレーニング中の場合、 anomaly_detection_status 出力の列には値 TRAINING_IN_PROGRESS が含まれます。
異常検出を有効にする¶
最初に DMF をオブジェクトに関連付けるときに DMF 関連付けの異常検出を有効にできます。後で有効にすることもできます。
- 例:DMF を関連付けるときに異常検出を有効にする
FRESHNESS DMF をビュー
v1と関連付けるときに異常検出を有効にするには、次のコマンドを実行します。ALTER VIEW v1 ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (c_timestamp) ANOMALY_DETECTION = TRUE;
- 例:既存の関連付けの異常検出を有効にする
ROW_COUNT DMF およびテーブル
t1の既存の関連付けの異常検出を有効にするには、次のコマンドを実行します。ALTER TABLE t1 MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON () SET ANOMALY_DETECTION = TRUE;
異常検出の感度レベルを調整する¶
異常検出を有効にすると、アカウントで発生している 異常の数を追跡 できます。異常の数が少なすぎるか、多すぎる場合は、異常検出アルゴリズムの感度レベルを調整できます。
偽陽性(つまり、異常として誤って識別される値)が多すぎる場合は、感度を LOW に変更して検出する異常の数を減らします。
偽陰性(つまり、異常として識別されなかったが実際には異常である)が多すぎる場合は、感度を HIGH に変更して検出する異常の数を増やします。
デフォルトの感度レベルは MEDIUM です。
たとえば、テーブル t1 のボリュームで異常を検出する DMF 関連付けの感度を増やすには、次のコマンドを実行します。
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
SET SENSITIVITY = 'HIGH';
異常検出を無効にする¶
いつでも ALTER ステートメントを使用してオブジェクトを変更して、 DMF 関連付けの異常検出を無効にできます。
例えば、 ROW_COUNT DMF およびテーブル t1 の関連付けの異常検出を無効にするには、次のコマンドを実行します。
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
SET ANOMALY_DETECTION = FALSE;
異常を識別する¶
以下を使用して異常を識別できます。
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW --- rawデータ品質の結果を記録する専用のイベントテーブル。
DATA_QUALITY_MONITORING_ANOMALY_DETECTION ビュー --- フラット化された結果を含む SNOWFLAKE.LOCAL スキーマのビュー。
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW¶
データ品質の結果は専用のイベントテーブル SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW に記録されます。
DMF の関連付けの異常検出が有効になっている場合、Snowflakeが DMF の結果を計算するたびに2つの行がテーブルに追加されます。1つ目の行は、 DMF が関連付けられているオブジェクト、 DMF 自体、およびデータ品質チェックの結果に関する情報を記録します。2行目は、異常検出に関連する情報を記録します。
record_attribute 列の snow.data_metric.record_type フィールドは、行が異常検出に対応するかどうかを示します。このフィールドには2つの可能な値があります。
ANOMALY_DETECTION_STATUS- 行が異常検出に対応することを示します。EVALUATION_RESULT- 行が DMF の評価に対応することを示します。
異常があったかどうかを識別する¶
イベントテーブルの行が異常検出に対応すると判断した後、 resource_attribute 列の snow.data_metric.evaluation_result フィールドを確認して、異常があったかどうかを判断できます。
このフィールドには、 DMF が返す値を含む VARIANT と、その値が異常かどうかを示す BOOLEAN 値が含まれます。例えば、 snow.data_metric.evaluation_result フィールドの値が 5, TRUE の場合、戻り値は 5 でSnowflakeはそれを異常として特定しました。
追加のフィールド¶
イベントテーブルの行が異常検出に対応する場合、 resource_attribute 列には、次のフィールドも含まれます。
snow.data_metric.upper_bound--- 異常検出アルゴリズムに基づいて DMF によって返される最大値。DMF が返す値がこの上限を超えている場合、異常です。snow.data_metric.lower_bound--- 異常検出アルゴリズムに基づいて DMF によって返される最小値。DMF が返す値がこの下限を下回っている場合、異常です。snow.data_metric.forecast--- 異常検出アルゴリズムが予測した値は DMF によって返されます。
DATA_QUALITY_MONITORING_ANOMALY_DETECTION ビュー¶
SNOWFLAKE.LOCAL スキーマに存在する DATA_QUALITY_MONITORING_ANOMALY_DETECTION ビュー ビューは、イベントテーブルの情報をフラット化して、 DMF の結果にアクセスしやすくします。