使用外部表
外部表将数据存储在云租户的云对象存储中的目录中。 定义外部表时,必须指定存储位置。
仅当需要直接访问数据而不在 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 不会删除云存储中的基础数据。 如果需要移除与表关联的数据,则必须直接删除基础数据文件。
示例笔记本:创建外部表
可以使用以下示例笔记本创建目录、架构和外部表,并管理对它们的权限。