我们有两个GCP项目project-a
和project-b
。我们希望在第一个项目中使用授权视图向第二个项目中的用户提供对一些外部表的访问权限。
以下是我们迄今为止所做的工作:
- 在
project-a
(私有数据集(中创建两个BigQuery表,作为GCS镶木地板文件的外部表 - 在项目
project-b
中创建一个数据集(公共数据集(,我们在其中创建了项目project-a
的外部表的授权视图
但是,如果我们允许项目project-b
中的用户查询公共视图,他们会收到此错误:
访问被拒绝:BigQuery BigQuery:在globbing文件模式时权限被拒绝。
我知道这意味着他们也应该对project-a
的GCS存储桶拥有读取权限,但我们不能在GCS中授予此权限。
有办法做到这一点吗?或者换一种方式?
AFAIK,您必须具有访问外部数据位置的权限才能访问数据(GCS、Google Sheet或外部数据所在的任何位置(。没有诀窍
现在可以使用BigLake表实现这一点。我们只需要在BigQuery中创建一个连接资源,然后使用它来定义一个外部表。用户现在只需要访问BigQuery表,无需在数据位置设置权限(此处为GCS(。
- 使用云外壳
bq
命令创建连接
bq mk --connection --location=REGION --project_id=PROJECT_ID
--connection_type=CLOUD_RESOURCE CONNECTION_ID
- 显示连接并获取关联的服务帐户
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
- 授予资源连接服务帐户访问云存储桶的权限
- 使用资源连接创建BigLake表:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
format ="TABLE_FORMAT",
uris = ['FILE_PATH']
);