趋近智
既然我们对结构化、半结构化和非结构化等不同数据格式有了一个初步认识,接下来就来看看这些数据实际来源于何处,以及数据工程师通常如何收集它们。确定数据的来源和收集方法,通常是设计数据存储和处理系统的第一步。这就像在做饭前,你需要知道食材从哪里来一样。
数据可以来源于种类繁多的地方,这可能会让你感到意外。作为数据工程师,你会经常接触到这些来源中的许多。下面我们来看一些常见类别:
操作型数据库: 它们是许多应用程序的支柱。这些数据库保存着业务操作的当前状态。例子包括:
日志: 几乎所有计算机系统都会生成日志。这些是记录已发生事件的数据,常用于故障排除、性能监控或了解使用模式。例子包括:
用户活动和交互数据: 现代应用程序,特别是Web和移动应用,会根据用户行为生成海量数据。这包括:
API(应用程序编程接口): API就像一份合同,允许不同的软件系统以预定义的方式请求和交换数据。数据工程师使用API从以下来源获取数据:
文件: 有时,数据只是以文件的形式到达。这在以下情况很常见:
流式来源: 与存储在数据库或文件中的数据不同,有些数据以连续流的形式到达。例如:
了解数据来源只是成功的一半;另一半是知道如何收集数据。方法通常取决于来源:
数据库查询: 对于操作型数据库,最直接的方法通常是使用其原生语言进行查询,关系型数据库通常使用SQL,NoSQL数据库则有特定的查询语言。数据可以定期(例如,每晚)或更频繁地批量提取。
日志传输/聚合: 从数百甚至数千台服务器收集日志需要专门的工具。日志传输器(如Fluentd、Filebeat或云原生代理)在服务器上运行,读取正在写入的日志文件,并将日志事件转发到中央存储或处理系统。
API调用: 从API获取数据,你的系统需要向API提供的特定URL端点发出网络请求(通常是HTTP GET请求)。API随后会返回所请求的数据,通常是JSON等格式。数据收集可能涉及按计划(例如,每小时)调用API以获取更新。具体操作方面包括处理认证(证明你有权限访问API)和遵守速率限制(在给定时间内可以发出多少请求)。
文件传输/摄入: 当数据以文件形式到来时,收集可能涉及:
流式摄入: 从流式来源收集数据通常涉及使用消息队列或专用流处理平台(如Apache Kafka、Google Pub/Sub或AWS Kinesis)。生产者(数据来源)持续向这些平台发送数据,而消费者(你的数据处理应用程序)则实时或接近实时地从这些平台读取数据。
变更数据捕获(CDC): CDC技术不是重复查询整个数据库表来查找变更,而是专注于捕获源数据库中发生的变更(插入、更新、删除),通常通过读取数据库的事务日志。这对于保持下游系统同步来说效率要高得多。虽然实施细节可能比较复杂,但了解这种方法的存在是有益的。
网页抓取: 这涉及编写程序(抓取器)来自动浏览网站并直接从HTML页面提取信息。虽然在没有API可用时有时是必需的,但应谨慎对待。网站经常变化,可能导致抓取器失效,并且抓取可能引发伦理和法律问题,或违反网站的服务条款。相比使用正式API,它通常可靠性较低且不那么受欢迎。
这里有一个图表,说明了不同来源通常如何被访问:
不同的数据来源通常需要特定的采集方法。数据库通常通过查询获取,日志通过传输,API通过调用,文件通过传输,流式数据通过摄入。
掌握这些来源和采集方法是十分重要的。当你需要构建数据管道(我们将在第3章讨论)时,你的首要问题通常会是:“数据存储在哪里?”和“我们如何获取它?”。拥有这个可能性图谱,可以帮助你为手头的工作选择合适的工具和技术。接下来,我们将更详细地查看最常见的数据存储结构之一:数据库。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造