数据架构 - 数据湖屋

本章重点介绍数据湖屋的概念,这是一种管理和分析数据的新方法。我们将解释什么是数据湖屋,它如何结合数据湖数据仓库的最佳功能,以及为什么它成为存储和处理大量数据的热门选择。以下是您将学到的内容:

什么是数据湖屋?

数据湖屋是一种存储和管理数据的方式。它将数据湖数据仓库的优点结合到一个系统中,使数据存储更简单。您无需同时使用两个系统,只需使用功能更强大的数据湖即可。

我们为什么需要数据湖?

数据湖解决了旧系统的问题,旧系统将原始数据和处理后的数据分开保存,从而导致延迟、高成本和协作不佳。

旧方法

在数据湖出现之前,公司面临着这些问题。

  • 他们必须为原始数据和处理后的数据维护单独的系统。
  • 在系统之间移动数据速度慢且成本高昂。
  • 数据团队无法轻松合作。
  • 数据质量难以维护。

新方法

数据湖通过以下方式解决这些问题:

  • 将所有数据保存在一个地方。
  • 使数据分析更加容易。
  • 节省存储费用。
  • 帮助团队更好地协作。

Data Lakehouse 的关键功能

使用 Data Lakehouse 时,您可以:

  • 存储任何类型的数据(数字、文本、图片、视频)。
  • 跟踪数据随时间的变化。
  • 让不同的人同时处理数据。
  • 确保您的数据保持准确可靠。

Data Lakehouse 的好处

A data lakehouse 具有多种优势,包括:

  • 它将所有数据存储在一个地方。
  • 它使用单一系统进行存储和处理,从而降低了成本。
  • 它同时支持实时和批量数据。
  • 它通过内置检查保持数据干净可靠。
  • 它使协作更容易,并加快分析速度。

Data Lakehouse 如何工作?

Data Lakehouse 通过结合几个步骤来工作,使数据更易于存储、管理和分析。它的工作原理如下:

  • 数据提取:该过程从从不同来源(如应用程序、传感器和数据库)收集数据开始。然后,这些数据被存储在一个可以处理各种数据的系统中,无论是结构化半结构化还是非结构化
  • 数据处理:一旦数据被提取,它就会被清理和转换,以便进行分析。此步骤将原始数据组织成更可用的格式。
  • 数据管理:元数据层用于跟踪和管理数据。这有助于保持一切井然有序,并确保用户在需要时可以轻松找到和访问正确的数据。
  • 数据分析:最后,用户可以运行查询、生成报告并从数据中提取见解以指导决策。

Delta Lake for Lakehouse

Delta Lake 通过提高可靠性、安全性和性能等功能改进了数据湖。它本身不是存储,而是在数据湖之上工作。您可以通过将数据保存为 Delta Lake 格式(而不是 CSV 或 JSON 等格式)轻松地将数据湖转换为 Delta Lake。

当您使用delta lake格式时,您的数据将存储为 Parquet 文件,并带有跟踪所有更改的事务日志。这提高了数据湖的功能。由于其受欢迎程度,大多数工具都支持它。

向数据湖添加功能的其他选项包括 Apache IcebergApache Hudi

Delta Lake 功能

Delta Lake数据湖添加了几个重要功能,使其更像关系数据仓库。以下是一些重要功能。

DML 支持

Delta Lake 支持 DML 命令,如 INSERTDELETEUPDATEMERGE,使数据管理更加容易。与仅处理批处理且不允许实时更新的传统数据湖不同,Delta Lake 可让您高效地更新数据,而无需重写整个文件。

Delta 表和事务日志

Delta Lake 中,数据被组织到 Delta 表中,Delta 表将大表拆分为较小的文件以便更好地管理。事务日志会跟踪更改,通过优化存储和使用内存处理来加快 DML 操作。例如,当您运行 UPDATE 语句时,它只会读取和更新必要的文件,而不是整个表。

ACID 事务

Delta Lake 支持事务的 ACID(原子性、一致性、隔离性、持久性) 属性,但仅限于单个 Delta 表中。与可以处理跨多个表的事务的关系数据库不同,Delta Lake 的 ACID 支持一次仅限于一个表。

时间旅行

Delta Lake 包含"时间旅行"功能,可让您查询特定时间点的数据。事务日志会跟踪所有更改,因此您可以轻松访问数据的先前版本或在必要时恢复更改。此功能对于审计和数据恢复特别有用。

小文件问题

Delta Lake 解决了"小文件"问题,即拥有太多小文件可能会损害性能并增加存储成本。它会自动使用压缩算法将小文件合并为大文件,从而提高效率并降低存储开销。

统一处理

Delta Lake 允许用户在同一数据上同时处理批处理和实时流式传输。这使得数据处理工作流程和架构更加简单,无需为批处理和流式传输任务单独设置系统。

架构执行

Delta Lake 使用架构规则来确保写入 Delta Table 的数据满足指定的约束,例如数据类型和唯一性。这有助于通过在写入操作期间拒绝任何无效数据来防止数据损坏。

Delta Lake 的性能改进

