Почему мы получаем, что у объекта «Клиент» нет атрибута «get_dataset» для Google BigQuery? - PullRequest
0 голосов
/ 19 мая 2018

Мы пытаемся установить привилегии для наших пользователей Google BigQuery.

Этот код работает при запуске в блокноте Jupyter, но не работает в движке приложений.

from google.cloud import bigquery
client = bigquery.Client.from_service_account_json(credentials, project=project)
dataset = client.get_dataset(client.dataset(dataset_name)) 

Код выдает эту ошибку:

У объекта «Клиент» нет атрибута «get_dataset»

Мы предположили, что это произошло из-за App Engineвозможно, используется более старая версия BigQuery, в которой этот метод отсутствует, но когда мы добавим следующую строку ...

print "Version: ", bigquery.__version__

..., будет показана версия 0,30, которая, как мы понимаем,он должен поддерживать метод get_dataset.

Чего нам не хватает?Что может быть причиной того, что наш объект 'Client' не имеет атрибута 'get_dataset' error?


Приложение: Методы, которые мы видим из каталога (клиент):

>  ['SCOPE', '_SET_PROJECT', '__class__', '__delattr__', '__dict__',
> '__doc__', '__format__', '__getattribute__', '__getstate__',
> '__hash__', '__init__', '__module__', '__new__', '__reduce__',
> '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
> '__subclasshook__', '__weakref__', '_connection', '_credentials',
> '_determine_default', '_http', '_http_internal', 'copy_table',
> 'dataset', 'extract_table_to_storage', 'from_service_account_json',
> 'job_from_resource', 'list_datasets', 'list_jobs', 'list_projects',
> 'load_table_from_storage', 'project', 'run_async_query',
> 'run_sync_query']

1 Ответ

0 голосов
/ 19 мая 2018

Библиотека ведет себя так, как если бы она была google-cloud-bigquery <= 0.27.0.Вы можете работать с более ранними библиотечными методами, например: </p>

v0.30.0:

from google.cloud import bigquery

client = bigquery.Client.from_service_account_json(credentials, project=project)

dataset = client.get_dataset(client.dataset(dataset_name))

entries = list(dataset.access_entries)
entry = bigquery.AccessEntry(
    role=role,
    entity_type=entity_type,
    entity_id=entity_id)
entries.append(entry)

dataset.access_entries = entries
dataset = client.update_dataset(dataset, ['access_entries'])

v0.27.0:

from google.cloud import bigquery

client = bigquery.Client.from_service_account_json(credentials, project=project)

dataset = client.dataset(dataset_name)
dataset.reload()

entries = list(dataset.access_grants)
entry = bigquery.AccessGrant(
    role=role,
    entity_type=entity_type,
    entity_id=entity_id)
entries.append(entry)

dataset.access_grants = entries
dataset.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...