Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Introduzione a SQL in BigQuery

Questo documento offre una panoramica delle istruzioni e dei dialetti SQL supportati in BigQuery.

Panoramica

Google SQL standard è un Structured Query Language (SQL) conforme all'ANSI che include i seguenti tipi di istruzioni supportate:

Dialetti SQL BigQuery

BigQuery supporta il dialetto SQL standard di Google, ma è disponibile anche un dialetto SQL precedente. Se non hai mai utilizzato BigQuery, devi utilizzare SQL standard di Google, poiché supporta la più ampia gamma di funzionalità. Ad esempio, funzionalità come le istruzioni DDL e DML sono supportate solo utilizzando SQL standard di Google. Il codice SQL precedente viene mantenuto per la compatibilità con le versioni precedenti; consigliamo ai clienti di eseguire la migrazione se utilizzano il linguaggio SQL precedente.

Modifica dal dialetto predefinito

L'interfaccia utilizzata per eseguire query sui dati determina il dialetto della query predefinito. Per passare a un altro dialetto:

Console

Il dialetto predefinito della console Google Cloud è Google Standard SQL. Per cambiare il dialetto in SQL precedente:

  1. Se necessario, fai clic su Scrivi nuova query per aprire la finestra dell'editor delle query.

  2. Fai clic sul pulsante Altre impostazioni di query.

  3. Nella sezione Impostazioni aggiuntive, per Dialetto SQL, fai clic su Precedente. Imposta l'opzione SQL precedente per questa query. Quando fai clic su Scrivi nuova query per creare una nuova query, devi selezionare di nuovo l'opzione SQL precedente.

SQL

Il dialetto SQL predefinito è SQL standard di Google. Puoi impostare il dialetto SQL includendo il prefisso #standardSQL o #legacySQL nella query. Questi prefissi di query non sono sensibili alle maiuscole, devono precedere la query e devono essere separati dalla query da un carattere di nuova riga. L'esempio seguente imposta il dialetto su SQL precedente ed esegue query sul set di dati Natality:

  1. In Google Cloud Console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

    #legacySQL
    SELECT
      weight_pounds, state, year, gestation_weeks
    FROM
      [bigquery-public-data:samples.natality]
    ORDER BY
      weight_pounds DESC
    LIMIT
      10;
    

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta la sezione Esecuzione di query interattive.

bq

Il dialetto della query predefinito nello strumento a riga di comando bq è SQL precedente. Per passare al dialetto SQL standard di Google, aggiungi il flag --use_legacy_sql=false o --nouse_legacy_sql all'istruzione della riga di comando.

Passa al dialetto SQL standard di Google

Per utilizzare la sintassi SQL standard di Google in un job di query, imposta il parametro use_legacy_sql su false.

  bq query \
  --use_legacy_sql=false \
  'SELECT
    word
  FROM
    `bigquery-public-data.samples.shakespeare`'

Imposta Google SQL standard come dialetto predefinito

Puoi impostare Google Standard SQL come dialetto predefinito per lo strumento a riga di comando e la shell interattiva modificando il file di configurazione dello strumento a riga di comando: .bigqueryrc.

Per maggiori informazioni su .bigqueryrc, consulta la pagina relativa all'impostazione di valori predefiniti per flag specifici dei comandi.

Per impostare --use_legacy_sql=false in .bigqueryrc:

  1. Apri .bigqueryrc in un editor di testo. Per impostazione predefinita, .bigqueryrc dovrebbe essere presente nella directory utente, ad esempio $HOME/.bigqueryrc.
  2. Aggiungi il seguente testo al file. In questo esempio viene impostato Google Standard SQL come sintassi predefinita per le query e per il comando mk (utilizzato quando crei una vista). Se hai già configurato i valori predefiniti per i flag dei comandi query o mk, non devi aggiungere di nuovo [query] o [mk].

    [query]
    --use_legacy_sql=false
    [mk]
    --use_legacy_sql=false
    
  3. Salva e chiudi il file.

  4. Se utilizzi la shell interattiva, devi uscire e riavviare per applicare le modifiche.

Per informazioni sui flag della riga di comando disponibili, consulta la pagina Riferimento allo strumento a riga di comando bq.

C#

Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di BigQuery.

Per impostazione predefinita, la libreria C# utilizza Google SQL standard.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, imposta il parametro UseLegacySql su true.


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

public class BigQueryQueryLegacy
{
    public void QueryLegacy(
        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 { UseLegacySql = true });
        // 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 nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di BigQuery.

Per impostazione predefinita, la libreria client Go utilizza SQL standard di Google.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, imposta la proprietà UseLegacySQL nella configurazione della query su true.

import (
	"context"
	"fmt"
	"io"

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

// queryLegacy demonstrates running a query using Legacy SQL.
func queryLegacy(w io.Writer, projectID, sqlString string) error {
	// projectID := "my-project-id"
	// sqlString = "SELECT 3 as somenum"
	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(sqlString)
	q.UseLegacySQL = true

	// Run the query and process the returned row iterator.
	it, err := q.Read(ctx)
	if err != nil {
		return fmt.Errorf("query.Read(): %w", err)
	}
	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 nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

Per impostazione predefinita, la libreria client Java utilizza Google SQL standard.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, imposta il parametro useLegacySql su true.

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 RunLegacyQuery {

  public static void main(String[] args) {
    runLegacyQuery();
  }

  public static void runLegacyQuery() {
    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();

      // To use legacy SQL syntax, set useLegacySql to true.
      String query =
          "SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;";
      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query).setUseLegacySql(true).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("Legacy query ran successfully");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Legacy query did not run \n" + e.toString());
    }
  }
}

Node.js

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di BigQuery.

Per impostazione predefinita, la libreria client Node.js utilizza Google SQL standard.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, imposta il parametro useLegacySql su true.

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

async function queryLegacy() {
  // Queries the U.S. given names dataset for the state of Texas using legacy SQL.

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

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

  // 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 nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di BigQuery.

Per impostazione predefinita, la libreria client PHP utilizza Google SQL standard.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, imposta il parametro useLegacySql su true.

use Google\Cloud\BigQuery\BigQueryClient;

$query = 'SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus';

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

$queryResults = $bigQuery->runQuery($jobConfig);

$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 nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di BigQuery.

Per impostazione predefinita, la libreria client Python utilizza SQL standard di Google.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, imposta il parametro use_legacy_sql su True.

from google.cloud import bigquery

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

query = (
    "SELECT name FROM [bigquery-public-data:usa_names.usa_1910_2013] "
    'WHERE state = "TX" '
    "LIMIT 100"
)

# Set use_legacy_sql to True to use legacy SQL syntax.
job_config = bigquery.QueryJobConfig(use_legacy_sql=True)

# Start the query, passing in the extra configuration.
query_job = client.query(query, job_config=job_config)  # Make an API request.

print("The query data:")
for row in query_job:
    print(row)

Ruby

Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di BigQuery.

Per impostazione predefinita, la libreria client Ruby utilizza Google SQL standard.

Passa al dialetto SQL precedente

Per utilizzare la sintassi SQL precedente in un job di query, passa l'opzione legacy_sql: true con la tua query.

require "google/cloud/bigquery"

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

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

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

Passaggi successivi