《Delta Lake Up & Running》第十章:构建在Delta Lake上的数据湖仓-灵析社区

攻城狮无远

第1章介绍了数据湖仓的概念,它结合了传统数据仓库和数据湖的最佳元素。在本书中,您学到了支持湖仓架构的五个关键功能:存储层、数据管理、SQL分析、数据科学和机器学习,以及勋章架构。在深入探讨在Delta Lake上构建湖仓之前,让我们快速回顾一下行业数据管理和分析的演进:

  • 数据仓库:从1970年代到21世纪初,数据仓库的设计旨在将数据收集和 consolida 到业务背景中,为业务智能和分析提供支持。随着数据量的增长,速度、多样性和真实性也在增加。数据仓库在以灵活、统一和经济的方式解决这些要求方面存在挑战。
  • 数据湖:在21世纪初,数据量的增加推动了数据湖的发展(最初在Hadoop上以及后来在云上),这是一个成本效益的中央存储库,可以以任何规模存储任何格式的数据。但是,即使带来了额外的好处,仍然存在额外的挑战。数据湖没有事务支持,不适用于业务智能,提供有限的数据治理支持,并且仍然需要其他技术(例如数据仓库)来充分支持数据生态系统。这导致了一个过于复杂的环境,其中包含不同的工具、系统、技术和多份数据的拼贴。
  • 湖仓:在2010年代末,湖仓的概念出现了。这引入了数据仓库的现代化版本,提供了所有的优势和功能,而不会影响数据湖的灵活性。湖仓利用了低成本、灵活的云存储层,结合了数据湖,并通过支持ACID事务的技术提供了数据的可靠性和一致性保证。这种灵活性有助于支持流处理、分析和机器学习等多样的工作负载,所有这些工作负载都在单一的统一平台下实现,最终实现对所有数据资产的单一安全性和治理方法。随着Delta Lake和湖仓的出现,由于这种架构模式启用的关键特性,端到端数据平台的范式已经开始发生变化。

通过将湖仓的能力与本书学到的内容相结合,您将学习如何启用湖仓架构提供的关键功能,并完全上手Delta Lake。

存储层

在任何设计良好的架构中,第一步或第一层是决定在哪里存储您的数据。在一个不断增加的数据量以不同形式和形状从多个异构数据源进入的世界中,有一个允许以灵活、经济且可扩展的方式存储大量数据的系统是至关重要的。这就是为什么像数据湖这样的云对象存储是湖仓的基础存储层的原因。

什么是数据湖?

如前述于第1章中定义的,数据湖是一个经济高效的中央存储库,可存储任何规模的结构化、半结构化或非结构化数据,以文件和数据块的形式存在。这在数据湖中是可能的,因为在写入数据时它不强制使用模式,所以数据可以按原样保存。数据湖使用扁平的体系结构和对象存储来存储数据,与数据仓库不同,数据仓库通常将数据存储在具有目录和文件的分层结构中并强制使用模式。每个对象都附带有元数据和唯一标识符,以便应用程序可以轻松访问和检索。

数据的类型

结构化数据:结构化数据具有预定义的结构或模式。这种数据通常是关系数据库中以表格形式呈现的,包含行和列。

半结构化数据:半结构化数据不符合典型的关系格式,而是以模式或标签松散结构化,例如键/值对。半结构化数据的示例包括Parquet、JSON、XML、CSV文件,甚至电子邮件或社交媒体信息。

非结构化数据:非结构化数据不包含有组织的结构,没有任何模式或模板。它通常以媒体文件的形式呈现,例如照片(例如JPEG)或视频文件(例如MP4)。组成视频的数据本身是非结构化的。

非结构化和半结构化数据通常对于AI和机器学习用例至关重要,而结构化和半结构化数据对于BI用例至关重要。由于Delta Lake本地支持这三种数据分类,因此可以创建一个支持数据湖中这些多样化工作负载的统一系统。这些工作负载可以在设计良好的处理架构中相互补充,您将在本章的后面学到更多内容。数据湖有助于解决与数据量、类型和成本相关的许多挑战,而Delta Lake在数据湖之上运行,优化为在云数据湖上最佳运行。

云数据湖的关键优势

