了解 Microsoft Fabric 与 OneLake 的奖牌湖屋体系结构

本文介绍奖牌湖体系结构,并介绍了如何在 Microsoft Fabric 中实现设计模式。 这篇文章面向以下受众:

  • 数据工程师:设计、生成和维护基础结构和系统的技术人员,可支持组织收集、存储、处理和分析大量数据。
  • 卓越中心、IT 和 BI 团队: 负责在整个组织中监督分析的团队。
  • Fabric 管理员:负责监督组织的 Fabric 的管理员。

奖牌湖屋体系结构通常称为奖牌体系结构,它是组织用来在湖屋中以合乎逻辑的方式组织数据的设计模式。 这是 Fabric 建议采用的设计方法。 由于 OneLake 是 Fabric 的数据湖,因此采用在 OneLake 中创建湖仓的方式来实现奖牌体系结构。

奖章体系结构包括三个不同的层,也称为区域。 这三个奖牌层分别是:铜牌(原始数据)、银牌(经验证的数据)和金牌(扩充数据)。 每个层指示存储在湖屋中的数据的质量,级别越高,则表示质量越高。 使用此多层方法有助于为企业数据产品构建单一事实来源。

重要的是,奖牌体系结构可保证数据通过层传输时的原子性、一致性、隔离和持续性 (ACID)。 数据以原始形式开始,然后通过一系列数据的验证和转换流程,准备数据以优化高效分析,同时保留原始副本作为真实来源。

有关详细信息,请参阅《什么是奖牌湖屋体系结构?》。

Fabric 中的奖牌体系结构

奖牌体系结构的目标是在数据通过每个阶段传输时逐步改进和提高数据的结构和质量。

奖牌体系结构由三个不同的层(或区域)组成。

  • 青铜: 也称为 原始区域,第一层以原始格式存储源数据,包括非结构化、半结构化或结构化数据类型。 此层中的数据通常仅追加且不可变。 通过在青铜层中保留原始数据,可以保留真实数据来源,并在将来实现重新处理和审核。
  • 银: 也称为 扩充区域,此层存储来自青铜层的数据源。 数据已清理和标准化,现在它的结构为表(行和列)。 它还可能与其他数据集成,以提供所有业务实体(如客户、产品等)的企业视图。
  • 金: 也称为 特选区域,此最终层存储从银层获取的数据。 数据经过优化,以满足特定的下游业务和分析要求。 表通常符合星型架构设计,它支持开发针对性能和可用性而优化的数据模型。

每个区域都应在 OneLake 中划分为自己的湖屋或数据仓库,数据将在转换和优化过程中在区域之间移动。

OneLake 奖牌体系结构关系图,其中显示了数据源、使用三层进行准备和转换以及使用 SQL 和 Power BI 进行分析。

在 Fabric 典型的奖牌体系结构实现中,铜牌区域将以与数据源相同的格式存储数据。 当数据源是关系数据库时,增量表是一个不错的选择。 白银和黄金区域应包含 Delta 表。

提示

要了解如何创建湖屋,请完成《湖屋端到端方案》教程。

Fabric 中的 OneLake 和湖屋

新式数据仓库的基础是一个数据湖。 Microsoft OneLake 是整个组织的单个统一逻辑数据湖。 它随每个 Fabric 租户自动预配,是所有分析数据的唯一位置。

可以使用 OneLake 执行以下操作:

  • 移除孤岛并降低管理工作量。 在一个数据湖资源中存储、管理和保护所有组织数据。
  • 减少数据移动和重复。 OneLake 的目标是仅存储一个数据副本。 数据副本越少,数据移动过程就会越少,从而提高效率并降低复杂性。 使用 快捷方式 引用存储在其他位置的数据,而不是将其复制到 OneLake。
  • 与多个分析引擎一起使用。 OneLake 中的数据是以开放格式存储的。 通过此方式,各种分析引擎可以查询数据,包括 Analysis Services(由 Power BI 使用)、T-SQL 和 Apache Spark。 其他非 Fabric 应用程序也可以使用 API 和 SDK 访问 OneLake

