In Google BigQuery gibt es zwei Möglichkeiten, Daten aus einer Tabelle abzurufen:
In diesem Artikel werde ich "So verwenden Sie die Client-Bibliothek" vorstellen.
Siehe Installieren der BigQuery-Clientbibliothek (https://cloud.google.com/bigquery/docs/reference/libraries?hl=ja). Ab Januar 2018 befindet sich die Java-Client-Bibliothek nur noch in der Beta-Version, daher werden wir diese auch in diesem Artikel verwenden. Die Quelle der Clientbibliothek wird unten veröffentlicht. https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-bigquery
In diesem Artikel wählen wir eine Tabelle mit der folgenden Konfiguration aus.
COLUMN | TYPE | MODE |
---|---|---|
name | STRING | NULLABLE |
gender | STRING | NULLABLE |
count | INTEGER | NULLABLE |
Verwenden Sie BigQuery # listTableData.
BigQuerySelectSample.java
package bigquery.sample;
import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FieldValueList;
public class BigQuerySelectSample {
private static final String DATASET_NAME = "dev1";
private static final String TABLE_NAME = "names_2014";
private static final int NAME_COLUMN = 0;
private static final int GENDER_COLUMN = 1;
public static void main(String[] args) {
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// use listTableData method
Page<FieldValueList> tableData = bigquery.listTableData(DATASET_NAME, TABLE_NAME);
for (FieldValueList row : tableData.iterateAll()) {
System.out.println(row.get(NAME_COLUMN).getValue() + " " + row.get(GENDER_COLUMN).getValue());
}
}
}
Die listTableData-Methode gibt keine Schemainformationen (Spaltennamen usw.) zurück, sondern nur Daten. Wenn Sie also die Daten einer bestimmten Spalte benötigen, müssen Sie über den Zeilenindex wie row.get (0), row.get (1) darauf zugreifen.
Zusätzlich zu BigQuery # listTableData können Sie auch die BigQuery # -Abfrage verwenden.
BigQuerySelectSample.java
package bigquery.sample;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FieldValueList;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryResponse;
public class BigQuerySelectSample {
private static final String DATASET_NAME = "dev1";
private static final String TABLE_NAME = "names_2014";
public static void main(String[] args) throws InterruptedException {
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// use query method
String query = "SELECT name, gender FROM `" + DATASET_NAME + "." + TABLE_NAME + "` WHERE name = 'Ryder'";
QueryJobConfiguration queryConfig = QueryJobConfiguration.of(query);
QueryResponse response = bigquery.query(queryConfig);
for (FieldValueList row : response.getResult().iterateAll()) {
System.out.println(row.get("name").getValue() + " " + row.get("gender").getValue());
}
}
}
Mit BigQuery können Sie SQL in einem ähnlichen Format wie RDB schreiben. Die detaillierte Abfragereferenz lautet BigQuery SELECT-Klausel. Die Abfragemethode gibt auch Schemainformationen (Spaltenname usw.) zurück, sodass Sie über einen Spaltennamen wie row.get ("columnName") darauf zugreifen können.
Obwohl es sich um eine einfache Messung handelt, dauerte die Abfrage von BigQuery # listTableData und BigQuery # für 33206-Tabellen etwa 4 bis 5 Sekunden. Es scheint, dass es keinen großen Unterschied zwischen den beiden gibt.
das ist alles.
Recommended Posts