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> [ , ... ] ) ]
パラメーター¶
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'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'ワークスペース名は大文字と小文字が区別され、特殊文字を含めることができるため、ワークスペース名を二重引用符で囲むことをお勧めします。
バージョン指定子は必須で、
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プロジェクトオブジェクトを作成する¶
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.';
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.';
既存の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.';
複数の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';