使用 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
启用
config.toml
配置文件中的命令:[cli.features] enable_dbt = true
要验证命令是否可用,请运行
snow --help
命令:snow --help dbt should appear in the list of commands, as shown:
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.yml
:dbt_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
用途¶
snow dbt deploy [--source <path>] [--profiles-dir <path>] [--force] NAME
其中:
NAME
是 dbt 项目对象的名称。[--source path>
是项目的dbt_project.yml
文件的路径。默认为当前工作目录。[--profiles-dir path>
是profiles.yml
文件的路径。如果未指定,则默认为解析为--source
的路径。[--force]
创建新的 dbt 项目对象或更新并将新版本添加到现有对象中。
示例¶
部署名为
jaffle_shop
的 dbt 项目对象:snow dbt deploy jaffle_shop
从指定目录部署一个名为
jaffle_shop
的项目,并覆盖 dbt 项目对象(如果它已经存在):snow dbt deploy jaffle_shop --force --source /path/to/dbt/directory --profiles-dir ~/.dbt/
列出所有可用的 dbt 项目对象¶
snow dbt list
命令会列出 Snowflake 上所有可用的 dbt 项目对象。
用途¶
snow dbt list [--like <string>] [--in <string>]
其中:
[--like string]
是一种按对象名称进行筛选的 SQL LIKE 模式。[--in string]
指定此命令的范围。
示例¶
列出所有可用的 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)
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]
其中:
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
异步执行
run
dbt 命令:snow dbt execute --run-async jaffle_shop run --select @source:snowplow,tag:nightly models/export
在 CI/CD 工作流程中使用 snow dbt
命令¶
备注
在构建 CI/CD 工作流程时,您只需要您的 git 服务器,例如 Github 和 Snowflake CLI。不需要 Git 存储库对象。
您可以使用 Snowflake CLI 运行 dbt 命令来构建 CI/CD 管道。这些管道通常用于测试新代码,例如新的提取请求,或者在某些内容合并到主分支时更新生产应用程序。
要使用 snow dbt
命令构建 CI/CD 工作流程,请执行以下步骤:
准备您的 dbt 项目:
下载您的 dbt 项目或开始一个新项目。
确保主项目目录包含
dbt_project.yml
和profiles.yml
文件。验证
dbt_project.yml
中引用的配置文件名称是否在profiles.yml
中定义。备注
Snowflake 的 dbt 项目对象不需要密码,因此,如果
profiles.yml
包含任何密码,部署将停止直至密码被移除。
设置 Snowflake CLI GitHub 操作。
定义您的工作流程。
根据组织的需求确定您的工作流程需要运行哪些命令。以下示例说明了一个 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