云数据湖相对于本地数据湖或数据仓库有助于最好地支持湖屋架构的存储层,原因如下:

  1. 单一存储层: 湖屋的最重要特征之一是统一平台,云数据湖有助于消除和 consol 种数多的数据孤岛和不同类型的数据到一个单一的对象存储中。云数据湖允许您在单一系统上处理所有数据,防止在不同系统之间来回传输数据的额外复制。数据在不同系统之间的移动减少,也意味着错误发生的地方更少。单一存储层减少了需要覆盖不同系统的多个安全策略,并有助于解决在系统之间进行协作时的困难。它还为数据消费者提供了一个查找所有数据源的单一位置。
  2. 灵活的按需存储层: 无论是速度(流式处理还是批处理)、容量还是种类(结构化还是非结构化),云数据湖都允许以最终的灵活性存储数据。根据Rukmani Gopalan在他最近出版的书《云数据湖》中的说法,"这些系统设计用于处理以任何速度进入数据湖的数据:连续发射的实时数据以及按计划定期摄入的大量数据。" 不仅数据灵活,基础设施也很灵活。云提供商允许您按需配置基础设施,并迅速弹性地扩展或缩小。由于这种程度的灵活性,组织可以拥有一个提供无限可扩展性的单一存储层。
  3. 解耦的存储和计算: 传统的数据仓库和本地数据湖通常具有紧密耦合的存储和计算。存储通常是廉价的,而计算则不是。云数据湖允许您解耦这一点,并独立扩展存储,以极低的成本存储大量数据。
  4. 技术集成: 数据湖通过标准化的API提供简单的集成,因此具有完全不同的技能、工具和编程语言的组织和用户(例如SQL、Python、Scala等)可以同时执行不同的分析任务。
  5. 复制: 云提供商提供了易于设置的数据湖到不同地理位置的复制。启用复制的简便性使其在满足合规性要求、业务关键操作的故障转移、灾难恢复以及通过将对象存储在不同位置降低延迟方面非常有用。
  6. 可用性: 大多数云系统为云数据湖提供不同类型的数据可用性。这意味着对于很少访问的或已归档的数据,与频繁访问的“热”数据相比,您可以设置生命周期策略。这些生命周期策略允许您将数据移动到不同的存储可用性类别(对于很少访问的数据有更低的成本),以满足合规性、业务需求和成本优化。
  7. 成本: 使用云数据湖,您通常按使用付费,因此您的成本始终与您的数据量保持一致。由于只有一个存储层,数据在不同系统之间的移动减少,可用性设置和存储与计算解耦,因此您只需为数据存储支付隔离和最小化的费用。对于更大的成本分配,大多数云数据湖提供桶或容器(文件系统,不要与应用程序容器混淆)来存储数据的不同层次(例如原始与转换数据)。这些容器允许您对组织的不同区域进行更精细的成本分配。由于数据源和数据量呈指数级增长,因此在不限制可以存储的数据的体积或种类的情况下,非常重要的是分配和优化成本。

图10-1展示了在撰写本文时流行的云数据湖的不同类型,以及存储在其中的不同类型的数据。

总的来说,存储层是湖屋架构的关键组成部分,因为它使组织能够以经济高效和可扩展的方式存储和管理大量数据。现在您已经有了一个明确定义的存储数据的地方,接下来需要适当地管理它。

数据管理

尽管云数据湖允许弹性地以其原生格式存储大规模数据,但湖屋架构的下一部分是促进数据管理。根据Gartner的定义,数据管理(DM)包括在企业中跨数据主题区域和数据结构类型的全谱中实现对数据一致访问和交付的实践、架构技术和工具,以满足所有应用程序和业务流程的数据消耗需求。数据管理对于任何组织都是关键的功能,很大程度上取决于在数据访问和交付中使用的工具和技术。传统上,数据湖将数据简单地管理为半结构化格式(例如Parquet)中的“一堆文件”,这使得难以实现数据管理的一些关键功能,例如可靠性,由于缺乏对ACID事务、模式强制执行、审计跟踪以及数据集成和互操作性的支持。

数据湖上的数据管理始于可靠性的结构化事务层。这种可靠性来自支持ACID事务、开放表格格式、批处理和流处理数据处理之间集成以及可伸缩的元数据管理的事务层。这就是Delta Lake作为湖屋架构的核心组件引入的地方,支持数据管理。在图10-2中,您可以看到云数据湖支持的不同数据类型,Delta Lake建立在数据湖之上,充当结构化事务层。

Delta Lake为您的数据湖带来耐久性、可靠性和一致性。Delta Lake有几个关键元素有助于促进数据管理:

