esegui una query

Questo documento mostra come eseguire una query in BigQuery e comprendere quanti dati verrà elaborata dalla query prima dell'esecuzione eseguendo una prova.

Query interattive e batch

In BigQuery puoi eseguire due tipi di query:

  • Job di query interattivi, ovvero job eseguiti da BigQuery on demand.
  • Job di query batch, ovvero job che BigQuery attende di eseguire fino a quando sono disponibili risorse di calcolo inattive.

Per impostazione predefinita, BigQuery esegue le query come job interattivi, che vengono eseguiti il prima possibile. BigQuery calcola dinamicamente il limite di query in parallelo in base alla disponibilità delle risorse e favorisce l'esecuzione di più query interattive in parallelo rispetto alle query batch. Una volta raggiunto il limite di query in parallelo, le query aggiuntive attendono in una coda. Per saperne di più, consulta la sezione Code di query.

BigQuery salva i risultati della query in una tabella temporanea (predefinita) o permanente. Quando specifichi una tabella permanente come tabella di destinazione per i risultati, puoi scegliere se aggiungere o sovrascrivere una tabella esistente oppure creare una nuova tabella con un nome univoco.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eseguire un job di query, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per eseguire un job di query. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per eseguire un job di query sono necessarie le seguenti autorizzazioni:

  • bigquery.jobs.create sul progetto.
  • bigquery.tables.getData in tutte le tabelle e le viste a cui fa riferimento la query. Per eseguire query sulle viste, devi disporre di questa autorizzazione anche per tutte le tabelle e le viste sottostanti. Se utilizzi viste autorizzate o set di dati autorizzati, non è necessario accedere ai dati di origine sottostanti.

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Per maggiori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.

Esegui una query interattiva

Per eseguire una query interattiva, selezionare una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Fai clic su Crea una nuova query.

  3. Nell'Editor query, inserisci una query GoogleSQL valida.

    Ad esempio, esegui una query sul set di dati pubblico BigQuery usa_names per determinare i nomi più comuni negli Stati Uniti tra il 1910 e il 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. (Facoltativo) Specifica la tabella e la località di destinazione per i risultati della query:

    1. Nell'editor query, fai clic su Altro e poi su Impostazioni query.
    2. Nella sezione Destinazione, seleziona Imposta una tabella di destinazione per i risultati della query.
    3. In Set di dati, inserisci il nome di un set di dati esistente per la tabella di destinazione, ad esempio myProject.myDataset.
    4. In ID tabella, inserisci un nome per la tabella di destinazione, ad esempio myTable.
    5. Se la tabella di destinazione è esistente, per Preferenza di scrittura della tabella di destinazione scegli se aggiungere o sovrascrivere la tabella con i risultati della query.

      Se la tabella di destinazione è nuova, BigQuery la crea quando esegui la query.

    6. Nella sezione Impostazioni aggiuntive, fai clic sul menu Località dei dati e poi seleziona un'opzione.

      In questo esempio, il set di dati usa_names viene archiviato nella località multiregionale degli Stati Uniti. Se specifichi una tabella di destinazione per questa query, il set di dati che contiene la tabella di destinazione deve trovarsi anche nella località multiregionale degli Stati Uniti. Non puoi eseguire query su un set di dati e scrivere i risultati in una tabella in un'altra.

    7. Fai clic su Salva.

  5. Fai clic su Esegui.

    Se non specifichi una tabella di destinazione, il job di query scrive l'output in una tabella temporanea (cache).

  6. (Facoltativo) Per ordinare i risultati della query per colonna, fai clic su Apri menu di ordinamento accanto al nome della colonna e seleziona un ordinamento. Se i byte stimati elaborati per l'ordinamento sono maggiori di zero, il numero di byte viene visualizzato nella parte superiore del menu.

  7. (Facoltativo) Per vedere i risultati della query, vai alla scheda Grafico. Puoi aumentare o diminuire lo zoom del grafico, scaricarlo come file PNG o attivare/disattivare la visibilità della legenda.

    Nel riquadro Configurazione grafico, puoi modificare il tipo di grafico (a linee, a barre o a dispersione) e configurare le misure e le dimensioni del grafico. I campi di questo riquadro sono precompilati con la configurazione iniziale dedotta dallo schema della tabella di destinazione della query. La configurazione viene conservata tra le seguenti esecuzioni di query nello stesso editor di query. Le dimensioni supportano i tipi di dati INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME e STRING, mentre le misure supportano i tipi di dati INTEGER, INT64, FLOAT, FLOAT64, NUMERIC e BIGNUMERIC.

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Utilizza il comando bq query. Nell'esempio seguente, il flag --use_legacy_sql=false consente di utilizzare la sintassi GoogleSQL.

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

    Sostituisci QUERY con una query GoogleSQL valida. Ad esempio, esegui una query sul set di dati pubblico BigQuery usa_names per determinare i nomi più comuni negli Stati Uniti tra il 1910 e il 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;'
    

    Il job di query scrive l'output in una tabella temporanea (cache).

    Se vuoi, puoi specificare la tabella e la località di destinazione per i risultati della query. Per scrivere i risultati in una tabella esistente, includi il flag appropriato per aggiungere (--append_table=true) o sovrascrivere (--replace=true) la tabella.

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

    Sostituisci quanto segue:

    • LOCATION: una o più regioni per la tabella di destinazione, ad esempio US

      In questo esempio, il set di dati usa_names viene archiviato nella località multiregionale degli Stati Uniti. Se specifichi una tabella di destinazione per questa query, il set di dati che contiene la tabella di destinazione deve trovarsi anche nella località multiregionale degli Stati Uniti. Non puoi eseguire query su un set di dati in una località e scrivere i risultati in una tabella in un'altra località.

      Puoi impostare un valore predefinito per la località utilizzando il file.bigqueryrc.

    • TABLE: un nome per la tabella di destinazione, ad esempio myDataset.myTable

      Se la tabella di destinazione è nuova, BigQuery crea la tabella quando esegui la query. Tuttavia, devi specificare un set di dati esistente.

      Se la tabella non si trova nel progetto attuale, aggiungi l'ID progetto Google Cloud utilizzando il formato PROJECT_ID:DATASET.TABLE, ad esempio myProject:myDataset.myTable. Se --destination_table non è specificato, viene generato un job di query che scrive l'output in una tabella temporanea.

