数据架构 - 数据湖仓



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



什么是数据湖仓?

数据湖仓是一种存储和管理数据的方式。它将数据湖数据仓库的优势结合到一个系统中,简化了数据存储。无需同时使用这两个系统,只需使用具有改进功能的数据湖即可。

为什么我们需要数据湖仓?

数据湖仓解决了旧系统中原始数据和处理后的数据分开存储的问题,这些问题会导致延迟、高成本和协作差。

旧方法

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

  • 他们必须为原始数据和处理后的数据维护单独的系统。
  • 在系统之间移动数据缓慢且昂贵。
  • 数据团队难以有效协作。
  • 难以维护数据质量。

新方法

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

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

数据湖仓的关键功能

使用数据湖仓时,您可以:

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

数据湖仓的优势

数据湖仓提供多种优势,包括:

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

数据湖仓如何工作?

数据湖仓通过结合几个步骤来简化数据的存储、管理和分析。以下是它的工作原理:

  • 数据摄取:该过程从不同的来源(例如应用程序、传感器和数据库)收集数据开始。然后将这些数据存储在一个可以处理所有类型数据的系统中,无论数据是结构化半结构化还是非结构化的。
  • 数据处理:数据摄取后,对其进行清理和转换,使其准备好进行分析。此步骤将原始数据组织成更易于使用的格式。
  • 数据管理:元数据层用于跟踪和管理数据。这有助于保持一切井然有序,并确保用户可以在需要时轻松查找和访问正确的数据。
  • 数据分析:最后,用户可以运行查询、生成报告并从数据中提取见解,从而为决策提供信息。

用于数据湖仓的 Delta Lake

Delta Lake通过改进的可靠性、安全性以及性能来改进数据湖。它本身不是存储,而是构建在数据湖之上。您可以通过以 Delta Lake 格式而不是 CSV 或 JSON 等格式保存数据,轻松地将您的数据湖转换为 Delta Lake。

使用Delta Lake格式时,您的数据将作为带有事务日志的 Parquet 文件存储,该日志跟踪所有更改。这提高了数据湖的功能。由于其普及性,大多数工具都支持它。

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

Delta Lake 特性

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

DML 支持

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

Delta 表和事务日志

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

ACID 事务

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

时间旅行

Delta Lake包含一个“时间旅行”功能,允许您查询特定时间点的数据。事务日志跟踪所有更改,因此您可以轻松访问数据的先前版本或根据需要撤消更改。此功能对于审计和数据恢复特别有用。

小文件问题

Delta Lake解决了“小文件”问题,其中存在太多小文件会影响性能并增加存储成本。它会自动使用压缩算法将小文件合并成较大的文件,从而提高效率并减少存储开销。

统一处理

Delta Lake允许用户对相同数据进行批量和实时流处理。这简化了数据处理工作流程和架构,无需为批量和流任务设置单独的系统。

模式强制

Delta Lake使用模式规则来确保写入Delta 表的数据符合指定的约束,例如数据类型和唯一性。这有助于防止数据损坏,因为在写入操作期间会拒绝任何无效数据。

使用 Delta Lake 提高性能

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

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

数据湖仓架构

数据湖仓架构通过结合数据湖数据仓库的功能,使数据管理更加轻松。

数据湖仓中,数据经过与其他系统相同的阶段:摄取存储转换建模可视化。但是,它没有使用单独的数据湖关系型数据仓库,而是将所有内容都存储在一个使用 Delta Lake 技术的数据湖中。

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

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

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

与使用关系型数据仓库相比,选择数据湖仓可能是一个不错的选择,尤其是在数据集较小的情况下。使用数据湖仓(例如 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不像传统的关系型数据仓库那样具有预定义的元数据或关系。相反,它使用读取时模式 (schema-on-read) 方法,在读取数据时应用模式,而不是在存储数据时。

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

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

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

然而,也有一些挑战:

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

数据湖仓的用例

数据湖仓在许多场景中都很有用,包括:

  • 商业分析:公司使用数据湖仓来跟踪销售趋势,了解客户偏好,并就关注哪些产品或补充库存做出更明智的决策。
  • 科学研究:研究人员将他们的数据存储和共享在数据湖仓中,帮助他们与他人合作,并在他们的研究中发现关键模式或趋势。
  • 医疗保健管理:医院使用数据湖仓来整理病人记录,监测治疗效果,并管理医院资源,例如医疗用品。
广告