元数据:Delta Lake的核心是元数据层。这一层提供了广泛且可扩展的元数据跟踪,使Delta Lake的大多数核心功能得以实现。它提供了一种抽象层,以实施ACID事务和各种其他管理功能。这些元数据层也是启用治理功能(例如访问控制和审计日志记录)的自然场所。

ACID事务:Delta Lake将确保在单个表上存在并发事务时,数据保持完整。对ACID事务的支持为数据湖带来一致性和可靠性,这是通过事务日志实现的。事务日志跟踪所有提交,并使用隔离级别保证数据的一致性和准确的数据视图。

版本控制和审计历史:由于Delta Lake将有关哪些文件属于表的信息存储为事务日志,它允许用户查询旧版本的数据并执行回滚,也称为时间旅行。这为业务需求或法规要求提供了数据的完整审计跟踪,并且还可以支持机器学习过程。

数据集成:这可以定义为将不同来源的数据 cons 收集到单一位置。Delta Lake可以处理表上的并发批处理和流处理操作;它为用户提供了查看数据的单一位置。不仅如此,执行INSERT、UPDATE和DELETE等DML操作的能力使您能够执行有效的数据集成并在所有表上保持一致性。

模式强制执行和演变:与传统的RDBMS系统一样,Delta Lake提供了模式强制执行以及灵活的模式演变。这有助于通过约束保证数据的清洁和一致的数据质量,同时为由其他进程和上游来源引起的模式漂移提供了灵活性。

数据互操作性:Delta Lake是一个与云无关的开源框架,由于它通过提供一组API和扩展与Apache Spark无缝交互,因此在项目、其他API和平台之间具有大量不同的集成能力。这使您能够通过不同的工具和框架轻松集成现有的数据管理工作流和流程。Delta UniForm与Apache Iceberg提供格式互操作性,进一步扩展了可以集成的系统和工具的范围。与使数据跨组织安全共享变得简单的Delta Sharing一起,Delta Lake避免了供应商锁定,并实现了互操作性。

机器学习:因为机器学习(ML)系统通常需要处理大量数据并使用传统SQL不太适用于的复杂逻辑,它们现在可以轻松地使用Delta Lake的DataFrame API访问和处理数据。这些API允许ML工作负载直接受益于Delta Lake提供的优化和功能。现在可以将所有不同工作负载的数据管理集中到Delta Lake中。

通过添加一个更适合处理数据管理的结构化事务层,湖屋同时支持原始数据、为分析策划数据的ETL/ELT流程以及ML工作负载。通过Delta Lake提供的数据管理功能对数据进行整理的ETL/ELT传统上被认为是在数据仓库的背景下进行的,但通过Delta Lake,您可以将这些过程集中到一个地方。这也使ML系统能够直接受益于Delta Lake提供的功能和优化,以完成跨不同工作负载的数据管理和整合。通过结合所有这些努力,您可以为数据湖带来更大的可靠性和一致性,并创建一个在企业中成为所有类型数据的单一真相来源的湖屋。

SQL分析

在数据分析、商业智能和数据仓库领域,通常被认为 SQL 是最常见且灵活的语言之一。部分原因不仅在于它提供了易于学习的曲线和低门槛的入口,还因为它能执行复杂的数据分析操作。SQL 不仅允许用户快速与数据互动,还让各技能水平的用户编写即席查询、为 BI 工具准备数据、创建报告和仪表板以及执行各种数据分析功能。由于这样的原因,SQL 已成为从数据工程师到业务用户等所有人的商业智能和数据仓库首选的语言。这也是湖屋架构在可伸缩性和性能方面实现出色 SQL 性能并实现 SQL 分析的原因。

幸运的是,以 Delta Lake 为事务层的湖屋架构具有可伸缩的元数据存储,可通过 Apache Spark 和 Spark SQL 轻松访问。

通过 Spark SQL 进行 SQL 分析

Spark SQL 是 Apache Spark 的一个模块,也被称为库,用于处理结构化数据。它提供了一个编程接口,使用 SQL 和 DataFrame API 处理结构化数据,所有这些都由 Spark SQL 引擎支持。与其他 SQL 引擎类似,Spark SQL 引擎负责生成高效的查询和紧凑的代码。这个执行计划在运行时进行调整。Apache Spark 生态系统由不同的库组成,其中 Spark Core 和 Spark SQL 引擎是它们构建的基础(图 10-3)。

