チュートリアル:データメトリック関数入門

概要

このチュートリアルは、 Snowsight のワークシートを使用するか、 SnowSQL などの CLI クライアントを使用して完了できます。コード例を貼り付けて実行します。

このチュートリアルが修了するまでには、次の方法を学習します。

  • データ品質を測定するためのカスタムデータメトリック関数(DMF)を作成します。

  • DMFを管理して、サーバーレスクレジット使用状況を最適化します。

  • スケジュールされたDMFの呼び出しに関連するサーバーレスのクレジット使用状況を監視します。

アクセス制御の設定

このチュートリアルを完了するには、以下のような必要なアクセス権をすべて持つ単一のカスタムロールを使用してください:

  • データベースを作成することで、スキーマの作成、スキーマ内のDMFの作成、スキーマ内のテーブルの作成が可能になります。

  • クエリ操作を実行するウェアハウスの作成

  • スケジュールされたDMFを呼び出した結果を含むビューのクエリ

  • サーバーレスコンピューティング使用情報を含むビューのクエリ

チュートリアル全体で使用する dq_tutorial_role ロールを作成します。

USE ROLE ACCOUNTADMIN;
CREATE ROLE IF NOT EXISTS dq_tutorial_role;
Copy

権限を付与し、アプリケーションロールとデータベースロールを 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;
Copy

データを含むテーブルをクエリするウェアハウスを作成し、 dq_tutorial_role ロールにロールの USAGE 権限を付与します。

CREATE WAREHOUSE IF NOT EXISTS dq_tutorial_wh;
GRANT USAGE ON WAREHOUSE dq_tutorial_wh TO ROLE dq_tutorial_role;
Copy

dq_tutorial_role ロールへの付与を確認します。

SHOW GRANTS TO ROLE dq_tutorial_role;
Copy

ロール階層を確立し、このチュートリアルを完了できるユーザーにロールを付与します(jsmith の値を置換します)。

GRANT ROLE dq_tutorial_role TO ROLE SYSADMIN;
GRANT ROLE dq_tutorial_role TO USER jsmith;
Copy

データ設定

このチュートリアルのデータや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)
);
Copy

テーブルに値を挿入する

テーブルにデータを追加します。

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);
Copy

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';
Copy

テーブルにスケジュールを設定する

DMFスケジュールは、テーブルのすべてのDMFsがいつ実行されるかを定義します。現在のところ、5分が設定可能な下限です。

ALTER TABLE customers SET DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

注釈

チュートリアルの目的上、スケジュールは5分に設定されています。しかし、DMFユースケースを最適化した後、テーブルに影響を与えるDMLの操作に関連するcron式やトリガーイベントなど、他のスケジュール設定を試してみてください。

DMFsをテーブルに設定し、参照を確認します。

DMFをテーブルに関連付ける:

ALTER TABLE customers ADD DATA METRIC FUNCTION
  invalid_email_count ON (email);
Copy

スケジュールは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'));
Copy

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;
Copy

その結果では、 value 列に 1 が含まれていることがわかります。この数は、 テーブルに値を挿入する セクションの最初の INSERT ステートメントに対応する、不適切な形式のメールアドレス1件に対応します。

テーブルからDMFsの設定を解除します。

DMFの定義、スケジュール、および予想される結果に基づいて、DMFが予想通りに機能していることを確認しました。

不必要なサーバーレスのクレジット使用状況を避けるために、テーブルからDMFの設定を解除します。

ALTER TABLE customers DROP DATA METRIC FUNCTION
  invalid_email_count ON (email);
Copy

サーバーレスクレジット消費量を表示する

スケジュールされたデータメトリック関数(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;
Copy

クリーンアップ、まとめ、追加リソース

おめでとうございます。これでこのチュートリアルは終了です。

数分かけて、短い要約とこのチュートリアルで説明されている重要な点を確認します。

このチュートリアルで作成したオブジェクトをすべて削除して、クリーンアップすることを検討してください。詳細は、Snowflakeドキュメントの他のトピックをご参照ください。

概要と重要なポイント

まとめると、以下のことを学びました。

  • カスタムDMFを作成してデータ品質を測定し、DMFを管理してサーバーレスクレジット使用状況を最適化します。

  • スケジュールされたDMFの呼び出しに関連するサーバーレスのクレジット使用状況を監視します。

チュートリアルのオブジェクトをドロップする

チュートリアルを繰り返す予定がある場合は、作成したオブジェクトを保持することができます。

そうでない場合は、以下のようにチュートリアルのオブジェクトをドロップします。

USE ROLE ACCOUNTADMIN;
DROP DATABASE dq_tutorial_db;
DROP WAREHOUSE dq_tutorial_wh;
DROP ROLE dq_tutorial_role;
Copy

次の内容

次のリソースを使用して、Snowflakeについて引き続き学習しましょう。