Azure Databricks支持三种主要表类型(托管、外部和外部)和两种开放存储格式(Delta Lake 和 Apache Iceberg)。 选择正确的组合可确定数据的存储、管理和优化方式。
Azure Databricks 表驻留在架构中,包含数据行。 在 Azure Databricks 中创建的默认表类型是 Unity 目录托管表。
托管表示例
以下示例显示了一个名为包含大约五名员工数据的托管表 prod.people_ops_employees 。 对于托管表,数据文件存储在 Unity 目录的托管存储位置中的云存储中。
存储格式
存储格式定义如何在对象存储中对数据进行物理结构和跟踪。
Azure Databricks 支持两种主要打开表存储格式:
- Delta Lake 是 Azure Databricks 中托管表和外部表的默认存储格式。 外部表也支持 Delta。
- Apache Iceberg 在 Azure Databricks 中支持用于托管表和外部表。 当你与 Iceberg 生态系统集成时,此格式非常有用。
这两种格式都引入了一个事务型存储层,用于跟踪元数据,并支持 ACID(原子性、一致性、隔离性和持久性)、时间回溯及其他功能。
表类型
Azure Databricks 中的表类型定义如何拥有和访问数据。
Azure Databricks支持三种主表类型。 表类型由拥有并管理底层数据文件的目录决定,如下表所示:
| 表类型 | 管理目录 | 读/写支持 | 性能优化 | 存储成本优化 |
|---|---|---|---|---|
| 管理 | 统一目录 | 是的 | 是的 | 是的 |
| 临时 | 无(适用于会话范围的托管表) | 是的 | 是的 | 是的 |
| 外部 | 无(仅限文件) | 是的 | 仅手动 | 仅手动 |
| 外国 | 外部系统或目录服务 | 只读 | 否 | 否 |
托管表
对于托管表,Unity 目录同时管理数据文件和表元数据。 在 Azure Databricks 中创建表时,Unity 目录托管表是默认值。
Databricks 建议每当创建新表时都使用托管表。 托管表会自动实现性能改进,降低存储和计算成本,并启用对外部系统(如 Trino)的访问。 请参阅 托管表。
外部表
外部表(有时称为 非托管表)引用存储在外部存储系统(如云对象存储)中的数据。 Azure Databricks注册表元数据,但不管理基础数据文件。 Unity 目录支持多种格式的外部表,包括 Delta Lake,这样就可以使用外部系统读取它们。 请参阅 外部表。
外表
外部表表示通过 Lakehouse Federation(数据仓库联盟)连接到 Azure Databricks 的外部系统中存储的数据。 外部表在 Azure Databricks 上是只读的。 请参阅 “外部表”。
临时表
临时表是作用于会话范围内的表,用于在 Azure Databricks 会话期间存储数据。 它们可用于具体化中间结果,而无需在目录中创建永久表。 会话结束时,Azure Databricks 会自动删除临时表,无需目录或架构权限来创建临时表。 请参阅 Databricks SQL 和 Databricks Runtime 中的临时表。
Unity Catalog 中的表
在 Unity 目录中,表存在于三级命名空间(catalog.schema.table)的第三个级别,如下图所示:
基本表权限
大多数表操作都需要在包含该表的目录和架构上拥有USE CATALOGUSE SCHEMA权限。
下表汇总了 Unity 目录中常见表作所需的附加权限:
| 操作 | Permissions |
|---|---|
| 创建表 |
CREATE TABLE 于包含的架构 |
| 查询表 |
SELECT 在桌子上 |
| 将数据更新、删除、合并或插入表 |
SELECT 和 MODIFY 在表上 |
| 删除整张表 |
MANAGE 在桌子上 |
| 更换数据表 |
MANAGE 表上的 CREATE TABLE 在包含的架构中 |
有关这些操作的 SQL 语法参考,请参阅:
有关 Unity 目录权限的详细信息,请参阅 “管理 Unity 目录中的权限”。