Spark SQL 库支持 ANSI SQL,允许用户使用他们熟悉的 SQL 语法查询和分析数据。正如我们在前几章中看到的,Delta 表可以使用 Spark SQL 和 PySpark 中的 sql() 方法轻松查询,例如:

%python
spark.sql("SELECT count(*) FROM taxidb.tripData")

或者,类似于本书中的大多数查询的编写方式,您可以在笔记本或某些集成开发环境 (IDEs) 中使用魔术命令和 %sql 来指定语言引用,然后直接在单元格中编写 Spark SQL:

%sql
SELECT count(*) as count FROM taxidb.tripData

不仅如此,Spark SQL 库还允许您使用 DataFrame API 与数据集和表进行交互:

%python
spark.table("taxidb.tripData").count()

分析师、报告生成者和其他数据使用者通常会通过 SQL 接口与数据进行交互。这个 SQL 接口意味着用户可以利用 Spark SQL 在 Delta 表上执行简单或复杂的查询和分析,充分利用 Delta 表提供的性能和可扩展性,同时还能利用 Spark SQL 引擎、分布式处理和优化。由于 Delta Lake 确保了串行性,因此完全支持并发读取和写入。这意味着所有数据使用者可以在通过不同的 ETL 工作负载更新数据的同时自信地读取数据。简而言之,Spark SQL 引擎生成一个执行计划,用于优化和执行查询,使查询尽可能快速。

图 10-4 说明您可以使用 Spark SQL 库表达 SQL 查询,或者您可以使用 DataFrame API 与数据集交互,并利用 Spark SQL 引擎和执行计划。无论是使用 Spark SQL 还是 DataFrame API,Spark SQL 引擎都会生成一个查询计划,用于优化和执行在集群上的命令。

一般来说,建议在 ETL 和数据摄取过程3或机器学习工作负载中使用 DataFrame API,而大多数数据使用者(例如分析师、报告生成者等)将使用 Spark SQL 与 Delta 表进行交互。您还可以通过标准的 JDBC/ODBC 数据库连接器或使用命令行与 SQL 接口进行交互。JDBC/ODBC 连接器意味着 Spark SQL 还提供了与 Power BI、Tableau 和其他 BI 工具等外部工具进行交互和使用表进行分析的桥梁。

通过其他 Delta Lake 集成进行 SQL 分析

尽管 Delta Lake 强大地集成了 Spark SQL 和 Spark 生态系统的其他组件,但它也可以被许多其他高性能的查询引擎访问。支持的查询引擎包括:

  • Apache Spark
  • Apache Hive
  • Presto
  • Trino 这些连接器有助于将 Delta Lake 引入到除了 Apache Spark 之外的大数据 SQL 引擎,并允许您进行读取和写入(取决于连接器)。Delta Lake 连接器存储库包括:
  • Delta Standalone,用于读取和写入 Delta Lake 元数据的本地库
  • 与流行的大数据引擎(如 Apache Hive、Presto、Apache Flink)和常见报告工具(如 Microsoft Power BI)的连接器。 还有一些托管服务,允许您集成并从 Delta Lake 读取数据,包括:
  • Amazon Athena 和 Redshift
  • Azure Synapse 和 Stream Analytics
  • Starburst
  • Databricks 请查阅 Delta Lake 网站以获取完整支持的查询引擎和托管服务列表。 在进行 SQL 分析时,重要的是利用高性能的查询引擎,它可以解释 SQL 查询并针对 Delta 表执行大规模的数据分析。在图 10-5 中,您可以看到 lakehouse 由三个不同的叠加层组成,以及允许不同层之间进行通信的 API:
  • 存储层 用于结构化、半结构化和非结构化数据的可扩展、低成本的云数据存储的数据湖。
  • 事务层 符合 ACID 标准的开放表格式,通过 Delta Lake 实现可伸缩的元数据。
  • API SQL API 允许用户访问 Delta Lake 并执行读取和写入操作。然后,元数据 API 帮助系统理解 Delta Lake 事务日志以适当地读取数据。
  • 高性能查询引擎 一种解释 SQL 的查询引擎,使用户可以通过 Apache Spark SQL 或 Delta Lake 集成的其他查询引擎执行数据分析。

数据科学和机器学习的数据

由于Delta Lake有助于在您的lakehouse中提供可靠且简化的数据管理,因此它对于用于数据科学活动和机器学习的数据及数据管道带来了各种好处。

