如何使用 bigquery 服务对象

How to use the bigquery service object

我正在尝试学习如何使用服务帐户从 Python 调用 BigQuery API。我正在关注 docs here。这个 URL 实际上有一个书签靠近我卡住的位置。我已经到了这一行:

bigquery = build('bigquery', 'v2', http=http_auth)

并且缺少错误消息和属性列表似乎表明它已经起作用,但我不知道如何处理它。我已经阅读了我应该用它做什么,但我的尝试是错误的,我找不到相关的文档来解除自己的封锁。或者我找到了正确的文档,但不知道如何处理它。

通过扫描 GQB 文档,这是我尝试过的方法:

sql ="""
#standardSQL
SELECT corpus AS title, COUNT(*) AS unique_words
FROM `publicdata.samples.shakespeare`
GROUP BY title
ORDER BY unique_words DESC
LIMIT 10
"""

collection = bigquery.jobs()
request = collection.query(
    kind="bigquery#queryRequest",
    query=sql,
    useQueryCache=True,
    useLegacySql=False
)

response = request.execute()

这是我从 GBQ API documentation 和上面列出的文档中得出的。

给出:

Traceback (most recent call last):
  File "/Users/.../gbq.py", line 37, in <module>
    useLegacySql=False
  File "/anaconda/lib/python3.6/site-packages/googleapiclient/discovery.py", line 717, in method
    raise TypeError('Got an unexpected keyword argument "%s"' % name)
TypeError: Got an unexpected keyword argument "kind"

好吧,这显然是错误的。我怀疑如果我在消费 APIs 方面更有经验,这将是显而易见的,但我似乎无法将其带回家。请有人指出我正确的方向,是否有我错过的指南?

我建议您使用 BigQuery 的官方 Python API Client,因为它已经为您自动处理所有这些连接和设置。

运行 一个查询最终变得非常简单。示例:

import uuid
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/your/jsonscrets.json'

from google.cloud.bigquery import Client
bqc = Client()

sql ="""
#standardSQL
SELECT corpus AS title, COUNT(*) AS unique_words
FROM `publicdata.samples.shakespeare`
GROUP BY title
ORDER BY unique_words DESC
LIMIT 10
"""

job = bqc.run_async_query(str(uuid.uuid4()), sql)
job.use_legacy_sql = False
job.begin()

job_result = job.result()
data = list(job_result.fetch_data())