データメトリック関数の操作

このトピックの各例を試す前に、使用するロールが必要な アクセス制御要件 を満たしていることを確認してください。

今すぐ対策:システムDMFの例

DMFを呼び出すには、以下の構文を使用します。

SELECT <data_metric_function>(<query>)
Copy

条件:

data_metric_function

システムまたはユーザー定義のDMFを指定します。

query

テーブルまたはビューのSQLクエリを指定します。

クエリの列はDMFシグネチャの列引数と一致している必要があります。

注釈

これらのシステムDMFsは、引数を取らないため、この構文には従いません:

システムDMFを呼び出して、すぐにデータ品質の測定を開始してください。

例えば、 NULL_COUNT (システムデータメトリック関数) システム DMF を呼び出して、 SSN 列の NULL 値(US 社会保障番号)の数を表示します。

USE ROLE data_engineer;
SELECT SNOWFLAKE.CORE.NULL_COUNT(
  SELECT ssn
  FROM hr.tables.empl_info
);
Copy

イベントテーブルをクエリして結果を表示できます。詳細については、 DMF結果を表示する をご参照ください。

自分のDMFを作成する

CREATE DATA METRIC FUNCTION コマンドを使用して自身の DMFs を作成します。

テーブルの最初の3列を評価する際に、 NULL 値を含まない行の総数を返す COUNT 関数を呼び出す DMF を作成します。

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy

DMF を割り当てたテーブル以外のテーブルを参照する例については、 例: 外部キー参照 をご参照ください。

注釈

DMF 定義を表示する必要がある場合は、 DESCRIBE FUNCTION (DMF) コマンドを使用します。

DMFのプロパティを表示する

プロパティを表示するには、DMFを記述します。

DESC FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy
+-----------+---------------------------------------------------------------------+
| property  | value                                                               |
+-----------+---------------------------------------------------------------------+
| signature | (ARG_T TABLE(ARG_C1 NUMBER, ARG_C2 NUMBER, ARG_C3 NUMBER))          |
| returns   | NUMBER(38,0)                                                        |
| language  | SQL                                                                 |
| body      | SELECT COUNT(*) FROM arg_t WHERE arg_c1>0 AND arg_c2>0 AND arg_c3>0 |
+-----------+---------------------------------------------------------------------+

DMFをセキュリティ保護する

DMF をセキュアな DMF にします。

ALTER FUNCTION governance.dmfs.count_positive_numbers(
 TABLE(
   NUMBER,
   NUMBER,
   NUMBER
))
SET SECURE;
Copy

DMFsをリストする

SHOW DATA METRIC FUNCTIONS または SHOW FUNCTIONS コマンドを使用して、アカウント、データベース、またはスキーマの DMFs をリストします。

SHOW DATA METRIC FUNCTIONS IN ACCOUNT;
Copy

また、 Information Schema FUNCTIONS ビュー または Account Usage FUNCTIONS ビュー をクエリして、それぞれ指定したデータベースまたはアカウントの DMFs をリストすることもできます。

is_data_metric 列は、関数が DMF かどうかを指定します。

DMFでタグを設定する

ALTER FUNCTION コマンドを使用して、DMF にタグを設定します。

ALTER FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(NUMBER, NUMBER, NUMBER))
  SET TAG governance.tags.quality = 'counts';
Copy

実行するDMFsをスケジュールする

テーブルのデータ品質測定を自動化するために、DMFsをスケジュールして実行することができます。

Snowflakeは、テーブルのOWNERSHIP権限を持つロールであるテーブル所有者ロールを使用して、スケジュールされたDMFを呼び出します。テーブル所有者ロールにはこれらの付与が必要です。

  • ユーザー定義のDMFに対するUSAGE権限、およびユーザー定義のDMFを格納するデータベースとスキーマのUSAGE権限。

  • DMFがシステムDMFの場合、DATA_METRIC_USERデータベースロール。

  • アカウントのEXECUTE DATAMETRICFUNCTION権限。

テーブル、ビュー、またはマテリアライズドビューの DATA_METRIC_SCHEDULE オブジェクトパラメータを使用すると、 DMFs を実行できるタイミングをスケジュールできます。テーブルまたはビュー上のすべてのデータメトリック関数は、同じスケジュールに従います。

DMFを実行するスケジュールには3つのアプローチがあります。

  • DMFを指定した分数後に実行するように設定します。

  • cron式を使用して、DMFを特定の頻度で実行するようにスケジュールします。

  • トリガーイベントを使用して、テーブルに新しい行が挿入されるなど、 DML 変更 があった場合に、DMF を実行するようにスケジュールします。ただし、

例:

データメトリック関数のスケジュールを5分ごとに実行するように設定します。

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

