使用 Snowflake CLI 管理 dbt Projects on Snowflake

备注

Snowflake CLI 中的 dbt Projects on Snowflake 功能仅在版本 3.13.0 或更高版本中可用。

You can use Snowflake CLI to manage dbt project objects with the following operations:

部署 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
    
  • Deploy a project named jaffle_shop from a specified directory using a custom profiles directory, a specific dbt version, and enabling external access integrations:

    snow dbt deploy jaffle_shop --source /path/to/dbt/directory
    --profiles-dir ~/.dbt/
    --default-target prod
    --dbt-version 1.10.15
    --external-access-integration dbthub-integration
    --external-access-integration github-integration
    --force
    
  • Deploy a project named jaffle_shop and set a specific version for the dbt project object:

    snow dbt deploy jaffle_shop --dbt-version '1.10.15'
    

列出所有可用的 dbt 项目对象

snow dbt list 命令会列出 Snowflake 上所有可用的 dbt 项目对象。

以下示例说明了如何使用 snow dbt list 命令:

  • 列出所有可用的 dbt 项目对象:

    snow dbt list
    
  • 列出 product 数据库中名称以 JAFFLE 开头的 dbt 项目对象:

    snow dbt list --like JAFFLE% --in database product
    

执行 dbt 项目对象命令

snow dbt execute 命令在 Snowflake dbt 项目对象上执行以下某项 dbt 命令 (https://docs.getdbt.com/reference/dbt-commands):

  • build (https://docs.getdbt.com/reference/commands/build)

  • compile (https://docs.getdbt.com/reference/commands/compile)

  • deps (https://docs.getdbt.com/reference/commands/deps)

  • list (https://docs.getdbt.com/reference/commands/list)

  • parse (https://docs.getdbt.com/reference/commands/parse)

  • retry (https://docs.getdbt.com/reference/commands/retry)

  • run (https://docs.getdbt.com/reference/commands/run)

  • run-operation (https://docs.getdbt.com/reference/commands/run-operation)

  • seed (https://docs.getdbt.com/reference/commands/seed)

  • show (https://docs.getdbt.com/reference/commands/show)

  • snapshot (https://docs.getdbt.com/reference/commands/snapshot)

  • test (https://docs.getdbt.com/reference/commands/test)

有关使用 dbt 命令的更多信息,请参阅 dbt 命令参考 (https://docs.getdbt.com/reference/dbt-commands)。

以下示例说明了如何使用 snow dbt execute 命令:

  • 执行 dbt test 命令:

    snow dbt execute jaffle_shop test
    
  • 异步执行 run dbt 命令:

    snow dbt execute --run-async jaffle_shop run --select @source:snowplow,tag:nightly models/export
    
  • Execute the run dbt command with a specific dbt version:

    snow dbt execute jaffle_shop run --dbt-version '1.9.4'
    

描述 dbt 项目对象

snow dbt describe 命令描述 Snowflake 上的 dbt 项目对象。

以下示例描述了 Snowflake 上名为 my_dbt_project 的 dbt 项目对象:

snow dbt describe my_dbt_project

删除 dbt 项目对象

snow dbt drop 命令删除 Snowflake 上的 dbt 项目对象。

以下示例删除了 Snowflake 上名为 my_dbt_project 的 dbt 项目对象:

snow dbt drop my_dbt_project

在 CI/CD 工作流程中使用 snow dbt 命令

备注

在构建 CI/CD 工作流程时,您只需要您的 git 服务器,例如 Github 和 Snowflake CLI。不需要 Git 存储库对象。

您可以使用 Snowflake CLI 运行 dbt 命令来构建 CI/CD 管道。这些管道通常用于测试新代码,例如新的提取请求,或者在某些内容合并到主分支时更新生产应用程序。

要使用 snow dbt 命令构建 CI/CD 工作流程,请执行以下步骤:

  1. 准备您的 dbt 项目:

    1. 下载您的 dbt 项目或开始一个新项目。

      • 确保主项目目录包含 dbt_project.ymlprofiles.yml 文件。

      • 验证 dbt_project.yml 中引用的配置文件名称是否在 profiles.yml 中定义。

        备注

        Snowflake 的 dbt 项目对象不需要密码,因此,如果 profiles.yml 包含任何密码,部署将停止直至密码被移除。

  2. 设置 Snowflake CLI GitHub 操作。

    遵循 为 Snowflake CLI 设置 GitHub 操作 的指南并 验证您与 Snowflake 的连接

  3. 定义您的工作流程。

    根据组织的需求确定您的工作流程需要运行哪些命令。以下示例说明了一个 CI 工作流程,该工作流程使用新文件更新名为 product_pipeline 的 dbt 项目对象的版本,运行转换,最后运行测试:

    - name: Execute Snowflake CLI command
      run: |
        snow dbt deploy product_pipeline
        snow dbt execute product_pipeline run
        snow dbt execute product_pipeline test