Data Science for Beginners 第 6 课:非关系型数据(NoSQL)实战指南——从电子表格到 Azure Cosmos DB 文档数据库
2026/9/15 12:16:52 网站建设 项目流程

Data Science for Beginners 第 6 课:非关系型数据(NoSQL)实战指南——从电子表格到 Azure Cosmos DB 文档数据库

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

本篇指南是开源课程 Data-Science-For-Beginners 第 6 课(位于 2-Working-With-Data 单元)的核心内容:数据并非只存在于关系型数据库中,本课带你从最熟悉的电子表格出发,系统掌握工作簿、工作表、单元格、公式与函数,进而理解 NoSQL 的四种存储类型(键值、图、列族、文档),并在 Azure Cosmos DB 模拟器中亲手创建容器、上传 JSON 文档并执行 SQL 查询。学完本课,你将能独立完成从"Excel 公式计算库存/毛利"到"在本地模拟器中对文档数据库做条件查询"的完整实操链路。

为什么需要关注非关系型数据

关系型数据库以"表—列—行"为基石,通过主键与外键在多张表之间建立关联,适合管理结构规整、关系复杂的数据(上一课 关系型数据库与 SQL 已详细讲解)。但现实中的大量数据并不天然适合塞进二维表格:推文、日志、JSON 接口返回、社交关系图谱……因此本课把视角转向非关系型数据(non-relational data),并聚焦两大实操载体:

  1. 电子表格(Spreadsheets)——作为进入数据世界的低门槛工具,讲解其组成单元与公式/函数用法;
  2. NoSQL 数据库——讲解其定义与四大分类,并用 Azure Cosmos DB 模拟器完成端到端的建库、导入与查询。

电子表格:工作簿、工作表与单元格

电子表格之所以流行,是因为它"启动成本"极低:无需预先定义 schema,打开即可录入与探索数据。课程以 Microsoft Excel 演示,但其中的概念与操作步骤在 Google Sheets 等主流表格软件中名称与流程基本一致。

三个核心结构概念

  • 工作簿(Workbook):电子表格在 Excel 中的正式称谓,本质是一个文件,存放在本地计算机、移动设备或云文件系统中。本课后续统一使用"工作簿"一词。
  • 工作表(Worksheet):一个工作簿包含一张或多张工作表,每张工作表通过底部标签页(Tab)区分。下图展示的是一个包含两个工作表的空工作簿,其中 A1 单元格处于选中状态。
  • 单元格(Cell):工作表内承载实际数据的矩形区域,是"行"与"列"的交点。列以字母标识(A、B、C…),行以数字编号(1、2、3…),因此单元格可用"列字母+行数字"定位,如 B3。许多表格还会在开头几行设置**表头(header)**来描述每列数据的含义。

实战示例:用 InventoryExample 管理库存

课程使用微软官方模板库中一个聚焦"库存"的模板文件 InventoryExample.xltm 来串联电子表格的进阶用法。该工作簿包含三张工作表,标签页分别为:

  • Inventory List(库存清单)
  • Inventory Pick List(拣货清单)
  • Bin Lookup(库位查询)

其中 Inventory List 工作表的第 4 行是表头,用于描述该列每个单元格的值。它逐项跟踪每件库存商品的成本,列如 QTY(数量)与 COST(成本)。

公式:让单元格依赖其他单元格

某些单元格的值依赖于其他单元格。例如要知道整个库存的总价值,就需要逐项计算"数量 × 成本"。公式(Formula)就是作用于单元格数据的运算表达式,本示例在 Inventory Value 列中用公式计算每件商品的价值:将 QTY 表头下的数量与 COST 表头下的成本相乘。双击或选中单元格即可查看其公式,注意所有公式都以等号=开头,后面跟具体的计算或操作。

函数:预定义的公式

若要把 Inventory Value 列所有值相加得到总价值,可以逐个单元格相加,但既繁琐又易错。Excel 提供了函数(Function),即预定义好的公式,用于对单元格值执行计算。函数需要参数(argument),即完成计算所必需的值;当函数需要多个参数时,必须按特定顺序书写,否则可能算出错误结果。

