Exécuter une requête

Ce document explique comment exécuter une requête dans BigQuery et connaître la quantité de données que la requête va traiter avant son exécution en effectuant un dry run (test à blanc).

Types de requêtes

Vous pouvez interroger des données BigQuery à l'aide de l'un des types de job de requête suivants :

  • Tâches de requête interactives. Par défaut, BigQuery exécute des tâches de requête interactives (à la demande) dès que possible.
  • Jobs de requête continue (preview). Avec ces jobs, la requête s'exécute en continu, ce qui vous permet d'analyser les données entrantes dans BigQuery en temps réel, puis d'écrire les résultats dans une table BigQuery ou de les exporter vers Bigtable ou Pub/Sub. Grâce à cette fonctionnalité, vous pouvez effectuer des tâches urgentes, telles que la création et l'action immédiate sur les insights, l'application d'inférences de machine learning (ML) en temps réel et la création de pipelines de données basés sur des événements.

  • Tâches de requête par lot. Avec ces tâches, BigQuery met en file d'attente chaque requête par lot en votre nom, puis lance la requête lorsque des ressources inactives sont disponibles, généralement en quelques minutes.

Vous pouvez exécuter des jobs de requête à l'aide des méthodes suivantes :

Par défaut, BigQuery exécute vos requêtes en tant que jobs de requête interactives, qui sont exécutés dès que possible. BigQuery calcule de manière dynamique la limite de requêtes simultanées en fonction de la disponibilité des ressources et privilégie l'exécution de requêtes interactives simultanées par rapport aux requêtes par lot. Une fois que vous avez atteint la limite de requêtes simultanées, les requêtes supplémentaires sont placées dans une file d'attente. Pour en savoir plus, consultez la section Files d'attente de requêtes.

BigQuery enregistre les résultats de la requête dans une table temporaire (par défaut) ou dans une table permanente. Lorsque vous spécifiez une table permanente comme table de destination pour les résultats, vous pouvez choisir d'ajouter ou d'écraser une table existante, ou de créer une table avec un nom unique.

Rôles requis

Pour obtenir les autorisations nécessaires pour exécuter un job de requête, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour exécuter un job de requête. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour exécuter un job de requête :

  • bigquery.jobs.create sur le projet à partir duquel la requête est exécutée, quel que soit l'emplacement de stockage des données.
  • bigquery.tables.getData sur toutes les tables et vues auxquelles votre requête fait référence. Pour interroger des vues, vous devez également disposer de cette autorisation sur toutes les tables et vues sous-jacentes. Si vous utilisez des vues autorisées ou des ensembles de données autorisés, vous n'avez pas besoin d'accéder aux données sources sous-jacentes.

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Dépannage

Access Denied: Project [project_id]: User does not have bigquery.jobs.create
permission in project [project_id].

Cette erreur se produit lorsqu'un compte principal n'est pas autorisé à créer des jobs de requête dans le projet.

Solution : Un administrateur doit vous accorder l'autorisation bigquery.jobs.create sur le projet que vous interrogez. Cette autorisation est requise en plus de toute autorisation requise pour accéder aux données interrogées.

Pour plus d'informations sur les autorisations BigQuery, consultez la page Contrôle des accès avec IAM.

Exécuter une requête interactive