传统机器学习存在的挑战

一般来说,机器学习运营(MLOps)是涉及端到端机器学习生命周期的一组实践和原则。在MLOps中,许多组织和数据科学家在试图在其组织中构建并最终将机器学习模型投产时面临一些常见挑战:

  1. 数据孤立 数据孤立通常在数据工程活动和数据科学活动之间的差距不断扩大时开始形成。数据科学家经常花费大部分时间创建单独的ETL和数据管道,清理和转换数据,并将其准备成模型所需的特征。这些孤立通常会因为用于数据工程的工具和技术不支持数据科学家进行相同的活动而形成。
  2. 批处理和流处理数据的整合 机器学习模型使用历史数据来训练模型,以便在流式数据上进行准确预测。问题在于传统体系结构不支持可靠地组合历史数据和流数据,这在将两种类型的数据输入到机器学习模型中时会产生挑战。
  3. 数据量 机器学习系统通常需要处理大量数据,并使用复杂的代码,这不一定适用于SQL。如果数据科学家希望通过ODBC/JDBC接口从通过数据工程管道创建的表中消耗数据,这些接口可能会创建一个非常低效的过程。这些低效的过程主要是因为这些接口设计为与SQL一起工作,并对非SQL代码逻辑提供有限的支持。这导致非SQL查询的低效,可能是由于数据量、数据转换和非SQL代码逻辑通常包含的复杂数据结构。
  4. 可复现性 MLOps最佳实践包括需要重现和验证ML工作流的每个阶段。重现模型的能力降低了错误的风险,并确保ML解决方案的正确性和鲁棒性。在可复制性中面临的最困难的挑战是一致的数据,只有在使用完全相同的数据时,ML模型才会重现完全相同的结果。由于数据随时间不断变化,这可能对ML可重现性和MLOps引入重大挑战。
  5. 非表格数据 尽管我们通常认为数据存储在表格中,但越来越多的机器学习工作负载用于支持大量的非表格数据,如文本、图像、音频、视频或PDF文件。这些非表格数据需要与表格数据相同的治理、共享、存储和数据探索功能。如果没有某种功能来编目这些目录和非表格数据的集合,很难提供与表格数据一样的治理和管理功能。

由于传统体系结构对将机器学习模型投产引入了挑战,机器学习往往变得非常复杂且孤立。这些孤立的复杂性为数据管理引入了更多挑战。

支持机器学习的Delta Lake功能

Delta Lake通过多种功能来支持机器学习生命周期,有助于弥补传统上由机器学习活动引入的数据管理挑战,并弥合用于BI/报告分析和高级分析的数据和流程之间的差距。以下是 Delta Lake 提供的几个支持机器学习生命周期的不同功能:

  1. 优化和数据量: Delta Lake建立在Apache Spark之上,数据科学活动可以直接通过Spark SQL使用DataFrame API从Delta Lake表中访问数据,从而使机器学习工作负载能够直接受益于Delta Lake提供的优化和性能增强。
  2. 一致性和可靠性: Delta Lake提供ACID事务,确保数据一致性和可靠性。这对于机器学习和数据科学工作流程非常重要,因为模型的训练和预测需要这种可靠性,以避免来自不准确或不一致数据的负面影响。
  3. 整合批处理和流处理数据: Delta Lake表可以无缝处理来自历史和流处理源的持续数据流,这是通过Spark Streaming和Spark Structured Streaming实现的。这意味着您可以简化用于机器学习模型的数据流程,因为这两种类型的数据被整合到单个表中。
  4. 模式强制执行和演进: 默认情况下,Delta Lake表具有模式强制执行,这意味着可以强制执行更好的数据质量,从而提高用于机器学习输入的数据的可靠性。但是,Delta Lake还支持模式演进,这意味着数据科学家可以轻松地向现有的机器学习生产表中添加新列,而无需破坏现有的数据模型。
  5. 版本控制: 正如您在先前章节中了解到的,Delta Lake允许您轻松为数据进行版本控制并通过事务日志执行时间旅行。这种版本控制有助于减轻通常在ML可再现性中看到的一些挑战,因为它允许您在特定时间点轻松重新创建机器学习实验和模型输出。这有助于显着减少在MLOps过程中遇到的一些挑战,因为简化的版本控制可以提供更大的可追溯性、可重现性、审计和ML模型的合规性。
  6. 集成: 在第1章和本章中,您了解到Delta Lake可以通过Apache Spark中的Spark SQL库进行访问。您还在第8章中了解到了Spark Streaming和Delta Lake与该库的集成。 Spark生态系统中的另一个库是MLlib。 MLlib为您提供对常见学习算法、特征化、流水线、持久性和实用程序的访问。实际上,许多机器学习库(例如TensorFlow、scikit-learn)也可以利用DataFrame API来访问Delta Lake表。

