0

Grundsätzlich möchte ich Abfrageergebnisse aus BigQuery an eine vorhandene große Abfragetabelle anhängen, ohne über die Ergebnisse zu iterieren.
Bigquery Ergebnisse sind in List<TableRow>.
BigQuery insertAll() erfordert eine TableDataInsertAllRequest die .setRows() Methode hat aber diese Methode dauert nur List<TableDataInsertAllRequest.Rows> so muss ich die List<TableRow> iterieren aber da ich Ergebnisse mit vielen Zeilen ist dies ineffizient abfragt.

Also, wie konfiguriere ich eine Zieltabelle in der Abfrage?Anfügen großer Abfrageergebnisse an vorhandene Tabelle in Java Appengine

+0

aber Sie haben diese Ergebnisse bereits als Liste erhalten. in den Speicher geladen. Ich meine, welche Optimierung suchst du? Es ist kein Stream –

+0

Die Optimierung ist, dass ich nicht einmal die Zeilen in den Speicher laden muss, indem Sie eine Zieltabelle beim Abfragen von BigQuery setzen. Dies ist mit asynchronen Abfragen möglich. – bitlukas

+0

oh, ich verstehe. Ich suche nur nach Optimierungen für Tabelle append –

Antwort

1

Google-Unterstützung gab mir die Antwort. Durch die Verwendung einer asynchronen Abfrage kann die Zieltabelle wie folgt eingestellt werden.

JobConfigurationQuery queryConfig = new JobConfigurationQuery().setQuery(<querySql>); 
queryConfig.setDestinationTable(<destination_table>); 
queryConfig.setWriteDisposition("WRITE_APPEND"); 
Job job = new Job().setConfiguration(new JobConfiguration().setQuery(queryConfig)); 

bigquery.jobs().insert(projectId, job).execute(); 

Google-Unterstützung ist genial!

+0

sieht aus wie es genau ist, was ist in meiner Antwort: o) –

+0

Ja, aber diese Antwort ist vor allem für die bigquery Java-API-Wrapper;) – bitlukas