本示例使用SUM函数,以 Inventory Value 列的取值作为参数,汇总得到的总值显示在第 3 行 B 列,即单元格B3

NoSQL 总览:一个词,四种数据库

NoSQL是"存储非关系型数据的多种方式"的总称,可以解读为三种含义:"non-SQL"(非 SQL)"non-relational"(非关系型)"not only SQL"(不仅是 SQL)。这类数据库系统通常可归为四种类型。

键值数据库(Key-Value)

键值数据库将**唯一键(key)值(value)配对,键是关联到某个值的唯一标识符。这种配对通常借助哈希表(hash table)**与合适的哈希函数来存储与快速检索。

图数据库(Graph)

图数据库描述数据之间的关系,表示为节点(node)边(edge)的集合。节点代表现实世界中的实体,如一名学生或一份银行对账单;边代表两个实体之间的关系。每个节点和边都可以带属性(property),提供各自的补充信息,例如"人—兴趣—地点"的关联图谱。

列族数据库(Columnar)

列族数据库像关系型结构一样按列和行组织数据,但每一列会被划分为若干组,称为列族(column family)。同一列族下的所有数据彼此相关,可以作为一个整体被检索与更新。例如一个客户数据库可划分出 Identity(身份)与 Contact Info(联系方式)两个列族。

文档数据库(Document)

文档数据库建立在键值数据库的概念之上,由一系列**字段(field)对象(object)**组成——一个"键"对应一整份结构灵活的文档。下一节将以 Azure Cosmos DB 为例完整实践。

文档数据库与 Azure Cosmos DB 模拟器

Cosmos DB 完美契合"Not Only SQL"(不仅是 SQL)的定义:它的文档数据库本身依赖 SQL 来查询数据。这意味着上一课 SQL 基础 学到的查询语法,在这里可以直接复用。课程采用Cosmos DB 模拟器(Emulator),它允许你在本地电脑上免费创建和探索文档数据库,无需连接云服务。

文档长什么样

文档(document)是字段与对象值的集合,字段描述对象值的含义。课程给出的示例文档如下:

