[新機能]Snowsight上でAIを用いてデータ品質チェック(DMFの定義)をセットアップできる機能を試してみた
さがらです。
Snowflakeの新機能として、Snowsight上でデータ品質チェックをセットアップできる機能がプレビューとして提供されました。Cortex AIを活用した品質チェックの自動提案や、手動での品質チェック定義がSnowsightのGUIから行えるようになりました。
実際に試してみたので、その内容についてまとめてみます。
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タブを押します。

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

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

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

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


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

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

AIを用いたデータ品質チェックを設定(Cortex Data Quality)
続いて、AIを用いたデータ品質チェックを設定してみます。(こちらが機能名としてはCortex Data Qualityという名称となっています。)
対象データのData Qualityタブで+ Add quality checkを押し、Generate with Cortex Data Qualityを押します。

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

今回のデータでは約10秒後、下図のように10個のデータ品質チェックが生成されました。
一番右のWHY IS THIS RECOMMENDED?を見ると、なぜこのデータ品質チェックが提案されたか理由が書いてあるのも嬉しいですね。
必要なデータ品質チェックにチェックを入れて、右下のApplyを押します。

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

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

設定したデータ品質チェックを実行してみる
最後に、設定したデータ品質チェックを実行してみます。
Settingsから、Every 5 minutesに変更して、5分ほど待ってみます。

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



最後に
Snowsight上でAIを用いてデータ品質チェックをセットアップできる機能を試してみたので、その内容についてまとめてみました。
私は以前Data Qualityタブが追加されたときにも検証していたのですが、やはりDMFをSQLクエリで定義するところに工数がかかりネックに感じていました。
しかし、今回の新機能ではこのDMFの定義がAIに頼って簡単に実装できる点が素晴らしいと感じました!
すぐに試せる機能ですので、ぜひご活用ください。








