全部产品
Search
文档中心

开源大数据平台E-MapReduce:通过Unity Catalog中的Delta Sharing访问Databricks数据

更新时间:Jan 05, 2026

本文介绍如何配置阿里云EMR Serverless Spark,通过Databricks Unity Catalog的Delta Sharing,实现对共享数据的跨云只读访问。该方案旨在帮助您打破数据孤岛,支持跨云数据分析、数据同步等多种业务场景。

核心流程

整个过程涉及在 Databricks 端配置数据共享,并将访问凭证提供给阿里云 EMR Serverless Spark 任务进行调用。

  1. Databricks 端:创建 共享 (Share) 接收者 (Recipient),将需要共享的数据表添加到 共享 (Share) 中,并为 接收者 (Recipient) 生成一个包含访问令牌的凭证文件 (Credential File)。

  2. 凭证传递:将下载的凭证文件上传至阿里云对象存储(OSS),以便 Spark 任务读取。

  3. Serverless Spark 端:创建并运行一个 Spark 任务,该任务配置了 Delta Sharing 连接器,通过读取 OSS 上的凭证文件,经由公网访问 Databricks 的数据共享端点,拉取数据进行计算。

操作步骤

步骤一:在 Databricks 中配置数据共享

此步骤的目的是在 Databricks 中定义要共享的数据范围,并为外部访问创建一个安全的凭证。

  1. 创建共享 (Share)

    • 登录 Databricks 工作空间,在左侧导航栏进入 Catalog > Delta Sharing > Shared by meimage

    • 点击 Shared data,创建一个新的 ShareShare 是用于组织和管理待共享数据表的逻辑容器。image

  2. 添加数据资产 (Assets)

    • 在新建的 共享 (Share) 中,输入Share name后,添加数据资产。

    • 选择您希望对外共享的一个或多个数据表。

      Serverless Spark访问共享数据时会使用到刚刚配置的Share name和相应的库表。image

  3. 创建接收者 (Recipient)

    • 如果之前没有创建接收者 (Recipient),可以在下拉列表中选择创建接收者 (Recipient)。也可以返回 共享 (Share) 详情页,点击 Add recipient 以创建一个新的数据 接收者 (Recipient)

      image

  4. 配置接收者并生成凭证文件

    • 接收者 (Recipient) 生成一个包含访问令牌的凭证文件 (Credential File)。

      image

      • 接收者类型:选择Open类型。Open 类型用于与任何支持 Delta Sharing 协议的客户端(如 EMR Serverless Spark)进行开放共享,它会生成一个可移植的凭证文件。Databricks 类型则用于 Databricks 平台之间的内部共享。

        说明

        确保Recipient type是Open,如果Open框不可选,需要在右上角organization -> View Delta Sharing Settings中Enable External delta sharing imageimage

      • 认证方式:选择Token类型。

      • Token生命周期:设置Token有效期,最长支持365天。

    • 创建完成后,系统会生成一个激活令牌链接 (Activation link)

  5. 下载凭证文件

    • 在浏览器中打开上一步生成的 Activation link,系统将提示您下载一个以 .share 为后缀的凭证文件。image

步骤二:准备阿里云环境

此步骤的目的是将 Databricks 生成的凭证安全地存储在阿里云上,并为 Spark 任务准备好运行环境。

  1. 上传凭证文件至 OSS

    • 将上一步下载的 .share凭证文件上传到您的 OSS Bucket 中。

    • 记录该文件的完整 OSS 路径,例如 oss://your-bucket/path/to/credential.share

      说明

      安全建议

      • 建议将凭证文件存储在私有权限的 Bucket 中。

      • 确保后续运行 Spark 任务的 RAM 角色具有该 OSS 文件的读取权限。

  2. 配置公网访问

    准备一个具备公网访问能力的专有网络(VPC),并配置适用于 Serverless Spark 的交换机,以支持 Serverless Spark 通过公网访问 Databricks Delta Sharing。阿里云提供公网 NAT 网关以实现 VPC 的公网访问,详细操作请参见公网 NAT 网关。Serverless Spark支持的可用区交换机,请参见支持的可用区交换机列表