API

Per eseguire una query utilizzando l'API, inserisci un nuovo job e compila la proprietà query di configurazione job. (Facoltativo) Specifica la tua località nella proprietà location nella sezione jobReference della risorsa job.

Sondaggio per vedere i risultati chiamando il numero getQueryResults. Sondaggio fino a quando jobComplete non equivale a true. Verifica la presenza di errori e avvisi nell'elenco errors.

C#

Prima di provare questo esempio, segui le istruzioni di configurazione di C# disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.


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

Prima di provare questo esempio, segui le istruzioni di configurazione di Go disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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());
    }
  }
}

Per eseguire una query con un proxy, consulta Configurazione di un proxy.

Node.js

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di PHP disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery PHP.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Ruby.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Per saperne di più, consulta Query interattive e batch.

Eseguire una query batch

Per eseguire una query batch, selezionare una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Fai clic su Crea una nuova query.

  3. Nell'Editor query, inserisci una query GoogleSQL valida.

    Ad esempio, esegui una query sul set di dati pubblico BigQuery usa_names per determinare i nomi più comuni negli Stati Uniti tra il 1910 e il 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. Fai clic su Altro e poi su Impostazioni query.

  5. Nella sezione Gestione delle risorse, seleziona Batch.

  6. (Facoltativo) Specifica la tabella e la località di destinazione per i risultati della query:

    1. Nella sezione Destinazione, seleziona Imposta una tabella di destinazione per i risultati della query.
    2. In Set di dati, inserisci il nome di un set di dati esistente per la tabella di destinazione, ad esempio myProject.myDataset.
    3. In ID tabella, inserisci un nome per la tabella di destinazione, ad esempio myTable.
    4. Se la tabella di destinazione è esistente, per Preferenza di scrittura della tabella di destinazione scegli se aggiungere o sovrascrivere la tabella con i risultati della query.

      Se la tabella di destinazione è nuova, BigQuery la crea quando esegui la query.

    5. Nella sezione Impostazioni aggiuntive, fai clic sul menu Località dei dati e poi seleziona un'opzione.

      In questo esempio, il set di dati usa_names viene archiviato nella località multiregionale degli Stati Uniti. Se specifichi una tabella di destinazione per questa query, il set di dati che contiene la tabella di destinazione deve trovarsi anche nella località multiregionale degli Stati Uniti. Non puoi eseguire query su un set di dati e scrivere i risultati in una tabella in un'altra.

  7. Fai clic su Salva.

  8. Fai clic su Esegui.

    Se non specifichi una tabella di destinazione, il job di query scrive l'output in una tabella temporanea (cache).

  9. (Facoltativo) Per ordinare i risultati della query per colonna, fai clic su Apri menu di ordinamento accanto al nome della colonna e seleziona un ordinamento. Se i byte stimati elaborati per l'ordinamento sono maggiori di zero, il numero di byte viene visualizzato nella parte superiore del menu.

  10. (Facoltativo) Per vedere i risultati della query, vai alla scheda Grafico. Puoi aumentare o diminuire lo zoom del grafico, scaricarlo come file PNG o attivare/disattivare la visibilità della legenda.

    Nel riquadro Configurazione grafico, puoi modificare il tipo di grafico (a linee, a barre o a dispersione) e configurare le misure e le dimensioni del grafico. I campi di questo riquadro sono precompilati con la configurazione iniziale dedotta dallo schema della tabella di destinazione della query. La configurazione viene conservata tra le seguenti esecuzioni di query nello stesso editor di query. Le dimensioni supportano i tipi di dati INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME e STRING, mentre le misure supportano i tipi di dati INTEGER, INT64, FLOAT, FLOAT64, NUMERIC e BIGNUMERIC.

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Utilizza il comando bq query e specifica il flag --batch. Nell'esempio seguente, il flag --use_legacy_sql=false consente di utilizzare la sintassi di GoogleSQL.

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

    Sostituisci QUERY con una query GoogleSQL valida. Ad esempio, esegui una query sul set di dati pubblico BigQuery usa_names per determinare i nomi più comuni negli Stati Uniti tra il 1910 e il 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;'
    

    Il job di query scrive l'output in una tabella temporanea (cache).

    Se vuoi, puoi specificare la tabella e la località di destinazione per i risultati della query. Per scrivere i risultati in una tabella esistente, includi il flag appropriato per aggiungere (--append_table=true) o sovrascrivere (--replace=true) la tabella.

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

    Sostituisci quanto segue:

    • LOCATION: una o più regioni per la tabella di destinazione, ad esempio US

      In questo esempio, il set di dati usa_names viene archiviato nella località multiregionale degli Stati Uniti. Se specifichi una tabella di destinazione per questa query, il set di dati che contiene la tabella di destinazione deve trovarsi anche nella località multiregionale degli Stati Uniti. Non puoi eseguire query su un set di dati in una località e scrivere i risultati in una tabella in un'altra località.

      Puoi impostare un valore predefinito per la località utilizzando il file.bigqueryrc.

    • TABLE: un nome per la tabella di destinazione, ad esempio myDataset.myTable

      Se la tabella di destinazione è nuova, BigQuery crea la tabella quando esegui la query. Tuttavia, devi specificare un set di dati esistente.

      Se la tabella non si trova nel progetto attuale, aggiungi l'ID progetto Google Cloud utilizzando il formato PROJECT_ID:DATASET.TABLE, ad esempio myProject:myDataset.myTable. Se --destination_table non è specificato, viene generato un job di query che scrive l'output in una tabella temporanea.

