|dcm|でサポートされているオブジェクト型

DEFINEステートメントは、|dcm-object|定義ファイルでのみ使用される特別なコマンドです。その構文は:doc:`CREATE OR ALTER </sql-reference/sql/create-or-alter>`コマンドと似ていますが、次の重要な違いがあります。

  • DEFINEステートメントの順序とロケーションは関係ありません。Snowflakeは、プロジェクトの実行中に、すべての定義ファイルからすべてのステートメントを収集し、ソートします。

  • 以前にデプロイされたDEFINEステートメントを削除すると、Snowflakeは次にプロジェクトをデプロイしたときに、対応するオブジェクトをドロップします。以前にデプロイされた後に削除されるGRANTおよびATTACHステートメントにも同じことが適用されます。

  • Snowflakeオブジェクト型のサブセットのみがサポートされています。

  • すべてのオブジェクトは完全修飾名(database.schema.object_name)で定義する必要があります。

  • 他のオブジェクトへの参照には、完全修飾名を使用する必要があります。

次のオブジェクト型は、DEFINE、GRANT、またはATTACHステートメントを使用する|dcm|定義ファイルでネイティブにサポートされています。

データベース

制限:

以下を含め、すべての`CREATE OR ALTER DATABASEの制限事項<https://docs.snowflake.com/sql-reference/sql/create-database#create-or-alter-database-usage-notes>`__が適用されます。

  • データベースの名前変更

スキーマ

制限:

以下を含め、すべての`CREATE OR ALTER SCHEMAの制限事項<https://docs.snowflake.com/sql-reference/sql/create-schema#create-or-alter-schema-usage-notes>`__が適用されます。

  • スキーマの名前変更

テーブル

制限:

以下を含め、すべての`CREATE OR ALTER TABLEの制限事項<https://docs.snowflake.com/sql-reference/sql/create-table#create-or-alter-table-usage-notes>`__が適用されます。

  • テーブルの名前変更

  • 列の名前の変更

  • 列の並べ替え

  • 列の型から互換性のない型への変更

  • テーブルまたは列への検索最適化の追加

  • テーブルまたは列へのタグおよびポリシーの追加

ビュー

制限:

以下を含め、すべての`CREATE OR ALTER VIEWの制限事項<https://docs.snowflake.com/sql-reference/sql/create-view#create-or-alter-view-usage-notes>`__が適用されます。

  • ビューの名前変更

  • 列の並べ替え

動的テーブル

サポートされている変更:

フルリフレッシュなし

  • ウェアハウス

  • ターゲットラグ

再初期化またはフルリフレッシュを行う場合:

  • リフレッシュモード

  • 以下を含む本体の変更:

    • 列のドロップ

    • 末尾への列の追加

不変の引数:

  • INITIALIZE

制限:

以下を含め、すべての`CREATE OR ALTER DYNAMIC TABLEの制限事項<https://docs.snowflake.com/sql-reference/sql/create-dynamic-table#create-or-alter-dynamic-table-usage-notes>`__が適用されます。

  • 列の並べ替え

  • 動的テーブルの名前変更

タスク

既に開始されているタスクに定義の変更がデプロイされると、Snowflakeは自動的にそのタスク(またはそのルートタスク)を一時的に中断し、変更を適用してから、再開します。

新しくデプロイされたタスクは、デフォルトで一時停止されます。

制限:

ファイル形式

制限:

内部ステージ

サポートされている変更:

  • ディレクトリテーブル

  • コメント

不変の属性:

  • 暗号化タイプ

制限:

SQL 関数

制限:

データメトリック関数

データメトリック関数(DMFs)を使用すると、データ品質の期待値を定義し、その期待値をテーブルに添付できます。既存のシステムDMFsから選択するか、独自のユーザー定義データメトリック関数(UDMFs)を記述することができます。その後、多対多の関係でテーブル、ビュー、および動的テーブルにアタッチできます。詳細については、 SQLを使用したデータメトリック関数の設定 をご参照ください。

