はじめに
こんにちは、Kyota.Takahashiです。
今回は2024年3月に発表されたData Quality Monitoring and data metric functionsが気になったので
実際に触りつつ特徴をまとめたブログを執筆いたしました。
Data Quality Monitoring and data metric functionsとは
2024年3月にリリースされたSnowflakeの新機能で
データ重複やnull値、独自にカスタムした異常値を発見する機能です。
data metric functions(以下DMF)はデータ品質担保の取り組みを強化します。
余談ですがデータ品質はDMBOKのデータマネジメントの項目の一つになっています。
データ主導の意思決定をするためにはデータ品質の担保は欠かせないという思想が背景にあります。
また概念的な話を抜きにしても、データを統括する部署や担当者レベルの方にも役立つ機能ともいえるでしょう。
カスタマイズや扱うデータの性質にも寄りますが、DMFを活用することで以下の課題が解消される可能性があります。
・ユーザーからの逐次報告で都度対応するみたいな流れを断ち切りたい
・せめて重要なデータだけでもいいから先回りして修正したい
・予期していないデータを自動で特定したい
ちなみにDMFはEnterprise Edition (またはそれ以上) のすべてのアカウントでしか利用できません。
trial環境でも試してみましたがDATA_QUALITY_MONITORING_RESULTSが閲覧できないなどの制約がありました。
請求
実践でも見せますがDMFは設定したテーブルに問題がないか一定の頻度でチェックするので
スケジュールされたDMFがオブジェクトで計算された場合、料金が発生します。
使用したクレジットは、毎月の請求書の「データ品質モニタリング」カテゴリに表示されるそうですが
DATA_QUALITY_MONITORING_USAGE_HISTORYをクエリしてアカウントのDMFの使用に関するクレジット消費を追跡できます。
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_QUALITY_MONITORING_USAGE_HISTORY ;
クエリをしてみた結果がこちら。
実行ごとに、どのテーブルでいくら使われているかが分かります。
制限事項
DMFの制限事項には主に以下のようなものがあります。
この他にも制限事項がありますので公式ドキュメントをご確認ください。
・動的テーブル、外部テーブルに設定できない
・CLONE操作、CREATE TABLE … LIKE操作でターゲットテーブルに設定できない
・アカウントごとにオブジェクトにDMFを関連付けることができるのは合計1,000個まで
実践
権限付与
ロールDMF_TESTにDMFの実行や設定ができるよう権限を付与します。
//ロール作成,ユーザー作成
USE ROLE ACCOUNTADMIN;
CREATE ROLE DMF_TEST;
CREATE USER Phosphophyllite;
//権限付与、データベースロールを付与
GRANT CREATE DATABASE ON ACCOUNT TO ROLE DMF_TEST;
GRANT EXECUTE DATA METRIC FUNCTION ON ACCOUNT TO ROLE DMF_TEST;
GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE DMF_TEST;
GRANT DATABASE ROLE SNOWFLAKE.DATA_METRIC_USER TO ROLE DMF_TEST;
//ウェアハウス作成、ロールに対しUSAGE権限を付与
CREATE WAREHOUSE IF NOT EXISTS DMF_TEST_WH;
GRANT USAGE ON WAREHOUSE DMF_TEST_WH TO ROLE DMF_TEST;
//ユーザーにロール付与
GRANT ROLE DMF_TEST TO ROLE SYSADMIN;
GRANT ROLE DMF_TEST TO USER Phosphophyllite;
テーブル作成
//テーブル作成
USE ROLE DMF_TEST;
CREATE DATABASE IF NOT EXISTS DMF_TEST_DB;
CREATE SCHEMA IF NOT EXISTS SCH;
CREATE TABLE customers (
account_number NUMBER(38,0),
first_name VARCHAR(16777216),
last_name VARCHAR(16777216),
email VARCHAR(16777216),
phone VARCHAR(16777216),
created_at TIMESTAMP_NTZ(9),
street VARCHAR(16777216),
city VARCHAR(16777216),
state VARCHAR(16777216),
country VARCHAR(16777216),
zip_code NUMBER(38,0)
);
//データ挿入
USE WAREHOUSE DMF_TEST_WH;
INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code)
VALUES (1589420, 'san francisco', 'usa', 'john.doe@', 'john', 'doe', 1234567890, null, null, null);
INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code)
VALUES (8028387, 'san francisco', 'usa', 'bart.simpson@example.com', 'bart', 'simpson', 1012023030, null, 'market st', 94102);
INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code)
VALUES
(1589420, 'san francisco', 'usa', 'john.doe@example.com', 'john', 'doe', 1234567890, 'ca', 'concar dr', 94402),
(2834123, 'san mateo', 'usa', 'jane.doe@example.com', 'jane', 'doe', 3641252911, 'ca', 'concar dr', 94402),
(4829381, 'san mateo', 'usa', 'jim.doe@example.com', 'jim', 'doe', 3641252912, 'ca', 'concar dr', 94402),
(9821802, 'san francisco', 'usa', 'susan.smith@example.com', 'susan', 'smith', 1234567891, 'ca', 'geary st', 94121),
(8028387, 'san francisco', 'usa', 'bart.simpson@example.com', 'bart', 'simpson', 1012023030, 'ca', 'market st', 94102);
DMFの作成と操作
作成と設定はシンプルです。
今回はチュートリアルに倣い、正規表現に一致しない電子メールアドレスの数を返すDMFを作成します。
作成後DMFの実行スケジュールを5分間に設定します。最後にテーブルにDMFをセットして完了です。
//データメトリック関数の作成
CREATE DATA METRIC FUNCTION IF NOT EXISTS
invalid_email_count (ARG_T table(ARG_C1 STRING))
RETURNS NUMBER AS
'SELECT COUNT_IF(FALSE = (
ARG_C1 REGEXP ''^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$''))
FROM ARG_T';
//スケジュールの作成
ALTER TABLE customers SET DATA_METRIC_SCHEDULE = '5 MINUTE';
//テーブルにDMFをセット
ALTER TABLE customers ADD DATA METRIC FUNCTION
invalid_email_count ON (email);
スケジュールされた DMF を呼び出した結果は
DATA_QUALITY_MONITORING_RESULTS ビューに保存されます。
※trial環境にLOCALスキーマが無かったので参照できませんでした。残念。
スケジュール設定後は延々とクレジットを消費し続けるので試しでやっている場合は解除しましょう。
//解除
ALTER TABLE customers DROP DATA METRIC FUNCTION
invalid_email_count ON (email);
公式ドキュメント
参考にした公式ドキュメントはこちらです。
Introduction to Data Quality and data metric functions
https://docs.snowflake.com/en/user-guide/data-quality-intro
Tutorial: Getting started with data metric functions
https://docs.snowflake.com/en/user-guide/tutorials/data-quality-tutorial-start#introduction
DATA_QUALITY_MONITORING_USAGE_HISTORY view
https://docs.snowflake.com/en/sql-reference/account-usage/data_quality_monitoring_usage_history
おわりに
正規表現の設定とクレジット管理が大変そうですが、データ品質のアラートを上げてくれるのは画期的な機能ですね。
重要なデータだけでも設定するとデータ品質が担保されて安心かもです。
よろしければぜひ試してみてください。
**************
truestarでは、Snowflake導入検討、導入支援や環境構築まで幅広くサポート可能です。
Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!
また、truestarではSnowflake Marketplaceにて、加工済みオープンデータを無償提供するPrepper Open Data Bank、全国の飲食店の情報を集めたデータセットの販売を行っております。(サービスリンク)
これまでのSnowflakeに関する記事はこちら
***************