学习指南: 第15部分. Gold layer: 业务实体与粒度

模块「第15部分. Gold layer: 业务实体与粒度」中第 3 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

主题: 第15部分。Gold层:业务实体与粒度

难度级别:中级

预计学习时间:2-3小时

先修知识: 对数据仓库架构(bronze/silver/gold层)有基本了解

有dbt或类似数据转换工具的使用经验

具备编写复杂SQL查询和窗口函数的SQL知识

了解数据血缘(data lineage)和数据契约(data contracts)概念

熟悉数据质量和数据测试的原则

学习目标: 以单一公开承诺的形式定义和阐述数据集市的粒度(grain)

区分模型的技术就绪状态与其作为面向消费者的Gold数据产品的就绪状态

对Gold层应用强制的验收事实(not_null、unique、不含PII)

编制Gold层登记表,注明消费者、粒度、必填字段和PII策略

以契约、SLA和质量证据为重点,对Gold模型进行严格评审

概述:Gold层是数据架构中的最终层,在这里工程工作转变为对消费者的公开承诺。与staging和silver层不同(这两层允许中间计算和技术规范化),Gold模型必须以固定的粒度回答具体的业务问题。核心概念是粒度(grain)——即数据集中一行记录的明确定义。如果粒度未被记录或验证,消费者将自行推断,这会导致语义漂移。Gold模型应当精简,具有明确命名的消费者、必填字段、PII策略和验证事实。模型位于models/marts/文件夹中并不会自动使其成为Gold数据产品——这是通过规范、契约和验证所固化的承诺。

关键概念: Gold层:数据产品的最终层,消费者看到的是稳定的数据集市,而非中间计算。Gold始于粒度和契约,而非便捷的SELECT。这不是models/marts/文件夹,而是对消费者的承诺。

粒度(Grain):回答数据集中"一行代表什么"的问题。示例:每个customer_id、transaction_id、scope的一行,或每个日期和渠道的一行。粒度的变化是数据API的变化,而非表面修改。

数据集市的公开承诺:单行描述数据集市向谁承诺了什么内容。良好的表述:"每个客户一行,用于投资组合分析,不含直接PII"。不佳的表述:"包含账户、支付、风险及一切可能所需内容的有用客户数据集市"。

数据集市的消费者:明确命名的用户或团队:客户和投资组合分析、风险信号监控、同意状态控制。不同的消费者不应偶然获得相同的粒度。

验收事实(acceptance facts):针对Gold模型的一组检查:粒度主键通过not_null和unique(如果假设每个键一行)、必填指标通过not_null、无直接PII、契约字段存在、血缘可读。

PII策略:Gold层中个人数据的处理规则。任何多余的含PII列都可能进入报告中,如果不验证策略。缺乏直接PII是就绪的强制条件。

数据集市的语义漂移:数据集市逐渐"丰富"地扩展:添加产品、渠道、细分、最近的操作、风险标志、信用阶段。每次扩展都会改变数据表回答的问题,尽管名称保持不变。

数据契约:供应商和消费者之间关于字段组成、类型和语义的协议。契约字段必须存在于Gold模型中并通过测试验证。

Gold层评审:比staging评审更严格的过程。问题包括:数据集市承诺给谁、将如何使用、什么是SLA、PII策略、粒度和证据。如果评审者无法理解消费者——则该模型还不是Gold。

Mart customer 360、mart payment risk signals、mart open api consents:具有不同消费者和粒度的具体数据集市示例:mart_customer_360——用于客户和投资组合分析(粒度:customer_id),mart_payment_risk_signals——用于风险信号监控,mart_open_api_consents——用于同意控制。

重要日期: Medallion架构概念的出现:约2020-2021年——行业中bronze/silver/gold层术语的固化

数据契约方法的演进:2022-2024年——数据供应商和消费者之间显式契约实践的形成

PII策略的标准化:GDPR(2018)及类似法规作为Gold层隐私政策正式化的催化剂

练习题: 名称: 数据集市单行承诺的表述

问题: 对于项目中的每个数据集市(假设有mart_customer_360、mart_payment_risk_signals、mart_open_api_consents),用一行写出一条公开承诺。检查承诺是否包含消费者和粒度。如果没有——重新表述。

解决方案: 步骤1:为每个数据集市确定消费者(客户分析师、风险团队、同意控制)。步骤2:阐述粒度(每个customer_id、transaction_id、scope一行)。步骤3:写下承诺:'mart_customer_360:每个客户一行,用于投资组合分析,不含直接PII'。步骤4:检查表述中是否包含逗号和例外,这些可能表明数据集市过宽。

难度: beginner

名称: 编制Gold层登记表

