Lakehouse for Apache Iceberg 是上的托管式数据湖仓一体平台 Google Cloud。在此平台中, Lakehouse 运行时目录充当全代管式式无服务器 metastore 服务。它为您的数据湖仓一体提供单一的事实来源,让多个引擎(包括 Apache Spark、Apache Flink、Apache Hive 和 BigQuery)可以共享表和元数据,而无需复制文件。
如需将查询引擎连接到 metastore,您可以使用特定目录类型(例如 Apache Iceberg REST 目录端点)配置客户端。此端点管理表元数据,并使用由 Cloud Storage 存储桶支持的存储位置仓库来存储底层元数据和数据文件。如需详细了解如何选择目录类型,请参阅目录类型和端点 配置。
Lakehouse 运行时目录支持存储访问权限委托(也称为凭据销售),通过消除直接 Cloud Storage 存储桶访问权限的需求来提高安全性。它还与 Knowledge Catalog 集成,以实现统一的 治理、沿袭和数据质量。
主要功能
作为 Lakehouse for Apache Iceberg 的关键组件, Lakehouse 运行时目录为数据 管理和分析提供了多项优势,包括无服务器架构、引擎 互操作性与开放式 API、统一的用户体验,以及与 BigQuery 搭配使用时的高性能 分析、流式处理和 AI。如需详细了解这些优势,请参阅什么是 Lakehouse?
支持的引擎
Lakehouse 运行时目录与多个查询引擎兼容,包括(但不限于)Apache Spark、Apache Flink、Apache Hive 和 Trino。下表提供了指向每个引擎的文档的链接:
| 引擎 | 文档 |
|---|---|
| Apache Spark | 快速入门:与 Spark 和 Iceberg REST 目录端点搭配使用 |
| Apache Hive | 与 Spark 和 Hive 目录搭配使用 |
| Apache Flink | 与 Apache Flink 搭配使用 |
| Trino | 与 Trino 搭配使用 |
目录类型和端点配置
在配置客户端引擎以连接到 Lakehouse 运行时目录 metastore 时,您可以选择特定的 目录端点,例如 Apache Iceberg REST 目录端点或 Apache Hive 端点。最佳选择取决于您的用例,如下表所示:
| 用例 | 建议 |
|---|---|
| 希望其开源引擎访问 Cloud Storage 中的数据,并且需要与其他引擎( 包括 BigQuery 和 AlloyDB for PostgreSQL)互操作的新 Lakehouse 运行时目录用户。 | 使用 Apache Iceberg REST 目录端点。 |
| 运行依赖于 Hive Metastore 接口的 Apache Hive 或 Spark 工作负载,并且需要全代管式 metastore 服务的用户。 | 使用 Apache Hive 目录端点。 |
| 使用自定义 Apache Iceberg 目录为 BigQuery 端点创建了当前表的现有 Lakehouse 运行时目录用户。 | 继续使用 自定义 Apache Iceberg 目录为 BigQuery 端点, 但为新工作流使用 Apache Iceberg REST 目录 。通过 BigQuery 目录联合,使用自定义 Apache Iceberg 目录为 BigQuery 端点创建的表在 Apache Iceberg REST 目录端点中可见。 |
Lakehouse 架构如何与 Google Cloud 服务集成
如需了解 Lakehouse 如何管理您的数据,请参阅 Lakehouse for Apache Iceberg 架构如何与 Google Cloud 服务集成。 Apache Iceberg 不会将数据存储在单体表中。相反,它使用元数据文件的分层架构将数据文件整理到具有 ACID 事务支持的统一表结构中。
下图说明了 Managed Service for Apache Spark 等计算引擎如何使用 Lakehouse 运行时目录来管理表元数据,以便直接在 Cloud Storage 中读取和写入底层 Parquet 数据文件。
当您使用 Lakehouse for Apache Iceberg 时,技术架构由三个不同的层组成:
目录层:
- 核心 Iceberg 概念:目录通过维护指向最新元数据文件的指针来存储 表的当前状态。此层有助于实现 ACID 合规性和事务隔离,以确保并发写入不会相互干扰。
- Lakehouse 实现: Lakehouse 运行时目录充当顶级 区域 metastore 服务。在此服务中,您可以创建各个 目录来管理数据层次结构。客户端查询引擎使用特定端点目录类型(例如 Apache Iceberg REST 目录端点)连接到这些目录。metastore 管理事务提交、存储访问权限委托的凭据销售以及跨目录的指针管理。
元数据层:
- 核心 Iceberg 概念:此层使用三种文件类型的层次结构跟踪表结构、
快照和文件位置:
- 元数据文件:存储表的架构、分区规范、 和快照指针日志。
- 清单列表:通过对清单文件集合进行分组来表示表的单个快照。
- 清单文件:在单个文件级别跟踪数据,存储 文件路径、分区信息和列级统计信息(例如 行数以及最小值和最大值),这些信息用于 查询优化和分区剪除。
- Lakehouse 实现:在目录容器中,
您可以将数据整理到逻辑 命名空间(类似于数据集)
和 表中。对于每个表,Lakehouse 运行时目录都会生成和管理底层 Iceberg 元数据层次结构,从指向清单列表和清单文件的根
metadata.json文件开始。Lakehouse 运行时目录直接在您指定的仓库存储位置中保留这些文件。
- 核心 Iceberg 概念:此层使用三种文件类型的层次结构跟踪表结构、
快照和文件位置:
数据层:
- 核心 Iceberg 概念:此组件是实际原始数据记录所在的底层存储,通常采用经过优化的列式或 基于行的开放式文件格式,例如 Parquet、ORC 或 Avro。
- Lakehouse 实现:当您将
Cloud Storage 存储桶 (
gs://) 配置为仓库存储位置时, 您的表引用的物理数据文件会安全地存储在 您的存储桶中。Lakehouse 运行时目录通过 存储访问权限委托(凭据销售)管理访问权限,直接向客户端引擎销售短期访问令牌。这样,引擎就可以安全地读取和写入数据文件,而无需对底层存储桶拥有广泛的直接 IAM 权限。
Lakehouse 运行时目录限制
Lakehouse 运行时目录中的表存在以下限制:
表管理
- 您无法使用 BigQuery 数据定义语言 (DDL) 或数据操纵语言 (DML) 语句通过 Apache Iceberg REST 目录端点创建或修改表。您可以使用 BigQuery API(通过 bq 命令行工具或客户端库)修改这些表,但这样做可能会导致更改与外部引擎不兼容。
- Lakehouse 运行时目录中的表不支持
重命名操作或
ALTER TABLE ... RENAME TOSpark SQL 语句。 - Lakehouse 运行时目录中的表不支持 聚类。
- Lakehouse 运行时目录中的表不支持使用 灵活的列名称。
- Lakehouse 运行时目录不支持 Apache Iceberg 视图。
查询
- 与查询标准 BigQuery 表中的数据相比,BigQuery 引擎中 Lakehouse 运行时目录中的表的查询性能可能较慢。一般而言,查询速度应等同于从 Cloud Storage 读取数据。
- 对使用 Lakehouse 运行时目录中的表的查询进行 BigQuery 试运行 可能会报告 0 字节数据的下限,即使返回行也是如此。 出现这种结果的原因是,在运行完整查询之前,无法确定从表中处理的数据量。运行查询会产生处理此数据的费用。
- 您无法在 通配符表 查询中引用 Lakehouse 运行时目录中的表 。
API 和元数据
- 您无法使用
tabledata.list方法 从 Lakehouse 运行时目录中的表中检索数据。不过,您可以将查询结果保存到 BigQuery 表中,然后对该表使用tabledata.list方法。 - 不支持显示 Lakehouse 运行时目录中的表的表存储空间统计信息。
配额和限制
- BigQuery 中 Lakehouse 运行时目录中的表与标准表具有相同的 配额和 限制。
与 BigLake metastore(经典版)的差异
Lakehouse 运行时目录与 BigLake metastore(经典版)之间的核心区别包括以下内容:
- Lakehouse 运行时目录支持与 Spark 等开源引擎直接集成,这有助于减少存储元数据和运行作业时的冗余。您可以从多个开源引擎和 BigQuery 直接访问 Lakehouse 运行时目录中的表。
- Lakehouse 运行时目录支持 Apache Iceberg REST 目录端点,而 BigLake metastore(经典版)不支持。