Écrire des résultats de requête

Ce document explique comment écrire ou enregistrer des résultats de requête.

Tables temporaires et permanentes

BigQuery enregistre tous les résultats de requête dans une table, qui peut être permanente ou temporaire :

  • Une table temporaire est une table nommée de manière aléatoire et enregistrée dans un ensemble de données spécial. Les tables temporaires sont utilisées pour mettre en cache des résultats de requête. Elles ont une durée de vie d'environ 24 heures. Les tables temporaires ne peuvent pas être partagées ni consultées à l'aide des méthodes "list" standards ou des autres méthodes de manipulation des tables. Le stockage de tables temporaires n'est pas facturé.

  • Une table permanente peut être une table nouvelle ou existante dans un ensemble de données auquel vous avez accès. Si vous écrivez des résultats de requête dans une nouvelle table, le stockage des données vous est facturé. Lorsque vous écrivez des résultats de requête dans une table permanente, les tables que vous interrogez doivent se trouver dans le même emplacement que l'ensemble de données qui contient la table de destination.

Autorisations requises

Pour écrire les résultats d'une requête dans une table, vous devez au minimum disposer des autorisations suivantes :

  • bigquery.tables.create pour créer une table
  • bigquery.tables.updateData pour écrire des données dans une nouvelle table, écraser une table ou ajouter des données à une table
  • bigquery.jobs.create pour exécuter une tâche de requête

Des autorisations supplémentaires, par exemple bigquery.tables.getData, peuvent être nécessaires pour accéder aux données que vous interrogez.

Les rôles Cloud IAM prédéfinis suivants incluent les autorisations bigquery.tables.create et bigquery.tables.updateData :

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Les rôles Cloud IAM prédéfinis suivants incluent les autorisations bigquery.jobs.create :

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

En outre, si un utilisateur possède les autorisations bigquery.datasets.create, il obtient également un accès bigquery.dataOwner à l'ensemble de données qu'il crée. L'accès correspondant au rôle bigquery.dataOwner donne à l'utilisateur la possibilité de créer et de mettre à jour des tables dans l'ensemble de données.

Pour en savoir plus sur les rôles et les autorisations Cloud IAM dans BigQuery, consultez la page Rôles et autorisations prédéfinis.

Écrire des résultats de requête dans une table permanente

Lorsque vous écrivez des résultats de requête dans une table permanente, vous pouvez créer une table, ajouter les résultats à une table existante ou remplacer une table existante. Vous pouvez écrire des résultats de requête dans une table permanente de plusieurs façons :

  • En utilisant Cloud Console ou l'UI Web classique de BigQuery
  • En utilisant la commande bq query de l'outil de ligne de commande
  • En appelant la méthode d'API jobs.insert et en configurant une tâche query
  • En utilisant les bibliothèques clientes

Écrire des résultats de requête

Pour écrire des résultats de requête dans une table permanente :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.

    Accéder à Cloud Console

  2. Dans la section Ressources du panneau de navigation, développez votre projet et sélectionnez un ensemble de données.

  3. Si l'éditeur de requête est masqué, cliquez sur Afficher l'éditeur en haut à droite de la fenêtre.

  4. Saisissez une requête SQL valide dans la zone de texte de l'éditeur de requête.

  5. Sous l'éditeur, cliquez sur More (Plus) et sélectionnez Query settings (Paramètres de requête).

    Paramètres de requête

  6. Cochez la case Set a destination table for query results (Définir une table de destination pour les résultats de la requête).

    Définir la destination

  7. Dans la section Destination, sélectionnez le nom du projet et le nom de l'ensemble de données où la table doit être créée, puis choisissez le nom de la table.

  8. Dans la section Préférence d'écriture pour la table de destination, choisissez l'une des options suivantes :

    • Écrire si la table est vide : n'écrit les résultats de requête dans la table que si celle-ci est vide.
    • Ajouter à la table : ajoute les résultats de requête à une table existante.
    • Écraser la table : écrase une table existante portant le même nom à l'aide des résultats de requête.
  9. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Sélection automatique et choisissez votre emplacement.

  10. Cliquez sur Exécuter la requête. Cette action crée une tâche de requête qui écrit les résultats dans la table spécifiée.

Si vous oubliez de spécifier une table de destination avant d'exécuter la requête, vous pouvez également copier la table de résultats mise en cache dans une table permanente en cliquant sur le bouton Enregistrer les résultats situé sous l'éditeur.

LDD

Les instructions LDD (langage de définition de données) vous permettent de créer et modifier des tables à l'aide de la syntaxe de requête SQL standard.

Pour plus d'informations, consultez la section Instruction CREATE TABLE et l'exemple d'utilisation de l'instruction CREATE TABLE présenté dans la section Créer une table à partir d'une table existante.

UI classique

  1. Accédez à l'UI Web classique de BigQuery.
    Accéder à l'UI Web classique de BigQuery

  2. Cliquez sur le bouton Saisir une requête.

  3. Saisissez une requête SQL valide dans la zone de texte Nouvelle requête.

  4. Cliquez sur Afficher les options.

  5. Dans la section Table de destination, cliquez sur Sélectionner une table.

  6. Dans la boîte de dialogue Sélectionner une table de destination :

    1. Dans le champ Projet, choisissez un projet où stocker l'ensemble de données et la table.

    2. Dans le champ Ensemble de données, choisissez l'ensemble de données où stocker la table.

    3. Dans le champ ID de la table, saisissez un nom de table. Le nom doit être unique dans l'ensemble de données de destination. Le nom de la table doit comporter un maximum de 1 024 caractères et ne peut contenir que des lettres (a à z, A à Z), des chiffres (0 à 9) ou des traits de soulignement (_).

    4. Cliquez sur OK.

  7. Dans la section Table de destination, pour Préférence d'écriture, sélectionnez l'une des options suivantes :

    • Écrire si la table est vide : n'écrit les résultats de requête dans la table que si celle-ci est vide.
    • Ajouter à la table : ajoute les résultats de requête à une table existante.
    • Écraser la table : écrase une table existante portant le même nom à l'aide des résultats de requête.
  8. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Non spécifié et sélectionnez l'emplacement de vos données.

  9. Cliquez sur Exécuter la requête. Cette action crée une tâche de requête qui écrit les résultats dans la table spécifiée.

