[JAVA] SELECT des données à l'aide de la bibliothèque cliente avec BigQuery

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".

environnement

Environnement

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

Structure de la table

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 la méthode listTableData

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).

Utilisez la méthode de requête

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").

performance

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.

référence

Recommended Posts

SELECT des données à l'aide de la bibliothèque cliente avec BigQuery
Sélectionnez des fonctionnalités avec des données textuelles
Implémenter OAuth sans bibliothèque client (Java)
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Trier les tables BigQuery en fonction des données dans Dataflow
Définir la réponse de l'API client boto3 dans la classe de données
Lire des fichiers sur GCS à l'aide de la bibliothèque cliente Cloud Storage
Créer un bot de collecte de données en Python à l'aide de Selenium
Remarques sur les transactions dans la bibliothèque client Java dans la banque de données
Enregistrez collectivement des données dans Firestore à l'aide d'un fichier csv en Python
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Analyse des données à l'aide de xarray
Échantillonnage dans des données déséquilibrées
Nettoyage des données à l'aide de Python
Publication d'une bibliothèque qui masque les données de caractères dans les images Python
Gonfler des données textuelles par retranslation à l'aide de Google Traduction en Python
Prédiction des ondes sinusoïdales à l'aide de RNN dans la bibliothèque d'apprentissage en profondeur Keras
Sortie de données Excel en écriture séparée à l'aide de Python3 + xlrd + mecab
Essayez de créer un réseau de neurones en Python sans utiliser de bibliothèque
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Problèmes lors de l'utilisation d'Elasticsearch comme source de données dans Redash
Jouez avec l'API de données YouTube v3 à l'aide du client Python de l'API Google