Pour exécuter une requête interactive, sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Cliquez sur Requête SQL.

  3. Dans l'éditeur de requête, saisissez une requête GoogleSQL valide.

    Par exemple, interrogez l'ensemble de données public BigQuery usa_names pour déterminer les noms les plus couramment utilisés aux États-Unis entre 1910 et 2013 :

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Vous pouvez également spécifier la table de destination et l'emplacement des résultats de la requête :

    1. Dans l'éditeur de requête, cliquez sur Plus, puis sur Paramètres de requête.
    2. Dans la section Destination, cochez la case Définir une table de destination pour les résultats de la requête.
    3. Dans le champ Ensemble de données, saisissez le nom d'un ensemble de données existant pour la table de destination, par exemple myProject.myDataset.
    4. Dans le champ ID de la table, saisissez un nom pour la table de destination, par exemple myTable.
    5. Si la table de destination est une table existante, choisissez d'ajouter ou d'écraser la table avec les résultats de la requête dans la préférence d'écriture pour la table de destination.

      Si la table de destination est une nouvelle table, BigQuery la crée lorsque vous exécutez votre requête.

    6. Dans la section Paramètres supplémentaires, cliquez sur le menu Emplacement des données, puis sélectionnez une option.

      Dans cet exemple, l'ensemble de données usa_names est stocké dans l'emplacement multirégional États-Unis. Si vous spécifiez une table de destination pour cette requête, l'ensemble de données contenant la table de destination doit également se trouver dans l'emplacement multirégional des États-Unis. Vous ne pouvez pas interroger un ensemble de données dans un emplacement spécifique et écrire les résultats dans une table de destination dont l'emplacement est différent.

    7. Cliquez sur Enregistrer.

  5. Cliquez sur Exécuter.

    Si vous ne spécifiez pas de table de destination, le job de requête écrit la sortie dans une table (en cache) temporaire.

    Vous pouvez maintenant explorer les résultats de la requête dans l'onglet Résultats du volet Résultats de la requête.

  6. Facultatif : Pour trier les résultats de la requête par colonne, cliquez sur Ouvrir le menu de tri à côté du nom de la colonne et sélectionnez un ordre de tri. Si le nombre d'octets estimés pris en compte pour le tri est supérieur à zéro, il s'affiche en haut du menu.

  7. Facultatif : Pour visualiser les résultats de votre requête, accédez à l'onglet Graphique. Vous pouvez faire un zoom avant ou arrière sur le graphique, le télécharger au format PNG ou activer/désactiver la visibilité de la légende.

    Dans le volet Configuration du graphique, vous pouvez modifier le type de graphique (à lignes, en courbes ou à barres) et configurer les mesures et les dimensions du graphique. Les champs de ce volet sont préremplis avec la configuration initiale déduite du schéma de la table de destination de la requête. La configuration est conservée entre les exécutions de requêtes suivantes dans le même éditeur de requête. Les dimensions acceptent les types de données INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME et STRING, tandis que les mesures acceptent les types de données INTEGER, INT64, FLOAT, FLOAT64, NUMERIC et BIGNUMERIC.

  8. Facultatif : Dans l'onglet JSON, vous pouvez explorer les résultats de la requête au format JSON, où la clé est le nom de la colonne et la valeur est le résultat de cette colonne.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilisez la commande bq query. Dans l'exemple suivant, l'option --use_legacy_sql=false vous permet d'utiliser la syntaxe GoogleSQL.

    bq query \
        --use_legacy_sql=false \
        'QUERY'

    Remplacez QUERY par une requête GoogleSQL valide. Par exemple, interrogez l'ensemble de données public BigQuery usa_names pour déterminer les noms les plus couramment utilisés aux États-Unis entre 1910 et 2013 :

    bq query \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    Le job de requête écrit la sortie dans une table (en cache) temporaire.

    Sinon, vous pouvez spécifier la table de destination et l'emplacement pour les résultats de la requête. Pour écrire les résultats dans une table existante, ajoutez l'option appropriée afin d'ajouter (--append_table=true) ou d'écraser (--replace=true) la table.

    bq query \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'

    Remplacez les éléments suivants :

    • LOCATION : région ou emplacement multirégional de la table de destination, par exemple US

      Dans cet exemple, l'ensemble de données usa_names est stocké dans l'emplacement multirégional États-Unis. Si vous spécifiez une table de destination pour cette requête, l'ensemble de données contenant la table de destination doit également se trouver dans l'emplacement multirégional des États-Unis. Vous ne pouvez pas interroger un ensemble de données dans un emplacement spécifique et écrire les résultats dans une table dont l'emplacement est différent.

      Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc.

    • TABLE : nom de la table de destination, par exemple myDataset.myTable.

      Si la table de destination est une nouvelle table, BigQuery la crée lorsque vous exécutez votre requête. Cependant, vous devez spécifier un ensemble de données existant.

      Si la table ne se trouve pas dans votre projet actuel, ajoutez l'ID du projet Google Cloud en utilisant le format PROJECT_ID:DATASET.TABLE (par exemple, myProject:myDataset.myTable). Si --destination_table n'est pas spécifiée, un job de requête est généré pour écrire la sortie dans une table temporaire.

API

Pour exécuter une requête à l'aide de l'API, insérez une nouvelle tâche, puis définissez la propriété de configuration de tâche query. (Facultatif) Spécifiez votre locationemplacementjobReference dans la propriété de la section de la ressource de job.