Delta Lake 通过多种方式提高了数据湖的性能:

  • 数据跳过:Delta Lake 可以在从 Delta Table 读取时跳过不相关的数据,因此查询只关注必要的数据,从而提高性能。
  • 缓存:通过在 Spark 中支持数据缓存,delta lake 可以加快重复查询的速度,从而减少首次执行后运行它们所需的时间。
  • 快速索引:Delta Lake 使用优化的索引结构快速找到所需的数据,从而加快查询执行速度。
  • 查询优化:Delta Lake 与 Spark SQL 配合使用进行查询通过使用 Spark 的内置优化,可以更快、更高效地执行查询。
  • 谓词下推:过滤器直接应用于存储层,这意味着需要处理的数据更少,从而加快了查询执行速度。
  • 列修剪:仅读取所需的列,减少数据处理并加快查询速度。
  • 矢量化执行:Delta Lake 使用单个 CPU 指令处理多个数据点,提高 CPU 性能和整体速度。
  • 并行处理:Delta Lake 支持并行运行任务,允许同时处理多个操作以获得更快的结果。
  • Z 顺序:Delta Lake 使用 Z 顺序索引来组织数据以实现更快、更优化的访问,从而提高查询速度。

Data Lakehouse架构

数据湖架构结合了数据湖数据仓库的功能,使数据管理更加容易。

数据湖中,数据与其他系统经历相同的阶段:提取存储转换建模可视化。但是,我们不会使用单独的数据湖关系数据仓库,而是将所有内容存储在使用增量湖技术的单个数据湖中。

这种方法解决了传统数据系统中的许多常见问题。

  • 可靠性:在数据湖关系数据仓库之间保持数据一致性可能很困难,数据传输可能会失败或导致数据不匹配。使用数据湖屋,无需在系统之间复制数据,从而消除了这些问题。
  • 数据过时:关系数据仓库中的数据可能会过时,因为它仅在设定的时间更新,从而导致报告不一致。数据湖屋将所有数据保存在一个地方,确保始终保持最新状态。
  • 高级分析支持:关系数据仓库不太适合高级分析,如人工智能和机器学习,因为这些工具更适合处理数据湖中的原始数据。数据湖屋让数据科学家更容易直接处理他们需要的数据。
  • 成本效率:同时管理关系数据仓库和数据湖的成本很高。数据湖屋将所有内容存储在一个地方,从而降低了存储和计算成本。
  • 数据治理:由于数据存储在单独的系统中,因此更难管理访问和维护质量。数据湖屋使用单个数据副本,使治理和安全更简单。
  • 复杂性:同时管理数据湖关系数据仓库需要专业技能,因此更加复杂。 数据湖屋通过将所有内容整合到一个平台中来降低这种复杂性。

如果您跳过关系数据仓库会怎样?

跳过关系数据仓库而选择数据湖屋可能是一个不错的选择,尤其是对于较小的数据集。使用数据湖屋(使用 Delta Lake),您只需要一个数据存储系统,这可以节省存储和计算成本。您不必将数据复制到关系数据仓库,这可以降低成本和复杂性。

但是,有一些重要的挑战需要考虑。

  • 性能:由于索引、缓存和查询优化等功能,关系数据仓库对于复杂查询的速度更快。 Delta Lake 可能无法达到这种性能,尤其是在处理大型数据集时。
  • 安全性:关系数据仓库提供更好的安全功能,例如行级安全性、加密和审计,而 Delta Lake 则缺乏这些功能。
  • 并发性:关系数据仓库可以同时处理更多用户和任务。Delta Lake 可能会遇到大量用户的问题。
  • 元数据管理:由于关系数据仓库是系统的一部分,因此可以更轻松地管理数据信息(元数据)。 Delta Lake 的基于文件的系统可能会导致元数据出现问题。
  • 学习曲线:习惯使用关系数据仓库的人可能会发现 Delta Lake 的系统更难使用,可能需要额外的培训。

何时使用 Delta Lake

在以下情况下使用 Delta Lake:

  • 查询不受时间限制:如果您不需要实时结果,Delta Lake 可以以较低的成本提供良好的性能。
  • 不需要高级功能:如果您不需要复杂的查询优化、快速连接或特殊索引等功能,Delta Lake 是一个更简单、更实惠的选择。
  • 较小的数据集:对于较小的数据,Delta Lake 运行良好,避免了完整关系数据仓库设置的复杂性。
  • 成本是首要考虑因素:如果保持低成本很重要,Delta Lake 可帮助您节省存储和计算,尤其是使用无服务器选项时。

简而言之,如果您优先考虑简单性、成本节省和良好的性能,而不是高性能或高级分析,Delta Lake 是一个不错的选择。

关系服务层

Delta Lake 没有像传统关系数据仓库那样的预定义元数据或关系。相反,它使用读取时架构方法,在读取数据时应用架构,而不是在存储数据时应用架构。

为了使数据更容易理解,您需要创建一个关系服务层。此层将数据与其元数据链接起来,并定义不同数据之间的关系。您可以使用以下方式构建此层:

  • SQL 视图
  • 报告工具
  • Apache Hive 表
  • 临时 SQL 查询

设置完成后,您可以像在关系数据仓库中一样处理数据,而无需知道它存储在Delta Lake中。

但是,存在一些挑战:

  • 元数据可能并不总是与数据完全匹配。
  • 不同的层可能指向相同的数据,但元数据不一致,这可能导致错误或混淆。

Data Lakehouse 的用例

Data Lakehouse 在许多场景中都很有用,包括:

  • 业务分析:公司使用数据湖来跟踪销售趋势,了解客户偏好,并做出更明智的决定,确定重点关注或补货哪些产品。
  • 科学研究:研究人员在数据湖中存储和共享他们的数据,帮助他们与他人合作并发现研究中的关键模式或趋势。
  • 医疗管理:医院使用数据湖来组织患者记录,监控治疗效果,并管理医疗用品等医院资源。