使用dbt规范构建可靠的数据模型

DBT模型规范(dbt contracts)为建立模型提供一致性保障机制,让应用的任何模型转换产生的数据集符合预定义的模式。dbt模型规范为创建可靠数据模型提供了健壮的框架。

为什么使用模型规范

在dbt中,定义模型通常是select sql语句,并从该SELECT语句推断数据集的结构。但是如果没有契约,开发过程中模型结构的变化可能导致不一致,特别是当其他系统或模型依赖于当前模型输出时。通过实现模型规范,从而保障建立的一组模型输出结构一致。在构建模型过程中,dbt检查模型是否遵守其规范,从而增加可靠的保障层并减少下游错误风险。

定义模型规范

假设有产品信息的模型。下面是如何为这种模型定义合约的示例:

# models/marts/dim_products.sql
WITH input AS (
    SELECT
        product_id,
        product_name,
        product_category,
        -- other attributes...
    FROM ...
)

SELECT * FROM input

何处支持规范

  1. 下面是支持规范的场景:
  • SQL 模型
  • 下面物化模型
    • table
    • view — Views offer limited support for column names and data types, but not constraints.
    • incremental — with on_schema_change: append_new_columns or on_schema_change: fail.
  • 某些数据平台,但支持和强制的约束因平台而异。
  1. 下面是不支持规范场景
  • Python 模型.
  • materialized view or ephemeral-materialized SQL models.
  • Custom materializations (unless added by the author).
  • Models with recursive CTE’s in BigQuery.
  • Other resource types, such as sources, seeds, snapshots, and so on.

模型规范分类

基于可定义性和平台强制,约束可分为三类:

  • 可定义的和强制:如果违反约束,模型将无法构建。
  • 可定义且不强制:平台支持指定约束的类型,但是即使构建模型违反了约束,仍然可以构建模型。此约束仅用于元数据目的。这种方法在云数据仓库中比在事务性数据库中更常见,事务性数据库中更常见的是严格执行规则。
  • 不能定义也不能强制:你不能为平台指定约束的类型。

PostgreSQL 基本支持情况如下:

Constraint typeDefinableEnforced
not_null
primary_key
foreign_key
unique
check

模型规范配置

# models/marts/products.yml
models:
  - name: dim_products
    config:
      contract:
        enforced: true
    columns:
      - name: product_id
        data_type: int
        constraints:
          type: not_null
      - name: product_name
        data_type: string
      - name: product_category
        data_type: string

在此设置中,规范确保dim_products模型输出数据集,其中product_id为整数,product_name和product_category为字符串。

如果输出与这些规范不匹配,dbt将不会构建模型。要执行模型的规范,请在contract配置下设置forced: true。

  • 如何处理规范

在构建过程中,dbt执行“预先”检查,以确保模型SQL查询返回与规范中的列名和数据类型相匹配。它还调整发送到数据平台的数据定义语言(Data Definition Language, DDL)语句以包含这些规范,在模型创建或更新期间强制执行这些规范。

  • 与模型测试区别

模型规范定义了返回数据集的形状。如果模型的逻辑或输入数据不符合该形状,则不会构建模型。

数据测试是更灵活的机制,用于在构建模型后验证模型的内容。只要可以编写查询,就可以运行数据测试。数据测试更具可配置性,例如使用自定义严重性阈值。它们在发现故障后更易调试,因为你可以查询已经构建的模型,或者将故障记录存储在数仓中。

最后总结

本文介绍数据模型规范,包括应用场景、如何定义和执行,以及与模型测试的区别。使用dbt模型规范优势的如下:

  • 数据模型一致性:模型规范在多个数据处理流程依赖于结构化输出的生产环境中尤为重要。
  • 减少异常错误:因数据模型中的意外更改可能导致错误,规范为下游应用提供稳定的基础。
  • 促进团队协作:模型输出可预测且文档化良好,从而提高跨团队数据资产的可靠性和可用性。

利用dbt模型规范可以构建可靠的数据模型,从而保障模型字段的数据类型和业务约束,为提升数据质量提供事前方法。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值