首页 > 解决方案 > bigQuery Google Cloud 如何与其他用户共享数据集?使用蟒蛇

问题描述

我在 Google Cloud 中使用我的 userA 帐户定义了一个 bigQuery 数据集,我希望我的同事 userB(他是同一组的成员)能够看到我定义的数据集。使用 bq 命令行界面,用户 B 可以看到项目,但看不到数据集。如何使用 python 脚本与 userB 共享 userA 创建的数据集?

标签: pythongoogle-bigquery

解决方案


使用 Python 客户端库的示例。改编自此处,但添加了一个get_dataset调用以获取现有数据集的当前 ACL 策略:

from google.cloud import bigquery

project_id = "PROJECT_ID"
dataset_id = "DATASET_NAME"
group_name= "google-group-name@google.com"
role = "READER"

client = bigquery.Client(project=project_id)

dataset_info = client.get_dataset(client.dataset(dataset_id))

access_entries = dataset_info.access_entries
access_entries.append(
        bigquery.AccessEntry(role, "groupByEmail", group_name)
)

dataset_info.access_entries = access_entries
dataset_info = client.update_dataset(
    dataset_info, ['access_entries']) 

另一种方法是使用 Google Python API 客户端以及getpatch方法。首先,我们检索现有的数据集 ACL,将组添加READER到响应中并修补数据集元数据:

from oauth2client.client import GoogleCredentials
from googleapiclient import discovery

project_id="PROJECT_ID"
dataset_id="DATASET_NAME"
group_name="google-group-name@google.com"
role="READER"    

credentials = GoogleCredentials.get_application_default()
bq = discovery.build("bigquery", "v2", credentials=credentials)

response = bq.datasets().get(projectId=project_id, datasetId=dataset_id).execute()
response['access'].append({u'role': u'{}'.format(role), u'groupByEmail': u'{}'.format(group_name)})

bq.datasets().patch(projectId=project_id, datasetId=dataset_id, body=response).execute()

相应地替换project_iddataset_id和变量。group_namerole

使用的版本:

$ pip freeze | grep -E 'bigquery|api-python'
google-api-python-client==1.7.7
google-cloud-bigquery==1.8.1

推荐阅读