趋近智
模拟从常见来源(一个简单的逗号分隔值(CSV)文件)中提取数据的过程,可以演示提取阶段如何运作。这项练习有助于巩固对数据如何在ETL工作流程中初步获取的认识。
假设您在一家在线零售商工作。每天都会生成一个名为 orders.csv 的新文件,其中包含已下订单的详细信息。您的任务是提取这些数据,以便后续处理。
假设今天的 orders.csv 文件如下所示:
OrderID,CustomerID,OrderDate,Amount,Status
101,CUST-A,2023-10-26,150.00,Shipped
102,CUST-B,2023-10-26,75.50,Processing
103,CUST-A,2023-10-27,210.25,Shipped
104,CUST-C,2023-10-28,30.00,Pending
这是结构化数据。每行表示一个订单,值之间用逗号分隔。第一行是表头,定义了字段(列)。
在真实的ETL管道中,专用工具或脚本会建立与 orders.csv 所在文件系统(或数据库、或API端点)的连接。对于本次模拟,我们假设已成功连接并可以访问文件内容。
如前所述,完全提取涉及从源读取整个数据集。如果我们对 orders.csv 执行完全提取,拉入ETL流程的原始数据将类似于这样(此处表示为记录列表):
[
{"OrderID": "101", "CustomerID": "CUST-A", "OrderDate": "2023-10-26", "Amount": "150.00", "Status": "Shipped"},
{"OrderID": "102", "CustomerID": "CUST-B", "OrderDate": "2023-10-26", "Amount": "75.50", "Status": "Processing"},
{"OrderID": "103", "CustomerID": "CUST-A", "OrderDate": "2023-10-27", "Amount": "210.25", "Status": "Shipped"},
{"OrderID": "104", "CustomerID": "CUST-C", "OrderDate": "2023-10-28", "Amount": "30.00", "Status": "Pending"}
]
请注意,数据是完全按照文件中的样子提取的,包括以字符串形式表示的数据类型。结构(字段名称)是从表头行中获取的。这是下一阶段的原始材料。
一个图表,展示了完全提取过程如何读取整个源文件(
orders.csv)以生成原始提取数据。
现在,假设一段时间过去了,orders.csv 文件中添加了一个新订单:
OrderID,CustomerID,OrderDate,Amount,Status
101,CUST-A,2023-10-26,150.00,Shipped
102,CUST-B,2023-10-26,75.50,Processing
103,CUST-A,2023-10-27,210.25,Shipped
104,CUST-C,2023-10-28,30.00,Pending
105,CUST-B,2023-10-28,99.99,Processing <-- 新订单
如果我们采用增量提取策略,目的是只提取自上次提取以来新增或更改的数据。假设我们的ETL流程记录了上次提取的 OrderID(即104),它将查询或扫描源以查找ID大于104的订单。
在本次模拟中,增量提取将仅产生新记录:
[
{"OrderID": "105", "CustomerID": "CUST-B", "OrderDate": "2023-10-28", "Amount": "99.99", "Status": "Processing"}
]
如果源数据集很大且变化相对较小,这比重新提取整个文件效率高得多。识别变化的逻辑(例如使用ID、时间戳或CDC方法)是增量策略的重要组成部分。
如果源文件有错误怎么办?例如:
OrderID,CustomerID,OrderDate,Amount,Status
101,CUST-A,2023-10-26,150.00,Shipped
102,CUST-B,2023-10-26,,Processing <-- 缺少金额
103,CUST-A,2023-10-27,210.25,Shipped
在提取过程中,程序可能会遇到 OrderID 102 的 Amount 缺失情况。根据ETL工具或脚本处理错误的配置:
Amount 的值为null或为空。通常,提取的目的只是获取数据,无论好坏。数据的清洗和验证通常在转换阶段进行。因此,一个常见的结果是提取出带有缺失值标记 (token)的记录:
[
{"OrderID": "101", "CustomerID": "CUST-A", "OrderDate": "2023-10-26", "Amount": "150.00", "Status": "Shipped"},
{"OrderID": "102", "CustomerID": "CUST-B", "OrderDate": "2023-10-26", "Amount": "", "Status": "Processing"}, // 注意:金额为空
{"OrderID": "103", "CustomerID": "CUST-A", "OrderDate": "2023-10-27", "Amount": "210.25", "Status": "Shipped"}
]
本次模拟演示了从一个简单的CSV文件中提取数据。我们看到了:
您现在对提取过程有了更具体的认识。它旨在可靠地从数据源获取所需的原始数据,并为ETL管道中的后续步骤做好准备。接下来,我们将考察转换阶段发生的事情,在该阶段,这些原始数据将被清洗、重塑和丰富。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•