データメトリック関数のスケジュールを毎日8:00 AM に実行するように設定します。

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
Copy

平日のみ8:00 AM にデータメトリック関数のスケジュールを実行するように設定します。

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
Copy

1日3回、0600時、1200時、1800時(UTC)に実行するよう、データメトリック関数のスケジュールを設定します。

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
Copy

新しい行の挿入など、一般的な DML 操作でテーブルが変更されたときに実行されるデータメトリック関数を設定します。

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
Copy

SHOW PARAMETERS コマンドを使用すると、サポートされているテーブルオブジェクトの DMF スケジュールを表示できます:

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;
Copy
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| key                  | value                          | default | level | description                                                                                                                  | type   |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| DATA_METRIC_SCHEDULE | USING CRON 0 6,12,18 * * * UTC |         | TABLE | Specify the schedule that data metric functions associated to the table must be executed in order to be used for evaluation. | STRING |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+

表示およびマテリアライズドビューオブジェクトの場合、 TABLE をオブジェクトドメインとして指定し、以下のようにスケジュールを確認します。

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE mydb.public.my_view;
Copy

注釈

テーブルの DMF を変更してから、テーブルに割り当てられている以前の DMFs にスケジューリングの変更が反映されるまで、10分のタイムラグがあります。ただし、 DMF が新たにテーブルに割り当てられた場合は、10分間の遅延は適用されません。DMF スケジューリングと DMF 設定解除操作を慎重に計画し、予想される DMF コスト に合わせてください。

さらに、 DATA_QUALITY_MONITORING_RESULTS ビューにクエリするなどして、 DMF の結果を評価する場合は、クエリで measurement_time 列を評価の基礎として指定します。DMF の評価を開始する内部プロセスがあり、 INSERT 操作などのテーブル更新が、スケジュールされた時刻と測定時刻の間に発生する可能性があります。 measurement_time 列を使用すると、測定時間が DMF の評価時間を示すため、 DMF の結果をより正確に評価できます。

DMFをテーブルまたは表示に追加またはドロップします。

ALTERTABLE、またはALTERVIEWコマンドを使用して、以下を実行します。

  • ALTERTABLE を使ってDMFをテーブルに追加します。

    ALTER TABLE t
      ADD DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
      ON (c1, c2, c3);
    
    Copy
  • ALTERTABLEコマンドを使用してテーブルからDMFを削除します。

    ALTER TABLE t
      DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
      ON (c1, c2, c3);
    
    Copy

注釈

マテリアライズドビューの列に DMF を追加したり、マテリアライズドビューの列から DMF を削除するには、 ALTER VIEW コマンドを使用します。

DMF参照を追跡する

DATA_METRIC_FUNCTION_REFERENCES Account Usageビューをクエリして、アカウント内の DMF 参照を表示したり、 DATA_METRIC_FUNCTION_REFERENCES Information Schemaテーブル関数を呼び出したりして、指定されたテーブルやビューに関連する DMFs や、指定された DMF に関連するテーブルやビューを識別したりすることができます。

例:

テーブルまたは表示に count_positive_numbers という DMF が設定されている各オブジェクト(テーブルまたは表示)の行を返します。

USE DATABASE governance;
USE SCHEMA INFORMATION_SCHEMA;
SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      METRIC_NAME => 'governance.dmfs.count_positive_numbers'
    )
  );
Copy

hr.tables.empl_info という名前のテーブルに割り当てられた各 DMF の行を返します。

USE DATABASE governance;
USE SCHEMA INFORMATION_SCHEMA;
SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      REF_ENTITY_NAME => 'hr.tables.empl_info',
      REF_ENTITY_DOMAIN => 'table'
    )
  );
Copy

DMFを手動で呼び出す

DMFを呼び出すには、以下の構文を使用します。

SELECT <data_metric_function>(<query>)
Copy

条件:

data_metric_function

システムまたはユーザー定義のDMFを指定します。

query

テーブルまたはビューのSQLクエリを指定します。

クエリの列はDMFシグネチャの列引数と一致している必要があります。

注釈

これらのシステムDMFsは、引数を取らないため、この構文には従いません:

DMFに直接呼び出して、結果を表示する:

SELECT governance.dmfs.count_positive_numbers(
    SELECT c1,
           c2,
           c3
    FROM t
  );
Copy

テーブルまたはビューにDMFを設定し、実行するようにスケジュールすると、イベントテーブルからビルドされたビューにクエリを実行して結果を表示できます。詳細については、 DMF結果を表示する をご参照ください。

DMF結果を表示する

DMF 結果を表示するには、まず結果へのアクセスを管理し、次に結果の表示方法を選択する必要があります:

