让我们改进数据。经过清洗和标准化处理后,转换阶段通常会让数据比原始状态包含更多信息。这个过程被称为数据丰富。可以把它看作是在数据进入后续处理流程之前,直接向数据集中添加上下文或计算出新的有用信息。清洗侧重于纠正错误,而丰富则侧重于补充缺失或可能有用的内容。什么是数据丰富?数据丰富是指通过从其他来源添加相关信息或从现有数据中推导出新的数据点来改进、优化或提升原始数据的过程。其目的是让数据对分析或目标应用来说更有用、更有价值。数据丰富有助于形成更全面的视图,而不是仅仅拥有孤立的信息片段。常用丰富方法让我们来看看在转换阶段丰富数据的几种常用方法。1. 计算字段最直接的丰富方法之一是根据同一记录中现有数据的计算结果创建新字段。例子: 假设您已提取出包含 quantity(数量)和 unit_price(单价)列的销售订单数据。这些数据很有用,但您可能经常需要每行订单的 total_price(总价)。与其在以后每次查询数据时都进行计算,不如在转换时就将其添加。数据丰富化是一种使数据比原始状态更具信息量的过程。在数据管道的转换阶段,此过程将上下文或新的信息直接添加到数据集中。初步的数据准备通常侧重于解决数据质量问题;相比之下,丰富化则侧重于添加有价值或缺失的信息。因此,如果一条记录的 `quantity = 5` 且 `unit_price = 10.00`,丰富过程会添加一个新字段 `total_price`,其值为 `50.00`。 其他例子包括: * 根据出生日期计算年龄。 * 将 `first_name`(名)和 `last_name`(姓)组合成 `full_name`(全名)字段。 * 计算利润率($利润 = 销售额 - 成本$)。 * 从电子邮件地址中提取域名。2. 查找和数据合并通常,您提取的数据缺少其他地方存在的关联信息。数据丰富可能涉及从外部或内部参考数据集(如数据库表、电子表格甚至简单文件)查找相关信息,并将其合并到您的主数据流中。例子: 您提取的销售数据可能包含 product_id(产品ID),但没有 product_name(产品名称)或 category(类别)。您可能有一个单独的“产品”表或文件,用于映射 ID 到名称和类别。数据丰富过程可以利用销售数据中的 product_id 进行查找,以在产品数据中找到对应的 product_name 和 category,并将它们作为新列添加到销售记录中。输入销售数据: order_id=101(订单ID), product_id=P45(产品ID), quantity=2(数量)产品参考数据: id=P45(ID), name='Standard Widget'(名称), category='Widgets'(类别)丰富后的销售数据: order_id=101(订单ID), product_id=P45(产品ID), product_name='Standard Widget'(产品名称), category='Widgets'(类别), quantity=2(数量)另一种常见的查找是使用地理编码(如邮政编码或城市名称)来添加区域、州或国家信息。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="Helvetica", fontsize=10, color="#495057", fillcolor="#e9ecef", style="filled,rounded"]; edge [fontname="Helvetica", fontsize=9, color="#495057"]; rawData [label="提取的数据\n(例如:订单ID、产品ID、\n数量)"]; enrichment [label="数据丰富过程\n- 查找产品信息", shape=cylinder, fillcolor="#a5d8ff", color="#1c7ed6"]; refData [label="参考数据\n(产品信息:ID、名称、类别)", shape=database, fillcolor="#b2f2bb", color="#37b24d"]; enrichedData [label="丰富后的数据\n(订单ID、产品ID、\n产品名称、类别、\n数量)"]; rawData -> enrichment; refData -> enrichment [style=dashed, arrowhead=open, label="查找"]; enrichment -> enrichedData; }该图描绘了提取的数据如何进入数据丰富过程,该过程利用参考数据(如产品信息)生成包含附加字段的增强输出数据。3. 派生属性或标志有时,您可以根据应用于现有数据的条件推导出新的分类属性或布尔标志。这有助于对数据进行分段或快速识别相关的记录。例子: 根据之前计算的 total_price(总价),您可能希望对销售额进行分类:如果 total_price > 1000,添加一个新字段 order_value_segment(订单价值分段),值为 'High'(高)。如果 total_price 在 100 到 1000 之间,将 order_value_segment 设置为 'Medium'(中)。否则,设置为 'Low'(低)。另一个例子是添加一个布尔标志 is_international(是否国际订单),判断依据是客户的国家字段(可能是通过查找添加的)是否与公司所在国不同。为什么丰富数据?在转换阶段丰富数据有几个优点:改进分析: 丰富后的数据为商业智能和数据分析提供了更多维度和背景信息,从而带来更好的理解。强化报告: 报告可以包含更多描述性信息(如产品名称而非仅仅ID)和派生指标(如总价或客户分段)。提高效率: 在ETL过程中一次性计算字段或添加上下文通常比在下游应用或查询中反复进行更有效率。满足目标要求: 目标系统(如数据仓库)可能需要源数据中不存在的特定字段,这使得数据丰富成为必需。通过添加计算字段、查找相关信息和派生新属性,数据丰富显著提高了数据的价值和实用性,有效地为其最终加载阶段做好准备。它不仅仅是简单地清洗数据,而是积极提升数据生成有用信息的能力。