CREATE DBT PROJECT¶
创建新的 dbt 项目对象 或替换现有的 dbt 项目。使用 OR REPLACE 选项运行 CREATE DBT PROJECT 会将版本标识符重置为 version$1
,并移除所有版本名称别名。有关更多信息,请参阅 dbt 项目对象和文件的版本控制。
语法¶
CREATE [ OR REPLACE ] DBT PROJECT [ IF NOT EXISTS ] <name>
[ FROM '<source_location>' ]
[ DEFAULT_ARGS = '<string_literal>' ]
[ DEFAULT_VERSION = { FIRST | LAST | VERSION$<num> } ]
[ COMMENT = '<string_literal>' ]
必填参数¶
name
字符串,指定 Snowflake 中 dbt 项目对象的标识符(即名称);对于在其中创建 dbt 项目的架构必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
可选参数¶
FROM 'source_location'
字符串,指定 dbt 项目对象源文件在 Snowflake 中的位置。这可以是包含多个 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 中为 dbt Projects on Snowflake 创建将 Git 存储库连接到工作区的 Git 存储库对象的更多信息,请参阅 创建连接到 Git 存储库的工作区。有关在不使用工作区的情况下创建和管理 Git 存储库对象和暂存区的更多信息,请参阅 在 Snowflake 中使用 Git 存储库 和 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 项目对象和文件的版本控制。
默认:无值
DEFAULT_ARGS = 'string_literal'
字符串,指定在 EXECUTE DBT PROJECT 未指定命令时使用的默认 dbt 命令 (https://docs.getdbt.com/reference/dbt-commands) 和 命令行选项 (https://docs.getdbt.com/reference/global-configs/about-global-configs#available-flags)。
重要
您在 EXECUTE DBT PROJECT 命令中显式指定的实参会覆盖 DBT PROJECT 定义中指定的所有 DEFAULT_ARGS。
默认:无值
DEFAULT_VERSION = { FIRST | LAST | VERSION$num }
指定 EXECUTE DBT PROJECT 将使用的 dbt 项目对象的默认版本。有关更多信息,请参阅 dbt 项目对象和文件的版本控制。如果未指定任何值,则 EXECUTE DBT PROJECT 使用
LAST
。有关更多信息,请参阅 dbt 项目对象和文件的版本控制。默认:无值
COMMENT = 'string_literal'
为 dbt 项目对象指定注释。
默认:无值
访问控制要求¶
权限 |
对象 |
---|---|
CREATE DBT PROJECT |
架构 |
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
OR REPLACE
和IF NOT EXISTS
子句互斥。它们不能同时用于同一条语句中。CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
在 Snowflake 的 Git 存储库暂存区创建 dbt 项目对象¶
在 Git 存储库暂存区中的 dbt 项目文件创建名为 sales_dbt_model
的 dbt 项目对象。该命令指定了 Snowflake 中名为 sales_dbt_git_stage
的 Git 存储库暂存区的 main
分支,其中 dbt_project.yml
保存在存储库根目录中。
CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model
FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main'
COMMENT = 'generates sales data models';
在 Snowflake 的 Git 存储库暂存区的子目录中创建 dbt 项目对象¶
从包含多个 dbt 项目的 Git 存储库暂存区创建名为 sw_region_dbt_project
的 dbt 项目对象。该命令指定了 Snowflake 中名为 sales_dbt_git_stage
的 Git 存储库暂存区的 main
分支,其中 dbt_project.yml
保存在 sales_dbt_projects_parent
目录的 sw_region_dbt_project
子目录中。
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'
COMMENT = 'generates data models for sw sales region';
从现有 dbt 项目对象的特定版本创建 dbt 项目对象¶
从 sales_dbt_projects
dbt 对象暂存区的 version$2
创建一个名为 sales_nw_dbt_model_combined_bookings
的新 dbt 项目对象。DEFAULT_ARGS 参数指定 --select
命令行选项,以便只有带有标签 nw_region
的模型才能使用 EXECUTE DBT PROJECT 运行。
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_ARGS = '--select "tag:nw_region"'
COMMENT = 'generates data models for the NW sales region';
从包含多个 dbt 项目的工作区创建 dbt 项目对象¶
使用 dbt Projects on Snowflake 工作区的实时版本创建名为 sales_model_from_workspace
的新 dbt 项目对象。这对于从包含多个 dbt 项目子目录的父工作区创建 dbt 项目对象特别有用。我们建议将工作区名称用双引号括起来,因为工作区名称区分大小写并且可能包含特殊字符。
-- Create a dbt project object from a workspace named "My dbt Project Workspace" in the user's personal database.
CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model_from_workspace
FROM 'snow://workspace/user$.public."My dbt Project Workspace"/versions/live'
-- Execute the dbt project, specifying a subdirectory path for a dbt project within the workspace
EXECUTE DBT PROJECT sales_db.dbt_projects_schema.sales_model_from_workspace
PROJECT_ROOT = 'project2'
ARGS = 'run --target prod';