[新機能]Snowsight上でAIを用いてデータ品質チェック(DMFの定義)をセットアップできる機能を試してみた

[新機能]Snowsight上でAIを用いてデータ品質チェック(DMFの定義)をセットアップできる機能を試してみた

2026.02.26

さがらです。

Snowflakeの新機能として、Snowsight上でデータ品質チェックをセットアップできる機能がプレビューとして提供されました。Cortex AIを活用した品質チェックの自動提案や、手動での品質チェック定義がSnowsightのGUIから行えるようになりました。

https://docs.snowflake.com/en/release-notes/2026/other/2026-02-23-data-quality-monitoring-setup

https://docs.snowflake.com/en/user-guide/data-quality-ui-setup

実際に試してみたので、その内容についてまとめてみます。

Snowsightでのデータ品質チェックのセットアップとは

まず前提として、これまでデータ品質のチェックを行うには、SQLでデータメトリック関数(DMF)を定義・設定する必要がありましたが、本機能により以下のことがSnowsightのGUI上から行えるようになります。

  • Cortex Data Quality(AI提案型): Cortex AIがメタデータの特性やデータの利用パターンに基づいて、品質チェックの内容(DMFの定義)を自動で提案してくれる。提案を受け入れると、定期的にデータ品質の問題を検出してくれる
  • 手動定義型: 自身のデータに関する知識に基づいて、品質チェックの種類と基準を手動で定義できる
  • 実行スケジュールの調整: 品質チェックの実行頻度を、時間ベース・スケジュールベース・DMLトリガーベースで設定できる

Cortex Data QualityはSnowflake CortexのAI_COMPLETE関数を活用しており、データやメタデータはSnowflake内に安全に保持されます。また、Snowflakeのアクセス制御を完全に尊重し、ユーザーがアクセスできるデータのみに基づいて提案が行われます。

前提条件

公式Docからの引用ですが、エディションやロールなど、以下に気をつける必要があります。

  • Snowflakeのエディション:Enterprise以上
    • 今回の検証は、AWS TokyoリージョンのEnterpriseエディションのSnowflakeトライアルアカウントで行っています。
  • 操作するロールに必要な権限
    • 対象テーブルに対するOWNERSHIP権限
    • アカウントに対するEXECUTE DATA METRIC FUNCTION権限
    • SNOWFLAKE.DATA_METRIC_USERデータベースロール
    • SNOWFLAKE.CORTEX_USERデータベースロール
  • LLMのModelについて
    • CORTEX_MODELS_ALLOWLISTアカウントパラメータでmistral-7bおよびllama3.1-8bモデルが許可されていること(デフォルトでは許可済み)

テスト用データの準備・権限設定

以下のSQLを実行して、検証用のオブジェクトとサンプルデータを作成します。

このデータには、以下の品質問題を意図的に含めています。

  • CUSTOMER_NAMEがNULLのレコード(ORDER_ID: 5, 13)
  • EMAILがNULLのレコード(ORDER_ID: 8, 13)
  • EMAILの形式が不正なレコード(ORDER_ID: 22 → invalid-email)
  • QUANTITYが負の値のレコード(ORDER_ID: 17 → -1)
  • QUANTITYが0のレコード(ORDER_ID: 19 → 0)
  • TOTAL_AMOUNTが負の値のレコード(ORDER_ID: 17 → -25.00)
  • STATUSに想定外の値が入っているレコード(ORDER_ID: 25 → INVALID_STATUS)
-- 検証用のデータベースとスキーマを作成
USE ROLE SYSADMIN;
CREATE DATABASE IF NOT EXISTS DATA_QUALITY_DEMO;
CREATE SCHEMA IF NOT EXISTS DATA_QUALITY_DEMO.PUBLIC;

-- 検証用のウェアハウスを作成(既存のものがあればそちらを使用してもOK)
CREATE WAREHOUSE IF NOT EXISTS DATA_QUALITY_WH
  WAREHOUSE_SIZE = 'XSMALL'
  AUTO_SUSPEND = 60
  AUTO_RESUME = TRUE;

USE DATABASE DATA_QUALITY_DEMO;
USE SCHEMA PUBLIC;
USE WAREHOUSE DATA_QUALITY_WH;

-- 検証用テーブルを作成(ECサイトの注文データを想定)
CREATE OR REPLACE TABLE ORDERS (
    ORDER_ID INT,
    CUSTOMER_NAME VARCHAR(100),
    EMAIL VARCHAR(200),
    ORDER_DATE DATE,
    PRODUCT_NAME VARCHAR(200),
    QUANTITY INT,
    UNIT_PRICE DECIMAL(10, 2),
    TOTAL_AMOUNT DECIMAL(10, 2),
    STATUS VARCHAR(50),
    SHIPPING_COUNTRY VARCHAR(100),
    CREATED_AT TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP()
);

