2

Je souhaite télécharger des données de Google Cloud Storage vers BigQuery, mais je ne trouve aucun exemple de code Java décrivant comment procéder. Est-ce que quelqu'un pourrait me donner un indice sur la façon de faire cela? Ce que je veux réellement faire est de transférer des données des tables de Google App Engine à BigQuery (et de les synchroniser quotidiennement), afin que je puisse faire une analyse. J'utilise le service Google Cloud Storage dans Google App Engine pour écrire de (nouveaux) enregistrements dans Google Cloud Storage. La seule partie manquante consiste à ajouter les données aux tables dans BigQuery (ou à créer une nouvelle table pour la première écriture). Certes, je peux télécharger/ajouter manuellement les données en utilisant l'outil de navigateur BigQuery, mais je voudrais qu'il soit automatique, sinon je dois le faire manuellement tous les jours.Charger des données de Google Cloud Storage vers BigQuery en utilisant Java

Répondre

4

Je ne connais pas d'exemples Java pour le chargement de tables de Google Cloud Storage dans BigQuery. Cela dit, si vous suivez les instructions pour l'exécution des travaux de requête here, vous pouvez exécuter un travail de charge à la place avec le folowing:

Job job = new Job(); 
JobConfiguration config = new JobConfiguration(); 
JobConfigurationLoad loadConfig = new JobConfigurationLoad(); 
config.setLoad(loadConfig); 

job.setConfiguration(config); 

// Set where you are importing from (i.e. the Google Cloud Storage paths). 
List<String> sources = new ArrayList<String>(); 
sources.add("gs://bucket/csv_to_load.csv"); 
loadConfig.setSourceUris(sources); 

// Describe the resulting table you are importing to: 
TableReference tableRef = new TableReference(); 
tableRef.setDatasetId("myDataset"); 
tableRef.setTableId("myTable"); 
tableRef.setProjectId(projectId); 
loadConfig.setDestinationTable(tableRef); 

List<TableFieldSchema> fields = new ArrayList<TableFieldSchema>(); 
TableFieldSchema fieldFoo = new TableFieldSchema(); 
fieldFoo.setName("foo"); 
fieldFoo.setType("string"); 
TableFieldSchema fieldBar = new TableFieldSchema(); 
fieldBar.setName("bar"); 
fieldBar.setType("integer"); 
fields.add(fieldFoo); 
fields.add(fieldBar); 
TableSchema schema = new TableSchema(); 
schema.setFields(fields); 
loadConfig.setSchema(schema); 

// Also set custom delimiter or header rows to skip here.... 
// [not shown]. 

Insert insert = bigquery.jobs().insert(projectId, job); 
insert.setProjectId(projectId); 
JobReference jobRef = insert.execute().getJobReference(); 

// ... see rest of codelab for waiting for job to complete. 

Pour plus d'informations sur l'objet de configuration de charge, voir la javadoc here.

+1

Merci beaucoup pour votre code. Je l'ai essayé et ça a très bien marché. Pour que cet extrait soit utile à plus de gens, il y a quelques fautes d'orthographe mineures, et ce sera formidable si vous pouviez le réviser un peu. 1. Ligne 3 "JobConfigurationQLoad" devrait être "JobConfigurationLoad"; 2. Jobs.insert() fonction nécessite deux paramètres et le premier paramètre est une chaîne (même si cela n'a pas d'importance ce que vous mettez là); 3. Dans la dernière ligne de code, je pense que vous voulez dire "JobReference jobRef" au lieu de "jobId". Merci encore! –

+0

Le code a été mis à jour avec les modifications que vous avez suggérées. Merci pour les commentaires. –

Questions connexes