bq.py no paginando resultados

Estamos trabajando en escribir un contenedor para bq.py y estamos teniendo algunos problemas con los conjuntos de resultados mayores que 100k filas. Parece que en el pasado esto ha funcionado bien (tuvimos problemas relacionados con las respuestas de consultas incompletas de Google BigQuery en bashs impares ). ¿Quizás no entiendo los límites explicados en la página de documentos ?

Por ejemplo:

#!/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 

Rendimientos (note que hay 4 líneas de formato):

 Limit 99999 Returned 100003 Rows Limit 100000 Returned 100004 Rows Limit 100001 Returned 100004 Rows Limit 100002 Returned 100004 Rows 

En nuestra envoltura, accedemos directamente a la 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', []) 

Esperamos recibir una ficha en este caso, pero no se devuelve ninguna.

lo siento, me tomó un poco de tiempo para volver a ti.

Pude identificar un error que existe en el lado del servidor, terminaría viéndolo con el cliente de Java y con el cliente de Python. Estamos planeando hacer una corrección esta semana que viene. Su cliente debe comenzar a comportarse correctamente tan pronto como eso suceda.

Por cierto, no estoy seguro de si ya sabías esto o no, pero hay un cliente Python independiente que puedes usar para acceder a la API desde python también. Pensé que podría ser un poco más conveniente para usted que el cliente que se distribuye como parte de bq.py. Encontrará un enlace a él en esta página: https://developers.google.com/bigquery/client-libraries

Puedo reproducir el comportamiento que estás viendo con la línea de comandos de bq. Eso parece un error, veré qué puedo hacer para solucionarlo.

Una cosa que noté acerca de los datos que estaba consultando fue que seleccionando solo el campo de identificación y limitando el número de filas alrededor de 100,000. Esto produce aproximadamente el valor de ~ 1M de datos, por lo que el servidor probablemente no pagine los resultados. La selección de una mayor cantidad de datos forzará la paginación del servidor, ya que no podrá devolver todos los resultados en una sola respuesta. Si hiciera una selección * por 100,000 filas de samples.wikipedia estaría recuperando ~ 50M, lo que debería ser suficiente para comenzar a ver cómo ocurre una paginación.

¿Está viendo muy pocos resultados del cliente de Python o se sorprendió de que no se haya devuelto page_token para su consulta de samples.wikipedia?