步骤三:在 Serverless Spark 中访问数据

此步骤的核心是编写并配置一个 Spark 任务,使其能够利用 凭证文件 读取 Databricks 数据。

  1. 添加网络连接

    在工作空间中新增网络连接时,请选择前期配置的支持公网访问的专有网络及其对应的交换机。详细操作请参见新增网络连接

  2. 准备并上传SQL文件

    • 准备SQL文件,将共享数据集写入DLF。

      -- 创建临时表
      -- 替换 凭证文件 地址和 share 数据集
      -- demo_share 是前面创建 共享 (Share) 的名称
      -- default.alitable  是前面共享的库表
      CREATE TEMPORARY TABLE dbc_delta_sharing USING deltaSharing LOCATION 'oss://your-bucket/path/to/credential.share#demo_share.default.alitable';
      SELECT * FROM dbc_delta_sharing limit 10;
      
      -- 创建数据库和表
      CREATE database if NOT EXISTS demo_day_ss_dlf;
      DROP TABLE if EXISTS demo_day_ss_dlf.dw_songs_ss_dlf;
      
      CREATE TABLE demo_day_ss_dlf.dw_songs_ss_dlf SELECT * FROM dbc_delta_sharing limit 10;
      SELECT * FROM demo_day_ss_dlf.dw_songs_ss_dlf limit 10;
    • 通过文件管理,将SQL文件上传至Serverless Spark的工作空间。详细操作请参见管理文件

  3. 添加数据目录

    在添加数据目录对话框中,选择DLF数据目录。数据目录详细操作,请参见管理数据目录

  4. 创建 Spark 任务

    Notebook任务

    • 创建Notebook会话

      在会话管理页面,创建Notebook会话,配置以下参数,其余参数默认。

      参数

      说明

      名称

      输入Notebook会话的名称。

      引擎版本

      推荐使用最新版本。本文使用esr-4.6.0版本。

      网络连接

      选择已创建的网络连接。

      Spark配置

      添加以下配置参数。

      spark.jars.packages              io.delta:delta-sharing-spark_2.12:3.1.0
      spark.sql.extensions             io.delta.sql.DeltaSparkSessionExtension,org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
      spark.sql.catalog.spark_catalog  org.apache.spark.sql.delta.catalog.DeltaCatalog
    • 创建Notebook任务

      在数据开发页面,创建类型为交互式开发的Notebook任务。并复制以下代码保存。

      -- 创建临时表
      -- 替换 凭证文件 地址和 share 数据集
      -- demo_share 是前面创建 共享 (Share) 的名称
      -- default.alitable  是前面共享的库表
      spark.sql("CREATE TEMPORARY TABLE dbc_delta_sharing USING deltaSharing LOCATION 'oss://your-bucket/path/to/credential.share#demo_share.default.alitable';")
      
      spark.sql("SELECT * FROM dbc_delta_sharing limit 10;").show()
    • 查看运行结果

      运行任务后,结果如下。image

    SQL任务

    在数据开发页面,创建类型为批任务的SQL任务。创建SQL任务,请参见批任务或流任务开发

    • 配置任务参数

      在任务配置页面,配置以下参数,其余参数默认。

      参数

      说明

      SQL文件

      提交任务时所需的文件。

      类型选择工作空间资源,在下拉列表中上传前面的SQL文件。

      引擎版本

      推荐使用最新版本。本文使用esr-4.6.0版本。

      网络连接

      选择已创建的网络连接。

      Spark配置

      添加以下配置参数。

      spark.jars.packages              io.delta:delta-sharing-spark_2.12:3.1.0
      spark.sql.extensions             io.delta.sql.DeltaSparkSessionExtension,org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
      spark.sql.catalog.spark_catalog  org.apache.spark.sql.delta.catalog.DeltaCatalog
    • 运行任务并查看结果

      • 单击运行提交任务。运行任务后,在下方的运行记录区域,单击任务操作列的日志探查,您可以查看相关的日志信息。image

      • 查询DLF数据。image

相关文档

更多Spark任务类型读取Databricks Delta Sharing的使用方法,请参考delta-sharing