CREATE DBT PROJECT¶
新しい :doc:` dbtプロジェクトオブジェクト </user-guide/data-engineering/dbt-projects-on-snowflake>` を作成するか、既存のdbtプロジェクトを置き換えます。ORREPLACE オプションで CREATE DBT PROJECT を実行すると、バージョン識別子が version$1 にリセットされ、すべてのバージョン名のエイリアスが削除されます。詳細については、 dbtプロジェクトオブジェクトとファイルのバージョン管理 をご参照ください。
- こちらもご参照ください。
ALTER DBT PROJECT、 DESCRIBE DBT PROJECT、 EXECUTE DBT PROJECT、 SHOW DBT PROJECTS、 DROP 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> [ , ... ] ) ]
Parameters¶
nameSnowflake内の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'For more information about creating a Git repository object in Snowflake that connects a Git repository to a workspace for dbt Projects on Snowflake, see Gitリポジトリに接続されたワークスペースを作成する. For more information about creating and managing a Git repository object and stage without using a workspace, see SnowflakeでのGitリポジトリの使用 and 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'ワークスペース名は大文字と小文字が区別され、特殊文字を含めることができるため、ワークスペース名を二重引用符で囲むことをお勧めします。
バージョン指定子は必須で、
last、first、live、または``version$<num>``の形式で既存バージョンの指定子とすることができます。詳細については、 dbtプロジェクトオブジェクトとファイルのバージョン管理 をご参照ください。
デフォルト: 値なし
COMMENT = 'string_literal'dbtプロジェクトオブジェクトのコメントを指定します。
デフォルト: 値なし
DEFAULT_TARGET = default_targetdbtプロジェクトオブジェクトのコンパイルと後続の実行に使用されるプロファイル(例:
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プロジェクトオブジェクトを作成する¶
Create a dbt project object named sales_dbt_model from dbt project files in a Git repository stage. This example references the main branch of a Git repository stage named sales_dbt_git_stage in Snowflake, where the project's dbt_project.yml file is saved in the repository root. The command also sets the default target used when executing dbt commands and specifies the external access integrations required by the project.
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.';
SnowflakeでGitリポジトリステージ内のサブディレクトリからdbtプロジェクトオブジェクトを作成する¶
Create a dbt project object named sw_region_sales_model from a subdirectory inside a Git repository stage that contains multiple dbt projects. The example references the main branch of a Git repository stage named sales_dbt_git_stage in Snowflake, where the project's dbt_project.yml file is saved in the sw_region_dbt_project subdirectory of the sales_dbt_projects_parent directory.
この例では、次のプロパティも設定しています。
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.';
既存のdbtプロジェクトオブジェクトの特定バージョンからdbtプロジェクトオブジェクトを作成する¶
Create a new dbt project object named sales_model_nw_region from version$2 of the existing sales_model dbt project.
この例では、 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.';
複数の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';