数据契约是分布式数据解决方案的数据质量和可扩展性的支柱。它们指定管理数据库实体之间交换的格式、架构和协议。这些正式协议消除了有关数据的歧义和未记录的假设。
在本文中,我将通过提供基础和高级技术来阐明数据契约的概念,以促进其有效实施。
理解数据契约
单一数据契约明确了两个模型之间数据交换的参数。这些正式协议确保数据格式和架构不会出现歧义。
数据契约的定义和验证对于有效的跨团队协作至关重要。
简而言之,数据合同是改变数据原 芬兰赌博数据 始状态的流程(生产者)和目的地(消费者)之间的正式协议。它与商业合同的工作方式非常相似。它们代表商业产品的供应商和消费者之间的义务。数据合同对数据产品(即表、视图、数据模型等)的作用相同。
目的是减轻数据管道下游中断并使数据转换稳定可靠。
数据契约的主要组成部分是模式(列和格式)、语义层部分(度量、计算和限制)、服务水平协议(SLA)和数据治理。
数据契约的好处包括:
数据质量自动化并检查何时创建或更新新的数据输出。
实现高效扩展,特别是对于分布式数据架构,例如数据网格。
改善数据开发生命周期,重点构建合同验证工具。
通过数据生产者和消费者之间的反馈促进合作。
该图解释了数据契约如何运作。
数据契约。图片由作者提供。
使用 dbt 的数据契约示例
在数据契约中,架构定义属性名称、数据类型以及属性是否为必需。它们还可以指定列的格式、长度和可接受的值范围。
让我们考虑在 YAML 文件中定义如下的dbt模型模式。我们的表模式定义如下columns:
提供模式定义作为应用于数据集列的一组规则和约束,为处理和分析数据提供了非常重要的信息。
模式往往会随着时间而改变。
这是一个常见的情况。假设我们的源表添加了一个额外的收缩列:
select
'abc123' as order_id,
'Some order type' as order_type,
'USD' as currency
供电
在执行增量更新时考虑模式变化至关重要,否则下游增量模型的输出将使合同无效。
这可以通过添加on_schema_change: appenddbt 增量策略来解决。
模式验证可以是显式的,也可以是隐式的。
一些大数据文件格式,如 AVRO 和 Parquet,默认支持板载模式和隐式模式定义,因此无需额外的外部验证。
相反,像 JSON 这样的无模式数据文件格式需要外部模式验证。一些 Python 库(例如pydantic或一个简单的@dataclass)可以执行此操作:
什么是数据契约?初学者指南及示例
-
- Posts: 317
- Joined: Mon Dec 23, 2024 5:02 am