【问题标题】:Why are we getting a 'Client' object has no attribute 'get_dataset' for Google BigQuery?为什么我们得到的“客户端”对象没有 Google BigQuery 的“get_dataset”属性?
【发布时间】:2018-10-29 09:36:31
【问题描述】:

我们正在尝试为我们的 Google BigQuery 用户设置权限。

此代码在 Jupyter 笔记本中运行时有效,但未在 App 引擎中运行。

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 方法。

我们缺少什么?什么可能导致我们的“客户端”对象没有属性“get_dataset”错误?


附录:我们从 dir(client) 看到的方法是:

>  ['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']

【问题讨论】:

  • 它实际上有哪些方法?您可以使用dir(client) 来查看它们。
  • 如果你打印client.dataset(dataset_name),它是什么?我想知道你是否已经有了数据集信息,所以你不需要打电话给client.get_dataset这样的东西。

标签: python-2.7 google-app-engine google-bigquery


【解决方案1】:

库的行为就像是 google-cloud-bigquery

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2019-09-29
    • 2021-03-29
    • 2017-11-21
    • 2020-04-08
    相关资源
    最近更新 更多