データメトリック関数をアタッチするには、まず各テーブル、動的テーブル、またはビューの定義に``DATA_METRIC_SCHEDULE``を追加する必要があります。例: DATA_METRIC_SCHEDULE = TRIGGER_ON_CHANGES``TRIGGER_ON_CHANGES``スケジュールはビューでは使用できません。

期待値のユーザー定義名は、プロジェクトおよびアタッチメントごとに一意である必要があります。

テーブル列にDMFsをアタッチする場合、期待値の定義はオプションですが、推奨されます。期待値が設定されていないアタッチ済みのDMFsは、``EXECUTE DCM PROJECT <my_project> TEST ALL``の実行時に考慮されません。

サポートされている変更:

  • UDMFs(ユーザー定義データメトリック関数)の定義

  • |dcm-object|の内部および外部のテーブル、ビュー、または動的テーブルへのシステムDMFsおよびUDMFsのアタッチ

  • テーブル列のデータ期待値の定義

例:

UDMFを定義する例

DEFINE DATA METRIC FUNCTION DCM_DEMO.TESTS.INVENTORY_SPREAD(
  TABLE_NAME TABLE(
    COLUMN_VALUE number
  )
)
  RETURNS number
AS
$$
  SELECT
    MAX(COLUMN_VALUE) - MIN(COLUMN_VALUE)
  FROM
    TABLE_NAME
  WHERE
    COLUMN_VALUE IS NOT NULL
$$;

期待値を持つシステムDMFのアタッチの例

ATTACH DATA METRIC FUNCTION SNOWFLAKE.CORE.MIN
  TO TABLE DCM_PROJECT_{{db}}.RAW.INVENTORY
  ON (IN_STOCK)
  EXPECTATION MIN_10_ITEMS_INVENTORY (value > 10);

期待値を持つUDMFのアタッチの例

ATTACH DATA METRIC FUNCTION DCM_DEMO.TESTS.INVENTORY_SPREAD
  TO TABLE DCM_PROJECT_{{db}}.RAW.INVENTORY
  ON (IN_STOCK)
  EXPECTATION EVEN_ITEM_INVENTORY (VALUE < 50);

利用可能なすべてのシステムDMFsを表示するには、``SHOW DATA METRIC FUNCTIONS IN DATABASE SNOWFLAKE``をクエリします。

ウェアハウス

不変の属性:

  • INITIALLY_SUSPENDED

制限:

ロールおよびデータベースロール

サポートされていない型:

  • アプリケーションロール

Grant

|dcm|内で各オブジェクトを1回だけ定義できるのと同様に、各権限と被付与者の関係はすべての|dcm|全体で1回のみ定義できます。

以前にデプロイされたGRANT OWNERSHIPステートメントを削除する場合、|dcm|は現在の所有者ロールを使用して、所有権を|dcm-object|の所有者に戻そうとします。プロジェクトの所有者ロールがオブジェクトの所有者ロールを保持していない場合、所有権は|dcm|の外部で手動で元に戻す必要があります。

|dcm|は、|dcm|を介して定義およびデプロイされた付与のみを認識します。|dcm|の外部で追加された付与は共存し、|dcm|はそれらを削除しません。

サポートされていないGRANTの型:

  • APPLICATION ROLE付与

  • CALLER付与

タグ

サポートされていない属性:

  • 伝播

制限:

認証ポリシー

制限:

タグ、マスキングポリシー、および行アクセスポリシーのアタッチ(サポート対象外)

タグ、マスキングポリシー、および行アクセスポリシーは、|dcm|テーブル列の定義に追加できません。

|dcm|の外部で、マスキングポリシーおよび行アクセスポリシーを手動でアタッチできます。テーブルオブジェクトの|dcm|定義は、アタッチされたマスキングポリシーまたは行アクセスポリシーを無視します。テーブル定義を再デプロイしても取り消されません。それらの定義にポリシーが含まれていない場合でも同様です。