Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データ品質を壊しながらSnowflakeのAIに分析させてみた

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for かわなご かわなご
September 29, 2026

 データ品質を壊しながらSnowflakeのAIに分析させてみた

Avatar for かわなご

かわなご

September 29, 2026

More Decks by かわなご

Other Decks in Technology

Transcript

  1. Semantic Viewの定義 • Gold層には以下のような定義でSemantic Viewを作成した CREATE SEMANTIC VIEW EC_SALES_ANALYSIS TABLES

    ( orders AS ORDERS PRIMARY KEY (ORDER_ID) COMMENT = '注⽂トランザクション', customers AS CUSTOMERS PRIMARY KEY (CUSTOMER_ID) COMMENT = '顧客マスタ', products AS PRODUCTS PRIMARY KEY (PRODUCT_ID) COMMENT = '商品マスタ' ) RELATIONSHIPS ( orders (CUSTOMER_ID) REFERENCES customers (CUSTOMER_ID), ... ) DIMENSIONS ( orders.order_id AS ORDER_ID COMMENT = '注⽂ID', ... ) METRICS ( orders.total_order_amount AS SUM(ORDER_AMOUNT) COMMENT = '注⽂⾦額合計', ... ) 8
  2. AIはデータ品質の異常を⾒落とすことがある • 3つのエラーケースの結果は以下の通りだった ケース • 重複データの混⼊ ⾦額が実際の2倍になる マイナス⾦額の混⼊ ⾦額が⼤幅に少なくなる データの鮮度劣化

    ⽋落分だけ⾦額が少なくなる いずれのケースでもAIによる分析では異常を指摘しなかった ◦ • 分析結果への影響 内容によっては、異常に気付いて教えてくれるケースもあった ユーザーに誤った⽰唆を与えてしまうリスクが⽣じる 18
  3. なぜAIはデータ品質の異常に気付けないのか • Semantic Viewではデータの構造や意味を説明している 定義するもの 例 テーブルの説明 「注⽂トランザクション」 主キー テーブル間の関係性

    カラムの意味 集計指標 ORDER_ID ORDERS.PRODUCT_ID → PRODUCTS.PRODUCT_ID 「注⽂⾦額(⽇本円)」 SUM(ORDER_AMOUNT) → 注⽂⾦額合計 • Cortex Analystはこの情報をもとにSQLを⽣成する • しかしカラムの有効値や値の形式のようなデータ品質の制約は持てない • データ品質を守り、異常を検知するには別の仕組みが必要 19
  4. データ取り込み時のエラー処理 • • 22 COPY INTOやSnowpipeでは基本的なスキーマレベルのエラーを検知する ◦ データ型不整合 / カラム数の不一致

    / NOT NULL制約違反 など ◦ 値の重複 や許可値、値閾などの品質検証はできない エラー発⽣時の挙動はON_ERRORオプションで細かく制御が可能 値 動作 ABORT_STATEMENT 最初のエラーで全体を中断 CONTINUE エラー⾏をスキップして続⾏ SKIP_FILE エラーのあるファイルを丸ごとスキップ SKIP_FILE_n n件以上のエラー⾏があるファイルをスキップ SKIP_FILE_n% n%を超える⾏がエラーのファイルをスキップ
  5. DMF(Data Metric Functions) 24 • テーブルやビューに紐づけて、対象のデータの品質をチェックする機能 • 基盤⼊⼝になるBRONZE層や、ユーザーに公開するGOLD層に使⽤する • データ変更時やスケジュールで⾃動実⾏できる

    • Snowflake上で完結し、Horizon Catalogで品質状態を可視化できる • 基本的な品質検証はデフォルトで準備されている 種類 特徴 システムDMF ビルトインで約50種あり、すぐに利⽤可能 カスタムDMF 独⾃ロジックが必要な場合にSQLで定義
  6. システムDMFの例 • 25 システムDMFには以下のようなものがある カテゴリ • 関数例 正確性 NULL_COUNT, NULL_PERCENT,

    BLANK_COUNT ⼀意性 DUPLICATE_COUNT, UNIQUE_COUNT 鮮度 FRESHNESS ボリューム ROW_COUNT テーブルへの適⽤例 ALTER TABLE ORDERS ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.DUPLICATE_COUNT ON (ORDER_ID);
  7. カスタムDMFの例 — 鮮度チェック • 独⾃ロジックが必要な場合はカスタムDMFを作成する • 以下は最新データからの経過⽇数を返す鮮度検証の関数の例 CREATE OR REPLACE

    DATA METRIC FUNCTION DM_FRESHNESS_DAYS( ARG_T TABLE(ORDER_DATE DATE) ) RETURNS NUMBER AS $$ SELECT DATEDIFF( DAY, MAX(ORDER_DATE), SNOWFLAKE.CORE.DATA_METRIC_SCHEDULED_TIME() ) FROM ARG_T $$; 26
  8. Expectation — 品質の合否判定 • DMFの結果に閾値を設定し、PASS / FAILで合否判定する仕組み • 結果はHorizon Catalogに連携されるため、品質状態が⼀⽬で分かる

    ALTER TABLE ORDERS ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.DUPLICATE_COUNT ON (ORDER_ID) EXPECTATION dup_check (VALUE = 0); ALTER TABLE ORDERS ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NEGATIVE_COUNT ON (ORDER_AMOUNT) EXPECTATION neg_check (VALUE = 0); ALTER TABLE ORDERS ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (ORDER_DATE) EXPECTATION freshness_check (VALUE <= 604800); 27
  9. Notification Integration • Notification Integrationを使⽤して品質エラー時の通知を設定可能 • Expectation違反や異常を検知した際に、⾃動的に通知が⾶ぶ CREATE NOTIFICATION INTEGRATION

    dq_notify TYPE = EMAIL ENABLED = TRUE ALLOWED_RECIPIENTS = ('[email protected]'); ALTER DATABASE DEVIO_2026_DEMO SET DATA_QUALITY_MONITORING_SETTINGS = $$ notification: enabled: TRUE integrations: [DQ_NOTIFY] $$; 29
  10. Alertによる柔軟な通知 • Notification Integrationより柔軟な条件で通知したい場合はAlertを使う • DMFの結果テーブルを直接SQLでクエリするため、複雑な条件も書ける CREATE OR REPLACE ALERT

    dq_duplicate_alert WAREHOUSE = DEVIO_2026_WH SCHEDULE = 'USING CRON 0 */6 * * * Asia/Tokyo' IF (EXISTS ( SELECT * FROM SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS WHERE METRIC_NAME ILIKE '%DUPLICATE_COUNT%' AND VALUE > 0 )) THEN CALL SYSTEM$SEND_EMAIL( ... ); 30
  11. 異常検出(Anomaly Detection) ※プレビュー • ROW_COUNTを新たに設定し、異常検知の感度を設定する • 検知の感度はLOW / MEDIUM(デフォルト) /

    HIGHから選択する • 偽陽性を防ぎたい場合はLOW、偽陰性を減らしたい場合はHIGHにする ALTER TABLE ORDERS ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON () ANOMALY_DETECTION = TRUE; ALTER TABLE ORDERS MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON () SET SENSITIVITY = 'HIGH'; 32
  12. dbtとの使い分け 36 • よくSnowflakeと併せて利⽤されるdbtもテスト機能は充実している • ただdbtでテストするのは主に、変換パイプラインを実⾏したとき • dbtで変換時の検知、DMFでGOLD層の品質可視化などの使い分けもできる Snowflake dbt

    • 変換前のBRONZE層にDMFを定義 • データ変換時の品質を検証 • 結果をHorizon Catalogで可視化 • 不合格時にパイプラインを⽌められる • 異常検知などの品質管理機能も強化中 • テストがコードとして管理される
  13. まとめ AIが分析する環境になってもデータ品質は最重要 • AIによる分析ができても、その結果はデータ⾃体の品質に左右される • Cortex Analystで正しいSQLを⽣成できても、データの正しさは保証しない Snowflakeにもデータ品質に向けた機能が揃ってきている • 測定‧判定‧通知‧可視化をSnowflake内で⼀貫して実装できる

    • 今後は異常検出機能、Cortex Data Qualityによる品質検査の提案も まずはデータ品質の問題を検知できる仕組みづくりから • SnowflakeのDMFなら外部ツールを使わずにすぐに実装ができる • データの⼊⼝、ユーザー公開しているテーブルから品質検査を始めよう 38