Interrogez les résultats en appelant getQueryResults jusqu'à ce que jobComplete ait la valeur true. Recherchez les erreurs et les avertissements dans la liste errors.

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du 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 pour C#.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryQuery
{
    public void Query(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        string query = @"
            SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013`
            WHERE state = 'TX'
            LIMIT 100";
        BigQueryJob job = client.CreateQueryJob(
            sql: query,
            parameters: null,
            options: new QueryOptions { UseQueryCache = false });
        // Wait for the job to complete.
        job = job.PollUntilCompleted().ThrowOnAnyError();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du 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 pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"
	"io"

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

// queryBasic demonstrates issuing a query and reading results.
func queryBasic(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	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 name FROM `bigquery-public-data.usa_names.usa_1910_2013` " +
			"WHERE state = \"TX\" " +
			"LIMIT 100")
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"
	// 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 cet exemple, suivez les instructions de configuration pour Java du 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 pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

public class SimpleQuery {

  public static void runSimpleQuery() {
    // TODO(developer): Replace this query before running the sample.
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    simpleQuery(query);
  }

  public static void simpleQuery(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Create the query job.
      QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

      // Execute the query.
      TableResult result = bigquery.query(queryConfig);

      // Print the results.
      result.iterateAll().forEach(rows -> rows.forEach(row -> System.out.println(row.getValue())));

      System.out.println("Query ran successfully");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query did not run \n" + e.toString());
    }
  }
}

Pour exécuter une requête avec un proxy, consultez la section Configurer un proxy.

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du 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 pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// Import the Google Cloud client library using default credentials
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function query() {
  // Queries the U.S. given names dataset for the state of Texas.

  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/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
  };

  // Run the query as a job
  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));
}

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du 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 pour PHP.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);

$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
$queryResults = $job->queryResults();

$i = 0;
foreach ($queryResults as $row) {
    printf('--- Row %s ---' . PHP_EOL, ++$i);
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, json_encode($value));
    }
}
printf('Found %s row(s)' . PHP_EOL, $i);

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du 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 pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

from google.cloud import bigquery

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

query = """
    SELECT name, SUM(number) as total_people
    FROM `bigquery-public-data.usa_names.usa_1910_2013`
    WHERE state = 'TX'
    GROUP BY name, state
    ORDER BY total_people DESC
    LIMIT 20
"""
rows = client.query_and_wait(query)  # Make an API request.

print("The query data:")
for row in rows:
    # Row values can be accessed by field name or index.
    print("name={}, count={}".format(row[0], row["total_people"]))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du 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 pour Ruby.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

require "google/cloud/bigquery"

def query
  bigquery = Google::Cloud::Bigquery.new
  sql = "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " \
        "WHERE state = 'TX' " \
        "LIMIT 100"

  # Location must match that of the dataset(s) referenced in the query.
  results = bigquery.query sql do |config|
    config.location = "US"
  end

  results.each do |row|
    puts row.inspect
  end
end

Exécuter une requête continue

L'exécution d'une tâche de requête continue nécessite une configuration supplémentaire. Pour en savoir plus, consultez la section Créer des requêtes continues.

Exécuter une requête par lot

Pour exécuter une requête par lot, sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Cliquez sur Requête SQL.

  3. Dans l'éditeur de requête, saisissez une requête GoogleSQL valide.

    Par exemple, interrogez l'ensemble de données public BigQuery usa_names pour déterminer les noms les plus couramment utilisés aux États-Unis entre 1910 et 2013 :

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Cliquez sur Plus, puis sur Paramètres de requête.

  5. Dans la section Gestion des ressources, sélectionnez Par lot.

  6. Vous pouvez également spécifier la table de destination et l'emplacement des résultats de la requête :

    1. Dans la section Destination, cochez la case Définir une table de destination pour les résultats de la requête.
    2. Dans le champ Ensemble de données, saisissez le nom d'un ensemble de données existant pour la table de destination, par exemple myProject.myDataset.
    3. Dans le champ ID de la table, saisissez un nom pour la table de destination, par exemple myTable.
    4. Si la table de destination est une table existante, choisissez d'ajouter ou d'écraser la table avec les résultats de la requête dans la préférence d'écriture pour la table de destination.

      Si la table de destination est une nouvelle table, BigQuery la crée lorsque vous exécutez votre requête.

    5. Dans la section Paramètres supplémentaires, cliquez sur le menu Emplacement des données, puis sélectionnez une option.

      Dans cet exemple, l'ensemble de données usa_names est stocké dans l'emplacement multirégional États-Unis. Si vous spécifiez une table de destination pour cette requête, l'ensemble de données contenant la table de destination doit également se trouver dans l'emplacement multirégional des États-Unis. Vous ne pouvez pas interroger un ensemble de données dans un emplacement spécifique et écrire les résultats dans une table de destination dont l'emplacement est différent.

  7. Cliquez sur Enregistrer.

  8. Cliquez sur Exécuter.

    Si vous ne spécifiez pas de table de destination, le job de requête écrit la sortie dans une table (en cache) temporaire.

  9. Facultatif : Pour trier les résultats de la requête par colonne, cliquez sur Ouvrir le menu de tri à côté du nom de la colonne et sélectionnez un ordre de tri. Si le nombre d'octets estimés pris en compte pour le tri est supérieur à zéro, il s'affiche en haut du menu.

  10. Facultatif : Pour visualiser les résultats de votre requête, accédez à l'onglet Graphique. Vous pouvez faire un zoom avant ou arrière sur le graphique, le télécharger au format PNG ou activer/désactiver la visibilité de la légende.

    Dans le volet Configuration du graphique, vous pouvez modifier le type de graphique (à lignes, en courbes ou à barres) et configurer les mesures et les dimensions du graphique. Les champs de ce volet sont préremplis avec la configuration initiale déduite du schéma de la table de destination de la requête. La configuration est conservée entre les exécutions de requêtes suivantes dans le même éditeur de requête. Les dimensions acceptent les types de données INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME et STRING, tandis que les mesures acceptent les types de données INTEGER, INT64, FLOAT, FLOAT64, NUMERIC et BIGNUMERIC.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Exécutez la commande bq query, puis spécifiez l'option --batch. Dans l'exemple suivant, l'option --use_legacy_sql=false vous permet d'utiliser la syntaxe GoogleSQL.

    bq query \
        --batch \
        --use_legacy_sql=false \
        'QUERY'

    Remplacez QUERY par une requête GoogleSQL valide. Par exemple, interrogez l'ensemble de données public BigQuery usa_names pour déterminer les noms les plus couramment utilisés aux États-Unis entre 1910 et 2013 :

    bq query \
        --batch \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    Le job de requête écrit la sortie dans une table (en cache) temporaire.

    Sinon, vous pouvez spécifier la table de destination et l'emplacement pour les résultats de la requête. Pour écrire les résultats dans une table existante, ajoutez l'option appropriée afin d'ajouter (--append_table=true) ou d'écraser (--replace=true) la table.

    bq query \
        --batch \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'

    Remplacez les éléments suivants :

    • LOCATION : région ou emplacement multirégional de la table de destination, par exemple US

      Dans cet exemple, l'ensemble de données usa_names est stocké dans l'emplacement multirégional États-Unis. Si vous spécifiez une table de destination pour cette requête, l'ensemble de données contenant la table de destination doit également se trouver dans l'emplacement multirégional des États-Unis. Vous ne pouvez pas interroger un ensemble de données dans un emplacement spécifique et écrire les résultats dans une table dont l'emplacement est différent.

      Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc.

    • TABLE : nom de la table de destination, par exemple myDataset.myTable.

      Si la table de destination est une nouvelle table, BigQuery la crée lorsque vous exécutez votre requête. Cependant, vous devez spécifier un ensemble de données existant.

      Si la table ne se trouve pas dans votre projet actuel, ajoutez l'ID du projet Google Cloud en utilisant le format PROJECT_ID:DATASET.TABLE (par exemple, myProject:myDataset.myTable). Si --destination_table n'est pas spécifiée, un job de requête est généré pour écrire la sortie dans une table temporaire.

API

Pour exécuter une requête à l'aide de l'API, insérez une nouvelle tâche, puis définissez la propriété de configuration de tâche query. (Facultatif) Spécifiez votre locationemplacementjobReference dans la propriété de la section de la ressource de job.

Lorsque vous spécifiez les propriétés du job de requête, incluez la propriété configuration.query.priority et définissez la valeur sur BATCH.

Interrogez les résultats en appelant getQueryResults jusqu'à ce que jobComplete ait la valeur true. Recherchez les erreurs et les avertissements dans la liste errors.

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du 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 pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/bigquery"
)

// queryBatch demonstrates issuing a query job using batch priority.
func queryBatch(w io.Writer, projectID, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// dstDatasetID := "mydataset"
	// dstTableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// Build an aggregate table.
	q := client.Query(`
		SELECT
  			corpus,
  			SUM(word_count) as total_words,
  			COUNT(1) as unique_words
		FROM ` + "`bigquery-public-data.samples.shakespeare`" + `
		GROUP BY corpus;`)
	q.Priority = bigquery.BatchPriority
	q.QueryConfig.Dst = client.Dataset(dstDatasetID).Table(dstTableID)

	// Start the job.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Job is started and will progress without interaction.
	// To simulate other work being done, sleep a few seconds.
	time.Sleep(5 * time.Second)
	status, err := job.Status(ctx)
	if err != nil {
		return err
	}

	state := "Unknown"
	switch status.State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	// You can continue to monitor job progress until it reaches
	// the Done state by polling periodically.  In this example,
	// we print the latest status.
	fmt.Fprintf(w, "Job %s in Location %s currently in state: %s\n", job.ID(), job.Location(), state)

	return nil

}

Java

Pour exécuter une requête par lot, définissez la priorité de la requête sur QueryJobConfiguration.Priority.BATCH lors de la création d'une configuration QueryJobConfiguration.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du 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 pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to query batch in a table
public class QueryBatch {

  public static void runQueryBatch() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String query =
        "SELECT corpus"
            + " FROM `"
            + projectId
            + "."
            + datasetName
            + "."
            + tableName
            + " GROUP BY corpus;";
    queryBatch(query);
  }

  public static void queryBatch(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query)
              // Run at batch priority, which won't count toward concurrent rate limit.
              .setPriority(QueryJobConfiguration.Priority.BATCH)
              .build();

      TableResult results = bigquery.query(queryConfig);

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query batch performed successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query batch not performed \n" + e.toString());
    }
  }
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du 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 pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

