[英]Google Bigquery - Add a list of views to Share Dataset >> Autorized View using python scripting
[英]bigQuery Google Cloud how to share dataset with other users? using python
我在 Google Cloud 中使用我的 userA 帳戶定義了一個 bigQuery 數據集,並且我希望我的同事 userB(屬於同一組的成員)能夠查看我定義的數據集。 使用 bq 命令行界面,用戶 B 可以看到項目,但不能看到數據集。 如何使用 python 腳本與用戶 B 共享用戶 A 創建的數據集?
使用 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 客戶端以及get和patch方法。 首先,我們檢索現有的數據集 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_id
、 dataset_id
、 group_name
和role
變量。
使用的版本:
$ pip freeze | grep -E 'bigquery|api-python'
google-api-python-client==1.7.7
google-cloud-bigquery==1.8.1
您可能會遇到的另一件事是您必須在 BigQuery 中授予數據集級別的訪問權限。 根據您在雲平台和 BigQuery 中設置用戶角色的方式,您可能需要授予服務帳戶對 Bigquery 數據集的直接訪問權限。
為此,請進入 BigQuery,將鼠標懸停在您的數據集上並單擊向下箭頭,選擇“共享數據集”。 將打開一個模式,然后您可以在其中指定與哪些電子郵件地址和服務帳戶共享數據集並控制其訪問權限。
如果我的說明太混亂,請告訴我,我會上傳一些圖片來准確顯示如何執行此操作。
祝你好運!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.