データ品質の異常検出

データメトリック関数( DMF )からの戻り値は、有用な情報を提供しますが、それがデータ品質の問題を示しているかどうかを知るのは難しい場合があります。許容値がわかっていれば 期待値 を定義できますが、考えられるすべてのデータ品質問題を特定するための十分な手動ルールを定義するのは難しい場合があります。

ソリューションとして、Snowflakeは、 DMF によって返される値の異常を検出できるアルゴリズムを提供します。Snowflakeは、このアルゴリズムを過去のデータでトレーニングし、予測範囲を上回る、または下回る戻り値を自動的に識別します。

以下の DMFs システムの異常検出を有効にすることができます。

  • ROW_COUNT --- テーブル内のデータ量の異常を識別するために使用します。

  • FRESHNESS --- テーブルが更新される頻度の異常を識別するために使用します。

次の例は、 ROW_COUNT DMF およびテーブル t1 の関連付けの異常検出を有効にする方法を示しています。

ALTER TABLE t1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    ANOMALY_DETECTION = TRUE;
Copy

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;
Copy
例:既存の関連付けの異常検出を有効にする

ROW_COUNT DMF およびテーブル t1 の既存の関連付けの異常検出を有効にするには、次のコマンドを実行します。

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SET ANOMALY_DETECTION = TRUE;
Copy

異常検出の感度レベルを調整する

異常検出を有効にすると、アカウントで発生している 異常の数を追跡 できます。異常の数が少なすぎるか、多すぎる場合は、異常検出アルゴリズムの感度レベルを調整できます。

  • 偽陽性(つまり、異常として誤って識別される値)が多すぎる場合は、感度を LOW に変更して検出する異常の数を減らします。

  • 偽陰性(つまり、異常として識別されなかったが実際には異常である)が多すぎる場合は、感度を HIGH に変更して検出する異常の数を増やします。

デフォルトの感度レベルは MEDIUM です。

たとえば、テーブル t1 のボリュームで異常を検出する DMF 関連付けの感度を増やすには、次のコマンドを実行します。

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SET SENSITIVITY = 'HIGH';
Copy

異常検出を無効にする

いつでも ALTER ステートメントを使用してオブジェクトを変更して、 DMF 関連付けの異常検出を無効にできます。

例えば、 ROW_COUNT DMF およびテーブル t1 の関連付けの異常検出を無効にするには、次のコマンドを実行します。

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SET ANOMALY_DETECTION = FALSE;
Copy

異常を識別する

以下を使用して異常を識別できます。

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 の結果にアクセスしやすくします。