数据架构 - 数据湖屋
本章重点介绍数据湖屋的概念,这是一种管理和分析数据的新方法。我们将解释什么是数据湖屋,它如何结合数据湖和数据仓库的最佳功能,以及为什么它成为存储和处理大量数据的热门选择。以下是您将学到的内容:
什么是数据湖屋?
数据湖屋是一种存储和管理数据的方式。它将数据湖和数据仓库的优点结合到一个系统中,使数据存储更简单。您无需同时使用两个系统,只需使用功能更强大的数据湖即可。
我们为什么需要数据湖?
数据湖解决了旧系统的问题,旧系统将原始数据和处理后的数据分开保存,从而导致延迟、高成本和协作不佳。
旧方法
在数据湖出现之前,公司面临着这些问题。
- 他们必须为原始数据和处理后的数据维护单独的系统。
- 在系统之间移动数据速度慢且成本高昂。
- 数据团队无法轻松合作。
- 数据质量难以维护。
新方法
数据湖通过以下方式解决这些问题:
- 将所有数据保存在一个地方。
- 使数据分析更加容易。
- 节省存储费用。
- 帮助团队更好地协作。
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 Iceberg 和 Apache Hudi。
Delta Lake 功能
Delta Lake 为数据湖添加了几个重要功能,使其更像关系数据仓库。以下是一些重要功能。
DML 支持
Delta Lake 支持 DML 命令,如 INSERT、DELETE、UPDATE 和 MERGE,使数据管理更加容易。与仅处理批处理且不允许实时更新的传统数据湖不同,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 在许多场景中都很有用,包括:
- 业务分析:公司使用数据湖来跟踪销售趋势,了解客户偏好,并做出更明智的决定,确定重点关注或补货哪些产品。
- 科学研究:研究人员在数据湖中存储和共享他们的数据,帮助他们与他人合作并发现研究中的关键模式或趋势。
- 医疗管理:医院使用数据湖来组织患者记录,监控治疗效果,并管理医疗用品等医院资源。