好的,让我们把所学的数据类型知识付诸实践。能够快速辨别数据是结构化、半结构化还是非结构化的,是每位数据工程师的一项基本能力。为什么呢?因为数据类型决定了您如何收集、存储、处理它,并最终如何使其发挥作用。针对不同的数据组织方式,有最适合的工具和技术。想象一下整理邮件。您处理账单(带有明确字段的结构化信息)的方式,与处理私人信件(非结构化文本)或杂志(带有文章、广告等的半结构化内容)的方式是不同的。我们来看一些例子,并尝试对它们进行分类。示例一:销售记录请看以下代表销售交易的片段:TransactionID,ProductID,CustomerID,SaleAmount,Timestamp 1001,PROD-A,CUST-056,49.99,2023-10-26T10:00:15Z 1002,PROD-B,CUST-101,120.50,2023-10-26T10:05:22Z 1003,PROD-A,CUST-056,49.99,2023-10-26T10:12:01Z问题: 这是哪种类型的数据?结构化、半结构化还是非结构化?此数据呈现清晰的表格格式。其中包含定义列的标题行:TransactionID、ProductID、CustomerID、SaleAmount、Timestamp。每一后续行都精确遵循此格式,为每个列提供一个值。数据整齐地适配表格形式,如电子表格或数据库表。这种严格的组织方式,带有预定义的模式(列及其预期数据类型),使其成为结构化数据。您可以根据列准确知道每条信息代表什么。常见例子包括关系型数据库中的数据以及像这样的CSV文件。示例二:产品目录条目现在,审查这部分描述产品的数据:{ "productId": "BK-003", "name": "Introduction to Data Engineering", "authors": [ {"firstName": "Alice", "lastName": "Chen"}, {"firstName": "Bob", "lastName": "Miller"} ], "description": "A foundational guide covering data pipelines, storage, and processing.", "details": { "pages": 350, "publisher": "Tech Press", "formats": ["Paperback", "eBook"] }, "reviews": [] }问题: 这是哪种类型的数据?分析: 这份以JSON格式呈现的数据,带有标签或标记(如"productId"、"name"、"authors"),赋予其组织性。然而,它不像上一个示例那样,不适配严格的行和列格式。它使用键值对。它包含嵌套结构(details)和列表(authors、formats、reviews)。尽管有组织性,但其结构不像表格那样严格。例如,另一个产品可能拥有额外的字段,或省略一些可选字段(比如某个产品可能没有多位作者)。这种标签和分层结构的使用,但在没有对每条记录强制执行严格预定义模式的情况下,将其归类为半结构化数据。JSON、XML和YAML是半结构化数据的常见格式。示例三:支持工单邮件最后,考虑发送给客户支持系统的电子邮件正文:Subject: Issue with login Hi Support Team, I've been trying to log into my account (username: user123) since this morning, but I keep getting an 'Invalid Credentials' error. I'm certain I'm using the correct password, as I reset it yesterday. Could you please look into this? My last successful login was around 11 PM last night. Thanks, John Doe问题: 这是哪种类型的数据?分析: 这是自由格式的文本。没有预定义的格式或模式。尽管它包含信息(用户名、问题、时间),但这些信息嵌入在自然语言中。提取特定的信息片段(如用户名user123)需要解析文本,而不仅仅是读取特定字段。这种缺乏内在组织性使其成为非结构化数据。想想图像、音频文件、视频文件以及像这封邮件正文一样的纯文本文档。它们都包含信息,但没有可被机器轻松解析的结构。总结归纳我们来将这些类型与结构的关系可视化呈现:digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#495057", fillcolor="#e9ecef", style=filled]; edge [color="#495057"]; "结构化" [fillcolor="#a5d8ff", fontcolor="#1c7ed6"]; "半结构化" [fillcolor="#ffec99", fontcolor="#f59f00"]; "非结构化" [fillcolor="#ffc9c9", fontcolor="#f03e3e"]; "结构化" -> "半结构化" [label=" 较宽松的模式 "]; "半结构化" -> "非结构化" [label=" 无模式 "]; {rank=same; "结构化"; "半结构化"; "非结构化"} }数据类型存在于一个组织程度的连续体上,从高度结构化的表格到完全非结构化的文本或媒体。当您在工作中遇到不同的数据源时,请练习这种识别能力。问问自己:它是否整齐地适配于带有预定义字段的行和列?(结构化)它是否使用标签、标记或层次结构来组织数据,但没有严格、统一的模式?(半结构化)它是否缺乏内在的组织结构,比如自由文本或媒体?(非结构化)这项能力对选择合适的数据存储工具和策略(例如在关系型数据库、NoSQL数据库或数据湖之间做出决定)以及数据处理十分重要,我们将在后续章节中介绍这些内容。理解数据性质是构建高效数据系统的第一步。