什么是 Azure Databricks 中的 Apache Iceberg?

重要

在 Databricks Runtime 16.4 LTS 及更高版本中,公共预览版提供了由 Unity Catalog 管理的 Apache Iceberg 表。 Databricks Runtime 16.4 LTS 及更高版本中的外部 Iceberg 表也处于公共预览状态。

Apache Iceberg 是用于分析工作负荷的开源表格式。 它支持架构演变、时间旅行和隐藏分区等功能。 与 Delta Lake 一样,Iceberg 提供了一个抽象层,用于对存储在对象存储中的数据进行 ACID 事务。 Azure Databricks 支持使用 Apache Parquet 文件格式的 Iceberg 表。 Iceberg 通过为每次表更改写入新的元数据文件来保持原子性和一致性。

冰山目录是 Iceberg 表架构中的顶级层。 它处理创建、删除和重命名表等作。 它的主要责任是在加载表时提供当前元数据。 Azure Databricks 支持由以下方式管理的 Iceberg 表:

Azure Databricks 中的所有 Iceberg 表都遵循开放式 Iceberg 表格式规范。 请参阅 冰山表规格

在 Unity Catalog 中创建 Iceberg 表

Unity 目录中创建的 Iceberg 表是托管的 Iceberg 表。 可以使用以下方法创建这些表:

托管的 Iceberg 表与 Azure Databricks 平台功能完全集成。 Unity 目录管理这些表上的快照过期和文件压缩等生命周期任务。 托管 Iceberg 表还支持 液体聚类分析,从而提高查询性能。 预测优化 可自动执行这些任务,以降低存储成本并提高查询速度。

读取由其他目录管理的 Iceberg 表

外部 Iceberg 表是由 Unity Catalog 之外的目录管理的 Iceberg 表。 外部目录存储表的当前元数据。 Azure Databricks 使用 Lakehouse 联邦 从对象存储中检索元数据和读取表。

外部 Iceberg 表在 Azure Databricks 中是只读的,并且平台支持有限。

使用外部系统访问 Iceberg 表

可以使用 Iceberg REST 目录 API 访问 Unity 目录中的所有 Iceberg 表。 此开放 API 支持跨不同语言和平台进行外部 Iceberg 引擎的读取和写入操作。 请参阅 Apache Iceberg 客户端中的 Access Azure Databricks 表

REST 目录支持凭据售货,它将临时凭据传送到外部引擎以访问基础存储。 有关详细信息,请参阅 Unity 数据目录凭据发放用于外部系统访问

冰山表限制

以下限制适用于 Azure Databricks 中的 Iceberg 表,并可能会更改:

  • Iceberg 表仅支持 Apache Parquet 文件格式。
  • Azure Databricks 支持 Apache Iceberg 规范的版本 1 和 2,但有以下例外:
    • 不支持行级删除(包括按位置的删除和基于相等条件的删除)。
    • 不支持分支和标记。 阅读外国的Iceberg表时,只能访问主分支。
    • 仅当从外部 Iceberg 引擎交互时,托管的 Iceberg 表才支持分区演变。 外国冰山表不支持分区演变。
    • 不支持以下数据类型:
      • UUID
      • Fixed(L)
      • TIME

托管冰山表限制

以下限制特别适用于由系统管理的 Iceberg 表:

  • 托管的 Iceberg 表不支持矢量搜索。
  • Apache Iceberg 不支持 更改数据馈送。 因此,读取 Managed Iceberg 表作为源时,不支持增量处理:
    • 具体化视图和流式处理表
    • 湖仓监控
    • 在线表格
    • Lakebase
    • 数据分类

外国冰山表限制

以下限制特别适用于外国冰山表:

  • 仅支持以前在 Azure Databricks 中读取的 Iceberg 快照的时间旅行(即执行过 SELECT 语句的快照)。
  • 使用用于 Iceberg 分区的存储桶转换函数可能会降低使用条件筛选器时的查询性能。
  • 云存储分层产品(如 Amazon S3)未与国外 Iceberg 表集成。 通过访问 Azure Databricks 中的外国 Iceberg 表,可以还原存储在低成本存储层中的数据。
  • 在专用访问模式群集上,进行 Iceberg 表上的读取和 REFRESH FOREIGN TABLE 操作需要 ALL PRIVILEGES