数据湖 vs 数据仓库:规划网页数据存储

数据湖 vs 数据仓库

Scrapeless Google Search API 提供结构化搜索数据,流水线可以将其保留为源数据采集,并转换为分析表。

摘要

  • 数据湖可以以多种格式保留源数据。 它的有效性取决于编目、访问控制以及可靠的发布流程。
  • 数据仓库为受治理的分析组织数据。 稳定的表定义和共享的指标有助于不同使用者对同一个问题给出统一的答案。
  • 现代系统可以结合湖和仓库的能力。 比较实际的存储和查询职责,而不是僵硬的类别标签。
  • 原始保留和整理后的分析有不同的契约。 在发布明确的业务定义的同时保留源上下文。

数据湖 vs 数据仓库是关于你保留哪些数据以及需要回答哪些问题的架构决策。采集团队可能需要用于重新处理的历史源响应。报表团队可能需要一个在各个报告期之间指标保持可比的稳定表。

这些需求可以共存。更有用的问题是:你会在哪里保存源证据,在哪里强制执行分析定义,以及每个边界由谁负责。购买一个被描述为湖或仓库的产品并不能解决这些职责问题。可靠的设计会在数据开始积累之前让这些职责可见。

比较职责而非存储标签

数据湖通常保留异构的源数据,而仓库强调有组织的分析数据和查询服务。 数据湖与数据仓库的比较 描述了它们在存储和分析角色上的不同。这些是架构上的倾向,而不是对支持格式的绝对限制。

对于网页数据项目,湖的角色可能是保留原始搜索响应、采集上下文以及规范化记录。仓库的角色可能是发布带有记录覆盖策略的每日域名和排名表。同一个组织可能同时需要这两种角色,而不必为每个数据集运营两份互不相关的拷贝。

从使用者契约开始。研究新发现领域的研究人员需要源细节。高管仪表盘需要对“完成一次采集”的共识定义以及一个可解释的分母。任何一方都不应该被迫从一个无文档的文件夹或表名中逆向推断对方的假设。

方面湖的角色仓库的角色
主要侧重保留源数据多样性和历史提供整理后的分析定义
模式工作通常在处理和读取时应用通常在加载和整理时强制执行
典型使用者数据工程和探索性分析报表和受治理的分析
所需控制编目、访问、保留、发布访问、指标所有权、质量、新鲜度
混合设计保留采集证据发布一致的业务表

原始采集与整理表需要不同的模式

原始保留应保存足够的采集事件信息,以支持后续解释。在适合保留的情况下,要包括请求上下文、观察时间、结果状态和源负载。不要在保留对象中包含凭据和私人账户信息。没有上下文的源响应可能无法被正确比较。

整理后的表应将这些信息收敛为一个稳定的分析契约。定义每一行代表什么、哪些字段是必需的,以及缺失值意味着什么。如果一次查询没有返回自然结果,需要决定该次采集是否仍然是有效观测,以及它在覆盖率报告中如何体现。

例如,一张表可以描述采集事件,另一张表描述属于每次采集的结果。这样可以保留“有效但为空的响应”和“缺失的采集事件”之间的差异。当空结果不会产生任何行时,单一结果表无法表达这种区别。

模式灵活性是转移动作,而不是消除工作

模式灵活性让团队在尚未决定如何分析之前保留不熟悉的字段。这并不能消除理解这些字段的需要。在数据能支持可靠比较之前,仍然需要有人确定类型、键以及业务含义。

在偏向湖的设计中,这项工作可能发生在转换或查询读取源数据时。在偏向仓库的设计中,更多工作可能发生在摄取或整理期间。现代平台支持多种组合,因此要检查实际的强制执行点,而不是假设所有数据湖都是无模式的、所有数据仓库只接受刚性输入。

为源数据变更编写兼容性规则。一个新的可选字段可能可以安全保留,但与当前报告无关。即使物理类型未变,更改单位或结果类别也可能使历史比较失效。记录将每个源采集转换为已发布分析行时所使用的转换版本。

表格格式为文件添加协调性

在作为受管分析表运行之前,一个文件目录需要元数据和协调。 Apache Iceberg 表规范 描述了一种包含元数据、快照和模式信息的表格格式。这样的组件解释了为什么现代数据湖能够支持曾经主要与数仓系统相关的那些功能。

在更新过程中,这一区别很重要。如果在读者扫描数据集时,作者发布了替换文件,读者就需要对可见文件集有一个一致的定义。仅靠文件扩展名并不能提供这种发布边界。需要决定如何对外暴露一个已完成的快照,以及如何排除未完成的工作。