-- サンプルデータを挿入(20レコード以上、意図的に品質問題を含むデータも混在させる)
INSERT INTO ORDERS (ORDER_ID, CUSTOMER_NAME, EMAIL, ORDER_DATE, PRODUCT_NAME, QUANTITY, UNIT_PRICE, TOTAL_AMOUNT, STATUS, SHIPPING_COUNTRY)
VALUES
    (1, 'Taro Yamada', 'taro.yamada@example.com', '2025-01-05', 'Wireless Mouse', 2, 25.00, 50.00, 'Shipped', 'Japan'),
    (2, 'Hanako Suzuki', 'hanako.suzuki@example.com', '2025-01-06', 'Mechanical Keyboard', 1, 89.99, 89.99, 'Delivered', 'Japan'),
    (3, 'John Smith', 'john.smith@example.com', '2025-01-07', 'USB-C Hub', 3, 35.00, 105.00, 'Shipped', 'USA'),
    (4, 'Emily Johnson', 'emily.j@example.com', '2025-01-08', 'Monitor Stand', 1, 45.00, 45.00, 'Processing', 'USA'),
    (5, NULL, 'unknown@example.com', '2025-01-09', 'Webcam HD', 1, 59.99, 59.99, 'Shipped', 'Canada'),
    (6, 'Kenji Tanaka', 'kenji.tanaka@example.com', '2025-01-10', 'Laptop Sleeve', 2, 29.99, 59.98, 'Delivered', 'Japan'),
    (7, 'Maria Garcia', 'maria.garcia@example.com', '2025-01-11', 'Wireless Earbuds', 1, 79.99, 79.99, 'Shipped', 'Spain'),
    (8, 'Li Wei', NULL, '2025-01-12', 'Phone Case', 5, 12.00, 60.00, 'Delivered', 'China'),
    (9, 'Sakura Ito', 'sakura.ito@example.com', '2025-01-13', 'Desk Lamp', 1, 42.00, 42.00, 'Cancelled', 'Japan'),
    (10, 'David Brown', 'david.brown@example.com', '2025-01-14', 'Portable Charger', 2, 30.00, 60.00, 'Shipped', 'UK'),
    (11, 'Yuki Watanabe', 'yuki.w@example.com', '2025-01-15', 'Bluetooth Speaker', 1, 55.00, 55.00, 'Processing', 'Japan'),
    (12, 'Anna Mueller', 'anna.mueller@example.com', '2025-01-16', 'Tablet Stand', 1, 25.00, 25.00, 'Delivered', 'Germany'),
    (13, NULL, NULL, '2025-01-17', 'HDMI Cable', 10, 8.99, 89.90, 'Shipped', 'France'),
    (14, 'Ryo Nakamura', 'ryo.nakamura@example.com', '2025-01-18', 'Mouse Pad XL', 1, 19.99, 19.99, 'Delivered', 'Japan'),
    (15, 'Sophie Martin', 'sophie.martin@example.com', '2025-01-19', 'USB Flash Drive', 3, 15.00, 45.00, 'Shipped', 'France'),
    (16, 'Takeshi Kobayashi', 'takeshi.k@example.com', '2025-01-20', 'Webcam HD', 1, 59.99, 59.99, 'Delivered', 'Japan'),
    (17, 'Chen Mei', 'chen.mei@example.com', '2025-01-21', 'Wireless Mouse', -1, 25.00, -25.00, 'Returned', 'China'),
    (18, 'James Wilson', 'james.wilson@example.com', '2025-01-22', 'Mechanical Keyboard', 1, 89.99, 89.99, 'Processing', 'Australia'),
    (19, 'Aoi Sato', 'aoi.sato@example.com', '2025-01-23', 'Monitor Stand', 0, 45.00, 0.00, 'Cancelled', 'Japan'),
    (20, 'Lucas Dubois', 'lucas.dubois@example.com', '2025-01-24', 'Laptop Sleeve', 2, 29.99, 59.98, 'Shipped', 'France'),
    (21, 'Mika Yoshida', 'mika.yoshida@example.com', '2025-01-25', 'Desk Lamp', 1, 42.00, 42.00, 'Delivered', 'Japan'),
    (22, 'Robert Taylor', 'invalid-email', '2025-01-26', 'Portable Charger', 1, 30.00, 30.00, 'Shipped', 'USA'),
    (23, 'Haruto Kimura', 'haruto.k@example.com', '2025-01-27', 'Bluetooth Speaker', 2, 55.00, 110.00, 'Delivered', 'Japan'),
    (24, 'Isabella Rossi', 'isabella.rossi@example.com', '2025-01-28', 'Phone Case', 3, 12.00, 36.00, 'Shipped', 'Italy'),
    (25, 'Yuto Hayashi', 'yuto.hayashi@example.com', '2025-01-29', 'USB-C Hub', 1, 35.00, 35.00, 'INVALID_STATUS', 'Japan');

