试运行 dbt 项目
项目描述
dbt-空运行
dbt是一个使用模板化 SQL 查询帮助管理数据转换的工具。这些 SQL 查询针对目标数据仓库执行。它不会在执行您的项目之前检查 SQL 查询的有效性。此试运行程序使用 BigQuery 的试运行功能,允许您在尝试执行 SQL 查询之前检查它们是否有效。
有关干流道如何工作的更多信息,请参阅博客文章。
快速开始
安装
干流道可以通过 pip 安装:
pip install dbt-dry-run
跑步
dry runner 调用了一个命令dbt-dry-run
以使其运行,您必须首先dbt compile
像往常一样使用编译 dbt 清单。
然后在同一台机器上(这样 dry runner 可以访问您的 dbt 项目源和
manifest.yml
),您可以在与我们的相同目录中运行 dry-runner dbt_project.yml
:
dbt-dry-run
与 dbt 一样,它将搜索profiles.yml
in~/.dbt/
并使用指定的默认目标。就像在 dbt CLI 中一样,您可以覆盖这些默认值:
dbt-dry-run default --project-dir /my_org_dbt/ --profiles-dir /my_org_dbt/profiles/ --target local
完整的 CLI 帮助如下所示,任何以 [dbt] 为前缀的内容都可以像普通 dbt 参数一样使用:
❯ dbt-dry-run --help
Usage: dbt-dry-run [OPTIONS] [PROFILE]
Options:
--profiles-dir TEXT [dbt] Where to search for `profiles.yml`
[default: /Users/<user>/.dbt]
--project-dir TEXT [dbt] Where to search for `dbt_project.yml`
[default: /Users/<user>/Code/dbt-
dry-run]
--vars TEXT [dbt] CLI Variables to pass to dbt
--target TEXT [dbt] Target profile
--verbose / --no-verbose Output verbose error messages [default: no-
verbose]
--report-path TEXT Json path to dump report to
--install-completion [bash|zsh|fish|powershell|pwsh]
Install completion for the specified shell.
--show-completion [bash|zsh|fish|powershell|pwsh]
Show completion for the specified shell, to
copy it or customize the installation.
--help Show this message and exit.
报告结果和失败
如果结果成功,它将输出测试的模型数量,如下所示:
Dry running 3 models
DRY RUN SUCCESS!
该进程还将返回退出代码 0
如果有失败,它将打印失败节点的摘要表:
Dry running 3 models
Node model.test_models_with_invalid_sql.second_layer failed with exception:
400 POST https://bigquery.googleapis.com/...: Column d in USING clause not found on left side of join at [6:88]
(job ID: 5e336f32-273d-480a-b8bb-cdf4fca66a98)
Total 1 failures:
1 : model.test_models_with_invalid_sql.second_layer : BadRequest : ERROR
DRY RUN FAILURE!`
该过程还将返回退出代码 1
报告人工制品
如果您指定---report-path
一个 JSON 文件,无论试运行成功/失败如何,都将输出一个 JSON 文件,其中包含每个节点的预测模式的详细信息或失败时的错误消息:
{
"success": false,
"node_count": 3,
"failure_count": 1,
"failed_node_ids": [
"model.test_models_with_invalid_sql.second_layer"
],
"nodes": [
{
"unique_id": "seed.test_models_with_invalid_sql.my_seed",
"success": true,
"error_message": null,
"table": {
"fields": [
...
]
}
},
{
"unique_id": "model.test_models_with_invalid_sql.first_layer",
"success": true,
"error_message": null,
"table": {
"fields": [
...
]
}
},
{
"unique_id": "model.test_models_with_invalid_sql.second_layer",
"success": false,
"error_message": "BadRequest",
"table": null
}
]
}
本地贡献/运行
要设置开发环境,您需要诗歌,首先运行poetry install
安装所有依赖项。然后Makefile
包含运行测试套件和 linting 所需的所有命令。
- 验证:使用 格式化代码
black
,使用类型检查,mypy
然后运行覆盖率的单元测试。 - 集成:针对 BigQuery 运行集成测试(请参阅集成测试)
还有一个 shell 脚本./run-integration.sh <PROJECT_DIR>
将在本地运行其中一个集成测试。<PROJECT_DIR>
中的目录名称之一在哪里/integration/projects/
。(见集成测试)
运行集成测试
为了在本地运行集成测试,您需要访问您的 gcloud 应用程序默认凭据具有角色的 BigQuery 项目/实例Big Query Data Owner
。BigQuery 实例应该有一个名为 的空数据集dry_run
。
设置环境变量DBT_PROJECT=<YOUR GCP PROJECT HERE>
将告诉集成测试要针对哪个 GCP 项目运行测试套件。测试套件目前没有将任何数据具体化到项目中。
集成测试将在任何推动下运行,main
以确保包的核心功能仍然存在。
at-dry-run-integration-dev
Auto Trader 员工可以为此请求授权访问该项目
能力和限制
这可以捕捉到的东西
试运行可以捕获 BigQuery 规划器在查询运行之前可以识别的任何内容。包括:
- SQL 关键字中的拼写错误:
selec
而不是select
- 列名中的错别字:
orders.produts
而不是orders.products
- 数据类型不兼容的问题:尝试执行“4”+4
- 对模型的不兼容架构更改:从下游模型显式引用的视图中删除列
- 对源的架构更改不兼容:第三方在您不知情的情况下修改了源表的架构
- 权限错误:dry runner 应该在您的生产作业运行的同一服务帐户下运行。这使您可以发现表/项目权限的问题,因为试运行查询需要表读取权限,就像真正的查询一样
- 快照配置不正确:例如配置中的拼写错误
unique_key
。或者check_cols
快照中不存在的
抓不到的东西
在某些情况下,由于表中的数据,语法有效的查询可能会失败:
- 运行但不返回预期/正确结果的查询。这是使用测试检查的
NULL
中的值ARRAY_AGG
(参见IGNORE_NULLS 项目符号点)- 糟糕的查询性能使其运行起来过于复杂/昂贵
事情还要做...
实现干流道需要重新实现 dbt 的某些区域。主要是适配器如何与 BigQuery 客户端建立连接和凭据,我们只实现了连接到仓库的方法,因此如果您不使用 OAUTH 或服务帐户 JSON 文件,则无法profiles.yml
正确读取.
种子的实现是不完整的,而且我们在自己的 dbt 项目中也没有大量使用它们。Dry runner 将只使用agate
从 CSV 文件中推断出的数据类型。
执照
版权所有 2022 Auto Trader Limited
根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可,否则您不得使用此文件。您可以在以下网址获取许可证的副本
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可分发的软件将按“原样”分发,没有任何明示或暗示的保证或条件。有关许可下的特定语言管理权限和限制,请参阅许可。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
dbt_dry_run -0.4.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8963b1eb7f1fe002096968ed235517b64891a6ac280f197271f5fde70cdd16b4 |
|
MD5 | 659c1fb6424fdf7563c55033dfc949e7 |
|
布莱克2-256 | a114d7697bf47950981b3b37a62d4460a68cdcaf341167aa96b6dabb33ba7644 |