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
何处支持规范
- 下面是支持规范的场景:
- SQL 模型
- 下面物化模型
table
view
— Views offer limited support for column names and data types, but notconstraints
.incremental
— withon_schema_change: append_new_columns
oron_schema_change: fail
.
- 某些数据平台,但支持和强制的约束因平台而异。
- 下面是不支持规范场景
- Python 模型.
materialized view
orephemeral
-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 type | Definable | Enforced |
---|---|---|
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模型规范可以构建可靠的数据模型,从而保障模型字段的数据类型和业务约束,为提升数据质量提供事前方法。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。
标签:product,name,模型,规范,构建,dbt,数据模型 From: https://blog.csdn.net/neweastsun/article/details/143028088