async function queryBatch() {
  // Runs a query at batch priority.

  // Create query job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationquery
  const queryJobConfig = {
    query: `SELECT corpus
            FROM \`bigquery-public-data.samples.shakespeare\` 
            LIMIT 10`,
    useLegacySql: false,
    priority: 'BATCH',
  };

  // Create job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfiguration
  const jobConfig = {
    // Specify a job configuration to set optional job resource properties.
    configuration: {
      query: queryJobConfig,
    },
  };

  // Make API request.
  const [job] = await bigquery.createJob(jobConfig);

  const jobId = job.metadata.id;
  const state = job.metadata.status.state;
  console.log(`Job ${jobId} is currently in state ${state}`);
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du 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 pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

from google.cloud import bigquery

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

job_config = bigquery.QueryJobConfig(
    # Run at batch priority, which won't count toward concurrent rate limit.
    priority=bigquery.QueryPriority.BATCH
)

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.

# Check on the progress by getting the job's updated state. Once the state
# is `DONE`, the results are ready.
query_job = client.get_job(
    query_job.job_id, location=query_job.location
)  # Make an API request.

print("Job {} is currently in state {}".format(query_job.job_id, query_job.state))

Mode optimisé pour les requêtes courtes

Le mode optimisé pour les requêtes courtes vise à améliorer la latence globale des requêtes courtes, qui sont courantes dans les charges de travail telles que les tableaux de bord ou l'exploration de données. Il exécute la requête et renvoie les résultats en ligne pour les instructions SELECT. Les requêtes utilisant le mode optimisé pour les requêtes courtes ne créent pas de tâche lors de leur exécution, sauf si BigQuery détermine qu'une création de tâche est nécessaire pour effectuer la requête.

Pour activer le mode optimisé pour les requêtes courtes, définissez le champ jobCreationMode de l'instance QueryRequest sur JOB_CREATION_OPTIONAL dans le corps de la requête jobs.query.

Lorsque la valeur de ce champ est définie sur JOB_CREATION_OPTIONAL, BigQuery détermine si la requête peut utiliser le nouveau mode optimisé pour les requêtes courtes. Si tel est le cas, BigQuery exécute la requête et renvoie tous les résultats dans le champ rows de la réponse. Étant donné qu'aucune tâche n'est créée pour cette requête, BigQuery ne renvoie pas de jobReference dans le corps de la réponse. À la place, il renvoie un champ queryId que vous pouvez utiliser pour obtenir des insights sur la requête à l'aide de la vue INFORMATION_SCHEMA.JOBS. Étant donné qu'aucune tâche n'est créée, aucun jobReference ne peut être transmis aux API jobs.get et jobs.getQueryResults pour rechercher des requêtes courtes.

Si BigQuery détermine qu'une tâche est requise pour exécuter la requête, un jobReference est renvoyé. Vous pouvez inspecter le champ job_creation_reason dans la vue INFORMATION_SCHEMA.JOBS pour déterminer pourquoi une tâche a été créée pour la requête. Dans ce cas, vous devez utiliser jobs.getQueryResults pour récupérer les résultats une fois la requête terminée.

Lorsque vous utilisez la valeur JOB_CREATION_OPTIONAL, vous ne devez pas supposer que le champ jobReference est toujours présent dans la réponse. Vous devez vérifier si le champ existe avant d'y accéder.

Le mode optimisé pour les requêtes courtes inclut également un cache de résultats de requêtes qui améliore les performances des requêtes répétées lorsque les données sous-jacentes ne changent pas. Lorsque vous spécifiez useQueryCache: true (la valeur par défaut est true si elle n'est pas spécifiée) et jobCreationMode: JOB_CREATION_OPTIONAL dans QueryRequest, BigQuery tente de diffuser les résultats à partir du cache. Notez que le cache est effectué dans la mesure du possible.

Pour exécuter une requête à l'aide du mode optimisé pour les requêtes courtes, sélectionnez l'une des options suivantes:

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Cliquez sur Requête SQL.

  3. Dans l'éditeur de requête, saisissez une requête GoogleSQL valide.

    Par exemple, interrogez l'ensemble de données public BigQuery usa_names pour déterminer les noms les plus couramment utilisés aux États-Unis entre 1910 et 2013 :

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Cliquez sur Plus, puis sur Optimisé pour les requêtes courtes sous Choisir le mode de requête. Cliquez sur CONFIRMER pour confirmer votre choix.

  5. Cliquez sur Exécuter.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Exécutez la commande bq query, puis spécifiez l'option --job_creation_mode=JOB_CREATION_OPTIONAL. Dans l'exemple suivant, l'option --use_legacy_sql=false vous permet d'utiliser la syntaxe GoogleSQL.

    bq query \
        --rpc=true \
        --use_legacy_sql=false \
        --job_creation_mode=JOB_CREATION_OPTIONAL \
        --location=LOCATION \
        'QUERY'

    Remplacez QUERY par une requête GoogleSQL valide et LOCATION par une région valide où se trouve l'ensemble de données. Par exemple, interrogez l'ensemble de données public BigQuery usa_names pour déterminer les noms les plus couramment utilisés aux États-Unis entre 1910 et 2013:

    bq query \
        --rpc=true \
        --use_legacy_sql=false \
        --job_creation_mode=JOB_CREATION_OPTIONAL \
        --location=us \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    La tâche de requête renvoie la sortie dans la réponse.

API

Pour exécuter une requête en mode requête courte à l'aide de l'API, exécutez une requête de manière synchrone et renseignez la propriété QueryRequest. Ajoutez la propriété jobCreationMode, puis définissez-la sur JOB_CREATION_OPTIONAL.

Vérifiez la réponse. Si jobComplete est égal à true et que jobReference est vide, lisez les résultats du champ rows. Vous pouvez également obtenir l'queryId à partir de la réponse.

Si jobRefernence est présent, vous pouvez vérifier dans jobCreationReason pourquoi une tâche a été créée par BigQuery. Interrogez les résultats en appelant getQueryResults jusqu'à ce que jobComplete ait la valeur true. Recherchez les erreurs et les avertissements dans la liste errors.

Java

Version disponible: 2.37.1 et versions ultérieures

Nécessite de définir la variable d'environnement QUERY_PREVIEW_ENABLED=true.

Exemple : Linux ou macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Exemple : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du 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 pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample demonstrating short mode query execution.
//
// While this feature is still in preview, it is controlled by
// setting the environment variable QUERY_PREVIEW_ENABLED=TRUE
// to request short mode execution.
public class QueryShortMode {

  public static void main(String[] args) {
    String query =
        "SELECT name, gender, SUM(number) AS total FROM "
            + "bigquery-public-data.usa_names.usa_1910_2013 GROUP BY "
            + "name, gender ORDER BY total DESC LIMIT 10";
    queryShortMode(query);
  }

  public static void queryShortMode(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs
      // to be created once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Execute the query. The returned TableResult provides access information
      // about the query execution as well as query results.
      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      JobId jobId = results.getJobId();
      if (jobId != null) {
        System.out.println("Query was run with job state.  Job ID: " + jobId.toString());
      } else {
        System.out.println("Query was run in short mode.  Query ID: " + results.getQueryId());
      }

      // Print the results.
      results
          .iterateAll()
          .forEach(
              row -> {
                System.out.print("name:" + row.get("name").getStringValue());
                System.out.print(", gender: " + row.get("gender").getStringValue());
                System.out.print(", total: " + row.get("total").getLongValue());
                System.out.println();
              });

    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Pour exécuter une requête avec un proxy, consultez la section Configurer un proxy.

Python

Version disponible: 3.21.0 ou ultérieure

Nécessite de définir la variable d'environnement QUERY_PREVIEW_ENABLED=true.

Exemple : Linux ou macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Exemple : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du 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 pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

# This example demonstrates issuing a query that may be run in short query mode.
#
# To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
# environmental variable should be set to `TRUE`.
from google.cloud import bigquery

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

query = """
    SELECT
        name,
        gender,
        SUM(number) AS total
    FROM
        bigquery-public-data.usa_names.usa_1910_2013
    GROUP BY
        name, gender
    ORDER BY
        total DESC
    LIMIT 10
"""
# Run the query.  The returned `rows` iterator can return information about
# how the query was executed as well as the result data.
rows = client.query_and_wait(query)

if rows.job_id is not None:
    print("Query was run with job state.  Job ID: {}".format(rows.job_id))
else:
    print("Query was run in short mode.  Query ID: {}".format(rows.query_id))

print("The query data:")
for row in rows:
    # Row values can be accessed by field name or index.
    print("name={}, gender={}, total={}".format(row[0], row[1], row["total"]))

Nœud

Version disponible: 7.6.1 et versions ultérieures

Nécessite de définir la variable d'environnement QUERY_PREVIEW_ENABLED=true.

Exemple : Linux ou macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Exemple : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du 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 pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// Demonstrates issuing a query that may be run in short query mode.
// To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
// environmental variable should be set to `TRUE`.

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

async function queryShortMode() {
  // SQL query to run.

  const sqlQuery = `
    SELECT name, gender, SUM(number) AS total
    FROM bigquery-public-data.usa_names.usa_1910_2013
    GROUP BY name, gender
    ORDER BY total DESC
    LIMIT 10`;

  // Run the query
  const [rows, , res] = await bigquery.query(sqlQuery);

  if (!res.jobReference) {
    console.log(`Query was run in short mode. Query ID: ${res.queryId}`);
  } else {
    const jobRef = res.jobReference;
    const qualifiedId = `${jobRef.projectId}.${jobRef.location}.${jobRef.jobId}`;
    console.log(
      `Query was run with job state. Job ID: ${qualifiedId}, Query ID: ${res.queryId}`
    );
  }
  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

Go

Version disponible: 1.58.0 et versions ultérieures

Nécessite de définir la variable d'environnement QUERY_PREVIEW_ENABLED=true

Exemple : Linux ou macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Exemple : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du 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 pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"
	"io"

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

// queryShortMode demonstrates issuing a query that may be run in short query mode.
//
// To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
// environmental variable should be set to `TRUE`.
func queryShortMode(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %w", err)
	}
	defer client.Close()

	q := client.Query(`
		SELECT
  			name, gender,
  			SUM(number) AS total
		FROM
			bigquery-public-data.usa_names.usa_1910_2013
		GROUP BY 
			name, gender
		ORDER BY
			total DESC
		LIMIT 10
		`)
	// Run the query and process the returned row iterator.
	it, err := q.Read(ctx)
	if err != nil {
		return fmt.Errorf("query.Read(): %w", err)
	}

	// The iterator provides information about the query execution.
	// Queries that were run in short query mode will not have the source job
	// populated.
	if it.SourceJob() == nil {
		fmt.Fprintf(w, "Query was run in short mode.  Query ID: %q\n", it.QueryID())
	} else {
		j := it.SourceJob()
		qualifiedJobID := fmt.Sprintf("%s:%s.%s", j.ProjectID(), j.Location(), j.ID())
		fmt.Fprintf(w, "Query was run with job state.  Job ID: %q, Query ID: %q\n",
			qualifiedJobID, it.QueryID())
	}

	// Print row data.
	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
}

Pilote JDBC

Version disponible: JDBC v1.6.1

Nécessite de définir JobCreationMode=2 dans la chaîne de connexion.

    jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;JobCreationMode=2;Location=US;
  

Pilote ODBC

Version disponible: ODBC v3.0.7.1016

Nécessite de définir JobCreationMode=2 dans le fichier .ini.

    [ODBC Data Sources]
    Sample DSN=Simba Google BigQuery ODBC Connector 64-bit
    [Sample DSN]
    JobCreationMode=2
  

Quotas

Pour en savoir plus sur les quotas concernant les requêtes interactives et par lot, consultez la page Jobs de requête.

Surveiller les requêtes

Vous pouvez obtenir des informations sur les requêtes pendant leur exécution à l'aide de l'explorateur de tâches ou en interrogeant la vue INFORMATION_SCHEMA.JOBS_BY_PROJECT.

Dry run

Une simulation de BigQuery fournit les informations suivantes :

Les simulations n'utilisent pas d'emplacements de requête, et leur exécution ne vous est pas facturée. L'estimation renvoyée par la simulation vous permettra de calculer les coûts de requête dans le simulateur de coût.

Effectuer une simulation

Pour effectuer une simulation, procédez comme suit :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Saisissez votre requête dans l'Éditeur de requête.

    Si la requête est valide, une coche apparaît automatiquement avec la quantité de données que la requête va traiter. Si la requête n'est pas valide, un point d'exclamation apparaît avec un message d'erreur.

bq

Saisissez une requête semblable à celle-ci à l'aide de l'option --dry_run.

bq query \
--use_legacy_sql=false \
--dry_run \
'SELECT
   COUNTRY,
   AIRPORT,
   IATA
 FROM
   `project_id`.dataset.airports
 LIMIT
   1000'
 

Pour une requête valide, la commande génère la réponse suivante :

Query successfully validated. Assuming the tables are not modified,
running this query will process 10918 bytes of data.

API

Pour effectuer une simulation avec l'API, envoyez une tâche de requête avec la valeur dryRun définie sur true dans le type JobConfiguration.

Accéder

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du 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 pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// queryDryRun demonstrates issuing a dry run query to validate query structure and
// provide an estimate of the bytes scanned.
func queryDryRun(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	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
		name,
		COUNT(*) as name_count
	FROM ` + "`bigquery-public-data.usa_names.usa_1910_2013`" + `
	WHERE state = 'WA'
	GROUP BY name`)
	q.DryRun = true
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"

	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Dry run is not asynchronous, so get the latest status and statistics.
	status := job.LastStatus()
	if err := status.Err(); err != nil {
		return err
	}
	fmt.Fprintf(w, "This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)
	return nil
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du 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 pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.JobStatistics;
import com.google.cloud.bigquery.QueryJobConfiguration;

// Sample to run dry query on the table
public class QueryDryRun {

  public static void runQueryDryRun() {
    String query =
        "SELECT name, COUNT(*) as name_count "
            + "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
            + "WHERE state = 'WA' "
            + "GROUP BY name";
    queryDryRun(query);
  }

  public static void queryDryRun(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query).setDryRun(true).setUseQueryCache(false).build();

      Job job = bigquery.create(JobInfo.of(queryConfig));
      JobStatistics.QueryStatistics statistics = job.getStatistics();

      System.out.println(
          "Query dry run performed successfully." + statistics.getTotalBytesProcessed());
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du 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 pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

async function queryDryRun() {
  // Runs a dry query of the U.S. given names dataset for the state of Texas.

  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/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
    dryRun: true,
  };

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

  // Print the status and statistics
  console.log('Status:');
  console.log(job.metadata.status);
  console.log('\nJob Statistics:');
  console.log(job.metadata.statistics);
}

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du 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 pour PHP.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

// Construct a BigQuery client object.
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);

// Set job configs
$jobConfig = $bigQuery->query($query);
$jobConfig->useQueryCache(false);
$jobConfig->dryRun(true);

// Extract query results
$queryJob = $bigQuery->startJob($jobConfig);
$info = $queryJob->info();

printf('This query will process %s bytes' . PHP_EOL, $info['statistics']['totalBytesProcessed']);

Python

Définissez la propriété QueryJobConfig.dry_run sur True. La méthode Client.query() renvoie toujours une tâche QueryJob terminée lorsque vous lui transmettez une configuration de requête simulée.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du 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 pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

from google.cloud import bigquery

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

job_config = bigquery.QueryJobConfig(dry_run=True, use_query_cache=False)

# Start the query, passing in the extra configuration.
query_job = client.query(
    (
        "SELECT name, COUNT(*) as name_count "
        "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
        "WHERE state = 'WA' "
        "GROUP BY name"
    ),
    job_config=job_config,
)  # Make an API request.

# A dry run query completes immediately.
print("This query will process {} bytes.".format(query_job.total_bytes_processed))

Étape suivante