要在 OneLake 中存储数据,请在 Fabric 中创建湖屋。 Lakehouse 是一个数据体系结构平台,用于在单个位置存储、管理和分析结构化和非结构化数据。 它可以扩展到所有文件类型和大小的大量数据,并且由于数据存储在单个位置,因此可以在组织中共享和重复使用这些数据。

每个湖屋都有一个内置的 SQL 分析终结点,可用于解锁数据仓库功能,而无需移动数据。 这意味着可以使用 SQL 查询在湖屋中查询数据,而无需进行任何特殊设置。

有关详细信息,请参阅《什么是 Microsoft Fabric 中的湖屋?》。

表和文件

在 OneLake 中创建 Lakehouse 时,会自动预配两个物理存储位置:

  • 是用于在 Apache Spark(CSV、Parquet 或 Delta)中存储所有格式的表的托管区域。 所有表(无论是自动创建还是显式创建)都会识别为湖屋中的表。 任何 Delta 表(包含基于文件的事务日志的 Parquet 数据文件)也将被识别为表。
  • 文件是一个非托管区域,用于以任何文件格式存储数据。 此区域中存储的任何 Delta 文件不会自动识别为表。 如果想在非托管区域的 Delta Lake 文件夹中创建表,可以创建一个快捷方式或外部表,并将其位置指向 Apache Spark 中包含 Delta Lake 文件的非托管文件夹。

托管区域(表)与非托管区域(文件)之间的主要区别是自动表发现和注册过程。 此过程仅在托管区域中创建的任何文件夹上运行,但不在非托管区域中运行。

在青铜区域中,以原始格式存储数据,可以是表或文件。 如果源数据来自 OneLake、Azure Data Lake Store Gen2(ADLS Gen2)、Amazon S3 或 Google,请在青铜区域中创建快捷方式,而不是跨区域复制数据。

在白银和黄金区域中,通常将数据存储在 Delta 表中。 但是,还可以将数据存储在 Parquet 或 CSV 文件中。 如果这样做,则必须显式创建快捷方式或外部表,使其具有指向 Apache Spark 中包含 Delta Lake 文件的非托管文件夹的位置。

在 Microsoft Fabric 中,湖屋资源管理器提供了整个湖屋的统一图形表示形式,以便用户导航、访问和更新其数据。

有关自动表发现的详细信息,请参阅《自动表发现和注册》。

Delta Lake 存储

Delta Lake 是一个优化的存储层,可提供存储数据和表的基础。 它支持大数据工作负载的 ACID 事务,因此它是 Fabric 湖屋中的默认存储格式。

Delta Lake 在湖屋中为流式处理和批处理操作提供了可靠性、安全性和性能。 它在内部以 Parquet 文件格式存储数据,但它还会维护事务日志和统计信息,这些日志和统计信息提供标准 Parquet 格式的功能和性能改进。

与通用文件格式相比,Delta Lake 格式提供以下优势:

  • 支持 ACID 属性,尤其是防止数据损坏的持久性。
  • 更快的读取查询。
  • 提高了数据新鲜度。
  • 支持批处理和流式处理工作负载。
  • 通过使用 Delta Lake 时间旅行支持数据回滚。
  • 通过使用 Delta Lake 表历史记录增强了法规合规性和审核。

Fabric 使用 Delta Lake 标准化存储文件格式。 默认情况下,当将数据写入新表时,Fabric 中的每个工作负荷引擎都会创建 Delta 表。 有关详细信息,请参阅《湖屋和 Delta Lake 表》。

部署模型

要在 Fabric 中实现奖牌体系结构,可以使用 湖屋(每个区域一个)、数据仓库或两者的组合。 你的决定应基于你的偏好和团队的专业知识。 借助 Fabric,可以使用处理 OneLake 中数据的一个副本的不同分析引擎。

以下是需要考虑的两种模式:

  • 模式 1:将每个区域创建为湖屋。 在这种情况下,业务用户将通过使用 SQL 分析终结点访问数据。
  • 模式 2: 创建铜和银区作为湖屋,黄金区域作为数据仓库。 在这种情况下,业务用户可使用数据仓库终结点访问数据。