Si vous oubliez de spécifier une table de destination avant d'exécuter la requête, vous pouvez copier la table temporaire dans une table permanente. Pour ce faire, cliquez sur le bouton Enregistrer en tant que table dans la fenêtre des résultats.

CLI

Saisissez la commande bq query en spécifiant l'option --destination_table pour créer une table permanente basée sur les résultats de la requête. Spécifiez l'option use_legacy_sql=false pour utiliser la syntaxe SQL standard. Pour écrire les résultats de la requête dans une table qui ne se trouve pas dans votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant : project_id:dataset.

(Facultatif) Spécifiez l'option --location et définissez la valeur correspondant à votre emplacement.

Pour contrôler la disposition en écriture d'une table de destination existante, fournissez l'une des options facultatives suivantes :

  • --append_table : si la table de destination existe, les résultats de requête y sont ajoutés.
  • --replace : si la table de destination existe, elle est remplacée par les résultats de requête.
    bq --location=location query \
    --destination_table project_id:dataset.table \
    --use_legacy_sql=false 'query'
    

Où :

  • location est le nom de l'emplacement utilisé pour traiter la requête. L'option --location est facultative. Par exemple, si vous utilisez BigQuery dans la région de Tokyo, vous pouvez définir la valeur de cette option sur asia-northeast1. Vous pouvez spécifier une valeur par défaut pour l'emplacement à l'aide du fichier .bigqueryrc ;
  • project_id est l'ID du projet ;
  • dataset est le nom de l'ensemble de données contenant la table dans laquelle vous écrivez les résultats de requête ;
  • table est le nom de la table dans laquelle vous écrivez les résultats de requête ;
  • query est une requête en syntaxe SQL standard.

Si aucune option de disposition en écriture n'est spécifiée, le comportement par défaut consiste à écrire les résultats dans la table uniquement si elle est vide. Si la table existe et qu'elle n'est pas vide, l'erreur suivante est renvoyée : `BigQuery error in query operation: Error processing job project_id:bqjob_123abc456789_00000e1234f_1': Already Exists: Table project_id:dataset.table.

Exemples :

Saisissez la commande suivante pour écrire les résultats de la requête dans une table de destination nommée mytable au sein de l'ensemble de données mydataset. L'ensemble de données se trouve dans votre projet par défaut. Comme aucune option de disposition en écriture n'est spécifiée dans la commande, la table doit être nouvelle ou vide. Dans le cas contraire, une erreur Already exists est renvoyée. La requête extrait les données de l'ensemble de données public Données sur les noms aux États-Unis.

    bq query \
    --destination_table mydataset.mytable \
    --use_legacy_sql=false \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data`.usa_names.usa_1910_current
    WHERE
      gender = "M"
    ORDER BY
      number DESC'
    

Saisissez la commande suivante pour que les résultats de requête écrasent une table de destination nommée mytable se trouvant dans l'ensemble de données mydataset. L'ensemble de données se trouve dans votre projet par défaut. La commande utilise l'option --replace pour écraser la table de destination.

    bq query \
    --destination_table mydataset.mytable \
    --replace \
    --use_legacy_sql=false \
    'SELECT
       name,
       number
     FROM
       `bigquery-public-data`.usa_names.usa_1910_current
     WHERE
       gender = "M"
     ORDER BY
       number DESC'
     

Saisissez la commande suivante pour ajouter les résultats de requête à une table de destination nommée mytable au sein de l'ensemble de données mydataset. L'ensemble de données se trouve dans my-other-project, et non dans votre projet par défaut. La commande utilise l'option --append_table pour ajouter les résultats de requête à la table de destination.

    bq query \
    --append_table \
    --use_legacy_sql=false \
    --destination_table my-other-project:mydataset.mytable \
    'SELECT
       name,
       number
     FROM
       `bigquery-public-data`.usa_names.usa_1910_current
     WHERE
       gender = "M"
     ORDER BY
       number DESC'
     

Le résultat de chacun de ces exemples ressemble à ce qui suit. Pour des raisons de lisibilité, certains résultats sont tronqués.

    Waiting on bqjob_r123abc456_000001234567_1 ... (2s) Current status: DONE
    +---------+--------+
    |  name   | number |
    +---------+--------+
    | Robert  |  10021 |
    | John    |   9636 |
    | Robert  |   9297 |
    | ...              |
    +---------+--------+
    

API

Pour enregistrer les résultats de requête dans une table permanente, appelez la méthode jobs.insert, configurez une tâche query et ajoutez une valeur pour la propriété destinationTable. Pour contrôler la disposition en écriture d'une table de destination existante, configurez la propriété writeDisposition.

Pour contrôler l'emplacement de traitement de la tâche de requête, spécifiez la propriété location dans la section jobReference de la ressource de tâche.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Go.

import (
    	"context"
    	"fmt"
    	"io"

    	"cloud.google.com/go/bigquery"
    	"google.golang.org/api/iterator"
    )

    // queryWithDestination demonstrates saving the results of a query to a specific table by setting the destination
    // via the API properties.
    func queryWithDestination(w io.Writer, projectID, destDatasetID, destTableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()

    	q := client.Query("SELECT 17 as my_col")
    	q.Location = "US" // Location must match the dataset(s) referenced in query.
    	q.QueryConfig.Dst = client.Dataset(destDatasetID).Table(destTableID)
    	// Run the query and print results when the query job is completed.
    	job, err := q.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); err != nil {
    		return err
    	}
    	it, err := job.Read(ctx)
    	for {
    		var row []bigquery.Value
    		err := it.Next(&row)
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return err
    		}
    		fmt.Fprintln(w, row)
    	}
    	return nil
    }
    

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Java.

