如何使用 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())
我正在尝试学习如何使用服务帐户从 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())