次に、使用するロールに対して必要な権限を付与します。今回はSYSADMINを対象に権限を設定します。

USE ROLE ACCOUNTADMIN;

-- EXECUTE DATA METRIC FUNCTION権限の付与
GRANT EXECUTE DATA METRIC FUNCTION ON ACCOUNT TO ROLE SYSADMIN;

-- データベースロールの付与
GRANT DATABASE ROLE SNOWFLAKE.DATA_METRIC_USER TO ROLE SYSADMIN;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE SYSADMIN;

手動でデータ品質チェックを設定

先程作成したデータを対象に、手動でデータ品質チェックを設定してみます。

SnowsightのDatabase Explorerから対象のテーブルを開き、Data Qualityタブを押します。

2026-02-26_08h35_00

下図のように画面が表示されるため、Setup manuallyを押します。

2026-02-26_08h36_10

下図のようにどのデータ品質チェックを設定するか候補が表示されるため、設定したい項目を押します。(今回はNullsを押します。)

2026-02-26_08h36_38

すると、Nullsの設定を行なうために、英文の中にドロップダウンのリストが表示された画面が表示されます。

2026-02-26_08h39_18

今回は下図のように設定してみました。Edit SQLを押すと、どのようなDMFの定義クエリが発行されるかを確認できます。問題なければ、右下のSaveを押します。

2026-02-26_08h41_22

2026-02-26_08h41_45

Data QualityのMonitoringを見ると、Accuracy欄に設定した品質チェックが追加されていることがわかります。

2026-02-26_08h44_15

また、Monitoring欄のSettingsを押すと、どの頻度でデータ品質チェックを行なうかを設定変更できます。(デフォルトは、1時間毎の実行設定でした)

2026-02-26_09h02_21

AIを用いたデータ品質チェックを設定(Cortex Data Quality)

続いて、AIを用いたデータ品質チェックを設定してみます。(こちらが機能名としてはCortex Data Qualityという名称となっています。)

対象データのData Qualityタブで+ Add quality checkを押し、Generate with Cortex Data Qualityを押します。

2026-02-26_09h37_02

下図の画面が表示され、AIによりデータの内容をスキャンし、必要なデータ品質チェックを作成してくれます。

2026-02-26_09h37_32

今回のデータでは約10秒後、下図のように10個のデータ品質チェックが生成されました。

一番右のWHY IS THIS RECOMMENDED?を見ると、なぜこのデータ品質チェックが提案されたか理由が書いてあるのも嬉しいですね。

必要なデータ品質チェックにチェックを入れて、右下のApplyを押します。

2026-02-26_09h43_29

ちなみにApplyを押した後、私が今回試したデータでは下図のように表示されました。権限は足りているはずなのですが、ちょっと原因わからずでした…

2026-02-26_09h45_27

この後でData QualityのMonitoring画面を見ると、下図のようにデータ品質チェックが追加されていることがわかります。(1つのチェックがエラーになっているのは、先に手動で設定したチェックが1時間経過して実行されたためです。)

2026-02-26_09h48_48

設定したデータ品質チェックを実行してみる

最後に、設定したデータ品質チェックを実行してみます。

Settingsから、Every 5 minutesに変更して、5分ほど待ってみます。

2026-02-26_09h50_19

5分ほど経過後、Data QualityのMonitoring画面を見ると、下図のように表示されていました。過去の品質チェックの状況も履歴として確認できるため、品質をモニタリングする機能としては申し分ないと思います。(欲を言えばデータ品質チェックをクリアできなかった場合に通知を行えると良いのですが、少なくともSnowsightだけでの定義は現時点では難しそうです。)

2026-02-26_10h06_52

2026-02-26_10h07_12

2026-02-26_10h08_37

最後に

Snowsight上でAIを用いてデータ品質チェックをセットアップできる機能を試してみたので、その内容についてまとめてみました。

私は以前Data Qualityタブが追加されたときにも検証していたのですが、やはりDMFをSQLクエリで定義するところに工数がかかりネックに感じていました。
しかし、今回の新機能ではこのDMFの定義がAIに頼って簡単に実装できる点が素晴らしいと感じました!

すぐに試せる機能ですので、ぜひご活用ください。

この記事をシェアする

FacebookHatena blogX

関連記事