奖章架构描述了一系列数据层,用于标示湖仓中存储数据的质量。 Azure Databricks 建议采用多层方法为企业数据产品生成单一事实源。
此体系结构保证了数据的原子性、一致性、隔离性和持久性,因为数据通过多层验证和转换,然后存储在针对高效分析而优化的布局中。 术语铜牌(原始)、银牌(已验证)和 金牌(已扩充)描述了每一层中的数据质量。
作为数据设计模式的奖牌体系结构
奖牌体系结构是一种数据设计模式,用于以逻辑方式组织数据。 其目标是在数据流经体系结构的每一层(铜牌层到银牌层再到金牌层)时,逐步改进数据的结构和质量。 奖牌体系结构有时也称为多跃点体系结构。
通过在这些层中处理数据,组织可以逐步提高数据的质量和可靠性,使其更适合商业智能和机器学习应用程序。
遵循奖牌体系结构是建议的最佳做法,但不是必需。
| 问题 | Bronze | 银 | 金色 |
|---|---|---|---|
| 这一层中会发生什么? | 原始数据引入 | 数据清理和验证 | 维度建模和聚合 |
| 谁是目标用户? |
|
|
|
奖牌体系结构示例
这一奖牌体系结构的示例展示供业务运营团队使用的铜牌层、银牌层和金牌层。 每一层都存储在操作目录的不同架构中。
-
铜牌层 (
ops.bronze):从云存储、Kafka 和 Salesforce 引入原始数据。 此处不执行数据清理或验证。 -
银牌层 (
ops.silver):在此层中执行数据清理和验证。- 通过删除空值并隔离无效记录来清洗客户和交易数据。 这些数据集会联接到名为
customer_transactions的新数据集中。 数据科学家可使用此数据集进行预测分析。 - 同样,来自 Salesforce 的账户和商机数据集会联接起来,以创建
account_opportunities,并用账户信息进行增强。 -
leads_raw数据在名为leads_cleaned的数据集中被清理。
- 通过删除空值并隔离无效记录来清洗客户和交易数据。 这些数据集会联接到名为
-
金牌层 (
ops.gold):此层专为商务用户设计。 它包含的数据集少于白银和青铜数据集。-
customer_spending:每位客户的平均支出和总支出。 -
account_performance:各账户的每日表现。 -
sales_pipeline_summary:有关端到端销售流程的信息。 -
business_summary:为高管人员提供高度聚合的信息。
-
将原始数据引入铜牌层
铜牌层包含未经验证的原始数据。 摄取到青铜层中的数据通常具有以下特征:
- 以原始格式包含和维护数据源的原始状态。
- 以增量方式追加,并随时间推移而增长。
- 旨在供丰富银牌层表数据的工作负载使用,而不是供分析师和数据科学家访问。
- 用作单一事实来源,保留数据的保真度。
- 通过保留所有历史数据,支持重新处理和审计。
- 可以是来自源的流式处理和批处理事务的任意组合,包括云对象存储(例如 S3、GCS、ADLS)、消息总线(例如 Kafka、Kinesis 等)和联合系统(例如 Lakehouse Federation)。
限制数据清理或验证
在青铜层中仅执行最基本的数据验证。 为防止丢失数据,Azure Databricks 建议将大多数字段存储为字符串、VARIANT 或二进制字段,以防出现意外的架构更改。 可以添加元数据列,例如数据来源或数据源(例如 _metadata.file_name )。
对银牌层中的数据进行验证和删除重复
在白银层进行数据清理和验证。
基于青铜层构建白银表
若要构建银层,请从一个或多个铜层表或银层表中读取数据,并将数据写入银层表。
Azure Databricks 不建议直接将引入数据写入银牌表。 如果直接从数据引入流程写入,架构变更或数据源中的损坏记录都会导致失败。 假设所有数据源都是追加型数据源,请将大多数从 Bronze 层进行的读取配置为流式读取。 应为小型数据集保留批量读取(例如小维度表)。
银牌层展示经过验证、清理和扩充的数据版本。 银层:
- 应始终包含每个记录的至少一个经过验证的非聚合表示形式。 如果聚合表示支撑许多下游工作负载,这些表示可能位于白银层,但通常位于黄金层。
- 是进行数据清理、去重和规范化的地方。
- 通过更正错误和不一致以提高数据质量。
- 将数据结构为更易使用的格式,以便进行下游处理。
保证数据质量
以下操作在银牌表中执行:
- 架构实施
- 空值和缺失值的处理
- 数据去重
- 解决无序和延迟到达的数据问题
- 数据质量检查和执行
- 架构演变
- 类型转换
- 加入
开始对数据建模
通常在银牌层开始执行数据建模,包括选择如何表示大量嵌套或半结构化数据
- 使用
VARIANT数据类型 - 使用
JSON字符串。 - 创建结构、映射和数组。
- 将架构扁平化,或将数据规范化到多个表中。
使用黄金层为分析提供支持
黄金层是数据的高度提炼视图,用于支撑下游分析、仪表板、机器学习和应用程序。 黄金层数据通常是高度聚合的,并且会针对特定时间段或地理区域进行筛选。 其包含语义上有意义的数据集,这些数据集映射到业务功能和需求。
金层:
- 由专用于分析和报告的聚合数据组成。
- 与业务逻辑和要求保持一致。
- 已针对查询和仪表盘进行了性能优化。
与业务逻辑和要求保持一致
黄金层是你通过建立关系并定义度量值,使用维度模型对数据进行建模以用于报表和分析的地方。 有权访问黄金层数据的分析师应该能够找到特定领域的数据并回答问题。
由于金牌层对业务领域进行建模,因此某些客户会创建多个金牌层,以满足不同的业务需求,例如 HR、财务和 IT。
创建专用于分析和报告的聚合
组织通常需要针对平均值、计数、最大值和最小值等度量值创建聚合函数。 例如,为了回答关于每周预订和收入的问题,你可以创建一个名为 weekly_bookings “实体化视图”的可视化视图,预聚合这些数据,这样分析师和其他人就不需要重新创建常用的实体化视图。
CREATE OR REPLACE MATERIALIZED VIEW main.example_output.weekly_bookings AS
SELECT date_trunc('week', check_in) AS week,
property_id,
status,
count(*) AS total_bookings,
sum(total_amount) AS total_revenue
FROM samples.wanderbricks.bookings
GROUP BY week, property_id, status
优化查询和仪表板性能
对黄金层表进行性能优化是一种最佳实践,因为这类数据集经常被查询。 通常,大量历史数据通常在白银层中访问,而不会在黄金层中物化。
调整数据引入的频率以控制成本
确定引入数据的频率以控制成本。
| 数据引入频率 | 成本 | 延迟 | 声明性示例 |
|---|---|---|---|
| 持续增量摄取 | 更高 | 较低 |
|
| 触发式增量摄取 | 降低 | 更高 |
|
| 采用手动增量摄取的批量摄取 | 更低 | 最高,因为运行不频繁。 |
|