2017-02-24 5 views
1

Ich benutze die neue Google-Cloud-Bigquery und Google-Cloud-Storage-API. Ich möchte eine externe Tabelle abzufragen, die ich so erstellt:BigQuery Java-Client - Abfragen externer (föderierter) Tabellen?

ExternalTableDefinition etd = ExternalTableDefinition.newBuilder(bucketPath, schema, FormatOptions.csv()).build(); 
TableId tableID = TableId.of(dataset, targetTableName); 
TableInfo tableInfo = TableInfo.newBuilder(tableID, etd).build(); 

Jetzt möchte ich diese Tabelle abzufragen, aber es als einen vorübergehenden, einer zu haben, die QueryRequest mit:

QueryRequest queryRequest = QueryRequest.newBuilder("select * from table limit 10 ").setUseLegacySql(true).setDefaultDataset(dataset).build(); 
QueryResponse response = client.query(queryRequest); 

Aber es scheitert aufgrund einer Tabelle nicht, was sinnvoll ist. Ich versuche, etwas Ähnliches wie diese Befehlszeile zu tun:

bq query --project_id=<project ID> --external_table_definition=wikipedia::/tmp/wikipedia 'select name from wikipedia where name contains "Alex";' 

aber in Java.

Zusammengefasst: Wie erstelle ich und Abfrage eine externetemporären Tabelle durch Java-Client für große Abfrage?

Referenz von Dokumentation: https://cloud.google.com/bigquery/external-data-sources#temporary-tables

+0

Hat fin Sie eine Lösung, ich einen ähnlichen Anwendungsfall haben? – user1965449

+0

Gepostet als Antwort – Daniella

Antwort

1

als Referenz, hier ist die Art und Weise, es zu tun:

public static void main(String[] args) 
{ 

BigQuery bigquery = 
BigQueryOptions.getDefaultInstance().getService(); 


ExternalTableDefinition etd = 
ExternalTableDefinition.newBuilder("gs://", createSchema(), 
FormatOptions.csv()).build(); 

TableId tableId = TableId.of("testdataset", "mytablename"); 


bigquery.create(TableInfo.newBuilder(tableId, etd).build()); 


//Now query the table project.testdataset.mytablename 

} 
Verwandte Themen