Google Bigquery json API, pageToken не действует

Я пытаюсь реализовать JSON api (v2) bigquery. В моем коде я получаю то же поведение, что и на странице документации для tabledata-list

Мой размер таблицы составляет около 11 000 строк. На странице документации я заполняю следующие параметры:

  • ProjectId = X
  • DatasetId = Y
  • TableId = Z
  • MaxResults = 10000 # Я хочу разбивать свои результаты

Это возвращает 10.000 строк и pageToken. Поэтому я делаю тот же запрос, и теперь я устанавливаю токен страницы, чтобы получить следующую страницу результатов.

И это возвращает те же самые 10.000 строк, что и раньше. Я ожидал, что это сделает разбивку на страницы, как описано на этой странице:

Все методы collect.list возвращают результаты с разбивкой по страницам при определенных обстоятельствах. Количество результатов на страницу контролируется свойством maxResults

Страница - это подмножество общего количества строк. Если ваши результаты состоят более чем на одной странице данных, данные результата будут иметь свойство nextPageToken. Чтобы получить следующую страницу результатов, выполните другой вызов списка и включите значение токена в качестве параметра URL с именем pageToken.

Где я ошибаюсь?

РЕДАКТИРОВАТЬ:

Мой коллега указал мне, что на других страницах документации результат содержит nextPageToken за исключением того, что ответ содержит pageToken. Разница заключается в том, что где pageToken ссылается на текущую страницу, nextPageToken ссылается на следующую страницу.

Однако в документации указано, что он должен вернуть nextPageToken (за исключением случаев, когда данных больше нет). Но len(table) > len(result)

2 ответа

На той же странице было упомянуто, что существует разница для TableData.List()

Метод bigquery.tabledata.list, который используется для просмотра данных таблицы, использует значение смещения строки или токен страницы.

Поэтому для TableData.List() вы должны использовать значение смещения строки для TableData.List() на страницы, а для доступа к предыдущим страницам вы можете использовать свои хэши из своей сессии. Это построено потому, что с большими объемами и большими данными вы не можете предварительно кэшировать следующий набор данных из своего рабочего пула.

Вы можете помочь улучшить документацию, используя ссылку в правом верхнем углу каждой страницы, на которой написано: Feedback on this document позволяет использовать это для улучшения.

Также вы можете отправлять вопросы на https://code.google.com/p/google-bigquery/issues/list


К сожалению, поле, возвращаемое для TableData.List(), которое содержит логический "токен следующей страницы", буквально называется "pageToken", а не "nextPageToken".

Другие API, такие как Datasets.List(), возвращают поле, буквально называемое "nextPageToken", которое содержит логический "токен следующей страницы".

Это случай непоследовательного наименования, но, надеюсь, это помогает устранить некоторую путаницу.

licensed under cc by-sa 3.0 with attribution.