Pour enregistrer des résultats de requête dans une table permanente, définissez la table de destination sur l'identifiant TableId souhaité dans une configuration QueryJobConfiguration.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    // String destinationDataset = 'my_destination_dataset';
    // String destinationTable = 'my_destination_table';
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    QueryJobConfiguration queryConfig =
        // Note that setUseLegacySql is set to false by default
        QueryJobConfiguration.newBuilder(query)
            // Save the results of the query to a permanent table.
            .setDestinationTable(TableId.of(destinationDataset, destinationTable))
            .build();

    // Print the results.
    for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
      for (FieldValue val : row) {
        System.out.printf("%s,", val.toString());
      }
      System.out.printf("\n");
    }

Node.js

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Node.js décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Node.js.

// Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();

    async function queryDestinationTable() {
      // Queries the U.S. given names dataset for the state of Texas
      // and saves results to permanent table.

      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = 'my_dataset';
      // const tableId = 'my_table';

      // Create destination table reference
      const dataset = bigquery.dataset(datasetId);
      const destinationTable = dataset.table(tableId);

      const query = `SELECT name
        FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
        WHERE state = 'TX'
        LIMIT 100`;

      // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
      const options = {
        query: query,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        destination: destinationTable,
      };

      // Run the query as a job
      const [job] = await bigquery.createQueryJob(options);

      console.log(`Job ${job.id} started.`);
      console.log(`Query results loaded to table ${destinationTable.id}`);
    }

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

Pour enregistrer des résultats de requête dans une table permanente, créez une configuration QueryJobConfig et définissez la destination sur la valeur TableReference souhaitée. Transmettez la configuration de la tâche à la méthode de requête.
from google.cloud import bigquery

    # TODO(developer): Construct a BigQuery client object.
    # client = bigquery.Client()

    # TODO(developer): Set table_id to the ID of the destination table.
    # table_id = "your-project.your_dataset.your_table_name"

    job_config = bigquery.QueryJobConfig(destination=table_id)

    sql = """
        SELECT corpus
        FROM `bigquery-public-data.samples.shakespeare`
        GROUP BY corpus;
    """

    # Start the query, passing in the extra configuration.
    query_job = client.query(sql, job_config=job_config)  # Make an API request.
    query_job.result()  # Wait for the job to complete.

    print("Query results loaded to the table {}".format(table_id))

Écrire des résultats de requête volumineux

Normalement, les requêtes ont une taille de réponse maximale. Si vous prévoyez d'exécuter une requête pouvant renvoyer des résultats plus importants, vous pouvez :

  • en SQL standard, spécifier une table de destination pour les résultats de requête ;
  • en ancien SQL, spécifier une table de destination et définir l'option allowLargeResults.

Lorsque vous spécifiez une table de destination pour des résultats de requête volumineux, le stockage des données vous est facturé.

Limites

En ancien SQL, l'écriture de résultats volumineux est soumise aux limites suivantes :

  • Vous devez spécifier une table de destination.
  • Vous ne pouvez pas spécifier de clause ORDER BY, TOP ou LIMIT de niveau supérieur. Cela annule l'avantage d'utiliser allowLargeResults, car le résultat de la requête ne peut plus être calculé en parallèle.
  • Les fonctions de fenêtrage ne renvoient des résultats de requête volumineux que si elles sont utilisées avec une clause PARTITION BY.

Écrire des résultats volumineux en ancien SQL

Pour écrire des ensembles de résultats volumineux en ancien SQL :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.
    Accéder à Cloud Console

  2. Cliquez sur Saisir une nouvelle requête.

  3. Saisissez une requête SQL valide dans la zone de texte de l'éditeur de requête. Utilisez le préfixe #legacySQL ou assurez-vous que la case Utiliser l'ancien SQL est cochée dans les paramètres de requête.

  4. Cliquez sur More (Plus), puis sélectionnez Query settings (Paramètres de requête).

    Paramètres de requête

  5. Pour Destination, cochez la case Set a destination table for query results (Définir une table de destination pour les résultats de la requête).

    Définir la destination

  6. Dans le champ Nom du projet, choisissez le projet dans lequel la table de destination sera créée.

  7. Pour Nom de l'ensemble de données, choisissez l'ensemble de données où la table sera stockée.

  8. Dans le champ Nom de la table, saisissez un nom de table.

  9. Si vous écrivez un ensemble de résultats volumineux dans une table existante, vous pouvez utiliser les options Destination table write preference (Préférence d'écriture pour la table de destination) pour contrôler la disposition en écriture de la table de destination :

    • Write if empty (Écrire si la table est vide) : n'écrit les résultats de requête dans la table que si celle-ci est vide.
    • Append to table (Ajouter à la table) : ajoute les résultats de requête à une table existante.
    • Overwrite table (Écraser la table) : écrase une table existante portant le même nom à l'aide des résultats de requête.

    Case d'option

  10. Pour Results size (Taille des résultats), cochez la case Allow Large Results (no size limit) (Autoriser un nombre élevé de résultats (aucune limite)).

    Taille des résultats de la requête

  11. (Facultatif) Dans le champ Processing Location (Emplacement de traitement), cliquez sur Auto-select (Sélection automatique) et choisissez l'emplacement de vos données.

    Emplacement de traitement des requêtes

  12. Cliquez sur Enregistrer pour mettre à jour les paramètres de la requête.

  13. Cliquez sur Exécuter. Cette action crée une tâche de requête qui écrit les résultats de requête volumineux dans la table spécifiée.

UI classique

  1. Accédez à l'UI Web de BigQuery.
    Accéder à l'UI Web de BigQuery

  2. Cliquez sur le bouton Saisir une requête.

  3. Saisissez une requête SQL BigQuery valide dans la zone de texte Nouvelle requête. Utilisez le préfixe #legacySQL ou assurez-vous que la case Utiliser l'ancien SQL est cochée dans les options de requête.

  4. Cliquez sur Afficher les options.

  5. Dans le champ Table de destination, cliquez sur Sélectionner une table.

  6. Dans la boîte de dialogue Sélectionner une table de destination :

    1. Pour Projet, choisissez le projet où la table de destination sera créée.

    2. Pour Ensemble de données, choisissez l'ensemble de données où la table sera stockée.

    3. Dans le champ ID de la table, saisissez un nom de table.

    4. Cliquez sur OK.

  7. Si vous écrivez un ensemble de résultats volumineux dans une table existante, vous pouvez utiliser l'option Write Preference (Préférence d'écriture) pour contrôler la disposition en écriture de la table de destination :

    • Write if empty (Écrire si la table est vide) : n'écrit les résultats de requête dans la table que si celle-ci est vide.
    • Append to table (Ajouter à la table) : ajoute les résultats de requête à une table existante.
    • Overwrite table (Écraser la table) : écrase une table existante portant le même nom à l'aide des résultats de requête.
  8. Pour Results Size (Taille des résultats), cochez la case Allow Large Results (Autoriser un nombre élevé de résultats).

    Option

  9. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Non spécifié et sélectionnez l'emplacement de vos données.

  10. Cliquez sur Exécuter la requête. Cette action crée une tâche de requête qui écrit les résultats de requête volumineux dans la table spécifiée.

