CREATE DBT PROJECT

新しい :doc:` dbtプロジェクトオブジェクト </user-guide/data-engineering/dbt-projects-on-snowflake>` を作成するか、既存のdbtプロジェクトを置き換えます。ORREPLACE オプションで CREATE DBT PROJECT を実行すると、バージョン識別子が version$1 にリセットされ、すべてのバージョン名のエイリアスが削除されます。詳細については、 dbtプロジェクトオブジェクトとファイルのバージョン管理 をご参照ください。

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

ALTER DBT PROJECTDESCRIBE DBT PROJECTEXECUTE DBT PROJECTSHOW DBT PROJECTSDROP DBT PROJECT

構文

CREATE [ OR REPLACE ] DBT PROJECT [ IF NOT EXISTS ] <name>
  [ FROM '<source_location>' ]
  [ COMMENT = '<string_literal>' ]
  [ DEFAULT_TARGET = <default_target> ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , ... ] ) ]
Copy

パラメーター

name

Snowflake内のdbtプロジェクトオブジェクトの識別子(名前)を指定する文字列。dbtプロジェクトが作成されるスキーマで一意である必要があります。

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

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

FROM 'source_location'

Snowflake内でdbtプロジェクトオブジェクトのソースファイルの場所を指定する文字列。複数のdbtプロジェクトを含む親ディレクトリ、またはdbtプロジェクトと dbt_project.yml ファイルを含む特定のサブディレクトリである可能性があります。

指定した場所に dbt_project.yml ファイルが含まれていない場合、EXECUTE DBT PROJECT コマンドは PROJECT_ROOT パラメーターを使用して dbt_project.yml ファイルへのサブディレクトリパスを指定する必要があります。

値が指定されていない場合、Snowflakeは空のdbtプロジェクトを作成します。

dbtプロジェクトのソースファイルは、次のいずれかの場所にあります。

  • Gitリポジトリステージ。たとえば:

    '@my_db.my_schema.my_git_repository_stage/branches/my_branch/path/to/dbt_project_or_projects_parent'

    SnowflakeでGitリポジトリオブジェクトを作成し、Gitリポジトリを |sf-dbt|のワークスペースに接続する方法については、 label-dbt_create_git_integrated_workspace`をご参照ください。ワークスペースを使用せずにGitリポジトリオブジェクトとステージを作成および管理する方法の詳細については、 :doc:/developer-guide/git/git-overview` および :doc:`/sql-reference/sql/create-git-repository`をご参照ください。

  • 既存のdbtプロジェクトステージ。例えば:

    'snow://dbt/my_db.my_schema.my_existing_dbt_project_object/versions/last'

    バージョン指定子は必須で、last``(前の例で示したように)、 ``first、または``version$<num>``の形式で既存バージョンの指定子とすることができます。詳細については、 dbtプロジェクトオブジェクトとファイルのバージョン管理 をご参照ください。

  • 内部の名前付きステージ。たとえば:

    '@my_db.my_schema.my_internal_named_stage/path/to/dbt_projects_or_projects_parent'

    内部ユーザーステージとテーブルステージはサポートされていません。

  • Snowflake上のdbtのワークスペース。たとえば:

    'snow://workspace/user$.public."my_workspace_name"/versions/live/path/to/dbt_projects_or_projects_parent'

    ワークスペース名は大文字と小文字が区別され、特殊文字を含めることができるため、ワークスペース名を二重引用符で囲むことをお勧めします。

    バージョン指定子は必須で、lastfirstlive、または``version$<num>``の形式で既存バージョンの指定子とすることができます。詳細については、 dbtプロジェクトオブジェクトとファイルのバージョン管理 をご参照ください。

デフォルト: 値なし

COMMENT = 'string_literal'

dbtプロジェクトオブジェクトのコメントを指定します。

デフォルト: 値なし

DEFAULT_TARGET = default_target

dbtプロジェクトオブジェクトのコンパイルと後続の実行に使用されるプロファイル(例: prod)を指定します。ARGS = --target を指定して EXECUTE DBT PROJECT コマンドを使用することで、このパラメーターをオーバーライドできます。

デフォルト: 値なし

EXTERNAL_ACCESS_INTEGRATIONS = ( integration_name [ , ... ] )

