使用 Snowflake CLI 管理 dbt Projects on Snowflake

备注

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

您可以使用 Snowflake CLI 通过以下操作管理 dbt 项目:

部署 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
    
    Copy

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

  • 部署名为 jaffle_shop 的 dbt 项目对象:

    snow dbt deploy jaffle_shop
    
    Copy
  • 从指定目录部署名为 jaffle_shop 的项目,并创建或添加新版本,具体取决于 dbt 项目对象是否已存在:

    snow dbt deploy jaffle_shop --source /path/to/dbt/directory --profiles-dir ~/.dbt/ --force
    
    Copy
  • 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
    
    Copy

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

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

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

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

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

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

执行 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
    
    Copy
  • 异步执行 run dbt 命令:

    snow dbt execute --run-async jaffle_shop run --select @source:snowplow,tag:nightly models/export
    
    Copy

描述 dbt 项目对象

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

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

snow dbt describe my_dbt_project
Copy

删除 dbt 项目对象

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

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

snow dbt drop my_dbt_project
Copy

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