CLI

Utilisez conjointement les options --allow_large_results et --destination_table pour créer la table de destination qui doit contenir l'ensemble de résultats volumineux. Comme l'option -- allow_large_results ne s'applique qu'à l'ancien SQL, vous devez également spécifier l'option --use_legacy_sql=true. Pour écrire les résultats des requêtes dans une table qui n'est pas dans votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données au format suivant : [PROJECT_ID]:[DATASET]. Spécifiez l'option -- location et définissez la valeur correspondant à votre emplacement.

Pour contrôler la disposition en écriture d'une table de destination existante, fournissez l'une des options facultatives suivantes :

  • --append_table : si la table de destination existe, les résultats de requête y sont ajoutés.
  • --replace : si la table de destination existe, elle est remplacée par les résultats de requête.
    bq --location=location query \
    --destination_table project_id:dataset.table \
    --use_legacy_sql=true \
    --allow_large_results "query"
    

Où :

  • location est le nom de l'emplacement utilisé pour traiter la requête. L'option --location est facultative. Par exemple, si vous utilisez BigQuery dans la région de Tokyo, vous pouvez définir la valeur de cette option sur asia-northeast1. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc ;
  • project_id est l'ID du projet ;
  • dataset est le nom de l'ensemble de données contenant la table dans laquelle vous écrivez les résultats de requête ;
  • table est le nom de la table dans laquelle vous écrivez les résultats de requête ;
  • query est une requête dans une syntaxe en ancien SQL.

Exemples :

Saisissez la commande suivante pour écrire les résultats de requête volumineux dans une table de destination nommée mytable dans l'ensemble de données mydataset. L'ensemble de données se trouve dans votre projet par défaut. Aucune option de disposition en écriture n'étant spécifiée dans la commande, la table doit être nouvelle ou vide. Dans le cas contraire, une erreur Already exists est renvoyée. La requête extrait les données de l'ensemble de données public Données sur les noms aux États-Unis. Cette requête est utilisée à titre d'exemple uniquement. L'ensemble de résultats renvoyé ne dépasse pas la taille de réponse maximale.

bq query \
    --destination_table mydataset.mytable \
    --use_legacy_sql=true \
    --allow_large_results \
    "SELECT
      name,
      number
    FROM
      [bigquery-public-data:usa_names.usa_1910_current]
    WHERE
      gender = 'M'
    ORDER BY
      number DESC"
    

Saisissez la commande suivante pour que les résultats de requête volumineux écrasent une table de destination nommée mytable se trouvant dans l'ensemble de données mydataset. L'ensemble de données se trouve dans myotherproject, et non dans votre projet par défaut. La commande utilise l'option --replace pour écraser la table de destination.

bq query \
    --destination_table mydataset.mytable \
    --replace \
    --use_legacy_sql=true \
    --allow_large_results \
    "SELECT
      name,
      number
    FROM
      [bigquery-public-data:usa_names.usa_1910_current]
    WHERE
      gender = 'M'
    ORDER BY
      number DESC"
    

Saisissez la commande suivante pour ajouter les résultats de requête volumineux à une table de destination nommée mytable dans l'ensemble de données mydataset. L'ensemble de données se trouve dans myotherproject, et non dans votre projet par défaut. La commande utilise l'option --append_table pour ajouter les résultats de requête à la table de destination.

bq query \
    --destination_table myotherproject:mydataset.mytable \
    --append_table \
    --use_legacy_sql=true \
    --allow_large_results \
    "SELECT
      name,
      number
    FROM
      [bigquery-public-data:usa_names.usa_1910_current]
    WHERE
      gender = 'M'
    ORDER BY
      number DESC"
    

API

Pour écrire des résultats volumineux dans une table de destination, appelez la méthode jobs.insert, configurez une tâche de type query et définissez la propriété allowLargeResults sur true. Spécifiez la table de destination à l'aide de la propriété destinationTable. Pour contrôler la disposition en écriture d'une table de destination existante, configurez la propriété writeDisposition.

Spécifiez votre emplacement dans la propriété location de la section jobReference de la ressource de tâche.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Go.

import (
    	"context"
    	"fmt"
    	"io"

    	"cloud.google.com/go/bigquery"
    	"google.golang.org/api/iterator"
    )

    // queryLegacyLargeResults demonstrates issuing a legacy SQL query and writing a large result set
    // into a destination table.
    func queryLegacyLargeResults(w io.Writer, projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "destinationdataset"
    	// tableID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()

    	q := client.Query(
    		"SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;")
    	q.UseLegacySQL = true
    	q.AllowLargeResults = true
    	q.QueryConfig.Dst = client.Dataset(datasetID).Table(tableID)
    	// Run the query and print results when the query job is completed.
    	job, err := q.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); err != nil {
    		return err
    	}
    	it, err := job.Read(ctx)
    	for {
    		var row []bigquery.Value
    		err := it.Next(&row)
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return err
    		}
    		fmt.Fprintln(w, row)
    	}
    	return nil
    }
    

