閱讀英文

共用方式為

什么是表?

表驻留在架构中,包含数据行。 在 Azure Databricks 中创建的默认表类型是 Unity 目录托管表。

Azure Databricks 中,主要的表类型区分因素是其所属的目录,如下表所述:

表类型 管理目录
托管 统一目录
外部 没有
外部系统或目录服务

以下示例显示了一个名为 prod.people_ops_employees 包含大约五名员工数据的表。 元数据在 Unity Catalog 中注册,数据存储在云存储中。

包含员工数据的示例表

托管表

托管表与元存储注册一起管理基础数据文件。 Databricks 建议每当创建新表时都使用托管表。 在 Azure Databricks 中创建表时,默认表是 Unity Catalog 托管表。 它们始终使用 Delta Lake。 请参阅使用托管表

外部表

外部表有时被称为非托管表,它们指的是存储在外部存储系统(例如云对象存储)中的数据,该存储系统位于 Databricks 之外。 它们将底层数据文件的管理与元存储注册分离。 Unity Catalog >支持多种格式的外部表,包括 Delta Lake。 Unity Catalog 外部表可以使用外部系统可读的通用格式存储数据文件。 请参阅 “使用外部表”。

外表

外表表示通过 Lakehouse Federation 或 Hive 元存储联合连接到 Azure Databricks 的外部系统中存储的数据。 外表在 Azure Databricks 上是只读的。 请参阅使用外表

Unity Catalog 中的表

在 Unity 目录中,表位于三级命名空间(catalog.schema.table)的第三个级别,如下图所示。

Unity Catalog 对象模型关系图,重点围绕表

基本数据表权限

大多数表操作需要在包含表的目录和架构上具有USE CATALOGUSE SCHEMA权限。

下表汇总了 Unity 目录中常见表作所需的附加权限:

操作 权限
创建表 对包含架构拥有 CREATE TABLE 权限
查询表 表上的 SELECT
将数据更新、删除、合并或插入表 表上的 SELECTMODIFY
删除表 表上的 MANAGE
替换表 表上的 MANAGE,包含架构上的 CREATE TABLE

有关 Unity 目录权限的详细信息,请参阅 “管理 Unity 目录中的权限”。

什么是 Delta 表?

Delta Lake 支持的表也称为 Delta 表。

Delta 表将数据存储为云对象存储中的文件目录,并将表元数据注册到目录和架构中的元存储。 请参阅 什么是 Delta Lake?

Delta Lake 是保存数据或在 Azure Databricks 中创建表时使用的默认格式。 由于 Delta 表是 Databricks 上的默认表,大多数对表的引用都描述 Delta 表的行为,除非另有说明。

Databricks 建议始终使用完全限定的表名而不是文件路径与 Delta 表进行交互。

可以在 Databricks 上创建不使用 Delta Lake 的表。 这些表没有提供像 Delta 表那样的事务处理保证或经过优化的性能。

下表描述了在 Azure Databricks 中可能会遇到的常见 Delta 表:

表类型 DESCRIPTION
Unity Catalog 托管表 始终由 Delta Lake 提供支持。 Azure Databricks 上的默认表类型和建议的表类型。 提供许多内置优化。
Unity Catalog 外部表 可以选择由 Delta Lake 提供支持。 支持一些与外部 Delta Lake 客户端的旧集成模式。
流式处理表 由 Delta Lake 提供支持的 DLT 数据集,其中包括用于增量处理的追加或 APPLY CHANGES INTO 流定义。
具体化视图 由 Delta Lake 支持的 DLT 数据集,该数据集使用托管流逻辑具体化查询的结果。
特征表 任何已声明主键的 Unity Catalog 托管表或外部表。 在 Azure Databricks 上的 ML 工作负荷中使用。
Unity Catalog 外表 可能由 Delta Lake 提供支持,具体取决于外部目录。 Delta Lake 支持的外表没有 Unity Catalog 托管表中存在的许多优化。
Hive 元存储表 Hive 元存储表包括内部或外部联合 Hive 元存储中的外表,以及旧工作区 Hive 元存储中的表。 托管表和外部 Hive 元存储表都可以由 Delta Lake 提供支持。

其他表类型

虽然托管表、外部表和异构表是 Azure Databricks 中的基本表类型,但某些产品、功能和语法可以进一步加以区别。 本部分介绍其中一些其他表。

流式处理表

流式处理表是用于在 DLT 中处理增量数据的 Delta 表。 对流式处理表的大多数更新都是通过刷新操作进行的。

可以使用 Databricks SQL 在 Unity 目录中注册流式处理表,或将其定义为 DLT 管道的一部分。

特征表

由具有主键的 Unity Catalog 管理的任何 Delta 表都是功能表。 请参阅在 Unity Catalog 中处理特征表

在线表格

联机表是 Delta 表的只读副本,采用面向行的格式存储,并专门优化用于联机访问。

Hive 表(旧版)

Hive 表描述了使用旧模式实现的表,包括旧的 Hive 元存储、Hive SerDe 编解码器或 Hive SQL 语法。

默认情况下,使用旧 Hive 元存储注册的表将数据存储在旧 DBFS 根目录中。 Databricks 建议将所有表从旧 HMS 迁移到 Unity Catalog。 请参阅 旧版 Hive 元存储中的数据库对象

可以选择将 Hive 元存储联合到 Unity Catalog。 请参阅 Hive 元存储联合:启用 Unity Catalog 来管理在 Hive 元存储中注册的表

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

实时数据表(已弃用)

“实时表”这个术语指的是一种功能的早期实现,该功能现在已经被实现为“具体化视图”。 应更新引用实时表的任何旧代码,以使用具体化视图的语法。 请参阅 什么是 DLT?