Skip to main content

试运行 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.ymlin~/.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-devAuto Trader 员工可以为此请求授权访问该项目

能力和限制

这可以捕捉到的东西

试运行可以捕获 BigQuery 规划器在查询运行之前可以识别的任何内容。包括:

  1. SQL 关键字中的拼写错误: selec而不是select
  2. 列名中的错别字:orders.produts而不是orders.products
  3. 数据类型不兼容的问题:尝试执行“4”+4
  4. 对模型的不兼容架构更改:从下游模型显式引用的视图中删除列
  5. 对源的架构更改不兼容:第三方在您不知情的情况下修改了源表的架构
  6. 权限错误:dry runner 应该在您的生产作业运行的同一服务帐户下运行。这使您可以发现表/项目权限的问题,因为试运行查询需要表读取权限,就像真正的查询一样
  7. 快照配置不正确:例如配置中的拼写错误unique_key。或者check_cols快照中不存在的

抓不到的东西

在某些情况下,由于表中的数据,语法有效的查询可能会失败:

  1. 运行但不返回预期/正确结果的查询。这是使用测试检查的
  2. NULL中的值ARRAY_AGG(参见IGNORE_NULLS 项目符号点
  3. 糟糕的查询性能使其运行起来过于复杂/昂贵

事情还要做...

实现干流道需要重新实现 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.tar.gz (31.6 kB 查看哈希

已上传 source

内置分布

dbt_dry_run-0.4.0-py3-none-any.whl (38.8 kB 查看哈希

已上传 py3