Java

Pour que des résultats volumineux puissent être renvoyés, définissez l'option Autoriser un nombre élevé de résultats sur true et la table de destination sur l'identifiant TableId souhaité dans une configuration QueryJobConfiguration.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    // String destinationDataset = 'my_destination_dataset';
    // String destinationTable = 'my_destination_table';
    String query = "SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;";
    QueryJobConfiguration queryConfig =
        // To use legacy SQL syntax, set useLegacySql to true.
        QueryJobConfiguration.newBuilder(query)
            .setUseLegacySql(true)
            // Save the results of the query to a permanent table.
            .setDestinationTable(TableId.of(destinationDataset, destinationTable))
            // Allow results larger than the maximum response size.
            // If true, a destination table must be set.
            .setAllowLargeResults(true)
            .build();

    // Print the results.
    for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
      for (FieldValue val : row) {
        System.out.printf("%s,", val.toString());
      }
      System.out.printf("\n");
    }

Node.js

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Node.js décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Node.js.

// Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();

    async function queryLegacyLargeResults() {
      // Query enables large result sets.

      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const projectId = "my_project"
      // const datasetId = "my_dataset";
      // const tableId = "my_table";

      const query = `SELECT word FROM [bigquery-public-data:samples.shakespeare] LIMIT 10;`;

      // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
      const options = {
        query: query,
        // Location must match that of the dataset(s) referenced
        // in the query and of the destination table.
        useLegacySql: true,
        allowLargeResult: true,
        destinationTable: {
          projectId: projectId,
          datasetId: datasetId,
          tableId: tableId,
        },
      };

      const [job] = await bigquery.createQueryJob(options);
      console.log(`Job ${job.id} started.`);

      // Wait for the query to finish
      const [rows] = await job.getQueryResults();

      // Print the results
      console.log('Rows:');
      rows.forEach(row => console.log(row));
    }

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

from google.cloud import bigquery

    # Construct a BigQuery client object.
    client = bigquery.Client()

    # TODO(developer): Set table_id to the ID of the destination table.
    # table_id = "your-project.your_dataset.your_table_name"

    # Set the destination table and use_legacy_sql to True to use
    # legacy SQL syntax.
    job_config = bigquery.QueryJobConfig(
        allow_large_results=True, destination=table_id, use_legacy_sql=True
    )

    sql = """
        SELECT corpus
        FROM [bigquery-public-data:samples.shakespeare]
        GROUP BY corpus;
    """

    # Start the query, passing in the extra configuration.
    query_job = client.query(sql, job_config=job_config)  # Make an API request.
    query_job.result()  # Wait for the job to complete.

    print("Query results loaded to the table {}".format(table_id))

Télécharger et enregistrer des résultats de requête

Après avoir exécuté une requête SQL, vous pouvez télécharger les résultats dans un fichier sur votre machine locale, les enregistrer dans Google Drive ou Google Sheets, ou les enregistrer dans une table permanente dans BigQuery.

Limites

Le téléchargement et l'enregistrement des résultats de requête sont soumis aux restrictions suivantes :

  • Vous ne pouvez télécharger des résultats de requête que dans un fichier local ou dans Google Sheets dans l'UI Web classique de BigQuery. Pour télécharger les résultats dans Google Drive, utilisez Cloud Console.
  • Pour que vous puissiez télécharger des résultats de requête à l'aide de l'interface utilisateur Web de BigQuery, l'ensemble de résultats ne doit pas dépasser 16 000 lignes ni 10 Mo. Si les résultats dépassent 10 Mo ou 16 000 lignes, vous pouvez les enregistrer dans une table.
  • Vous ne pouvez télécharger les résultats de requête qu'au format CSV ou JSON délimité par un retour à la ligne.
  • Vous ne pouvez pas télécharger des résultats de requête contenant des données imbriquées et répétées au format CSV.
  • Vous ne pouvez pas enregistrer des résultats de requête contenant des données imbriquées et répétées dans Google Sheets.
  • Lorsque vous enregistrez des résultats de requête dans Google Sheets à l'aide de l'interface utilisateur Web classique de BigQuery, l'ensemble de résultats ne doit pas dépasser 16 000 lignes ni 10 Mo. Si les résultats dépassent 10 Mo ou 16 000 lignes, vous pouvez les enregistrer dans une table.
  • Il n'est pas possible d'enregistrer les résultats dans un fichier local, dans Google Sheets ou Google Drive avec l'outil de ligne de commande ni avec l'API.
  • Pour que vous puissiez enregistrer des résultats de requête dans Google Drive à l'aide de Cloud Console, l'ensemble de résultats ne doit pas dépasser 1 Go. Si les résultats dépassent 1 Go, vous pouvez les enregistrer dans une table.
  • Vous ne pouvez enregistrer des résultats de requête dans Google Drive qu'au format CSV ou JSON délimité par un retour à la ligne.

Télécharger des résultats de requête dans un fichier local

Il n'est pas possible de télécharger des résultats de requête dans un fichier local avec l'outil de ligne de commande ni avec l'API.

Pour télécharger des résultats de requête dans un fichier CSV ou JSON délimité par un retour à la ligne à l'aide de l'interface utilisateur Web, procédez comme suit :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.
    Accéder à Cloud Console

  2. Cliquez sur Saisir une nouvelle requête.

  3. Saisissez une requête SQL valide dans la zone de texte de l'éditeur de requête.

  4. (Facultatif) Pour modifier l'emplacement de traitement, cliquez sur Plus et sélectionnez Paramètres de requête. Dans le champ Emplacement de traitement, cliquez sur Sélection automatique et choisissez l'emplacement de vos données.

  5. Cliquez sur Exécuter.

  6. Lorsque les résultats sont renvoyés, cliquez sur Enregistrer les résultats et sélectionnez le format/l'emplacement d'enregistrement des résultats.

    Le fichier est téléchargé à l'emplacement de téléchargement par défaut de votre navigateur.