问题: 按模板为项目创建Gold层登记表:消费者、粒度、必填字段、PII策略、验证事实。为三个数据集市填写。

解决方案: 步骤1:创建markdown文件'Gold层登记表.md'。步骤2:对于mart_customer_360:消费者——客户和投资组合分析,粒度——每个customer_id一行,必填字段——customer_id、细分、LTV、最近活动,PII策略——仅哈希标识符,无email/电话,验证事实——customer_id上的unique+not_null,LTV上的not_null。步骤3:对mart_payment_risk_signals(每个transaction_id一行,风险标志必填)和mart_open_api_consents(每个scope一行,同意状态必填)重复此过程。

难度: intermediate

名称: 识别未证明粒度的数据集市

问题: 使用材料中的Qwen查询,分析specs/models和models/marts文件夹。找出粒度未被测试或评审者手动事实证明的数据集市。

解决方案: 步骤1:打开Qwen查询:'阅读specs/models和models/marts。对于每个数据集市,确定粒度、主要验证事实、PII策略和对契约的影响。找出粒度未被测试或评审者手动事实证明的数据集市。不要修改文件。'步骤2:检查models/marts/中的每个模型。步骤3:对于每个模型检查:是否有schema.yml,对粒度关键字段进行unique/not_null测试?在README或描述中是否有粒度的明确说明?步骤4:编制未证明粒度的数据集市列表,并将其提交评审以添加测试或文档。

难度: intermediate

名称: 诊断数据集市的语义漂移

问题: 数据集市mart_customer_360最初包含每个客户一行。随着时间的推移,其中添加了:客户产品、互动渠道、最近操作、风险标志、信用阶段。指出问题并提出解决方案。

解决方案: 步骤1:确定问题——这是数据集市的语义漂移。粒度实际上变成了'客户×产品×渠道',尽管名称暗示每个客户一行。步骤2:消费者不理解得到的是什么:客户切片还是客户-产品切片。步骤3:解决方案——拆分数据集市:将mart_customer_360恢复为粒度'每个客户一行'(仅客户属性),创建单独的数据集市:mart_customer_products(每个客户-产品一行)、mart_customer_risk_signals(每个客户的风险标志)、mart_customer_interactions(渠道和操作)。步骤4:用一行固定每个数据集市的公开承诺。

难度: advanced

案例研究: 名称: 金融科技初创公司客户数据集市的语义漂移

场景: 金融科技初创公司为投资组合分析团队创建了数据集市mart_customer_360。最初,该数据集市包含每个customer_id一行的字段:客户细分、LTV、最近交易日期、余额。分析师将其用于每周投资组合报告。

挑战: 随着时间的推移,团队开始向数据集市添加新字段:客户产品列表(JSON数组)、沟通渠道、信用阶段、风险标志、最近5次操作。粒度实际上从'每个客户一行'变为'具有所有活动的客户'。名称保持不变,但意义发生了变化。分析师开始获得模糊的结果:由于按产品扩展了行数,报告中LTV有时计算正确,有时因重复而出现错误。此外,数据集市意外地包含了一列客户email,违反了PII策略。

解决方案: 团队按照材料中的原则进行了Gold层评审。阐述了公开承诺:mart_customer_360——'每个客户一行,用于投资组合分析,不含直接PII'。创建了单独的数据集市:mart_customer_products(粒度:customer_id × product_id)、mart_customer_risk_signals(粒度:customer_id)、mart_customer_recent_activity(粒度:customer_id × operation_id)。添加了验收测试:所有数据集中customer_id上的unique + not_null、通过dbt测试检查PII缺失、必填字段的契约测试。进行了评审,重点关注问题:谁是消费者?粒度是什么?什么是SLA?

结果: 拆分数据集市后,分析师在每周报告中获得了可预测的结果。LTV漂移停止。PII策略正式化:Gold数据集中仅保留哈希标识符和聚合指标。报告调试时间减少了60%。团队引入了实践:models/marts/中的每个数据集市现在必须在README中具有一行公开承诺,注明消费者和粒度。

经验教训: 位于models/marts/中的模型不会自动成为Gold数据产品

数据集市"更丰富"的扩展悄然改变粒度和意义——需要拆分纪律

验收事实(unique、not_null、不含PII)必须是Gold层的强制要求

单行公开承诺是防止漂移的最佳方式

相关概念: 粒度作为防止语义漂移的保护

Gold层的验收事实

数据集中的PII策略

Gold模型的严格评审

数据集市的公开承诺

名称: 支付系统风险信号数据集中隐含的粒度

场景: 支付系统为风险团队监控创建了数据集市mart_payment_risk_signals。该数据集市从多个来源收集:反欺诈评分、行为因素、地理位置。模型是在没有明确定义粒度的情况下构建的——只是所有因素的便捷JOIN。

