Приведенный выше код подходит для назначения контроля доступа к набору данных во время создания набора данных BQ, но он не идеален для обновления доступа:
Допустим, если 'sample.bigquery.dev@gmail.com' уже имел role = 'OWNER , и вы запустите приведенный выше код, у вас будет две записи доступа, один с ролью ВЛАДЕЛЬЦА и один с ролью ЧИТАТЕЛЯ.
Чтобы обновить, вы, вероятно, захотите проверить, существует ли 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