UI classique

  1. Accédez à l'UI Web de BigQuery.
    Accéder à l'UI Web de BigQuery

  2. Cliquez sur le bouton Saisir une requête.

  3. Saisissez une requête SQL valide dans la zone de texte Nouvelle requête.

  4. Cliquez sur Afficher les options.

  5. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Non spécifié et sélectionnez l'emplacement de vos données.

  6. Cliquez sur Exécuter la requête.

  7. Lorsque les résultats sont renvoyés, cliquez sur le bouton Download as CSV (Télécharger au format CSV) ou Download as JSON (Télécharger au format JSON) au-dessus.

    Capture d'écran des boutons de téléchargement et d'enregistrement

    Le fichier est téléchargé à l'emplacement de téléchargement par défaut de votre navigateur.

Enregistrer des résultats de requête dans Google Drive

Il n'est pas possible d'enregistrer des résultats de requête dans Google Drive avec l'outil de ligne de commande ni avec l'API, ni avec l'interface utilisateur Web classique de BigQuery.

Pour enregistrer des résultats de requête dans Google Drive à l'aide de Cloud Console, procédez comme suit :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.

    Accéder à Cloud Console

  2. Saisissez une requête SQL valide dans la zone de texte de l'éditeur de requête.

  3. Cliquez sur Exécuter.

  4. Lorsque les résultats sont renvoyés, cliquez sur Save results (Enregistrer les résultats).

    Capture d'écran du bouton

  5. Sélectionnez CSV (Google Drive) ou JSON (Google Drive). Lorsque vous enregistrez des résultats dans Google Drive, vous ne pouvez pas choisir l'emplacement. Les résultats sont toujours enregistrés à l'emplacement racine "Mon Drive".

  6. L'enregistrement des résultats dans Google Drive peut prendre quelques minutes. Une fois les résultats enregistrés, vous recevez un message pop-up contenant le nom du fichier (bq-results-[TIMESTAMP]-[RANDOM_CHARACTERS].[CSV or JSON]).

    Capture d'écran du bouton

  7. Dans le message pop-up, cliquez sur Open (Ouvrir) pour ouvrir le fichier, ou accédez à Google Drive, puis cliquez sur Mon Drive.

Enregistrer des résultats de requête dans une table

Pour enregistrer des résultats de requête dans une table :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.

    Accéder à Cloud Console

  2. Dans la section Ressources du panneau de navigation, développez votre projet et sélectionnez un ensemble de données.

  3. Si l'éditeur de requête est masqué, cliquez sur Afficher l'éditeur en haut à droite de la fenêtre.

  4. Saisissez une requête SQL valide dans la zone de texte de l'éditeur de requête.

  5. Sous l'éditeur, cliquez sur More (Plus) et sélectionnez Query settings (Paramètres de requête).

    Paramètres de requête

  6. Cochez la case Set a destination table for query results (Définir une table de destination pour les résultats de la requête).

    Définir la destination

  7. Dans la section Destination, sélectionnez le nom du projet et le nom de l'ensemble de données où la table doit être créée, puis choisissez le nom de la table.

  8. Dans la section Préférence d'écriture pour la table de destination, choisissez l'une des options suivantes :

    • Écrire si la table est vide : n'écrit les résultats de requête dans la table que si celle-ci est vide.
    • Ajouter à la table : ajoute les résultats de requête à une table existante.
    • Écraser la table : écrase une table existante portant le même nom à l'aide des résultats de requête.
  9. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Sélection automatique et choisissez votre emplacement.

  10. Cliquez sur Exécuter la requête. Cette action crée une tâche de requête qui écrit les résultats dans la table spécifiée.

Si vous oubliez de spécifier une table de destination avant d'exécuter la requête, vous pouvez également copier la table de résultats mise en cache dans une table permanente en cliquant sur le bouton Enregistrer les résultats situé sous l'éditeur.

LDD

Les instructions LDD (langage de définition de données) vous permettent de créer et modifier des tables à l'aide de la syntaxe de requête SQL standard.

Pour plus d'informations, consultez la section Instruction CREATE TABLE et l'exemple d'utilisation de l'instruction CREATE TABLE présenté dans la section Créer une table à partir d'une table existante.

UI classique

  1. Accédez à l'UI Web classique de BigQuery.
    Accéder à l'UI Web classique de BigQuery

  2. Cliquez sur le bouton Saisir une requête.

  3. Saisissez une requête SQL valide dans la zone de texte Nouvelle requête.

  4. Cliquez sur Afficher les options.

  5. Dans la section Table de destination, cliquez sur Sélectionner une table.

  6. Dans la boîte de dialogue Sélectionner une table de destination :

    1. Dans le champ Projet, choisissez un projet où stocker l'ensemble de données et la table.

    2. Dans le champ Ensemble de données, choisissez l'ensemble de données où stocker la table.

    3. Dans le champ ID de la table, saisissez un nom de table. Le nom doit être unique dans l'ensemble de données de destination. Le nom de la table doit comporter un maximum de 1 024 caractères et ne peut contenir que des lettres (a à z, A à Z), des chiffres (0 à 9) ou des traits de soulignement (_).

    4. Cliquez sur OK.

  7. Dans la section Table de destination, pour Préférence d'écriture, sélectionnez l'une des options suivantes :

    • Écrire si la table est vide : n'écrit les résultats de requête dans la table que si celle-ci est vide.
    • Ajouter à la table : ajoute les résultats de requête à une table existante.
    • Écraser la table : écrase une table existante portant le même nom à l'aide des résultats de requête.
  8. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Non spécifié et sélectionnez l'emplacement de vos données.

  9. Cliquez sur Exécuter la requête. Cette action crée une tâche de requête qui écrit les résultats dans la table spécifiée.