虽然可以在单个 Fabric 工作区中创建所有湖仓,但我们建议您为每个湖仓创建单独的独立工作区。 此方法可在区域级别提供更多控制和更好的治理。

对于铜牌区域,建议以原始格式存储数据,或使用 Parquet 或 Delta Lake 来存储数据。 尽可能将数据保留为其原始格式。 如果源数据来自 OneLake、Azure Data Lake Store Gen2 (ADLS Gen2)、Amazon S3 或 Google,请在铜牌区域中创建快捷方式,而不是跨区域复制数据。

对于银牌和金牌区域,建议使用 Delta 表,因为它们可提供额外的功能和性能增强。 Fabric 会对 Delta Lake 格式进行标准化处理,默认情况下,Fabric 中的每个引擎都将以此格式写入数据。 此外,这些引擎会对 Parquet 文件格式使用 V-Order 写入时间优化。 该优化允许 Fabric 计算引擎(如 Power BI、SQL、Apache Spark 等)快速读取。 有关详细信息,请参阅 Delta Lake 表优化和 V-Order

最后,今天的许多组织面临数据量的巨大增长,需要应对日益增长的以逻辑方式组织和管理这些数据的需求,同时需要促进更有针对性的高效使用和管理。 这可以引导你通过治理来建立和管理去中心化或联合式数据组织。 为了实现此目标,请考虑实现数据网格体系结构数据网格是一种体系结构模式,侧重于创建提供数据即产品的数据域。

通过创建数据域,可以为 Fabric 中的数据资产创建数据网格体系结构。 可以创建映射到业务领域的域,例如市场营销、销售、库存、人力资源和其他领域。 然后,可以通过在每个域中设置数据区域来实现奖牌体系结构。 有关域的详细信息,请参阅《》。

了解增量表数据存储

本部分介绍与在 Fabric 中实现奖牌湖屋体系结构相关的其他指引。

文件大小

通常,大数据平台在具有几个大型文件而不是许多小文件时性能更好。 当计算引擎需要管理大量元数据和文件操作时,性能会下降。 为了提高查询性能,建议将数据文件的大小设为约 1 GB。

Delta Lake 具有名为预测优化的功能。 预测性优化自动执行 Delta 表的维护操作。 启用此功能后,Delta Lake 会识别受益于维护操作的表,然后优化其存储。 虽然此功能应构成卓越运营和数据准备工作的一部分,但 Fabric 还可以在数据写入期间优化数据文件。 有关详细信息,请参阅《Delta Lake 的预测优化》。

历史数据保留

默认情况下,Delta Lake 会保留所有更改的历史记录,因此历史元数据的大小会随着时间推移而增长。 根据业务需求,将历史数据保留一段时间,以减少存储成本。 请考虑仅保留上个月的历史数据或其他适当时间段的历史数据。

可以使用 VACUUM 命令从 Delta 表中移除较旧的历史数据。 但是,默认情况下,不能删除过去七天内的历史数据。 该限制维护数据中的一致性。 使用表属性 delta.deletedFileRetentionDuration = "interval <interval>"配置默认天数。 该属性确定在将文件视为清除操作的候选对象之前,必须将其删除的时间段。

表分区

在每个区域中存储数据时,建议在适用的情况下使用分区文件夹结构。 此方法可提高数据可管理性和查询性能。 通常,由于分区修剪/消除,文件夹结构中的分区数据会导致更快地搜索特定数据条目。

通常,在新数据到达时,可将数据追加到目标表。 但在某些情况下,由于需要同时更新现有数据,因此可以合并数据。 在这种情况下,可以使用 MERGE 命令执行更新插入操作。 在对目标表进行分区时,请务必使用分区筛选器来加快操作速度。 这样,引擎可以消除不需要更新的分区。

数据访问

你应该规划和控制谁需要访问湖仓中的特定数据。 还应了解访问此数据时要使用的各种事务模式。 然后,可以定义正确的表分区方案,并使用 Delta Lake Z-order 索引并置数据。

有关实现 Fabric 湖屋的详细信息,请参阅以下资源。