不要仅仅为了让架构图看起来完整而添加表格格式。一个小型的不可变归档可能只需要一个清单和清晰的命名。具有并发写入者的共享数据集则有不同的需求。将协调机制与实际的更新和读取模式相匹配,包括如何检测发布失败。

治理适用于每一份保留的副本

治理必须同时适用于源数据捕获和派生表。即使数据是公开可用的,访问控制、保留、所有权和删除规则仍然很重要。派生报告也可能包含原始归档未直接暴露的信息,因此权限应当跟随“使用方式”,而不是简单地区分“原始数据”和“清洗数据”。

在收集与分析之间跟踪来源。 W3C 溯源模型 描述数据、活动和负责主体之间的关系。一个务实的实现方式可以在不采用正式模型的所有部分的前提下,保留采集 ID、转换版本以及数据集发布 ID。

为每个已发布的数据表指定一位负责人,他能说明这些记录的含义以及它们上次生成的时间。明确界定由谁来批准架构更改,以及由谁来调查覆盖缺口。只有当目录条目能够把使用者连接到当前的契约以及实际的维护责任时,它才是有用的。

将搜索数据置于可衡量的获客边界

搜索获取应在开始分析之前,以可审计的捕获结束。 无抓取的 Google 搜索 API 返回结构化的搜索数据;由你的管线决定保留哪些内容以及如何投影。将查询、市场、语言和捕获结果与观测数据一起保存,而不是只存储返回的结果 URL。

The 搜索数据流水线质量契约 将捕获覆盖范围与捕获结果中的发现分离开来。这样的分离有助于数据湖留存和仓库报表。缺失的捕获不应被解读为某个域名没有可见性的证据。

将获取成本与存储和分析服务成本区分开来。使用当前 无爬取方案定价 对于请求阶段,然后在你选择的平台中衡量保留率、转换、查询扫描以及运维工作量。比较在可接受的新鲜度下回答一个必需问题的成本,而不仅仅是存储字节的成本。

从问题和负责人中选择一个架构

当来源多样性、重新处理以及历史证据是核心诉求时,选择以数据湖为导向的保留层。当受管控的度量标准和可预期的分析访问是当下的主要需求时,选择以数仓为导向的服务层。当这两类需求都是真实存在且团队有能力维护二者之间的契约时,则将这两种角色结合起来。

对于一个新项目,从一个具有代表性的源捕获和一份重要报告开始。跟踪该报告如何处理空捕获、字段变更以及迟到的观测。确定在进行转换修正后,历史输出会发生怎样的变化。这些情形比起平台功能清单,更能清楚地暴露架构上的缺口。

避免在没有目的的情况下复制原始数据和整理后的数据。说明哪一份拷贝在执行哪一类任务时具有权威性、如何保留血缘关系,以及旧拷贝何时过期。最简单可行的架构,是在每个阶段都具备清晰的所有权前提下,仍能提供所需的证据和分析性答案的架构。

结论

通过为源数据保留和分析服务指定具体角色,可以最好地解决 Data Lake 与 Data Warehouse 的对比问题。保留解释观察结果所需的上下文,发布具有稳定定义的表格,并跟踪它们之间的转换过程。在所有权、时效性和治理需求明确之后,再选择存储和查询组件。

准备好构建可追踪的搜索数据管道了吗?

使用 Google 搜索 API 作为获取阶段,然后根据你自己的数据契约保留捕获内容并发布分析表格。

今天注册即可获得 5 美元免费额度 — 无需信用卡.

领取您的 $5 额度 →

常见问题解答

数据湖是没有模式的吗?

数据湖仍然需要模式来解释和验证数据。它可以在应用精心整理的模式之前保留源数据,但分析使用者需要类型、键和值的含义。灵活性体现在模式相关工作的发生时间上,而不是将其移除。

数据仓库可以存储半结构化数据吗?

当数据仓库的实现提供所需的数据类型和函数时,它就可以支持半结构化数据。湖仓与数据仓库的区分不应被简单地归结为 JSON 与表格的对立。应当检查实际平台的能力以及你的使用者所需要的契约。

你是否总是需要同时拥有数据湖和数据仓库?

你并不总是需要同时拥有数据湖和数据仓库。对于聚焦的工作负载,一个平台就可以通过明确的数据保留和分析职责来提供服务。当且仅当新增组件能够解决当前设计无法充分满足的具体需求时,才应将其加入。

湖仓是治理的替代品吗?

数据湖仓并不能取代治理。表元数据和查询功能可以改善协作,但所有权、访问规则、质量定义和保留策略仍然需要明确的政策和实施。评估这些职责时,应将其与存储架构一并考虑。

参考文献