dbtパッケージハブまたはGithubからリモート依存関係をプルする権限を付与するために使用される外部アクセス統合を指定します。オブジェクトに対して宣言する場合、 dbt deps はデプロイ中に自動的に実行されます。詳細については、 Snowflake上のdbtプロジェクトの依存関係を理解する をご参照ください。

アクセス制御の要件

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

権限

オブジェクト

CREATE DBT PROJECT

スキーマ

スキーマ内のオブジェクトを操作するには、親データベースの少なくとも1つの権限と、親スキーマの少なくとも1つの権限が必要です。

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

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

使用上の注意

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

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

  • メタデータについて:

    注意

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

SnowflakeでGitリポジトリステージからdbtプロジェクトオブジェクトを作成する

Gitリポジトリステージのdbtプロジェクトファイルから sales_dbt_model という名前のdbtプロジェクトオブジェクトを作成します。この例は、Snowflakeで sales_dbt_git_stage という名前のGitリポジトリステージの main ブランチを参照します。プロジェクトの dbt_project.yml ファイルはリポジトリルートに保存されます。このコマンドは、dbtコマンドの実行時に使用されるデフォルトのターゲットも設定し、プロジェクトに必要な外部アクセス統合を指定します。

CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model
  FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = 'my_external_access_integration'
  COMMENT = 'Generates sales data models.';
Copy

SnowflakeでGitリポジトリステージ内のサブディレクトリからdbtプロジェクトオブジェクトを作成する

複数のdbtプロジェクトを含むGitリポジトリステージ内部のサブディレクトリから sw_region_sales_model という名前のdbtプロジェクトオブジェクトを作成します。この例は、Snowflakeで sales_dbt_git_stage という名前のGitリポジトリステージの main ブランチを参照します。プロジェクトの dbt_project.yml ファイルは、 sales_dbt_projects_parent ディレクトリの sw_region_dbt_project サブディレクトリに保存されます。

この例では、次のプロパティも設定しています。

  • dbtコマンドによって使用されるデフォルトの実行ターゲット(たとえば prod または dev )はSnowflakeを介して実行されます。

  • dbtパッケージハブまたはGithubからリモート依存関係をプルするためにdbtプロジェクトの使用を許可される外部アクセス統合。

CREATE DBT PROJECT sales_db.dbt_projects_schema.sw_region_sales_model
  FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main/sales_dbt_projects_parent/sw_region_dbt_project'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = 'my_external_access_integration'
  COMMENT = 'Generates data models for SW sales region.';
Copy

既存のdbtプロジェクトオブジェクトの特定バージョンからdbtプロジェクトオブジェクトを作成する

既存の sales_model dbtプロジェクトの version$2 から sales_model_nw_region という名前の新しいdbtプロジェクトオブジェクトを作成します。

この例では、 DEFAULT_TARGET を使用してデフォルトの実行ターゲットも設定し、 EXTERNAL_ACCESS_INTEGRATIONS を使用して許可される外部アクセス統合を指定します。

CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model_nw_region
  FROM 'snow://dbt/sales_db.dbt_projects_schema.sales_model/versions/version$2'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = (my_ext_integration_1, my_ext_integration_2)
  COMMENT = 'Generates data models for the NW sales region.';
Copy

複数のdbtプロジェクトを含むワークスペースからdbtプロジェクトオブジェクトを作成する

複数のdbtプロジェクトディレクトリを含むワークスペースのライブバージョンから sales_model_from_workspace という名前の新しいdbtプロジェクトオブジェクトを作成します。ユーザーの個人データベース内の「My dbt Project Workspace」。これは、ワークスペースにいくつかのサブプロジェクトがあり、特定のサブディレクトリからdbtプロジェクトオブジェクトを作成する場合に便利です。ワークスペースは大文字と小文字が区別され、特殊文字を含めることができるため、ワークスペース名を二重引用符で囲むことをお勧めします。

CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model_from_workspace
  FROM 'snow://workspace/user$.public."My dbt Project Workspace"/versions/live/project2'

EXECUTE DBT PROJECT sales_db.dbt_projects_schema.sales_model_from_workspace
  ARGS = 'run --target prod';
Copy