部署 dbt 项目对象¶
在 dbt Projects on Snowflake 中,部署 dbt 项目对象意味着将 dbt 项目代码复制到 Snowflake 中,以创建对象或使用新版本更新对象。您可以使用 Snowsight、CREATE DBT PROJECT 或 ALTER DBT PROJECT SQL 命令,或 Snowflake CLI 中的 snow dbt deploy 命令执行此操作。
使用 Snowsight 部署 dbt 项目对象¶
在 Snowsight 中部署 dbt 项目对象可获取工作区中的 dbt 代码,并创建新的 dbt 项目或更新现有的 dbt 项目。
要在 Snowsight 中部署 dbt 项目对象、请 运行 dbt deps 命令,然后完成以下步骤:
登录 Snowsight。
在导航菜单中,选择 Projects » Workspaces。
在 Workspaces 菜单中,选择包含 dbt 项目的工作区。
确认 dbt 文件已就位。
要验证是否正常工作,请运行
dbt compile、dbt run或 dbt build 命令,如下所示:在工作区编辑器下方,打开 Output 选项卡,以便在从工作区运行 dbt 命令后可以看到标准输出。
从工作区编辑器上方的菜单栏中,确认已选择正确的 Project 和 Profile。
从命令列表中选择 dbt compile、
dbt run或 dbt build,然后选择执行按钮。此步骤将解析您的项目。
从工作区的右上角选择 Connect,然后选择以下选项之一:
用于连接新的 dbt 项目的 Deploy dbt project。首次部署时,这将创建一个架构级 dbt 项目对象。
用于连接到现有 dbt 项目的 :Existing dbt deployment。部署会将新版本添加到现有 dbt 项目对象(相当于
ALTER DBT PROJECT … ADD VERSION FROM 'snow://workspace/…/versions/last')。
在 Deploy dbt project 弹出窗口中,选择以下内容:
在 Select location 下,选择您的数据库和架构。
在 Select or Create dbt projecr 下,选择 Create dbt project。
输入名称和描述。
(可选)输入默认目标,以选择将哪个配置文件用于编译和后续运行(例如 prod)。在
ARGS中,dbt 项目运行的目标仍可替换为--target。(可选)选择 Run dbt deps,然后选择外部访问集成以在部署期间自动执行
dbt deps。
选择 Deploy。
Output 选项卡显示在 Snowflake 上运行的命令,类似于以下示例:
CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project FROM 'snow://workspace/mydb.my_dbt_projects_schema.sales_model/versions/version$2' EXTERNAL_ACCESS_INTEGRATIONS = ();
my_dbt_project successfully created.现在,Connect 菜单会显示您创建的 dbt 项目对象的名称,其中包含以下选项:
Redeploy dbt project:选择使用 时默认使用的角色和仓库。使用 ALTER,将 dbt 项目对象更新为项目的当前工作区版本。这会使 dbt 项目对象的版本增加一。有关更多信息,请参阅 dbt 项目对象和文件的版本控制。
Disconnect:选择使用 时默认使用的角色和仓库。断开工作区与 dbt 项目对象的连接,但不删除 dbt 项目对象。
Edit project:选择使用 时默认使用的角色和仓库。更新 dbt 项目对象的注释、默认目标和外部访问集成。
View project:选择使用 时默认使用的角色和仓库。在对象资源管理器中打开 dbt 项目对象,可以在其中查看 dbt 项目对象的 CREATE DBT PROJECT 命令和项目的运行历史记录。
Create schedule:选择使用 时默认使用的角色和仓库。为您提供创建按计划运行 dbt 项目对象的任务的选项。有关更多信息,请参阅 创建任务来计划 dbt 项目的执行。
View schedules:选择使用 时默认使用的角色和仓库。打开运行 dbt 项目对象的计划(任务)列表,并可选择在对象资源管理器中查看任务详细信息。
(可选)通过在工作表中运行 SHOW DBT PROJECTS 命令来确认 dbt 项目是否存在,例如:
SHOW DBT PROJECTS IN DATABASE mydb;
使用 SQL 命令部署 dbt 项目对象¶
CREATE DBT PROJECT 和 ALTER DBT PROJECT 命令会复制语句的 FROM 子句中指定的文件,以分别创建新版本并将其添加到 dbt 项目对象中。
CREATE DBT PROJECT 命令会创建一个具有单个初始版本(例如,VERSION$1)的新对象,如下所示。
CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main'
DEFAULT_TARGET = 'prod'
EXTERNAL_ACCESS_INTEGRATIONS = my_dbt_ext_access
COMMENT = 'Generates sales data models.';
ALTER DBT PROJECT 命令在现有对象中创建一个新版本,该版本具有唯一的递增版本号(例如,VERSION$2、VERSION$3 等)。
-- Update the Git repository object to fetch the latest code
ALTER GIT REPOSITORY sales_db.integrations_schema.sales_dbt_git_stage FETCH;
-- Add a new version to the dbt project object based on the updated Git repository object
ALTER DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
ADD VERSION
FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main/sales_dbt_project';
使用 Snowflake CLI 部署 dbt 项目对象¶
snow dbt deploy 命令将本地文件上传到临时暂存区并创建新的 dbt 项目对象,通过创建新版本对其进行更新,或者完全重新创建它。有效的 dbt 项目必须包含两个文件:
dbt_project.yml:选择使用 时默认使用的角色和仓库。标准 dbt 配置文件,用于指定要使用的配置文件。profiles.yml:选择使用 时默认使用的角色和仓库。dbt_project.yml中引用的 dbt 连接配置文件定义。profiles.yaml必须定义数据库、角色、架构和类型。默认情况下,dbt Projects on Snowflake 使用在您的 dbt 环境或配置文件中指定的目标架构 (
target.schema)。与 dbt Core 行为不同,在创建 dbt 项目之前,在profiles.yml文件中指定的目标架构必须存在,才能成功编译或执行。
<profile_name>: target: dev outputs: dev: database: <database_name> role: <role_name> schema: <schema_name> type: snowflake
以下示例说明了如何使用 snow dbt deploy 命令:
部署名为
jaffle_shop的 dbt 项目对象:snow dbt deploy jaffle_shop
从指定目录部署名为
jaffle_shop的项目,并创建或添加新版本,具体取决于 dbt 项目对象是否已存在:snow dbt deploy jaffle_shop --source /path/to/dbt/directory --profiles-dir ~/.dbt/ --force
使用自定义配置文件目录并启用 外部访问集成,从指定目录部署名为
jaffle_shop的项目:snow dbt deploy jaffle_shop --source /path/to/dbt/directory --profiles-dir ~/.dbt/ --default-target dev --external-access-integration dbthub-integration --external-access-integration github-integration --force
源文件位置¶
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 项目对象和文件的版本控制。