データメトリック関数の操作¶
このトピックの各例を試す前に、使用するロールが必要な アクセス制御要件 を満たしていることを確認してください。
今すぐ対策:システムDMFの例¶
DMFを呼び出すには、以下の構文を使用します。
SELECT <data_metric_function>(<query>)
条件:
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
);
イベントテーブルをクエリして結果を表示できます。詳細については、 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
$$;
DMF を割り当てたテーブル以外のテーブルを参照する例については、 例: 外部キー参照 をご参照ください。
注釈
DMF 定義を表示する必要がある場合は、 DESCRIBE FUNCTION (DMF) コマンドを使用します。
DMFのプロパティを表示する¶
プロパティを表示するには、DMFを記述します。
DESC FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER, NUMBER, NUMBER
)
);
+-----------+---------------------------------------------------------------------+
| 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;
DMFsをリストする¶
SHOW DATA METRIC FUNCTIONS または SHOW FUNCTIONS コマンドを使用して、アカウント、データベース、またはスキーマの DMFs をリストします。
SHOW DATA METRIC FUNCTIONS IN ACCOUNT;
また、 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';
実行する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 を実行するようにスケジュールします。ただし、
テーブルの再クラスタリング は、 DMF の実行をトリガーしません。
トリガーアプローチは、特定の種類のテーブルにのみ利用可能です。詳細については、 ALTER TABLE ... SET DATA_METRIC_SCHEDULE をご参照ください。
例:
データメトリック関数のスケジュールを5分ごとに実行するように設定します。
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = '5 MINUTE';
データメトリック関数のスケジュールを毎日8:00 AM に実行するように設定します。
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
平日のみ8:00 AM にデータメトリック関数のスケジュールを実行するように設定します。
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
1日3回、0600時、1200時、1800時(UTC)に実行するよう、データメトリック関数のスケジュールを設定します。
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
新しい行の挿入など、一般的な DML 操作でテーブルが変更されたときに実行されるデータメトリック関数を設定します。
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
SHOW PARAMETERS コマンドを使用すると、サポートされているテーブルオブジェクトの DMF スケジュールを表示できます:
SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+ | 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;
注釈
テーブルの 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);
ALTERTABLEコマンドを使用してテーブルからDMFを削除します。
ALTER TABLE t DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers ON (c1, c2, c3);
注釈
マテリアライズドビューの列に 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' ) );
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' ) );
DMFを手動で呼び出す¶
DMFを呼び出すには、以下の構文を使用します。
SELECT <data_metric_function>(<query>)
条件:
data_metric_function
システムまたはユーザー定義のDMFを指定します。
query
テーブルまたはビューのSQLクエリを指定します。
クエリの列はDMFシグネチャの列引数と一致している必要があります。
注釈
これらのシステムDMFsは、引数を取らないため、この構文には従いません:
DMFに直接呼び出して、結果を表示する:
SELECT governance.dmfs.count_positive_numbers(
SELECT c1,
c2,
c3
FROM t
);
テーブルまたはビューに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;
アカウントロールからシステムアプリケーションロールを取り消すには、 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
)
);
制限事項¶
詳細については、 データ品質の制限 のセクションをご参照ください。