Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

175
Vistas
Datos de selección de BigQuery basados en el índice de inicio y el último índice

Estoy usando el siguiente código para obtener los datos de BigQuery.

 public class BQTEST { public static void main(String... args) throws Exception { String datasetName = "mydataset"; String tableName = "mytable"; String projectId = "gcs"; String query = "SELECT id, " + "qtr, " + "sales, " + "year " + "FROM `gcs.mydataset.mytable` " + ; BigQuery bigquery = BigQueryOptions.newBuilder().setProjectId(projectId) .setCredentials( ServiceAccountCredentials.fromStream(new FileInputStream("20a3c78f8388.json")) ) .build().getService(); TableId tableId = TableId.of(projectId, datasetName, tableName); QueryJobConfiguration queryConfig = QueryJobConfiguration .newBuilder(query) .build(); try { bigquery.query(queryConfig); } catch (InterruptedException e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } TableResult results = bigquery.listTableData( tableId, BigQuery.TableDataListOption.pageSize(1), BigQuery.TableDataListOption.startIndex(5) ); for (FieldValueList row : results.iterateAll()) { System.out.printf( "ID: %s qtr: %s sales: %s year: %s\n", row.get(0).getValue(), row.get(1).getValue(), row.get(2).getValue(), row.get(3).getValue()); } } }

BigQuery.TableDataListOption.startIndex(5) : esto ayudará a leer datos del quinto índice, el índice comienza desde 0.

Pero quiero leer datos en fragmentos como los primeros 10 registros en un proceso, luego los siguientes 20 registros en otro proceso, etc.

Intentando leer datos de una tabla muy grande en un proceso paralelo. Es una tabla Truncar/Cargar. Así que no hay particiones ni rango de fechas para leer datos.

No puedo encontrar una manera de dar el valor LAST_INDEX en ninguno de los métodos de BigQuery.

¿Alguien podría ayudar con esto?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No hay un método LAST_INDEX que pueda usar para la paginación, como puede verificar en la documentación .

Acerca de su solicitud:

Quiero leer datos en fragmentos como los primeros 10 registros en un proceso, luego los siguientes 20 registros en otro proceso, etc.

Al usar python, puede usar algunos parámetros como max_results y start_index para realizarlo, pero en Java, la única forma será paginar su consulta y cambiarla para cada proceso. Entonces, para cada proceso en paralelo, tendrá una consulta diferente.

Entonces, cada proceso tendrá que:

  1. Ordene por algún campo (o por todos los campos) para garantizar que cada consulta devolverá los datos en el mismo orden
  2. Paginar usando limit y offset :

es decir:

 String query = "SELECT id, qtr, sales, year FROM `gcs.mydataset.mytable` " + "ORDER BY id, qtr, sales, year " + "LIMIT 10 " + "OFFSET " + String.valueOf(process_number * 10) ;

El proceso 0 tendrá líneas 0-9 (límite 10 desplazamiento 0);
El proceso 1 tendrá las líneas 10-19 (límite 10 compensación 10)

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda