Python 如何使用bigquery服务对象

Python 如何使用bigquery服务对象,python,google-api,google-bigquery,google-cloud-platform,google-apis-explorer,Python,Google Api,Google Bigquery,Google Cloud Platform,Google Apis Explorer,我试图学习如何使用服务帐户从Python调用BigQueryAPI。我在跟踪调查。这个URL实际上有一个书签,就在我卡住的地方。我得说这句话: bigquery = build('bigquery', 'v2', http=http_auth) 而且缺少错误消息和属性列表似乎表明它已经工作了,但我一直在思考如何处理它。我已经阅读了我应该用它做什么,但是我的尝试是错误的,我找不到相关的文档来解锁我自己。或者我找到了合适的医生,但不知道该怎么办 通过扫描GQB文档,我尝试了以下内容: sql ="

我试图学习如何使用服务帐户从Python调用BigQueryAPI。我在跟踪调查。这个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()
这是我从和上面列出的文档中得到的

其中:

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"
回溯(最近一次呼叫最后一次):
文件“/Users/../gbq.py”,第37行,在
useLegacySql=False
文件“/anaconda/lib/python3.6/site packages/googleapiclient/discovery.py”,第717行,在方法中
raise TypeError('获得意外的关键字参数“%s”%name)
TypeError:获取了意外的关键字参数“kind”

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

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

运行查询结果非常简单。例如:

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

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

运行查询结果非常简单。例如:

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

但该错误表明您正在执行
collection.query(..sql=sql…
),而不是代码中显示的
query=sql
。感谢您指出@DanielRoseman-我已经尝试了一些方法。我将进行编辑以使其一致。但该错误表明您正在执行
收集。查询(…sql=sql…
),而不是代码中所示的
query=sql
。感谢您指出@DanielRoseman-我已经尝试了一些方法。我将进行编辑,使其一致。精彩-正是我所寻找的,更简单。非常感谢!太棒了——正是我想要的,而且简单多了。非常感谢!