Dans Google BigQuery, il existe deux façons d'obtenir des données à partir d'une table:
Dans cet article, je présenterai "Comment utiliser la bibliothèque cliente".
Consultez la rubrique Installation de la bibliothèque cliente BigQuery (https://cloud.google.com/bigquery/docs/reference/libraries?hl=ja). Depuis janvier 2018, la bibliothèque cliente java est uniquement en version bêta, nous l'utiliserons donc également dans cet article. La source de la bibliothèque cliente est publiée ci-dessous. https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-bigquery
Dans cet article, nous allons SELECT sur une table avec la configuration suivante.
COLUMN | TYPE | MODE |
---|---|---|
name | STRING | NULLABLE |
gender | STRING | NULLABLE |
count | INTEGER | NULLABLE |
Utilisez 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());
}
}
}
La méthode listTableData ne renvoie pas d'informations de schéma (noms de colonnes, etc.), mais uniquement des données. Par conséquent, lorsque vous avez besoin des données d'une colonne spécifique, vous devez y accéder par l'index de ligne comme row.get (0), row.get (1).
En plus de BigQuery # listTableData, vous pouvez également utiliser la requête BigQuery #.
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());
}
}
}
BigQuery vous permet d'écrire du SQL dans un format similaire à RDB. La référence de requête détaillée est Clause BigQuery SELECT. La méthode de requête renvoie également des informations de schéma (nom de colonne, etc.), de sorte que vous pouvez accéder par nom de colonne comme row.get ("columnName").
Bien qu'il s'agisse d'une mesure simple, il a fallu environ 4 à 5 secondes pour les requêtes BigQuery # listTableData et BigQuery # pour 33206 tables. Il semble qu'il n'y ait pas beaucoup de différence entre les deux.
c'est tout.
Recommended Posts