CREATE DBT PROJECT

创建新的 dbt 项目对象 或替换现有的 dbt 项目。使用 OR REPLACE 选项运行 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>' ]
  [ DEFAULT_ARGS = '<string_literal>' ]
  [ DEFAULT_VERSION = { FIRST | LAST | VERSION$<num> } ]
  [ COMMENT = '<string_literal>' ]
Copy

必填参数

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'

    我们建议将工作区名称用双引号括起来,因为工作区名称区分大小写并且可能包含特殊字符。

    版本说明符是必需的,可以是 lastfirstliveversion$<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 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • OR REPLACEIF 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';
Copy

在 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';
Copy

从现有 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';
Copy

从包含多个 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';
Copy
语言: 中文