CREATE JOIN POLICY

現在のスキーマ/指定されたスキーマで新しい 結合ポリシー を作成するか、既存の結合ポリシーを置き換えます。

結合ポリシーを作成したら、 ALTER TABLE コマンドを使用してポリシーをテーブルに、または ALTER VIEW コマンドを使用してポリシーをビューに割り当てます。あるいは、テーブル作成時に結合ポリシーを割り当てることもできます。

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

結合ポリシー DDL リファレンス

構文

CREATE [ OR REPLACE ] JOIN POLICY [ IF NOT EXISTS ] <name>
  AS () RETURNS JOIN_CONSTRAINT -> <body>
  [ COMMENT = '<string_literal>' ]
Copy

パラメーター

name

結合ポリシーの識別子。スキーマに対して一意にする必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

AS () RETURNS JOIN_CONSTRAINT

ポリシーの署名と戻り型署名は引数を受け入れず、戻り型は内部データ型である JOIN_CONSTRAINT です。すべての結合ポリシーには同じ署名と戻り型があります。

body

結合ポリシーの制限を決定する SQL 式。

結合ポリシーの本文を定義するには、 TRUE または FALSE を返す JOIN_CONSTRAINT 関数を呼び出します。関数が TRUE を返す場合、クエリは結果を返すために結合を使用する必要があります。

JOIN_CONSTRAINT 関数の構文は次のとおりです。

JOIN_CONSTRAINT (
  { JOIN_REQUIRED => <boolean_expression> }
  )
Copy

条件:

JOIN_REQUIRED => boolean_expression

クエリで結合ポリシーが割り当てられているテーブル、またはビューからデータを選択するときに、結合が必要かどうかを指定します。

ポリシーの本文では、ユーザー定義の関数、テーブル、ビューを参照することはできません。

許可される結合列は、 CREATE JOIN POLICY ステートメントではなく、ポリシーが適用されるテーブルまたはビューの CREATE または ALTER ステートメントで指定されます。

COMMENT = 'string_literal'

結合ポリシーのコメントを追加するか、既存のコメントを上書きします。

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

注意

CREATE JOIN POLICY

スキーマ

スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する 任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対するCREATE権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対するUSAGE*も*付与されている必要はありません。

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

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

結合ポリシー DDL および権限に関する詳細情報については、 結合ポリシーの管理 をご参照ください。

使用上の注意

  • 既存の結合ポリシーを更新し、現在のポリシー本文を確認する必要がある場合は、 DESCRIBE JOIN POLICY コマンドまたは GET_DDL 関数を実行します。

  • OR REPLACEIF NOT EXISTS 句は互いに排他的です。両方を同じステートメントで使うことはできません。

  • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

  • メタデータについて:

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

クエリに結合を含めることを要求する結合ポリシーを作成します(ポリシーがそれらのクエリにあるテーブルとビューに適用される場合)。

CREATE JOIN POLICY jp1 AS ()
  RETURNS JOIN_CONSTRAINT -> JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE);
Copy

ACCOUNTADMIN ロールを持つユーザーが結合なしでクエリを実行できるように結合ポリシーを作成します。その他のユーザーは結合クエリを実行する必要があります。

CREATE JOIN POLICY jp2 AS ()
  RETURNS JOIN_CONSTRAINT ->
    CASE
      WHEN CURRENT_ROLE() = 'ACCOUNTADMIN'
        THEN JOIN_CONSTRAINT(JOIN_REQUIRED => FALSE)
      ELSE JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE)
    END;
Copy