挑战: 风险团队开始收到重复信号:由于不同因素在不同时间以不同时间戳触发,相同支付在数据集中出现多次。监控显示误报。此外,数据集中包含直接PII(客户姓名、email),根据安全策略风险团队不应看到这些信息。Staging评审没有问题,但Gold评审没有严格进行。

解决方案: 团队应用了材料中的方法:明确定义了粒度——'每个transaction_id一行,包含最近评估时的风险因素状态'。写下了一行承诺:'mart_payment_risk_signals:每个交易一行,包含用于监控的最新风险标志,不含直接PII'。添加了验收测试:transaction_id上的unique + not_null,risk_score和risk_flags上的not_null,通过元数据测试PII列的缺失。删除了直接PII,替换为哈希的customer_hash。对每个数据集市进行了评审,问题包括:承诺给谁?粒度是什么?什么是SLA?什么是证据?

结果: 信号重复停止。监控变得确定性:一次交易——一条记录,包含最新状态。风险团队不再看到直接PII,消除了合规风险。引入了实践:每个数据集市在合并到main之前,需通过6项Gold模型就绪检查清单(消费者、粒度、契约、PII、验证事实、评审报告)。

经验教训: 没有显式粒度,消费者会自行推断——这导致模糊结果

Staging和Gold评审应具有不同的严格性:在Gold中询问消费者、契约、SLA

PII策略应自动验证,而非依赖手动控制

验收事实(粒度键上的unique)是就绪的强制条件

相关概念: 粒度作为公开契约的一部分

Gold层的验收事实

PII策略

Gold模型的严格评审

用于分析数据集市的Qwen查询

学习建议: 从阐述公开承诺开始:从项目中取任何数据集市,尝试用一行描述它。如果无法不带逗号地完成——则数据集市过宽。

使用Gold模型就绪检查清单作为过滤器:材料中的6个项目(消费者、粒度、契约、PII、验证事实、评审报告)应用于models/marts/中的每个模型。

不要混淆文件夹和承诺:位于models/marts/中是技术细节。Gold是与消费者的契约,由规范和验证固化。

练习识别漂移:取具有变更历史的数据集市,跟踪粒度如何变化。这有助于在早期识别漂移。

使用材料中的Qwen查询作为自动分析的模板:它查找未证明粒度的数据集市并节省手动评审时间。

评审严格性应从staging增加到gold:在gold中询问消费者、契约、SLA、PII、粒度和证据——而不仅仅是SQL的技术正确性。

养成习惯:数据集市的每次扩展首先用问题检查——这会改变粒度吗?如果是,这不是表面修改,这是数据API的变化。

按粒度拆分数据集市:最好是三个粒度清晰的窄数据集市,而不是一个试图包罗万象的宽数据集市。

附加资源: Dbt测试文档:https://docs.getdbt.com/docs/build/data-tests — dbt中模式和自定义测试的官方文档

Data contracts (bitol):https://bitol.io — Andrew Jones团队的开放数据契约规范

The medallion architecture (databricks):https://www.databricks.com/glossary/medallion-architecture — Databricks对bronze/silver/gold架构的描述

Data quality fundamentals (great expectations):https://greatexpectations.io — 数据质量保证工具和实践

Dbt-utils包:https://github.com/dbt-labs/dbt-utils — 有用的测试和宏的集合,包括PII检查

《Fundamentals of Data Engineering》一书(Joe Reis、Matt Housley):关于数据层和契约的章节——对DWH架构的现代看法

文章《What is a data contract?》(Monte Carlo):https://www.montecarlodata.com/blog-data-contracts-explained — 数据契约的实用解释

摘要: Gold层不是models/marts/文件夹,而是对消费者的公开承诺。关键概念是粒度——一行含义的定义。准备就绪的Gold模型具有:明确命名的消费者、记录和验证的粒度、绑定到契约的必填字段、PII策略、验收事实(键上的unique+not_null、不含直接PII、契约字段)和评审报告,将事实与假设分离。防止语义漂移的主要保护是具有单行公开承诺的窄数据集市。如果无法不带逗号地表述承诺——则数据集市过宽,必须拆分。Gold评审应比staging评审更严格:必须询问消费者、契约、SLA、PII、粒度和证据。使用Qwen查询查找未证明粒度的数据集市,并编制Gold层登记表,注明消费者、粒度、必填字段和PII策略。

我的笔记
0 / 10000

笔记保存在当前浏览器中。在其他设备上将不会显示。

课程菜单

课程

SDD Data. 使用 Qwen Code 和 dbt 构建银行数据平台
进度 0 / 110