适用于 BigQuery 的自定义 Apache Iceberg 目录端点将 Apache Spark 和 Apache Flink 等开源查询引擎连接到 Lakehouse 运行时目录。通过集成自定义目录插件 (BigQueryMetastoreCatalog),此端点可让您直接通过 BigQuery 管理和查询 Apache Iceberg 表元数据,同时将数据和元数据文件存储在 Cloud Storage 中。
自定义 Iceberg 目录的运作方式
自定义 Apache Iceberg 目录使用 JAR 库中提供的自定义目录实现 (org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog)。当计算工作负载在 Managed Service for Apache Spark 上运行时,该引擎会使用此插件与 BigQuery 进行交互,将 BigQuery 用作 Apache Iceberg 表的元数据存储区。
工作流程如下:
- 目录实现:查询引擎加载 BigQuery Metastore 目录 JAR,并配置 Spark 会话目录属性以使用
org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog。 - 元数据管理:当您使用 Spark SQL 或 DataFrame API 创建或修改表时,该插件会将数据集和表定义存储在 BigQuery 中。
- 数据存储:Apache Iceberg 元数据文件(
metadata.json、清单列表、清单)和数据文件(例如 Parquet 文件)直接存储在您指定的 Cloud Storage 数据仓库路径中。 - 跨引擎访问:由于元数据已在 BigQuery 中注册,因此您可以从 Spark 等开源引擎查询表,也可以直接从 BigQuery 查询表。
资源层次结构
BigQuery 端点的自定义 Apache Iceberg 目录按以下层次结构整理元数据:
| 资源 | 说明 |
|---|---|
| 项目 | 包含 BigQuery 资源和 Cloud Storage 数据仓库存储空间的 Google Cloud 项目。 |
| 命名空间(数据集) | 配置为充当 Iceberg 命名空间的 BigQuery 数据集,用于定义在其中创建的表的默认 Cloud Storage 位置。 |
| 表 | 一种 Apache Iceberg 表,其架构、快照和元数据指针在 BigQuery 中跟踪,而数据文件位于 Cloud Storage 中。 |
比较自定义 Iceberg 目录和 Iceberg REST 目录
下表总结了 BigQuery 端点的自定义 Apache Iceberg 目录与 Apache Iceberg REST 目录端点之间的主要区别:
| 功能 | BigQuery 的自定义 Iceberg 目录 | Apache Iceberg REST Catalog 端点(推荐) |
|---|---|---|
| 目录 API 标准 | 自定义插件 (BigQueryMetastoreCatalog) |
开放标准 Apache Iceberg REST 目录 API |
| 目录层次结构 | 项目 > BigQuery 数据集 > 表 | 项目 > 目录 > 命名空间 > 表 (P.C.N.T) |
| 存储配置 | 按数据集或表指定的 Cloud Storage 路径 | 多存储桶 (bl://) 或单存储桶 (gs://) 目录 |
| 凭证分发 | 不支持(使用直接 IAM 凭据) | 支持(提供短期有效的存储空间访问令牌) |
| 灾难恢复 | 不支持 | 支持(跨区域复制和故障切换) |
| 建议用于 | 现有部署和工作流 | 新的工作负载和标准 Iceberg REST 客户端集成 |
后续步骤
- 使用 Apache Iceberg 1.10 及更高版本配置运行时目录。
- 使用 Apache Iceberg 1.9 及更低版本配置运行时目录。
- 创建和管理目录资源。
- 将运行时目录与 BigQuery 表搭配使用。
- 使用 Apache Spark 存储过程。
- 自定义其他目录功能。