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