Si vous oubliez de spécifier une table de destination avant d'exécuter la requête, vous pouvez copier la table temporaire dans une table permanente. Pour ce faire, cliquez sur le bouton Enregistrer en tant que table dans la fenêtre des résultats.

CLI

Saisissez la commande bq query en spécifiant l'option --destination_table pour créer une table permanente basée sur les résultats de la requête. Spécifiez l'option use_legacy_sql=false pour utiliser la syntaxe SQL standard. Pour écrire les résultats de la requête dans une table qui ne se trouve pas dans votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant : project_id:dataset.

(Facultatif) Spécifiez l'option --location et définissez la valeur correspondant à votre emplacement.

Pour contrôler la disposition en écriture d'une table de destination existante, fournissez l'une des options facultatives suivantes :

  • --append_table : si la table de destination existe, les résultats de requête y sont ajoutés.
  • --replace : si la table de destination existe, elle est remplacée par les résultats de requête.
    bq --location=location query \
    --destination_table project_id:dataset.table \
    --use_legacy_sql=false 'query'
    

Où :

  • location est le nom de l'emplacement utilisé pour traiter la requête. L'option --location est facultative. Par exemple, si vous utilisez BigQuery dans la région de Tokyo, vous pouvez définir la valeur de cette option sur asia-northeast1. Vous pouvez spécifier une valeur par défaut pour l'emplacement à l'aide du fichier .bigqueryrc ;
  • project_id est l'ID du projet ;
  • dataset est le nom de l'ensemble de données contenant la table dans laquelle vous écrivez les résultats de requête ;
  • table est le nom de la table dans laquelle vous écrivez les résultats de requête ;
  • query est une requête en syntaxe SQL standard.

Si aucune option de disposition en écriture n'est spécifiée, le comportement par défaut consiste à écrire les résultats dans la table uniquement si elle est vide. Si la table existe et qu'elle n'est pas vide, l'erreur suivante est renvoyée : `BigQuery error in query operation: Error processing job project_id:bqjob_123abc456789_00000e1234f_1': Already Exists: Table project_id:dataset.table.

Exemples :

Saisissez la commande suivante pour écrire les résultats de la requête dans une table de destination nommée mytable au sein de l'ensemble de données mydataset. L'ensemble de données se trouve dans votre projet par défaut. Comme aucune option de disposition en écriture n'est spécifiée dans la commande, la table doit être nouvelle ou vide. Dans le cas contraire, une erreur Already exists est renvoyée. La requête extrait les données de l'ensemble de données public Données sur les noms aux États-Unis.

    bq query \
    --destination_table mydataset.mytable \
    --use_legacy_sql=false \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data`.usa_names.usa_1910_current
    WHERE
      gender = "M"
    ORDER BY
      number DESC'
    

Saisissez la commande suivante pour que les résultats de requête écrasent une table de destination nommée mytable se trouvant dans l'ensemble de données mydataset. L'ensemble de données se trouve dans votre projet par défaut. La commande utilise l'option --replace pour écraser la table de destination.

    bq query \
    --destination_table mydataset.mytable \
    --replace \
    --use_legacy_sql=false \
    'SELECT
       name,
       number
     FROM
       `bigquery-public-data`.usa_names.usa_1910_current
     WHERE
       gender = "M"
     ORDER BY
       number DESC'
     

Saisissez la commande suivante pour ajouter les résultats de requête à une table de destination nommée mytable au sein de l'ensemble de données mydataset. L'ensemble de données se trouve dans my-other-project, et non dans votre projet par défaut. La commande utilise l'option --append_table pour ajouter les résultats de requête à la table de destination.

    bq query \
    --append_table \
    --use_legacy_sql=false \
    --destination_table my-other-project:mydataset.mytable \
    'SELECT
       name,
       number
     FROM
       `bigquery-public-data`.usa_names.usa_1910_current
     WHERE
       gender = "M"
     ORDER BY
       number DESC'
     

Le résultat de chacun de ces exemples ressemble à ce qui suit. Pour des raisons de lisibilité, certains résultats sont tronqués.

    Waiting on bqjob_r123abc456_000001234567_1 ... (2s) Current status: DONE
    +---------+--------+
    |  name   | number |
    +---------+--------+
    | Robert  |  10021 |
    | John    |   9636 |
    | Robert  |   9297 |
    | ...              |
    +---------+--------+
    

API

Pour enregistrer les résultats de requête dans une table permanente, appelez la méthode jobs.insert, configurez une tâche query et ajoutez une valeur pour la propriété destinationTable. Pour contrôler la disposition en écriture d'une table de destination existante, configurez la propriété writeDisposition.

Pour contrôler l'emplacement de traitement de la tâche de requête, spécifiez la propriété location dans la section jobReference de la ressource de tâche.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Go.

import (
    	"context"
    	"fmt"
    	"io"

    	"cloud.google.com/go/bigquery"
    	"google.golang.org/api/iterator"
    )

    // queryWithDestination demonstrates saving the results of a query to a specific table by setting the destination
    // via the API properties.
    func queryWithDestination(w io.Writer, projectID, destDatasetID, destTableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()

    	q := client.Query("SELECT 17 as my_col")
    	q.Location = "US" // Location must match the dataset(s) referenced in query.
    	q.QueryConfig.Dst = client.Dataset(destDatasetID).Table(destTableID)
    	// Run the query and print results when the query job is completed.
    	job, err := q.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); err != nil {
    		return err
    	}
    	it, err := job.Read(ctx)
    	for {
    		var row []bigquery.Value
    		err := it.Next(&row)
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return err
    		}
    		fmt.Fprintln(w, row)
    	}
    	return nil
    }
    

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Java.

