Unity Catalog 支持三种主要表类型:托管表、外部表和外部引入表。 每种类型在存储、管理和治理数据的方式上有所不同。
托管表
托管表是默认推荐的表类型。 Unity 目录管理数据生命周期、存储位置和优化。 删除托管表时,将删除元数据和基础数据文件。
托管的数据表由 Delta Lake 或 Apache Iceberg 提供支持,具备以下特性:
- 自动优化以降低存储和计算成本
- 跨所有客户端类型加快查询性能
- 自动化表维护
- 通过开放 API 保护非 Databricks 客户端的访问
- 自动升级到最新的平台功能
数据文件存储在包含表的架构或目录中。 请参阅 Azure Databricks for Delta Lake 和 Apache Iceberg 中的 Unity 目录托管表。
外部表
外部表用于注册由你管理的云对象存储中存储的数据。 Unity 目录管理数据访问,但不管理数据生命周期、优化或存储布局。 删除外部表时,仅删除元数据 - 基础数据文件将保留。
Unity 目录外部表支持 Delta Lake 格式(建议)和 CSV、JSON、AVRO、PARQUET、ORC 和 TEXT 格式。 非 Delta 类型的外部表缺少 Delta Lake 的事务保证和性能优化。
当需要以下条件时,使用外部表:
- 注册与 Unity 目录托管表不兼容的现有数据
- 提供不支持其他外部访问模式的非 Databricks 客户直接数据访问
请参阅使用外部表。
外表
外部表(也称为联合表)通过 Unity Catalog 注册,作为外部目录的一部分。 外部系统负责管理数据和元数据,而 Unity Catalog 则增加了用于查询的数据治理功能。
Azure Databricks 支持两种方法来注册外表:
- 查询联合:使用与外部数据系统(如 PostgreSQL 和 MySQL)的安全 JDBC 连接
- 目录联合:连接外部目录以直接在文件存储中查询数据
Delta Lake 外部表缺少 Unity Catalog 托管表中的许多优化。 对于生产工作负荷或经常查询的数据集,请迁移到 Unity 目录托管表以提高性能。 请参阅 处理外部表。
表类型的比较
下表比较了三种表类型:
| 功能 / 特点 | 托管表 | 外部表 | 外表 |
|---|---|---|---|
| 数据生命周期管理 | Unity 目录管理器 | 你管理 | 外部系统进行管理 |
| 存储位置 | Unity 目录管理器 | 指定 | 外部系统进行管理 |
| 自动优化 | 是的 | 受限制 | 否 |
| 支持的格式 | Delta Lake,Apache Iceberg | Delta Lake (建议)、CSV、JSON、AVRO、PARQUET、ORC、TEXT | 取决于外部系统 |
数据在DROP TABLE删除 |
是的 | 否 | 否 |
| 最适用于 | 生产工作负荷,经常查询的数据 | 旧集成、现有数据 | 从外部系统迁移,临时访问 |
其他表类型
Azure Databricks 还支持特定用例的专用表类型:
- 流式处理表:具有增量处理逻辑的 Delta Lake 支持的 Lakeflow Spark 声明性管道数据集
- 具体化视图:Delta Lake 支持的 Lakeflow Spark 声明性管道数据集,该数据集使用托管流逻辑具体化查询结果
旧式表格类型
支持以下旧表类型以实现向后兼容性,但不建议用于新开发。
Hive 表
Hive 表使用旧模式,包括旧的 Hive 元存储、Hive SerDe 编解码器或 Hive SQL 语法。 默认情况下,使用旧 Hive 元存储注册的表将数据存储在旧 DBFS 根目录中。
将所有表从旧 HMS 迁移到 Unity 目录。 请参阅旧 Hive 元存储中的数据库对象。 可以选择将 Hive 元存储联合到 Unity 目录。 请参阅 Hive 元存储联盟:启用 Unity Catalog 管理在 Hive 元存储中注册的表。
Apache Spark 支持注册和查询 Hive 表,但这些编解码器未针对 Azure Databricks 进行优化。 仅注册 Hive 表以支持针对外部系统写入的数据的查询。 请参阅 Hive 表(旧版)。
实时表
术语 实时表 是指现在可用作 具体化视图的功能的早期实现。 更新引用实时表以使用具体化视图语法的旧代码。 请参阅 Lakeflow Spark 声明性管道 和 具体化视图。