Jac*_*aer 5 python google-bigquery google-api-python-client
我们正在为bq.py编写一个包装器,并且在结果集大于100k行时遇到了一些问题.似乎在过去这个工作正常(我们在Google BigQuery不完整查询回复奇怪尝试时遇到了相关问题).也许我不理解doc页面上解释的限制?
例如:
#!/bin/bash
for i in `seq 99999 100002`;
do
bq query -q --nouse_cache --max_rows 99999999 "SELECT id, FROM [publicdata:samples.wikipedia] LIMIT $i" > $i.txt
j=$(cat $i.txt | wc -l)
echo "Limit $i Returned $j Rows"
done
Run Code Online (Sandbox Code Playgroud)
收益率(注意有4行格式化):
Limit 99999 Returned 100003 Rows
Limit 100000 Returned 100004 Rows
Limit 100001 Returned 100004 Rows
Limit 100002 Returned 100004 Rows
Run Code Online (Sandbox Code Playgroud)
在我们的包装器中,我们直接访问API:
while row_count < total_rows:
data = client.apiclient.tabledata().list(maxResults=total_rows - row_count,
pageToken=page_token,
**table_dict).execute()
# If there are more results than will fit on a page,
# you will recieve a token for the next page
page_token = data.get('pageToken', None)
# How many rows are there across all pages?
total_rows = min(total_rows, int(data['totalRows'])) # Changed to use get(data[rows],0)
raw_page = data.get('rows', [])
Run Code Online (Sandbox Code Playgroud)
我们希望在这种情况下获得一个令牌,但不会返回任何令牌.
小智 1
抱歉,我花了一点时间才回复您。
我能够识别出服务器端存在的错误,您最终会在 Java 客户端以及 Python 客户端中看到这一点。我们计划在下周推出修复程序。一旦发生这种情况,您的客户就应该开始正确行事。
顺便说一句,我不确定您是否已经知道这一点,但是您也可以使用一个完整的独立 python 客户端从 python 访问 API。我认为这对您来说可能比作为 bq.py 的一部分分发的客户端更方便。您可以在此页面上找到它的链接: https://developers.google.com/bigquery/client-libraries
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |