0

我正在尝试学习如何使用服务帐户从 Python 调用 BigQuery API。我在这里关注文档。这个 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 文档和上面列出的文档中得出的。

这使:

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"

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

4

1 回答 1

2

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

运行查询最终变得非常简单。例子:

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())
于 2017-08-08T08:57:47.190 回答