DMF 結果へのアクセスを管理する

スケジュールされた DMF の結果にアクセスするには、3つのオプションがあり、次のセクションで詳しく説明します:

  • オプション1: 専用イベントテーブルをクエリする

  • オプション2: イベントテーブルのフラット化されたバージョンである DATA_QUALITY_MONITORING_RESULTS ビューをクエリする。

  • オプション3: DATA_QUALITY_MONITORING_RESULTS テーブル関数を呼び出す。

DMF 結果へのアクセスをどのように管理したいかによって、以下のシステムアプリケーションロールを別のアカウントレベルのロールに付与します:

アプリケーションロール

メモ

DATA_QUALITY_MONITORING_ADMIN

オプション1、2、3が使えます。

このアプリケーションロールを付与されたロールは、 DATA_QUALITY_MONITORING_VIEWER および DATA_QUALITY_MONITORING_LOOKUP アプリケーションロールを他のロールに付与することができます。

ACCOUNTADMIN ロールを付与されたユーザーは、 DATA_QUALITY_MONITORING_ADMIN アプリケーションロールを他のロールに付与することができます。

DATA_QUALITY_MONITORING_VIEWER

オプション2と3。

DATA_QUALITY_MONITORING_LOOKUP

オプション3のみ。

例えば、DATA_QUALITY_MONITORING_VIEWER システムアプリケーションロールを analyst カスタムロールに付与するには、 GRANT APPLICATION ROLE コマンドを使用します。

USE ROLE ACCOUNTADMIN;
GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE analyst;
Copy

アカウントロールからシステムアプリケーションロールを取り消すには、 REVOKE APPLICATION ROLE コマンドを使用します。

Tip

さらに、 システム DMFs の結果へのアクセスを管理したい場合は、 SNOWFLAKE.DATA_METRIC_USER データベースロールを、結果にアクセスできるアカウントロールに付与します。詳細については、 GRANT DATABASE ROLE をご参照ください。

オプション

スケジュールされた DMF の結果を表示するには、以下のオプションのいずれかを選択します:

オプション1: 専用イベントテーブルをクエリする

このオプションを使用すると、生データにアクセスできるようになり、結果の分析方法に応じて表示、テーブル関数、ストアドプロシージャを作成するなど、派生オブジェクトを使用してデータを後処理する自由度が増します。さらに、このような派生オブジェクトを作成した場合、これらのオブジェクトへのアクセスをさまざまなロールに選択的に付与することができます。例えば、データエンジニアはストアドプロシージャにアクセスして結果を得るためのアプローチを維持し、データアナリストはビューにアクセスして結果を分析することができます。

イベントテーブルの名前は SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW です。

イベントテーブル列については、 イベントテーブル列 をご参照ください。

イベントテーブルをクエリする代表的な例については、 ログおよびトレースに関するチュートリアル をご参照ください。

オプション2: DATA_QUALITY_MONITORING_RESULTS ビューをクエリする

このオプションを使用すると、DMFの結果に簡単にアクセスできるよう、イベントテーブルの生データをフラット化するDATA_QUALITY_MONITORING_RESULTSビューをクエリできます。また、このオプションは、データの後処理が不要な場合や、生データへのアクセスを許可したくない場合に最適です。

共有 SNOWFLAKE データベースにある LOCAL スキーマのビューが存在します: SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS

詳細については、 DATA_QUALITY_MONITORING_RESULTS ビューをご参照ください。

注釈

SNOWFLAKE.GOVERNANCE_VIEWERデータベースロールには、DATA_QUALITY_MONITORING_RESULTSビューをクエリするアクセス権がありません。

オプション3: DATA_QUALITY_MONITORING_RESULTS テーブル関数を呼び出す

このオプションにより、 DATA_QUALITY_MONITORING_RESULTS テーブル関数を呼び出して、 DMF の結果を表示することができます。この関数は、 DATA_QUALITY_MONITORING_RESULTS ビューと同じ列を返します。ただし、関数を呼び出す際に指定できるテーブルは1つだけです。このオプションは、データメトリック関数の結果を1つのテーブルに限定し、他のテーブルやイベントテーブルの測定値へのアクセスを提供しない場合に最適です。

SNOWFLAKE.DATA_QUALITY_MONITORING_LOOKUP アプリケーションロールに加えて、 DATA_QUALITY_MONITORING_RESULTS テーブル関数を呼び出すために使用されるロールも、以下の権限を必要とします:

  • テーブルに対する OWNERSHIP または SELECT。

  • DMF に対する OWNERSHIP または USAGE。

システムからDMFをドロップする

システムからDMFをドロップします。

DROP FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy

制限事項

詳細については、 データ品質の制限 のセクションをご参照ください。