You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何公开Apache Spark外部数据连接供外部用户调用BigQuery远程存储过程?

问题描述

我通过公开预览版的Apache Spark外部数据连接器,创建了一个由BigQuery远程存储过程调用的简单Python脚本:

print("Hello World!")

我使用以下SQL语句在名为public的BigQuery公共数据集中创建了远程存储过程:

CREATE OR REPLACE PROCEDURE
    `tumult-labs.public.helloworld`()
WITH CONNECTION `tumult-labs.us.bigspark` OPTIONS (engine='SPARK',
        main_file_uri='gs://analytics-procedures/helloworld.py')
    LANGUAGE python

调用语句:

CALL `tumult-labs.public.helloworld`()

该过程在组织内部可正常调用,日志能输出预期的Hello World!。但外部用户无法调用此远程存储过程:我已为外部私域Gmail账户开通连接器的公开预览权限,该用户可自行创建并运行上述脚本,但调用tumult-labs.public.helloworld时出现权限报错:

Access Denied: Connection projects/tumult-labs/locations/us/connections/bigspark: User does not have bigquery.connections.use permission for connection projects/tumult-labs/locations/us/connections/bigspark. at [1:1]

目前tumult-labs.public数据集已设置为allUsers权限,但无法将外部数据连接tumult-labs.us.bigspark设为公开。请问:

  • 是否可以配置为让用户使用自身的Apache Spark外部数据连接调用该存储过程?
  • 或者如何将现有连接设为公开?
解决方案

1. 让用户使用自身连接调用存储过程

BigQuery远程存储过程在创建时会绑定指定连接,无法直接让调用者替换为自身连接,但可以通过两种方式实现类似需求:

  • 提供存储过程创建模板:给外部用户提供你的存储过程创建语句模板,让他们替换其中的WITH CONNECTION参数为自己的Spark连接,自行创建可调用的存储过程。
  • 动态SQL拼接调用逻辑:创建一个接受连接名称作为参数的存储过程,通过动态SQL生成调用逻辑,但这种方式需要额外权限配置,且存在安全风险,需谨慎使用。

2. 现有连接公开的限制与替代方案

BigQuery外部数据连接不支持直接设置为公开(allUsers权限),因为连接关联了资源权限和身份验证信息,公开会带来安全风险。你可以通过以下方式授权外部用户访问:

  • 单独授予用户权限:在IAM中找到该连接资源(路径为projects/tumult-labs/locations/us/connections/bigspark),给目标外部用户添加BigQuery Connection User角色(包含bigquery.connections.use权限)。
  • 通过Google Groups批量授权:创建一个Google群组,将所有需要访问的外部用户加入群组,再给该群组授予BigQuery Connection User角色,减少逐个授权的工作量。

内容的提问来源于stack exchange,提问作者Peak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:25:40