使用外部表

Unity Catalog 控制经过 Unity Catalog 但不管理数据生命周期、优化、存储位置或布局的所有查询的外部数据访问权限。

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

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

Databricks 建议对以下用例使用外部表:

  • 需要注册的表必需由与 Unity Catalog 托管的表不兼容的现有数据支持。
  • 还需要从不支持其他外部访问模式的非 Databricks 客户端直接访问数据。 请参阅使用外部系统来访问 Databricks 数据

当用户从外部系统访问数据文件时,不会强制实施 Unity Catalog 特权。

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

重要

如果使用非 Databricks 客户端或从 Databricks 内部通过路径访问来更新外部表元数据,则这些元数据不会自动同步到 Unity Catalog 的状态。 Databricks 建议不要进行此类元数据更新,但如果执行了更新,则必须运行 MSCK REPAIR TABLE <table-name> SYNC METADATA 才能使 Unity 目录中的架构处于最新状态。 请参阅 REPAIR TABLE

外部表的文件格式

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

  • 德尔塔
  • CSV
  • JSON(JavaScript 对象表示法)
  • AVRO
  • 拼花地板
  • ORC(光学字符识别)
  • 发短信

创建外部表

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

开始之前

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

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

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

注释

在向 AWS S3 上的外部表授予访问权限时,请注意以下几点:Databricks 建议只有在外部位置已经在一个单独的元数据存储中定义时,才对 S3 上该外部位置授予写入权限。 可以从多个元存储安全地读取单个外部 S3 位置中的数据,但从多个元存储到同一 S3 位置的并发写入可能会导致一致性问题。

SQL 命令示例

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

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

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

ADLS

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

S3

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 's3://<bucket-path>/<table-directory>';

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

Dataframe 写入操作

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

删除外部表

若要删除表,必须是表的所有者或具有该表的 MANAGE 特权。 若要删除外部表,请运行以下 SQL 命令:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

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

示例笔记本:创建外部表

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

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

获取笔记本