从 Delta 客户端访问 Databricks 的数据表

本页介绍如何使用 Unity REST API 从外部 Delta 客户端创建、读取和写入 Unity 目录托管表和外部表。 有关受支持的集成的完整列表,请参阅 Unity 目录集成

使用 Unity REST API 创建、读取和写入

重要

从 Delta 客户端创建和写入 Unity Catalog 管理的表格目前处于测试阶段。

Unity REST API 提供外部客户端对注册到 Unity 目录的表的创建、读取和写入访问权限。 使用 工作区 URL 作为端点配置访问权限。 下表类型是可访问的:

表类型 读取 Write 创建
托管增量 是* 是*
外部变动

* 支持包含 目录提交的托管 Delta 表。

要求

Azure Databricks 支持 Unity REST API 访问作为 Unity Catalog 的一部分的表。 必须在工作区中启用 Unity Catalog 才能使用这些终结点。

还必须完成以下配置步骤,以使用 Unity REST API 配置对 Delta 客户端表的访问:

局限性

  • 目前不支持通过 IcebergCompatV3 外部访问 UniForm 表。 在外部写入 UniForm 表后,必须在 Databricks 中运行 MSCK REPAIR TABLE 以生成 Iceberg 元数据。
  • 模式更改(例如ALTER TABLE)、表属性更新和表功能更改当前不支持在托管表上由外部客户端进行。
  • 外部客户端无法对托管 Delta 表执行表维护操作,例如 OPTIMIZEVACUUMANALYZE
  • 外部客户端无法创建 浅表克隆
  • 外部客户端无法创建包含生成的列、默认列或约束列的表。
  • 创建外部表时,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 工作区 URL,包括工作区 ID。 例如,adb-1234567890123456.12.databricks.azure.cn

注释

在上次更新此页面时,上面显示的包版本是最新的。 较新版本可能可用。 验证包版本是否与 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"

替换以下变量:

注释

在上次更新此页面时,上面显示的包版本是最新的。 较新版本可能可用。 验证包版本是否与 Spark 版本兼容。