CREATE DATA METRIC FUNCTION

現在のスキーマまたは指定したスキーマに新しいデータメトリック関数(DMF)を作成するか、既存のデータメトリック関数を置き換えます。

DMF を作成したら、 ALTER TABLE ... ALTER COLUMN コマンドを使用してテーブル列か、 ALTER VIEW コマンドを使用してビュー列にこれを適用します。

こちらもご参照ください。

DMF コマンドリファレンス

このトピックの内容:

構文

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

必須パラメーター

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

例: 外部キー参照

DMF を割り当てるテーブルとは異なるテーブルを参照するデータメトリック関数を作成できます。たとえば、 外部キー制約 に起因する行数を計測するために、 DMF を作成するとします。代表的な例として、外部キー制約として指定された sp_id という共通の列を持つ、 salespeoplesalesorders という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)';
Copy

手動で DMF を呼び出し、 salesorders テーブルの sp_id 列を指定します。

SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
Copy

出力は、 sp_id 列の値が salespeople テーブルの sp_id 列の値の結果である、 salesorder テーブルの行数を返します。