我们正在编写bq.py的包装,并且在结果集大于100k行时遇到了一些问题。它似乎在过去这一直工作得很好(我们有与Google BigQuery Incomplete Query Replies on Odd Attempts相关的问题)。也许我不理解在doc page上解释的限制?bq.py不寻呼结果
例如:
#!/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
产量(注意有4行格式):
Limit 99999 Returned 100003 Rows
Limit 100000 Returned 100004 Rows
Limit 100001 Returned 100004 Rows
Limit 100002 Returned 100004 Rows
在我们的包装,我们直接访问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', [])
我们在这种情况下会期望得到一个令牌,但是没有返回。
感谢您的信息 - 我们期待着这一变化。我们知道API客户端,并且最初只是使用它。但是,我们遇到了很多问题,其中一些原因是API的变化,迫使我们考虑替代方案。 bq.py实现了我们需要的几乎所有功能,并且我尽可能地重用了经过测试的代码。此外,内置的身份验证流程代码比我能想到的要流畅得多:-) 请让我们知道更改何时生效。 –
嘿雅各布, 现在给它一个镜头,让我知道如果你仍然有问题。 – Eric
这是一个后端改变,还是我需要做一些不同的事情?我上面给出的演示脚本生成了相同的错误结果。同样,我们的代码包装仍然失败,类似的查询。 –