Pour enregistrer des résultats de requête dans une table permanente, définissez la table de destination sur l'identifiant TableId souhaité dans une configuration QueryJobConfiguration.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    // String destinationDataset = 'my_destination_dataset';
    // String destinationTable = 'my_destination_table';
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    QueryJobConfiguration queryConfig =
        // Note that setUseLegacySql is set to false by default
        QueryJobConfiguration.newBuilder(query)
            // Save the results of the query to a permanent table.
            .setDestinationTable(TableId.of(destinationDataset, destinationTable))
            .build();

    // Print the results.
    for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
      for (FieldValue val : row) {
        System.out.printf("%s,", val.toString());
      }
      System.out.printf("\n");
    }

Node.js

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Node.js décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Node.js.

// Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();

    async function queryDestinationTable() {
      // Queries the U.S. given names dataset for the state of Texas
      // and saves results to permanent table.

      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = 'my_dataset';
      // const tableId = 'my_table';

      // Create destination table reference
      const dataset = bigquery.dataset(datasetId);
      const destinationTable = dataset.table(tableId);

      const query = `SELECT name
        FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
        WHERE state = 'TX'
        LIMIT 100`;

      // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
      const options = {
        query: query,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        destination: destinationTable,
      };

      // Run the query as a job
      const [job] = await bigquery.createQueryJob(options);

      console.log(`Job ${job.id} started.`);
      console.log(`Query results loaded to table ${destinationTable.id}`);
    }

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

Pour enregistrer des résultats de requête dans une table permanente, créez une configuration QueryJobConfig et définissez la destination sur la valeur TableReference souhaitée. Transmettez la configuration de la tâche à la méthode de requête.
from google.cloud import bigquery

    # TODO(developer): Construct a BigQuery client object.
    # client = bigquery.Client()

    # TODO(developer): Set table_id to the ID of the destination table.
    # table_id = "your-project.your_dataset.your_table_name"

    job_config = bigquery.QueryJobConfig(destination=table_id)

    sql = """
        SELECT corpus
        FROM `bigquery-public-data.samples.shakespeare`
        GROUP BY corpus;
    """

    # Start the query, passing in the extra configuration.
    query_job = client.query(sql, job_config=job_config)  # Make an API request.
    query_job.result()  # Wait for the job to complete.

    print("Query results loaded to the table {}".format(table_id))

Enregistrer des résultats de requête dans Google Sheets

Il n'est pas possible d'enregistrer des résultats de requête dans Google Sheets avec l'outil de ligne de commande ni avec l'API.

Pour enregistrer des résultats de requête dans Google Sheets à l'aide de l'interface utilisateur Web, procédez comme suit :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.
    Accéder à l'UI Web de BigQuery

  2. Cliquez sur Saisir une nouvelle requête.

  3. Saisissez une requête SQL valide dans la zone de texte de l'éditeur de requête.

  4. (Facultatif) Pour modifier l'emplacement de traitement, cliquez sur Plus et sélectionnez Paramètres de requête. Dans le champ Emplacement de traitement, cliquez sur Sélection automatique et choisissez l'emplacement de vos données.

  5. Cliquez sur Exécuter.

  6. Lorsque les résultats sont renvoyés, cliquez sur Enregistrer les résultats et sélectionnez Google Sheets.

  7. Si nécessaire, suivez les instructions vous invitant à vous connecter à votre compte Google et cliquez sur Autoriser afin que BigQuery puisse écrire les données dans votre dossier Google Drive MY Drive (Mon Drive).

    Une fois que vous avez suivi les messages d'invite, vous devriez recevoir un e-mail avec pour objet "Outils client BigQuery connectés à votre compte Google". Il contient des informations sur les autorisations que vous avez accordées ainsi que les étapes à suivre pour les révoquer.

  8. Lorsque les résultats sont enregistrés, un message semblable au suivant apparaît sous les résultats de la requête dans l'UI Web BigQuery de la console : Saved to Sheets as "results-20190225-103531. Open Cliquez sur le lien dans le message pour afficher vos résultats dans Google Sheets, ou accédez à votre dossier My Drive (Mon Drive) et ouvrez le fichier manuellement.

    Lorsque vous enregistrez les résultats de requête dans Google Sheets, le nom du fichier commence par results-[DATE], où [DATE] correspond à la date du jour au format YYYYMMDD.

UI classique

  1. Accédez à l'UI Web de BigQuery.
    Accéder à l'UI Web de BigQuery

  2. Cliquez sur le bouton Saisir une requête.

  3. Saisissez une requête SQL valide dans la zone de texte Nouvelle requête.

  4. Cliquez sur Afficher les options.

  5. (Facultatif) Dans le champ Emplacement de traitement, cliquez sur Non spécifié et sélectionnez l'emplacement de vos données.

  6. Cliquez sur Exécuter la requête.

  7. Lorsque les résultats sont renvoyés, cliquez sur le bouton Save to Google Sheets (Enregistrer dans Google Sheets) au-dessus.

    Capture d'écran des boutons de téléchargement et d'enregistrement

  8. Si nécessaire, suivez les instructions vous invitant à vous connecter à votre compte Google et cliquez sur Autoriser afin que BigQuery puisse écrire les données dans votre dossier Google Drive MY Drive (Mon Drive).

    Une fois que vous avez suivi les messages d'invite, vous devriez recevoir un e-mail avec pour objet "Outils client BigQuery connectés à votre compte Google". Il contient des informations sur les autorisations que vous avez accordées ainsi que les étapes à suivre pour les révoquer.

  9. Lorsque les résultats sont enregistrés, un message semblable au suivant s'affiche au-dessus des résultats de requête dans l'UI Web classique de BigQuery : Results saved to Google Sheets. Click to view. Cliquez sur le lien dans le message pour afficher vos résultats dans Google Sheets, ou accédez à votre dossier MY Drive (Mon Drive) et ouvrez le fichier manuellement.

    Lorsque vous enregistrez les résultats de requête dans Google Sheets, le nom du fichier commence par results-[DATE], où [DATE] correspond à la date du jour au format YYYYMMDD.