我需要在运行时创建BigQuery Dataset并在运行时分配所需的角色。为此使用Python脚本。我在Google上搜索了有关如何在创建数据集后更新访问设置的帮助,并遇到solution以下内容:
entry = bigquery.AccessEntry(
role='READER',
entity_type='userByEmail',
entity_id='sample.bigquery.dev@gmail.com')
assert entry not in dataset.access_entries
entries = list(dataset.access_entries)
entries.append(entry)
dataset.access_entries = entries
dataset = client.update_dataset(dataset, ['access_entries']) # API request
assert entry in dataset.access_entries
我的要求是根据创建数据集的区域为数据集分配多个角色,如下所示:
"access": [
{"role": "OWNER","groupByEmail": "gcp.abc.bigquery-admin@xyz.com"},
{"role": "READER","groupByEmail": "gcp.def.bigdata@xyz.com"},
{"role": "READER","groupByEmail": "gcp.ghi.bigquery@xyz.com"}]
有人能建议最好的方法吗?我想将GroupByMail和Role作为键,值对存储为配置文件中的字典,并逐个读取和分配每个值。有没有其他最好的方法来完成它? 任何建议都会有所帮助。
答案 0 :(得分:0)
上述代码适用于在BQ数据集创建时为数据集分配访问控制,但更新访问权限并不理想:
如果' sample.bigquery.dev@gmail.com' 已经有 role =' OWNER ,请说并且运行上面的代码,您将拥有两个访问条目,一个具有OWNER角色,另一个具有READER角色。
要进行更新,您可能需要检查 entity_id 是否已存在。如果没有附加条目,否则覆盖条目。 (通过BQ UI可能更容易实现)
现在说,如果你必须分配多个角色,你可以有一个条目列表。
from google.cloud import bigquery
client = bigquery.Client()
dataset_id = 'test_dataset'
dataset_ref = client.dataset(dataset_id)
dataset = bigquery.Dataset(dataset_ref)
dataset.location = 'EU'
dataset = client.create_dataset(dataset)
entries_list = [bigquery.AccessEntry('OWNER','groupByEmail','gcp.abc.bigquery-admin@xyz.com'),
bigquery.AccessEntry('READER','groupByEmail', 'gcp.def.bigdata@xyz.com'),
bigquery.AccessEntry('READER','groupByEmail', 'gcp.ghi.bigquery@xyz.com')]
entries = list(dataset.access_entries)
entries.extend(entries_list)
dataset.access_entries = entries
dataset = client.update_dataset(dataset, ['access_entries']) # API request