bq.py Не результаты пейджинга

Мы работаем над написанием обертки для bq.py и имеем некоторые проблемы с наборами результатов размером более 100 тыс. Строк. Похоже, что в прошлом это отлично работало (у нас были проблемы с ответами на BigQuery Incomplete Query Replies on Odd Pempties ). Возможно, я не понимаю ограничения, указанные на странице документа ?

Например:

#!/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', []) 

В этом случае мы ожидаем получить токен, но никто не возвращается.

жаль, что мне потребовалось немного времени, чтобы вернуться к вам.

Я смог идентифицировать ошибку, которая существует на стороне сервера, вы бы увидели это с клиентом Java, а также с клиентом python. На следующей неделе мы планируем выпустить исправление. Ваш клиент должен начать вести себя правильно, как только это произойдет.

Кстати, я не уверен, знаете ли вы об этом уже или нет, но есть целый автономный клиент python, который вы можете использовать для доступа к API из python. Я думал, что это может быть немного более удобным для вас, чем клиент, который распространяется как часть bq.py. На этой странице вы найдете ссылку: https://developers.google.com/bigquery/client-libraries

Я могу воспроизвести поведение, которое вы видите, с помощью командной строки bq. Это похоже на ошибку, я посмотрю, что я могу сделать, чтобы исправить это.

Одна вещь, которую я заметил о данных, которые вы запрашивали, заключалась в том, что выбор только поля id и ограничение количества строк около 100 000. Это дает около 1 млн. Данных, поэтому сервер, скорее всего, не будет разбивать на страницы результаты. Выбор большего объема данных заставит сервер разбиваться на страницы, поскольку он не сможет вернуть все результаты в один ответ. Если вы сделали выбор * для 100 000 строк samples.wikipedia, вы получите ~ 50M назад, что должно быть достаточно, чтобы начать видеть, что происходит разбиение на страницы.

Вы видите слишком мало результатов, полученных от клиента python, или вы были удивлены тем, что no page_token не был возвращен для вашего запроса sample.wikipedia?