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_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_VERSION = { FIRST | LAST | VERSION$num }指定 EXECUTE DBT PROJECT 将使用的 dbt 项目对象的默认版本。有关更多信息,请参阅 dbt 项目对象和文件的版本控制。如果未指定任何值,则 EXECUTE DBT PROJECT 使用
LAST。有关更多信息,请参阅 dbt 项目对象和文件的版本控制。默认:无值
COMMENT = 'string_literal'为 dbt 项目对象指定注释。
默认:无值
访问控制要求¶
权限 |
对象 |
|---|---|
CREATE DBT PROJECT |
架构 |
要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
The OR REPLACE and IF NOT EXISTS clauses are mutually exclusive. They can't both be used in the same statement.
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 项目对象¶
Create a new dbt project object named sales_nw_dbt_model_combined_bookings from version$2 of the sales_dbt_projects dbt object stage.
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'
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';