什么是表?

表驻留在架构中,包含数据行。 默认情况下,在 Azure Databricks 中创建的所有表都使用 Delta Lake。 Delta Lake 支持的表也称为 Delta 表。

Delta 表将数据作为文件目录存储在云对象存储中,并将表元数据注册到目录和架构中的元存储。 所有 Unity Catalog 托管表和流式处理表都是 Delta 表。 Unity Catalog 外部表可以是增量表,但不是必需的。

可以在 Databricks 上创建不使用 Delta Lake 的表。 这些表不提供增量表的事务保证或优化性能。 可选择使用 Delta Lake 以外的格式创建下列表类型:

  • 外部表。
  • 外表。
  • 注册到旧 Hive 元存储的表。

在 Unity Catalog 中,表位于三级命名空间的第三级别 (catalog.schema.table):

Unity Catalog 对象模型图,侧重于表

Azure Databricks 表类型

Azure Databricks 使你能够使用以下类型的表。

托管表

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

外部表

外部表有时称为“非托管表”,它们将基础数据文件的管理与元存储注册分离。 Unity Catalog 外部表可以使用外部系统可读的通用格式存储数据文件。 请参阅使用外部表

Delta 表

“Delta 表”术语用于描述 Delta Lake 支持的任何表。 由于 Delta 表是 Azure Databricks 上的默认表,因此大多数对表的引用都描述 Delta 表的行为,除非另有说明。

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

流式处理表

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

可使用 Databricks SQL 在 Unity Catalog 中注册流式处理表,或将其定义为增量实时表管道的一部分。 请参阅 在 Databricks SQL 中使用流式处理表加载数据。 和什么是增量实时表?

外表

外表表示通过 Lakehouse Federation 连接到 Azure Databricks 的外部系统中存储的数据。 外部表在 Azure Databricks 上是只读的。 请参阅“什么是 Lakehouse Federation?”。

特征表

由具有主键的 Unity Catalog 管理的任何 Delta 表都是功能表。 对于低延迟用例,可选择使用联机特征存储来配置特征表。 请参阅使用工作区特征存储中的特征表

Hive 表(旧版)

Hive 表描述了 Azure Databricks 上两个不同的概念,这两个概念都是旧模式,不推荐使用。

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

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

实时表(已弃用)

“实时表”术语是指现在作为具体化视图实现的功能的早期实现。 应更新引用实时表的任何旧代码,以使用具体化视图的语法。 请参阅什么是增量实时表?在 Databricks SQL 中使用具体化视图

基本表权限

若要创建表,用户必须对架构具有 CREATE TABLEUSE SCHEMA 权限,并对其父目录具有 USE CATALOG 权限。 若要查询某个表,用户必须对该表拥有 SELECT 权限、对其父架构拥有 USE SCHEMA 权限,并且对其父目录拥有 USE CATALOG 权限。

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