{ "firstname": "Eva", "age": 44, "id": "8c74a315-aebf-4a16-bb38-2430a9896ce5", "_rid": "bHwDAPQz8s0BAAAAAAAAAA==", "_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/", "_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"", "_attachments": "attachments/", "_ts": 1630544034 }

其中值得关注的是业务字段firstnameidage;其余以下划线开头的字段(_rid_self_etag_attachments_ts)均由 Cosmos DB 自动生成,用于内部管理与并发控制,无需手工填写。

安装并启动模拟器

  • Windows:下载安装模拟器后即可直接运行;
  • macOS / Linux:官方文档提供了在 macOS 与 Linux 上运行的方案,需按对应系统的指引配置。

启动后模拟器会打开一个浏览器窗口,其中的Explorer(资源管理器)视图就是探索文档的主界面。

探索示例数据:SampleDB 与 Persons 容器

跟随课程操作:点击"Start with Sample"生成名为SampleDB的示例数据库。展开 SampleDB 后可以看到一个名为Persons容器(container)。容器持有项目的集合,集合中的项目即容器内的文档。在Items下可以逐个查看四份文档。

用 SQL 查询文档数据

点击工具栏左起第二个按钮"新建 SQL Query",即可对示例数据执行查询:

  • SELECT * FROM c—— 返回容器内全部文档;
  • 加上条件子句,查找所有年龄小于 40 的人:
SELECT * FROM c where c.age < 40

执行后返回两条文档,可验证每条文档中age字段的值确实都小于 40。这与关系型 SQL 的语法一脉相承,只是查询对象从"表"变成了"容器中的文档集合"。

JSON 与文档:从 API 到数据库

熟悉 JavaScript Object Notation(JSON)的读者会发现,文档结构与 JSON 高度相似。实际上绝大多数返回 JSON 的 API,其数据都可以直接写入文档数据库存储。本目录提供了一份 PersonsData.json,内含 6 条额外数据(Christophe 32 岁、Prema 20 岁、Arthur 15 岁、Zoe 7 岁、Keisha 84 岁、Jackie 45 岁),可通过Upload Item按钮上传到模拟器的 Persons 容器中扩充数据。

课程还演示了"从 Twitter API 拉取推文写入 Cosmos DB"的真实场景,文档结构如下:

{ "created_at": "2021-08-31T19:03:01.000Z", "id": "1432780985872142341", "text": "Blank slate. Like this tweet if you've ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK", "_rid": "dhAmAIUsA4oHAAAAAAAAAA==", "_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/", "_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"", "_attachments": "attachments/", "_ts": 1630537000 }

这份文档中值得关注的字段是created_at(发布时间)、id(推文 ID)与text(推文正文)——正是这类半结构化数据,让文档数据库成为日志、推文等场景的天然选择。

🚀 挑战:导入 TwitterData.json 并用 LIKE 模糊查询

仓库提供了 TwitterData.json,内含 10 条取自微软官方 Twitter 账号的推文。课程建议将其导入 SampleDB 数据库下的独立新容器,操作步骤如下:

  1. 点击右上角的"新建容器"按钮;
  2. 选择已有数据库SampleDB,并为新容器设定一个容器 ID;
  3. 将**分区键(partition key)**设置为/id
  4. 点击 OK(数据集很小且运行在本地,可忽略该界面中的其余配置项);
  5. 打开新容器,用Upload Item按钮上传 TwitterData.json。

导入完成后,尝试编写几条 SELECT 查询,找出text字段中包含单词 "Microsoft" 的文档。提示:可以使用LIKE 关键字配合通配符%实现模糊匹配,例如:

SELECT * FROM c WHERE c.text LIKE '%Microsoft%'

📝 课后作业:Soda Profits 汽水利润计算

作业文件为仓库中的 CocaColaCo.xlsx,该电子表格缺少部分计算,你的任务是:

  1. 计算FY '15、'16、'17、'18四个财年的毛利润(Gross Profit)
    • 毛利润 = 净营业收入(Net Operating revenues) - 销售成本(Cost of goods sold)
  2. 使用函数计算所有毛利润的平均值
    • 平均值 = 各财年毛利润之和 ÷ 财年数(10)
    • 可参考 Excel 内置的AVERAGE函数完成
  3. 这是 Excel 文件,但应能在任意主流表格平台中编辑完成。

这份作业与本课"公式 + 函数"的知识点一一对应,是检验电子表格实战能力的绝佳练习。

复习与延伸

  • 电子表格还有本课未覆盖的格式与高级特性,Microsoft 提供了大量关于 Excel 的官方文档与视频教程可供继续学习;
  • 架构层面的系统性资料("非关系型数据与 NoSQL")详细说明了各类非关系型数据的特征与适用场景,建议结合本课四种类型对照阅读;
  • Cosmos DB 作为云端的非关系型数据库,可以存储本课提到的多种 NoSQL 类型,微软官方学习路径提供了完整的 NoSQL 数据实战模块。

小结

本课打通了两条能力线:低门槛的电子表格(工作簿/工作表/单元格 → 公式 → 函数,配以库存管理实战)与文档数据库(NoSQL 四种类型 → Cosmos DB 模拟器建库 → SQL 条件查询 → JSON 数据导入)。完成本课学习后,再遇到"结构化不够规整、却需要快速存取与查询"的数据,你已经有了一条从认识、存储到查询的完整解决路径;而接下来 数据可视化 单元,将带领你把这些数据变成有价值的图表。

课后可以继续完成 Soda Profits 作业,并用前测/后测问卷检验掌握程度。本课为 Data Science for Beginners 课程 20 节课中的第 6 课,整个课程围绕数据科学全生命周期循序渐进,适合从零开始系统学习。

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询