Spark生态系统由在Spark Core之上运行的多个库组成,为所有类型的数据和分析用例提供了多功能的支持。除了Spark标准库之外,Spark还与其他平台(例如MLflow,这是一个用于管理端到端机器学习生命周期的流行开源平台)进行集成,该平台允许跟踪、记录和复制Spark MLlib模型。

正如前面提到的,机器学习模型通常是使用诸如TensorFlow、PyTorch、scikit-learn等库构建的。尽管Delta Lake不是直接用于构建模型的技术,但它专注于解决并为许多机器学习活动面临的挑战提供有价值的基础支持。MLOps 和模型依赖于Delta Lake 提供的数据质量和完整性、可再现性、可靠性以及数据的统一性。Delta Lake 提供的强大数据管理和集成功能简化了 MLOps,并使机器学习工程师和数据科学家能够更轻松地访问和处理用于训练和部署模型的数据。

将一切整合在一起

通过Delta Lake启用的功能,可以更轻松地统一机器学习和数据工程的生命周期。Delta Lake使机器学习模型能够从历史(批量)和流式数据中学习和预测,所有这些数据都来自一个地方,同时本地利用Delta表的优化。ACID事务和模式强制有助于为用于机器学习模型输入的表提供数据质量、一致性和可靠性。Delta Lake的模式演进有助于机器学习输出随时间变化,而不会对现有流程引入破坏性变化。时间旅行功能使轻松审计或重现机器学习模型成为可能,并且Spark生态系统提供了额外的库和其他机器学习生命周期工具,以进一步支持数据科学家。

在图10-7中,您可以看到完全构建的lakehouse环境的所有结果层。总的来说,Delta Lake的特性有助于弥合数据工程师和数据科学家之间的鸿沟,以减少信息孤岛并统一工作负载。借助Delta Lake和健壮的lakehouse架构,组织可以更快、更高效地构建和管理机器学习模型。

勋章架构

这个湖仓的设计理念围绕着统一的概念,将不同技术的最佳元素融合到一个地方。这意味着湖仓内部的数据流也很重要,需要支持数据的这种统一。为了支持所有用例,这个数据流需要将批处理和流处理数据合并成一个单一的数据流,以支持整个数据生命周期中的各种情况。

第一章介绍了勋章架构的概念,这是一种流行的数据设计模式,包含青铜、白银和黄金层,最终通过Delta Lake实现。这一流行的模式用于以迭代的方式组织湖屋中的数据,以提高整个数据湖中数据的结构和质量,每一层在分析中具有特定的功能和目的,同时统一批处理和流处理数据流。勋章架构的示例见图10-8。

图10-8中显示的青铜、白银和黄金层在表10-1中有简要概述。对于每个层次,您将看到其商业价值、属性以及实施细节(例如“如何完成”)。

在接下来的部分中,您将更详细地了解构成勋章架构的不同层次。

青铜层(原始数据)

从数据源提取的原始数据被摄取到青铜层,没有经过任何转换或业务规则强制执行。这一层是我们原始数据的“着陆区”,因此,该层中的所有表结构与源系统结构完全对应。数据源的格式保持不变,因此当数据源是CSV文件时,它以CSV文件的形式存储在青铜层,JSON数据以JSON格式写入,依此类推。从数据库表中提取的数据通常以Parquet或AVRO文件的形式落入青铜层。

在这一点上,不需要模式。随着数据的摄取,会维护详细的审计记录,其中包括数据源、是否执行了完整或增量加载以及支持需要的增量加载的详细水印。青铜层包括一个归档机制,以便数据可以长时间保留。这个归档和详细的审计记录可以在勋章架构下游的某个地方发生故障时用于重新处理数据。

摄取的数据以“源系统镜像”的形式落入青铜层,保持源系统格式的结构和数据类型,尽管通常会增加额外的元数据,如加载日期和时间以及ETL过程系统标识符。摄取过程的目标是将源数据迅速、轻松地着陆在青铜层,只需足够的审计和元数据以启用数据血缘和重新处理。

