チュートリアル:データメトリック関数入門¶
概要¶
このチュートリアルは、 Snowsight のワークシートを使用するか、 SnowSQL などの CLI クライアントを使用して完了できます。コード例を貼り付けて実行します。
このチュートリアルが修了するまでには、次の方法を学習します。
データ品質を測定するためのカスタムデータメトリック関数(DMF)を作成します。
DMFを管理して、サーバーレスクレジット使用状況を最適化します。
スケジュールされたDMFの呼び出しに関連するサーバーレスのクレジット使用状況を監視します。
アクセス制御の設定¶
このチュートリアルを完了するには、以下のような必要なアクセス権をすべて持つ単一のカスタムロールを使用してください:
データベースを作成することで、スキーマの作成、スキーマ内のDMFの作成、スキーマ内のテーブルの作成が可能になります。
クエリ操作を実行するウェアハウスの作成
スケジュールされたDMFを呼び出した結果を含むビューのクエリ
サーバーレスコンピューティング使用情報を含むビューのクエリ
チュートリアル全体で使用する dq_tutorial_role
ロールを作成します。
USE ROLE ACCOUNTADMIN; CREATE ROLE IF NOT EXISTS dq_tutorial_role;
権限を付与し、アプリケーションロールとデータベースロールを dq_tutorial_role
に付与します。
GRANT CREATE DATABASE ON ACCOUNT TO ROLE dq_tutorial_role; GRANT EXECUTE DATA METRIC FUNCTION ON ACCOUNT TO ROLE dq_tutorial_role; GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE dq_tutorial_role; GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE dq_tutorial_role; GRANT DATABASE ROLE SNOWFLAKE.DATA_METRIC_USER TO ROLE dq_tutorial_role;
データを含むテーブルをクエリするウェアハウスを作成し、 dq_tutorial_role
ロールにロールの USAGE 権限を付与します。
CREATE WAREHOUSE IF NOT EXISTS dq_tutorial_wh; GRANT USAGE ON WAREHOUSE dq_tutorial_wh TO ROLE dq_tutorial_role;
dq_tutorial_role
ロールへの付与を確認します。
SHOW GRANTS TO ROLE dq_tutorial_role;
ロール階層を確立し、このチュートリアルを完了できるユーザーにロールを付与します(jsmith
の値を置換します)。
GRANT ROLE dq_tutorial_role TO ROLE SYSADMIN; GRANT ROLE dq_tutorial_role TO USER jsmith;
データ設定¶
このチュートリアルのデータやDMFの管理をしやすくするために、これらのオブジェクトを格納する専用のデータベースを作成します。
テーブルを作成する¶
USE ROLE dq_tutorial_role;
CREATE DATABASE IF NOT EXISTS dq_tutorial_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 dq_tutorial_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);
DMFsを作成して処理する¶
以下のセクションでは、無効なメールアドレスのカウントを測定するために、ユーザー定義のDMFを作成し、その後以下のことを行います。
DMFを5分ごとに実行するようにスケジュールします。
DMFテーブル参照を確認します(DMFが設定されているテーブルを探します)。
スケジュールされたDMFを呼び出した結果を含む組み込みビューをクエリします。
不必要なサーバーレスのクレジット使用状況を避けるため、テーブルからDMFの設定を解除します。
DMF の作成¶
指定した正規表現に一致しない列のメールアドレスの数を返すデータメトリック関数(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';
テーブルにスケジュールを設定する¶
DMFスケジュールは、テーブルのすべてのDMFsがいつ実行されるかを定義します。現在のところ、5分が設定可能な下限です。
ALTER TABLE customers SET DATA_METRIC_SCHEDULE = '5 MINUTE';
注釈
チュートリアルの目的上、スケジュールは5分に設定されています。しかし、DMFユースケースを最適化した後、テーブルに影響を与えるDMLの操作に関連するcron式やトリガーイベントなど、他のスケジュール設定を試してみてください。
DMFsをテーブルに設定し、参照を確認します。¶
DMFをテーブルに関連付ける:
ALTER TABLE customers ADD DATA METRIC FUNCTION invalid_email_count ON (email);
スケジュールは5分間にセットされているため、SnowflakeがDMFを呼び出して結果を処理するまで5分間待つ必要があります。とりあえず、 DATA_METRIC_FUNCTION_REFERENCES Information Schemaテーブル関数を呼び出すことで、DMF がテーブルに関連付けられていることを確認できます。
SELECT * FROM TABLE(INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES( REF_ENTITY_NAME => 'dq_tutorial_db.sch.customers', REF_ENTITY_DOMAIN => 'TABLE'));
DMF結果を表示する¶
スケジュールされたDMFを呼び出した結果はDATA_QUALITY_MONITORING_RESULTSビューに保存されます。無効なメールアドレスの数を調べるには、 DATA_QUALITY_MONITORING_RESULTS ビューをクエリして、スケジュールされた DMF を呼び出した結果を確認します。
SELECT scheduled_time, measurement_time, table_name, metric_name, value FROM SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS WHERE TRUE AND METRIC_NAME = 'INVALID_EMAIL_COUNT' AND METRIC_DATABASE = 'DQ_TUTORIAL_DB' LIMIT 100;
その結果では、 value
列に 1
が含まれていることがわかります。この数は、 テーブルに値を挿入する セクションの最初の INSERT ステートメントに対応する、不適切な形式のメールアドレス1件に対応します。
テーブルからDMFsの設定を解除します。¶
DMFの定義、スケジュール、および予想される結果に基づいて、DMFが予想通りに機能していることを確認しました。
不必要なサーバーレスのクレジット使用状況を避けるために、テーブルからDMFの設定を解除します。
ALTER TABLE customers DROP DATA METRIC FUNCTION invalid_email_count ON (email);
サーバーレスクレジット消費量を表示する¶
スケジュールされたデータメトリック関数(DMFs)を呼び出すには、 サーバーレスコンピューティングリソース が必要です。Account Usageビュー DATA_QUALITY_MONITORING_USAGE_HISTORY をクエリして、 DMF サーバーレスコンピューティングコスト を表示できます。
ビューには1~2時間の遅延があるため、その時間が経過してからクエリを実行します。このステップには後で戻ることができます。
ビューをクエリし、結果をフィルターして、スケジュールされたDMFの時間間隔を含めます。
USE ROLE dq_tutorial_role; SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_QUALITY_MONITORING_USAGE_HISTORY WHERE TRUE AND START_TIME >= CURRENT_TIMESTAMP - INTERVAL '3 days' LIMIT 100;
クリーンアップ、まとめ、追加リソース¶
おめでとうございます。これでこのチュートリアルは終了です。
数分かけて、短い要約とこのチュートリアルで説明されている重要な点を確認します。
このチュートリアルで作成したオブジェクトをすべて削除して、クリーンアップすることを検討してください。詳細は、Snowflakeドキュメントの他のトピックをご参照ください。
概要と重要なポイント¶
まとめると、以下のことを学びました。
カスタムDMFを作成してデータ品質を測定し、DMFを管理してサーバーレスクレジット使用状況を最適化します。
スケジュールされたDMFの呼び出しに関連するサーバーレスのクレジット使用状況を監視します。
チュートリアルのオブジェクトをドロップする¶
チュートリアルを繰り返す予定がある場合は、作成したオブジェクトを保持することができます。
そうでない場合は、以下のようにチュートリアルのオブジェクトをドロップします。
USE ROLE ACCOUNTADMIN;
DROP DATABASE dq_tutorial_db;
DROP WAREHOUSE dq_tutorial_wh;
DROP ROLE dq_tutorial_role;
次の内容¶
次のリソースを使用して、Snowflakeについて引き続き学習しましょう。
データ品質とデータメトリック関数の紹介 から始めて、DMFs の詳細を学習します。
Snowflakeチュートリアル トピックで、Snowflakeが提供する他のチュートリアルを完了してください。