本页介绍如何使用 Unity REST API 从外部 Delta 客户端创建、读取和写入 Unity 目录托管表和外部表。 有关受支持的集成的完整列表,请参阅 Unity 目录集成。
小贴士
有关如何使用 Microsoft Fabric 读取Azure Databricks数据的信息,请参阅 Microsoft Fabric Azure Databricks。
使用 Unity REST API 创建、读取和写入
重要
从 Delta 客户端创建和写入 Unity Catalog 管理的表格目前处于测试阶段。
Unity REST API 提供外部客户端对注册到 Unity 目录的表的创建、读取和写入访问权限。 使用 工作区 URL 作为端点配置访问权限。 下表类型是可访问的:
| 表类型 | 阅读 | 写入 | 创建 |
|---|---|---|---|
| 托管增量 | 是的 | 是* | 是* |
| 外部变动 | 是的 | 是的 | 是的 |
* 支持包含 目录提交的托管 Delta 表。
要求
Azure Databricks 支持通过 Unity REST API 访问 Unity Catalog 中的表。 您必须在工作区启用 Unity Catalog 才能使用这些端点。
还必须完成以下配置步骤,以使用 Unity REST API 配置对 Delta 客户端表的访问:
- 为元存储启用外部数据访问。 请参阅在元存储上启用外部数据访问。
- 向主体授予外部访问架构中包含对象的
EXTERNAL USE SCHEMA权限。 请参阅 授予用户 Unity 目录权限。 - 通过路径访问的外部表:向主体授予对包含表路径的外部位置的
EXTERNAL USE LOCATION权限。 请参阅 授予用户 Unity 目录权限。 - 确保主体具有相关的权限:
-
SELECT用于读取的表 -
MODIFY用于写入的表 -
CREATE用于创建表的架构 - 对于对托管 Delta 表的外部写入,请验证要写入的表是否已启用 目录提交 。
-
- 使用以下方法之一进行身份验证:
- 个人访问令牌(PAT):请参阅 授权对Azure Databricks资源的访问。
- OAuth 机器对机器(M2M)身份验证:支持自动凭据和令牌刷新,用于运行超过 >1 小时的 Spark 作业。 请参阅 使用 OAuth 授权服务主体访问 Azure Databricks。
局限性
- 目前不支持通过 IcebergCompatV3 外部访问 UniForm 表。 在外部写入 UniForm 表后,必须在 Databricks 中运行
MSCK REPAIR TABLE以生成 Iceberg 元数据。 - 模式更改(例如
ALTER TABLE)、表属性更新和表功能更改当前不支持在托管表上由外部客户端进行。 - 外部客户端无法对托管 Delta 表执行表维护操作,例如
OPTIMIZE,VACUUM和ANALYZE。 - 外部客户端无法创建 浅表克隆。
- 外部客户端无法创建包含生成的列、默认列或约束列的表。
- 创建外部表时,Azure Databricks建议使用 Apache Spark 来确保列定义的格式与 Apache Spark 兼容。 API 不会验证列规范的正确性。 如果规范与 Apache Spark 不兼容,则 Databricks Runtime 可能无法读取表。
使用 PAT 身份验证使用 Apache Spark 访问 Delta 表
外部 Spark 客户端的 PAT 身份验证需要:
- Unity Catalog Spark 客户端版本 0.4.1 或更高版本 (
io.unitycatalog:unitycatalog-spark) - Apache Spark 4.0 或更高版本
- Delta Spark 4.2.0 或更高版本
- 用于访问 Unity Catalog 的主体的个人访问令牌。 请参阅 “授权访问 Azure Databricks 资源”。
要使用 PAT 身份验证,通过 Apache Spark 读取或写入 Unity Catalog 托管的 Delta 表和外部 Delta 表,需要以下配置:
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.token": "<token>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.2.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.1,org.apache.hadoop:hadoop-azure:3.4.2"
请替换以下变量:
-
<uc-catalog-name>:Unity Catalog 中包含你的表的目录名称。 -
<token>:用于配置集成的主体的个人访问令牌(PAT)。
-
<workspace-url>:Azure Databricks workspace URL,包括工作区 ID。 例如,adb-1234567890123456.12.azuredatabricks.net。
注释
在上次更新此页面时,上面显示的包版本是最新的。 较新版本可能可用。 验证包版本是否与 Spark 版本兼容。
有关为云对象存储配置 Apache Spark 的其他详细信息,请参阅 Unity 目录 OSS 文档。
重要
为了读取、写入或创建启用了目录提交的表,需要 Databricks Runtime 16.4 及更高版本。 若要在现有表上启用或禁用目录提交,需要 Databricks Runtime 18.0 及更高版本。
若要使用 目录提交创建托管 Delta 表,请使用以下 SQL:
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;
若要创建外部 Delta 表,请使用以下 SQL:
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
USING delta
LOCATION <path>;
使用 OAuth 身份验证通过 Apache Spark 访问 Delta 表
Azure Databricks还支持 OAuth 计算机到计算机(M2M)身份验证。 OAuth 会自动处理 Unity 目录身份验证的令牌和凭据续订。
外部 Spark 客户端的 OAuth 身份验证需要:
- Unity Catalog Spark 客户端版本 0.4.1 或更高版本(
io.unitycatalog:unitycatalog-spark) - Apache Spark 4.0 或更高版本
- Delta Spark 4.2.0 或更高版本
- 具有适当权限的 OAuth M2M 服务主体。 请参阅 使用 OAuth 授权服务主体访问 Azure Databricks。
若要使用 OAuth 身份验证通过 Apache Spark 创建、读取或写入 Unity 目录托管表和外部 Delta 表,需要以下配置:
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.2.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.1,org.apache.hadoop:hadoop-azure:3.4.2"
请替换以下变量:
-
<uc-catalog-name>:Unity Catalog 中包含你的表的目录名称。 -
<oauth-token-endpoint>:OAuth 令牌终结点 URL。 构造此 URL:- 找到您的 Azure Databricks 工作区 URL。
- 使用以下格式:
https://<workspace-url>/oidc/v1/token
-
<oauth-client-id>:服务主体的 OAuth 客户端 ID。 请参阅 使用 OAuth 授权服务主体访问 Azure Databricks。 -
<oauth-client-secret>:服务主体的 OAuth 客户端密码。 请参阅 使用 OAuth 授权服务主体访问 Azure Databricks。
-
<workspace-url>:Azure Databricks workspace URL,包括工作区 ID。 例如,adb-1234567890123456.12.azuredatabricks.net。
注释
在上次更新此页面时,上面显示的包版本是最新的。 较新版本可能可用。 验证包版本是否与 Spark 版本兼容。