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

本页介绍如何使用 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 客户端表的访问:

局限性

  • 目前不支持通过 IcebergCompatV3 外部访问 UniForm 表。
  • 外部客户端无法更改 delta.*databricks.* 表属性、添加或删除表功能、重命名列以及添加或删除 CHECK 约束。
  • 外部客户端无法对托管 Delta 表执行表维护操作,例如 OPTIMIZEVACUUMANALYZE
  • 外部客户端无法创建包含生成的列、默认列或约束列的表。
  • 创建外部表时,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 身份验证需要:

若要使用 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"

请替换以下变量:

  • <workspace-url>:Azure Databricks workspace URL,包括工作区 ID。 例如,adb-1234567890123456.12.azuredatabricks.net

注释

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