青铜层通常用作变更数据捕获(CDC)过程的源,允许新到达的数据通过白银层和黄金层立即进行处理。

白银层

在白银层,我们首先对数据进行清理和规范化。我们确保使用标准格式,如日期和时间,强制执行公司的列命名标准,去重数据,并在需要时执行一系列附加的数据质量检查,删除低质量的数据行。

接下来,相关的数据被合并和融合。Delta Lake的合并功能非常适用于此目的。例如,来自各种来源(销售、CRM、POS系统等)的客户数据被合并成一个单一实体。已经在不同主题领域中重复使用的数据实体(称为协同数据)被识别并在视图中进行规范化。在先前的例子中,合并的客户实体就是这种协同数据的一个例子。

在这一点上,数据的组合企业视图开始显现出来。请注意,我们在这里应用了“刚刚好”的理念,即我们提供足够的细节,付出最少的努力,确保我们保持对构建勋章架构的敏捷方法。

在这一点上,我们开始强制执行模式,并允许模式在下游演变。白银层也是我们可以应用GDPR和/或PII/PHI执行规则的地方。

由于这是强制执行数据质量并创建企业视图的第一层,它对业务非常有用,特别是对于自助分析和临时报告等目的。白银层被证明是机器学习和人工智能用例的出色数据源。事实上,这些类型的算法在白银层的“较不完善”数据中的表现比黄金层中的消耗格式更好。

黄金层

在黄金层,我们创建业务级别的聚合。这可以通过标准的Kimball星型模式、Inmon雪花模式维度模型,或者适用于消费者业务用例的任何其他建模技术来实现。在这里应用数据变换和数据质量规则的最终层,产生高质量、可靠的数据,可作为组织中的单一真相源。

黄金层通过向下游用户和应用提供高质量、干净的数据,持续提供业务价值。黄金层的数据模型通常包括数据的许多不同视角或视图,具体取决于使用情况。黄金层将实施多种Delta Lake优化技术,例如分区、数据跳过和Z-ordering,以确保以高性能的方式交付质量数据。

经过优化,以便由BI工具、报告、应用程序和业务用户进行最佳消费,这成为使用高性能查询引擎读取数据的主要层。

完整的湖仓

一旦您在基于Delta Lake的体系结构中实施了勋章架构,您就可以开始看到湖仓的全部优势和可扩展性。在本章构建湖仓的过程中,您已经看到了不同层次如何相互补充,以统一整个数据平台。

图10-9展示了整个湖仓的情况,包括它在勋章架构下的外观。虽然勋章架构并非是湖仓中数据流的唯一设计模式,但它是最受欢迎的之一,而且理由充分。通过Delta Lake启用的功能,最终使勋章架构支持在单一数据流中统一批处理和流处理工作负载、机器学习、业务级别的聚合以及全面的分析,适用于所有角色。

总结

在本书中,您了解到开放表格格式的出现,Delta Lake的开源标准为数据湖带来了可靠性、可扩展性和整体更好的数据管理。通过克服许多传统技术的局限性,Delta Lake有助于弥合传统数据仓库和数据湖之间的差距,为组织带来了以湖仓形式的单一统一的大数据管理平台。

Delta Lake继续改变组织存储、管理和处理数据的方式。其强大的功能,如ACID事务、数据版本控制、流处理和批处理事务支持、模式强制执行以及性能调整技术,使其成为数据湖中事实上的开放表格格式的选择。

在撰写本文时,Delta Lake是全球范围内被广泛采用的湖仓格式,每月下载数以百万计,并拥有庞大的不断增长的社区贡献者。随着贡献者实力的增强和对Delta Lake的采用不断增长,Delta生态系统不断扩大,随着大数据领域的整体演变,Delta Lake的功能也将自然而然地得到扩展,这要归功于其开放源代码格式和开源社区的贡献。

Delta Lake和湖仓范式的持续崛起在数据平台和数据管理的演进中构成了一个重要的里程碑。Delta Lake提供了在当今数据驱动的世界中实现规模成功所需的功能和特性,而湖仓则提供了一个统一、可扩展的架构来支持它。Delta Lake和湖仓将继续在简化架构和推动不断增长的数据和技术生态系统中发挥关键作用。

阅读量:1404

点赞量:0

收藏量:0