Databricks Unity 目录表类型

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 声明性管道具体化视图