重要
在 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 表。 可以使用以下方法创建这些表:
- Databricks Runtime 或 Databricks SQL
- 支持 Iceberg REST 目录 API 的外部 Iceberg 兼容引擎,例如 Apache Spark、Flink、Trino 或 Kafka。 请参阅 Apache Iceberg 客户端中的 Access Azure Databricks 表。
托管的 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
。