API

Per eseguire una query utilizzando l'API, inserisci un nuovo job e compila la proprietà query di configurazione job. (Facoltativo) Specifica la tua località nella proprietà location nella sezione jobReference della risorsa job.

Quando compili le proprietà del job di query, includi la proprietà configuration.query.priority e imposta il valore su BATCH.

Sondaggio per vedere i risultati chiamando il numero getQueryResults. Sondaggio fino a quando jobComplete non equivale a true. Verifica la presenza di errori e avvisi nell'elenco errors.

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Per eseguire una query batch, imposta la priorità delle query su QueryJobConfiguration.Priority.BATCH durante la creazione di QueryJobConfiguration.

Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Per saperne di più, consulta Query interattive e batch.

Quote

Per informazioni sulle quote relative alle query interattive e batch, consulta Job di query.

Visualizza il numero di query interattive e batch

Puoi visualizzare il numero di query interattive e batch utilizzando la visualizzazione INFORMATION_SCHEMA.JOBS_BY_PROJECT. L'esempio seguente utilizza la visualizzazione INFORMATION_SCHEMA.JOBS_BY_PROJECT per ottenere il numero di query interattive e batch eseguite nelle ultime 7 ore:

SELECT
  priority,
  COUNT(*) active_jobs,
FROM
  `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 hour)
  AND end_time IS NULL
  AND job_type = 'QUERY'
GROUP BY priority

La vista INFORMATION_SCHEMA.JOBS_BY_PROJECT utilizza il campo priority per indicare se una query è INTERACTIVE o BATCH. Per ulteriori informazioni, consulta la sezione Schema.

Esegui una prova

Una prova in BigQuery fornisce le seguenti informazioni:

Le esecuzioni di prova non utilizzano slot di query e non ti vengono addebitati costi per le prove. Puoi utilizzare la stima restituita in una prova di prova per calcolare i costi delle query nel Calcolatore prezzi.

Esegui prove

Per eseguire una prova, segui questi passaggi:

Console

  1. Vai alla pagina di BigQuery.

    Vai a BigQuery

  2. Inserisci la query nell'Editor query.

    Se la query è valida, viene visualizzato automaticamente un segno di spunta insieme alla quantità di dati che verrà elaborata dalla query. Se la query non è valida, viene visualizzato un punto esclamativo insieme a un messaggio di errore.

bq

Inserisci una query come la seguente utilizzando il flag --dry_run.

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

Per una query valida, il comando produce la seguente risposta:

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

API

Per eseguire una prova utilizzando l'API, invia un job di query con dryRun impostato su true nel tipo JobConfiguration.

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di PHP disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery PHP.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Imposta la proprietà QueryJobConfig.dry_run su True. Client.query() restituisce sempre un QueryJob completato quando viene fornita una configurazione di query di prova.

Prima di provare questo esempio, segui le istruzioni di configurazione di Python disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Passaggi successivi