本页介绍如何使用 Unity REST API 从外部 Delta 客户端创建、读取和写入 Unity 目录托管表和外部表。 有关受支持的集成的完整列表,请参阅 Unity 目录集成。
小贴士
有关如何使用 Microsoft Fabric 读取Azure Databricks数据的信息,请参阅 Microsoft Fabric Azure Databricks。
使用 Unity REST API 创建、读取和写入
重要
创建并写入 Unity Catalog 托管表(来自 Delta 客户端)目前处于公开预览版。
Unity REST API 提供外部客户端对注册到 Unity 目录的表的创建、读取和写入访问权限。 使用 工作区 URL 作为端点配置访问权限。 下表类型是可访问的:
| 表类型 | 阅读 | 写入 | 创建 |
|---|---|---|---|
| 托管增量 | 是的 | 是* | 是* |
| 外部增量 | 是的 | 是的 | 是的 |
支持具有目录提交的托管 Delta 表。
支持的客户端
支持使用 Apache Spark 通过 Unity REST API 创建、读取和写入 Unity Catalog 托管 Delta 表和外部 Delta 表。
Beta 版支持以下客户端。 如果您有兴趣使用这些功能,请联系您的 Azure Databricks 客户团队:
- Apache Flink
- DuckDB
- StreamNative
- Starburst
要求
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 表。
- 外部客户端无法更改
delta.*或databricks.*表属性、添加或删除表功能、重命名列以及添加或删除CHECK约束。 - 外部客户端无法对托管 Delta 表执行表维护操作,例如
OPTIMIZE,VACUUM和ANALYZE。 - 外部客户端无法创建包含生成的列、默认列或约束列的表。
- 创建外部表时,Azure Databricks建议使用 Apache Spark 来确保列定义的格式与 Apache Spark 兼容。 API 不会验证列规范的正确性。 如果规范与 Apache Spark 不兼容,则 Databricks Runtime 可能无法读取表。
注释
若要读取具有从外部 Delta 客户端附加的 行筛选器或列掩码 的表,请参阅 基于跨引擎属性的访问控制(ABAC), 了解所需的客户端版本和配置。
使用 PAT 身份验证使用 Apache Spark 访问 Delta 表
外部 Spark 客户端的 PAT 身份验证需要:
- Unity 目录 Spark 客户端版本 0.5.0 或更高版本(
io.unitycatalog:unitycatalog-spark) - Apache Spark 4.0 或 4.1
- Delta Spark 4.3.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.3.0,io.unitycatalog:unitycatalog-spark_4.1_2.13:0.5.0,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.5.0 或更高版本(
io.unitycatalog:unitycatalog-spark) - Apache Spark 4.0 或 4.1
- Delta Spark 4.3.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.3.0,io.unitycatalog:unitycatalog-spark_4.1_2.13:0.5.0,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 版本兼容。