使用 Snowflake CLI 管理 dbt Projects on Snowflake

使用 dbt Projects on Snowflake 功能安装 Snowflake CLI

要安装包含 snow dbt 命令的公开预览版 Snowflake CLI,您必须先安装 Snowflake CLI 版本 3.9.0 或更高版本。有关更多信息,请参阅 安装 Snowflake CLI

在 Snowflake CLI 中启用 dbt Projects on Snowflake 功能

在预览期间,您必须使用以下任一方法启用新的 snow dbt 命令:

  • 设置 SNOWFLAKE_CLI_FEATURES_ENABLE_DBT 环境变量:

    export SNOWFLAKE_CLI_FEATURES_ENABLE_DBT=true
    
    Copy
  • 启用 config.toml 配置文件中的命令:

    [cli.features]
    enable_dbt = true
    
    Copy
  • 要验证命令是否可用,请运行 snow --help 命令:

     snow --help
    
    dbt should appear in the list of commands, as shown:
    
    Copy
    Usage: snow [OPTIONS] COMMAND [ARGS]...
    
    Snowflake CLI tool for developers [v3.9.0]
    
    ...
    
    ╭─ Commands ──────────────────────────────────────────
    │ app          Manages a Snowflake Native App        │
    │ connection   Manages connections to Snowflake.     │
    │ cortex       Provides access to Snowflake Cortex   │
    │ dbt          Manages dbt on Snowflake projects     │
    │ ...                                                │
    ╰─────────────────────────────────────────────────────
    

连接管理

Snowflake CLI 需要有效的连接才能与 Snowflake 进行交互。有关管理连接的信息,请参阅 管理 Snowflake 连接

支持 dbt 项目的 Snowflake CLI 命令

Snowflake CLI 为 dbt 项目提供以下命令:

  • snow dbt deploy

  • snow dbt list

  • snow dbt execute

部署 dbt 项目对象

snow dbt deploy 命令将本地文件上传到临时暂存区并创建新的 dbt 项目对象,通过创建新版本对其进行更新,或者完全重新创建它。有效的 dbt 项目必须包含两个文件:

  • dbt_project.yml:标准 dbt 配置文件,必须指定要使用的配置文件。

  • profiles.ymldbt_project.yml 中引用的 dbt 连接配置文件定义。profiles.yaml 必须定义数据库、角色、仓库和架构。您可以将剩余值留空,如以下示例所示:

    <profile_name>:
    outputs:
      dev:
        account: ''
        database: <database_name>
        role: <role_name>
        schema: <schema_name>
        type: snowflake
        user: ''
        warehouse: <warehouse_name>
    target: dev
    
    Copy

用途

snow dbt deploy [--source <path>] [--profiles-dir <path>] [--force] NAME
Copy

其中:

  • NAME 是 dbt 项目对象的名称。

  • [--source path> 是项目的 dbt_project.yml 文件的路径。默认为当前工作目录。

  • [--profiles-dir path>profiles.yml 文件的路径。如果未指定,则默认为解析为 --source 的路径。

  • [--force] 创建新的 dbt 项目对象或更新并将新版本添加到现有对象中。

示例

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

    snow dbt deploy jaffle_shop
    
    Copy
  • 从指定目录部署一个名为 jaffle_shop 的项目,并覆盖 dbt 项目对象(如果它已经存在):

    snow dbt deploy jaffle_shop --force --source /path/to/dbt/directory --profiles-dir ~/.dbt/
    
    Copy

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

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

用途

snow dbt list [--like <string>] [--in <string>]
Copy

其中:

  • [--like string] 是一种按对象名称进行筛选的 SQL LIKE 模式。

  • [--in string] 指定此命令的范围。

示例

  • 列出所有可用的 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)

  • 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 [snowflake-cli-options] NAME [dbt-command-and-options]
Copy

其中:

  • NAME 是 dbt 项目对象的名称。

  • [snowflake-cli-options] 是 Snowflake CLI 选项列表,包括以下内容:

    • --run-async,异步运行 dbt 命令并立即返回可用于跟踪其进度的查询

    • 任何全局 Snowflake CLI 选项,例如 --help--connection

  • [dbt-command-and-options] 是 dbt 命令及其选项的名称,例如 run --target dev

示例

  • 执行 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

在 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
语言: 中文