使用外部表

外部表将数据存储在云租户的云对象存储中的目录中。 定义外部表时,必须指定存储位置。

仅当需要直接访问数据而不在 Azure Databricks 上使用计算时,Databricks 才建议使用外部表。 当用户从外部系统访问数据文件时,不会强制实施 Unity Catalog 特权。

注意

本文重点介绍 Unity Catalog 外部表。 旧 Hive 元存储中的外部表具有不同的行为。 请参阅旧 Hive 元存储中的数据库对象

使用外部表

Azure Databricks 仅管理外部表的元数据,不使用与包含它的架构关联的托管存储位置。 Unity Catalog 中的表注册只是指向数据文件的指针。 删除外部表时,不会删除数据文件。

创建外部表时,可以将现有数据文件目录注册为表,或提供创建新数据文件的路径。

外部表可以使用以下文件格式:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARQUET
  • ORC
  • TEXT

创建外部表

若要创建外部表,可以使用 SQL 命令或 Dataframe 写入操作。

开始之前

若要创建外部表,你必须满足以下权限要求:

  • 对外部位置的 CREATE EXTERNAL TABLE 权限,授予对外部表所访问的 LOCATION 的访问权限。
  • 对表的父架构的 USE SCHEMA 权限。
  • 对表的父目录的 USE CATALOG 权限。
  • 对表的父架构的 CREATE TABLE 权限。

有关配置外部位置的详细信息,请参阅创建外部位置以将云存储连接到 Azure Databricks

SQL 命令示例

在笔记本或 SQL 查询编辑器中使用以下命令示例之一来创建外部表。

在以下示例中,替换占位符值:

  • <catalog>:将包含表的目录的名称。
  • <schema>:将包含该表的架构的名称。
  • <table-name>:表的名称。
  • <column-specification>:每列的名称和数据类型。
  • <bucket-path>:要在其中创建表的云存储存储桶的路径。
  • <table-directory>:将在其中创建表的目录。 为每个表使用唯一目录。
CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

有关表创建参数的详细信息,请参阅 CREATE TABLE

Dataframe 写入操作

许多用户通过查询结果或 DataFrame 写入操作创建外部表。 以下文章演示了可用于在 Azure Databricks 上创建外部表的一些模式:

删除外部表

若要删除某个表,你必须是其所有者。 若要删除外部表,请运行以下 SQL 命令:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

删除外部表时,Unity Catalog 不会删除云存储中的基础数据。 如果需要移除与表关联的数据,则必须直接删除基础数据文件。

示例笔记本:创建外部表

可以使用以下示例笔记本创建目录、架构和外部表,并管理对它们的权限。

在 Unity Catalog 笔记本中创建和管理外部表

获取笔记本