关于 dbt 测试的 4 个小知识
您可能正在使用 dbt CLI 或 dbt Cloud 进行数据管道工作,通过按计划创建动态架构的数据库来提取、转换和加载数据到仓库中。作为一名初出茅庐的数据测试工程师,我学到了一些关于使用dbt 本机测试来验证dbt 数据架构框架中动态创建的模式、源和模型的关键知识。 让我们看一下当我开始使用 dbt 测试时我希望知道的四大事实。我们只介绍了使用 dbt 的数据和模式测试来测试模型及其来源的基础
您可能正在使用 dbt CLI 或 dbt Cloud 进行数据管道工作,通过按计划创建动态架构的数据库来提取、转换和加载数据到仓库中。作为一名初出茅庐的数据测试工程师,我学到了一些关于使用dbt 本机测试来验证dbt 数据架构框架中动态创建的模式、源和模型的关键知识。
让我们看一下当我开始使用 dbt 测试时我希望知道的四大事实。我们只介绍了使用 dbt 的数据和模式测试来测试模型及其来源的基础知识。将来我们将着眼于测试 dbt 架构的其他部分。
1\。 Schema.yml 文件只能存在于 dbt 的模型文件夹中
如果您从 dbt 中的基本模式测试开始,很高兴知道您不能将 schema.yml 文件移动到 Tests 文件夹。我很好奇这是否有效,但它没有。 Schema 测试很棒,因为您可以创建类似 not_null 或 unique 测试,在几秒钟内检查您的列之一的空值。编写这种单元测试很容易,只是为了检查模型中的列。
查看一些模型模式测试的示例:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--_GC5eWke--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// /i.ibb.co/fXt7cpP/Model-Schema-Tests.png%2520%3D100x)
这是对源模式测试的研究:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--HtjTix79--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// /i.ibb.co/JqBKY7j/Source-Schema-Tests.png%2520%3D100x)
2\。对于 dbt 数据测试,您必须“向后考虑”
这是一开始真正吸引我的一个。 dbt 数据测试中有一条严格的规则,即它们_必须_返回零行才能通过。数据测试必须以这样一种方式编写,即如果结果_不等于_正确的总和值,它期望找到零行,而不是搜索诸如特定行集的总和之类的值。
在编写数据测试时考虑“向后”:在这种情况下如何返回 0 行,但仍检查我需要验证的数字?通常,您会发现 !u003d 或 <u003d 在大多数数据测试用例中都有效。我在这里包含了一个示例来显示一个数据测试,该测试确保在由 dbt 模型创建的示例用户表中存在行数。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--SN6p3vpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// i.ibb.co/sgC7Tkb/DataTest.png%2520%3D100x)
3\。增加线程数以获得最大测试速度
时间在自动化测试中很重要,编写 dbt 模式和数据测试的目标是成为数据架构的一个集成部分。这样,每次开发人员运行他们的模型时,测试就可以开始并在开发过程中提供检查点。这就是为什么时机如此关键。如果一个 dbt 模型需要一个小时来编译,您不想在运行中增加 30 分钟的测试时间。
在profiles.yml 文件中增加项目正在使用的配置文件中的线程计数值会有很大帮助。分变成秒,秒变成半秒,可以添加的线程越多。例如,如果我有 30 个测试,我可能希望在我的 profiles.yml 文件中定义 40 个线程。这有助于在 4 秒内运行 30 个数据和模式测试,作为我经验中的一个简单示例。所以,增加线程数!
4\。给你的测试起有意义的名字
这很重要,因为如果您的数据测试名称不清楚,那么在执行测试时将很难区分哪个测试通过或失败。当您运行“dbt test”时,您的所有模式和数据测试将一起运行。您不能简单地在数据测试文件夹中运行一个目录,您可以使用“dbt test --schema”或“dbt test --data”,这确实是区分您想要运行哪些测试的唯一方法。
重点是,因为 dbt 无法让我们对运行较小的测试集进行太多控制,所以我们需要能够查看正在运行的测试的所有不同名称。正如您在这张运行一些 dbt 测试的图片中看到的那样,dbt 会自动命名模式测试,但您可以用有用的、一致的名称来标记数据测试,例如“tablePresent”。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--9a3x14yC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880 /https://dev-to-uploads.s3.amazonaws.com/i/9o40p4oqzajgxem4utlk.png)
其他
干得好,我们做到了!我希望这些关于 dbt 测试的快速事实对您有所帮助。如果您想查看实际代码,请随时在 Github](https://github.com/corissawex/dbtTestExamples)上克隆我的[dbtTestExamples 存储库,并了解如何将 dbt 模型和测试连接到Google Big Query实例。
快乐测试!
更多推荐
所有评论(0)