我們正在編寫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
這是一個後端改變,還是我需要做一些不同的事情?我上面給出的演示腳本生成了相同的錯誤結果。同樣,我們的代碼包裝仍然失敗,類似的查詢。 –