Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

174
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda