カテゴリ:

データメトリック関数

ACCEPTED_VALUES (システムデータメトリック関数)

列の値がブール式と一致*しない*記録の数を返します。

構文

SNOWFLAKE.CORE.ACCEPTED_VALUES ON ( <column>, <lambda-expression> )
Copy

引数

column

lambda-expression のブール式と比較される値を含む列を指定します。

lambda-expression

次の構文で構成されるLambda式を指定します。column -> expression

この関数は、column の値がブール式と一致しない記録の数を返します。この式は、次の操作と関数を使用できます。

ラムダ式の column は常に column 引数に一致します。

許可されるデータ型

column で指定された列および lambda-expression 引数には、次のデータ型のいずれかを含めることができます。

  • DATE

  • FLOAT

  • NUMBER

  • TIMESTAMP_LTZ

  • TIMESTAMP_NTZ

  • TIMESTAMP_TZ

  • VARCHAR

戻り値

関数は NUMBER を返します。

アクセス制御の要件

システムDMFを使用するには、次のアクセス制御アプローチのいずれかを選択します。

  • テーブルに対する OWNERSHIP 権限を持つロールであるテーブル所有者ロールに、DATA_METRIC_USERデータベースロールを付与します。このデータベースロールは、SNOWFLAKE.CORE スキーマに対する USAGE 権限と、SNOWFLAKE.CORE スキーマにあるすべてのシステム DMFs に対する USAGE 権限を持ちます。

    さらに、テーブル所有者ロールに次の権限を付与します。

    権限

    オブジェクト

    メモ

    EXECUTE DATA METRIC FUNCTION

    アカウント

    この権限により、どのロールがサーバーレスのコンピューティングリソースにアクセスできるかを制御し、システムDMFを呼び出すことができます。

    USAGE

    データベース、スキーマ

    これらのオブジェクトは、 DMF が関連付けられているtable.referencedテーブルを含むデータベースとスキーマです。

  • SNOWFLAKEデータベースの IMPORTED PRIVILEGES をテーブル所有者ロールに付与します。詳細については、 他のロールが SNOWFLAKE データベースのスキーマを使用できるようにする をご参照ください。

  • ACCOUNTADMIN ロールを使用します。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • この関数を直接呼び出すことはできません。関数をテーブルまたはビューに関連付け、一定の間隔で実行する方法については、DMF と関連付けて、データ品質チェックを自動化します。 をご参照ください。

    SYSTEM$DATA_METRIC_SCAN 関数を使用して、テーブルを関連付けずに ACCEPTED_VALUES 関数を実行できます。

  • この関数を同じ列に複数回関連付けることはできません。

  • ACCEPTED_VALUES 関数で指定されている列の名前の変更は、関数と列のテーブルまたはビューの間の関連付けを解除します。列の名前を変更した場合は、関数をテーブルまたはビューに再度関連付ける必要があります。

関数をテーブル t1 に関連付けることで、age 列の値が5に*等しくない*記録の数を返します。

ALTER TABLE t1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ACCEPTED_VALUES ON (age, age -> age = 5);
Copy

関数をビュー order_details に関連付けることで、order_status 列の値が PendingDispatched、および Delivered 文字列のリストに*ない*記録の数を返します。

ALTER VIEW order_details
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ACCEPTED_VALUES ON (
    order_status,
    order_status -> order_status IN ('Pending', 'Dispatched', 'Delivered'));
Copy