Databricks Unity 目录表类型

Unity Catalog 支持三种主要表类型:托管表、外部表和外部引入表。 每种类型在存储、管理和治理数据的方式上有所不同。

托管表

托管表是默认推荐的表类型。 Unity 目录管理数据生命周期、存储位置和优化。 删除托管表时,将删除元数据和基础数据文件。

托管的数据表由 Delta Lake 或 Apache Iceberg 提供支持,具备以下特性:

  • 自动优化以降低存储和计算成本
  • 跨所有客户端类型加快查询性能
  • 自动化表维护
  • 通过开放 API 保护非 Databricks 客户端的访问
  • 自动升级到最新的平台功能

数据文件存储在包含表的架构或目录中。 请参阅 Delta Lake 和 Apache Iceberg 的 Unity 目录托管表

外部表

外部表引用存储在你管理的云对象存储中的数据。 Unity 目录管理数据访问,但不管理数据生命周期、优化或存储布局。 删除外部表时,只会删除目录元数据,并且基础数据文件保持不变。

Unity 目录外部表支持 Delta Lake、CSV、JSON、AVRO、PARQUET、ORC 和 TEXT 格式。 Databricks 建议您使用 Delta Lake 格式,因为它具有其他格式不具备的事务保障和性能优化。

当需要以下条件时,使用外部表:

  • 注册与 Unity 目录托管表不兼容的现有数据
  • 提供不支持其他外部访问模式的非 Databricks 客户直接数据访问

请参阅处理外部表

外表

外部表(也称为联邦表)是由已在 Unity Catalog 中注册的外部目录管理的只读表。 外部系统负责管理数据和元数据,而 Unity Catalog 则增加了用于查询的数据治理功能。

Azure Databricks 支持两种方法来注册外表:

  • 查询联合:使用与外部数据系统(如 PostgreSQL 和 MySQL)的安全 JDBC 连接
  • 目录联合:连接外部目录以直接在文件存储中查询数据

使用 Delta Lake 格式的外部表缺乏 Unity Catalog 托管表所具备的许多优化功能。 对于生产工作负荷或经常查询的数据集,请迁移到 Unity 目录托管表以提高性能。 请参阅 处理外部表

表类型的比较

下表比较了三种表类型:

Feature 托管表 外部表 外表
数据生命周期管理 Unity 目录管理器 你管理 外部系统进行管理
存储位置 Unity 目录管理器 指定 外部系统进行管理
自动优化 Yes Limited No
支持的格式 Delta Lake,Apache Iceberg Delta Lake (建议)、CSV、JSON、AVRO、PARQUET、ORC、TEXT 取决于外部系统
数据在DROP TABLE删除 Yes No No
最适用于 生产工作负荷,经常查询的数据 旧集成、现有数据 从外部系统迁移,临时访问

其他表类型

Azure Databricks 还支持特定用例的专用表类型:

  • 流式处理表:具有增量处理逻辑的 Delta Lake 支持的 Lakeflow Spark 声明性管道数据集
  • 具体化视图:Delta Lake 支持的 Lakeflow Spark 声明性管道数据集,该数据集使用托管流逻辑具体化查询结果

旧式表格类型

支持以下旧表类型以实现向后兼容性,但不建议用于新开发。

Hive 表

Hive 表由旧 Hive 元存储管理,并使用旧模式,包括 Hive SerDe 编解码器和 Hive SQL 语法。 默认情况下,使用旧 Hive 元存储注册的表将数据存储在旧 DBFS 根目录中。

Databricks 建议将所有表从旧 HMS 迁移到 Unity 目录。 请参阅旧 Hive 元存储中的数据库对象

您可以选择将 Hive 元存储联邦接入 Unity Catalog,并将其中的表作为 Unity Catalog 中的外部表进行访问。 请参阅 Hive 元存储联盟:启用 Unity Catalog 管理在 Hive 元存储中注册的表

Apache Spark 支持注册和查询 Hive 表,但 Hive SerDe 编解码器未针对Azure Databricks进行优化。 仅当需要支持对外部系统写入的数据进行查询时,才注册 Hive 表。 请参阅 Hive 表(旧版)。

实时表

术语 实时表 是指现在可用作 具体化视图的功能的早期实现。 更新引用实时表以使用具体化视图语法的旧代码。 请参阅 Lakeflow Spark 声明性管道具体化视图