Мы работаем над написанием обертки для bq.py и имеем некоторые проблемы с наборами результатов размером более 100 тыс. Строк. Похоже, в прошлом это отлично работало (у нас были проблемы с Google BigQuery Incomplete Query Replies on Odd Attempts). Возможно, я не понимаю ограничения, объясненные на doc page?bq.py Not Paging Results
Например:
#!/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 реализует почти все необходимые нам функции, и я очень люблю повторное использование проверенного кода, когда это возможно.Кроме того, встроенный код потока аутентификации намного более плавный, чем то, что я мог бы придумать :-) Пожалуйста, сообщите нам, когда изменения будут вживую. –
Hey Jacob, Сделайте снимок прямо сейчас и сообщите мне, если у вас все еще есть проблема. – Eric
Было ли это фоновым изменением, или мне нужно сделать что-то другое? Демонстрационный сценарий, который я дал выше, генерирует те же неправильные результаты. Аналогично, наша оболочка вокруг кода все еще не работает для подобных запросов. –