CREATE DATA METRIC FUNCTION¶
現在のスキーマまたは指定したスキーマに新しいデータメトリック関数(DMF)を作成するか、既存のデータメトリック関数を置き換えます。
DMF を作成したら、 ALTER TABLE ... ALTER COLUMN コマンドを使用してテーブル列か、 ALTER VIEW コマンドを使用してビュー列にこれを適用します。
- こちらもご参照ください。
このトピックの内容:
構文¶
CREATE [ OR REPLACE ] DATA METRIC FUNCTION [ IF NOT EXISTS ] <name>
( <arg_name> TABLE( <c1> <data_type> [ , ... ] ) )
RETURNS NUMBER [ [ NOT ] NULL ]
[ LANGUAGE SQL ]
[ COMMENT = '<string_literal>' ]
AS
'<expression>'
必須パラメーター¶
name
DMF の識別子。スキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
( arg_name TABLE( c1 data_type [ , ... ] ) )
式の入力として使われる DMF の署名。
以下を指定する必要があります。
テーブルの引数名は
arg_name
の1つのみ。少なくとも1つの列名とそのデータ型
c1 data_type
。オプションで追加の列とそのデータ型を指定することができます。列は同じテーブル内になければならず、異なるテーブルを参照することはできません。
RETURNS NUMBER
関数の出力のデータ型。
データ型は NUMBER のみです。
AS expression
関数の出力を決定する SQL 式。式は決定論的で、スカラー値を返す必要があります。この式は、 WITH 句や WHERE 句を使用するなどして、他のテーブルオブジェクトを参照することができます。
expression
を囲む区切り文字は、一重引用符またはドル記号のペアのいずれかです。区切り文字として$$
を使用すると、一重引用符を含む式の記述が簡単になります。expression
の区切り文字が一重引用符である場合は、expression
(例: 文字列リテラル)内の一重引用符は一重引用符でエスケープする 必要があります。expression
は、次のアクションをサポートしていません。JOIN 構造の使用。
非決定性関数(例: CURRENT_TIME)の使用。
UDF または UDTF に依存するオブジェクトの参照。
非スカラー出力の返し。
オプションのパラメーター¶
LANGUAGE SQL
式の記述に使用する言語を指定します。
SQL が唯一の対応言語です。
COMMENT = 'string_literal'
DMF のコメント。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE DATA METRIC FUNCTION |
スキーマ |
この権限はスキーマ内のデータ測定関数の作成のみを可能にします。 SQL 、Java UDFs などのユーザー定義関数の作成を有効にしたい場合は、ロールに CREATE FUNCTION 権限が必要です。 |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
既存のデータメトリック関数を更新して、関数の現在の定義を表示する必要がある場合は、 DESCRIBE FUNCTION (DMF) コマンドを実行するか、 GET_DDL 関数を呼び出します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例: NULL 以外の値をカウント¶
テーブルの最初の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 を作成するとします。代表的な例として、外部キー制約として指定された sp_id
という共通の列を持つ、 salespeople
と salesorders
という2つのテーブルを考えてみます。
DMFを作成し、外部キー参照を含む行数を識別します。WHERE 句は、 salespeople
テーブルの、営業担当者の識別子を含む sp_id
列を指定します。
CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.foreign_key_sales( arg_t TABLE (arg_c INT)) RETURNS NUMBER AS 'SELECT COUNT(*) FROM arg_t WHERE arg_c IN (SELECT sp_id FROM salespeople)';
手動で DMF を呼び出し、 salesorders
テーブルの sp_id
列を指定します。
SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
出力は、 sp_id
列の値が salespeople
テーブルの sp_id
列の値の結果である、 salesorder
テーブルの行数を返します。