首页 > 其他分享 >使用dbt规范构建可靠的数据模型

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

时间:2024-10-20 09:45:54浏览次数:9  
标签:product name 模型 规范 构建 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模型规范可以构建可靠的数据模型,从而保障模型字段的数据类型和业务约束,为提升数据质量提供事前方法。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。

标签:product,name,模型,规范,构建,dbt,数据模型
From: https://blog.csdn.net/neweastsun/article/details/143028088

相关文章

  • 读数据工程之道:设计和构建健壮的数据系统14源系统
    1. 源系统中的数据生成1.1. 数据工程师的工作是从源系统获取数据,对其进行处理,使其有助于为下游用例提供服务1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B2. 数据源2.1. 数据是......
  • 深入探索ArkWeb:构建高效且安全的Web组件
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在HarmonyOSNext的开发环境中,Ar......
  • 通过结构化数据构建页面
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • HDLBits中文版,标准参考答案 | 3.3 Building Larger Circuits | 构建更大的电路
    关注 望森FPGA 查看更多FPGA资讯这是望森的第21期分享作者|望森来源|望森FPGA目录1Counterwithperiod100024-bitshiftregisteranddowncounter3FSM:Sequence1101recognizer4FSM:Enableshiftregister5FSM:ThecompleteFSM6Thecomplet......
  • 使用ArkWeb构建页面
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • 15章2节:线性判别分析预测模型构建评估和可视化演示
    线性判别分析(LDA)作为一种经典的分类方法,通过最大化类间差异与最小化类内差异来实现样本的有效分类。LDA在理论上建立了坚实的数学基础,并且在多个领域具有广泛的应用。然而,在应用时需要注意其假设条件,并根据数据的实际情况选择合适的分类方法。在本篇文章中,我们通过Iris数据集......
  • 【Agent系列】从论文到源码解析Self-Ask 以及数据构建带来的启发
    前言一、Self-Ask解决了什么二、Self-Ask的理论实现三、从源码看Self-Ask的实现四、从实验结果看LLM的内部机制五、数据集的构建细节六、资料链接总结前言Self-Ask对LLM的推理能力进行了实验评估,并且提出了一种follow-up范式来提升LLM的2跳推理能力,为了进一步提升回答准确率......
  • 使用常用组件构建页面
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/......
  • 编写自定义dbt通用数据测试
    dbt默认提供了NotNull,Unique,Relationships,和AcceptedValues四个通用数据测试,这些测试被称为”schema测试“,底层这些通用测试就是类似宏的测试块。本文首先介绍内置通用测试,然后介绍如何自定义通用测试,最后还实践如何覆盖内置通用测试的功能。内置数据测试......
  • 使用LangGraph构建多Agent系统架构!
    0前言Agent是一个使用大语言模型决定应用程序控制流的系统。随着这些系统的开发,它们随时间推移变得复杂,使管理和扩展更困难。如你可能会遇到:Agent拥有太多的工具可供使用,对接下来应该调用哪个工具做出糟糕决策上下文过于复杂,以至于单个Agent无法跟踪系统中需要多个专业领域(......