Introdução ao SQL no BigQuery

Este documento oferece uma vista geral das declarações e dos dialetos de SQL suportados no BigQuery.

O GoogleSQL é uma linguagem de consulta estruturada (SQL) em conformidade com a norma ANSI que inclui os seguintes tipos de declarações suportadas:

Dialetos de SQL do BigQuery

O BigQuery suporta o dialeto GoogleSQL, mas também está disponível um dialeto SQL antigo. Se for a primeira vez que usa o BigQuery, deve usar o GoogleSQL, uma vez que suporta a mais ampla gama de funcionalidades. Por exemplo, as funcionalidades, como as declarações DDL e DML, só são suportadas através do GoogleSQL. O SQL antigo é mantido para compatibilidade com versões anteriores e recomendamos que os clientes migrate se estiverem a usar o SQL antigo.

Alterar o dialeto predefinido

A interface que usa para consultar os seus dados determina qual é o dialeto de consulta predefinido. Para mudar para um dialeto diferente:

Consola

O dialeto predefinido para a Google Cloud consola é o GoogleSQL. Para alterar o dialeto para SQL antigo:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, clique no botão Mais > Definições da consulta.

  3. Na secção Opções avançadas, para Dialeto SQL, clique em Antigo e, de seguida, em Guardar. Esta opção define a opção SQL antiga para esta consulta. Quando clica em add_box Consulta SQL para criar uma nova consulta, tem de selecionar novamente a opção SQL antigo.

SQL

O dialeto de SQL predefinido é o GoogleSQL. Pode definir o dialeto de SQL incluindo o prefixo #standardSQL ou #legacySQL como parte da consulta. Estes prefixos de consulta não são sensíveis a maiúsculas e minúsculas, têm de preceder a consulta e têm de estar separados da consulta por um caráter de nova linha. O exemplo seguinte define o dialeto como SQL antigo e consulta o conjunto de dados natality:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

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

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

bq

O dialeto de consulta predefinido na ferramenta de linhas de comando bq é o SQL antigo. Para mudar para o dialeto GoogleSQL, adicione a flag --use_legacy_sql=false ou --nouse_legacy_sql à sua declaração de linha de comandos.

Mude para o dialeto GoogleSQL

Para usar a sintaxe GoogleSQL num trabalho de consulta, defina o parâmetro use_legacy_sql como false.

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

Defina o GoogleSQL como o dialeto predefinido

Pode definir o GoogleSQL como o dialeto predefinido para a ferramenta de linha de comandos e o shell interativo editando o ficheiro de configuração da ferramenta de linha de comandos: .bigqueryrc.

Para mais informações sobre .bigqueryrc, consulte o artigo Definir valores predefinidos para flags específicas de comandos.

Para definir --use_legacy_sql=false em .bigqueryrc:

  1. Abra .bigqueryrc num editor de texto. Por predefinição, o ficheiro .bigqueryrc deve estar no diretório do utilizador, por exemplo, $HOME/.bigqueryrc.
  2. Adicione o seguinte texto ao ficheiro. Este exemplo define o GoogleSQL como a sintaxe predefinida para consultas e para o comando mk (usado quando cria uma vista). Se já configurou valores predefinidos para as flags de comando query ou mk, não precisa de adicionar novamente [query] ou [mk].

    [query] --use_legacy_sql=false [mk] --use_legacy_sql=false 
  3. Guarde e feche o ficheiro.

  4. Se estiver a usar a shell interativa, tem de sair e reiniciar para que as alterações sejam aplicadas.

Para obter informações sobre os sinalizadores de linha de comandos disponíveis, consulte a referência da ferramenta de linhas de comando bq.

C#

Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca C# usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, defina o parâmetro UseLegacySql como 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

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca cliente Go usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, defina a propriedade UseLegacySQL na configuração da consulta como 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

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca cliente Java usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, defina o parâmetro useLegacySql como 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

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca de cliente Node.js usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, defina o parâmetro useLegacySql como 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

Antes de experimentar este exemplo, siga as PHPinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API PHP BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca cliente PHP usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, defina o parâmetro useLegacySql como true.

use Google\Cloud\BigQuery\BigQueryClient;  /**  * Query using legacy sql  *  * @param string $projectId The project Id of your Google Cloud Project.  */ function query_legacy(string $projectId): void {     $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

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca cliente Python usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, defina o parâmetro use_legacy_sql como 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 and waits for query job to complete, passing in the extra configuration. results = client.query_and_wait(     query, job_config=job_config )  # Make an API request.  print("The query data:") for row in results:     print(row)

Ruby

Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Ruby BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Por predefinição, a biblioteca de cliente Ruby usa o GoogleSQL.

Mude para o dialeto SQL antigo

Para usar a sintaxe SQL antigo numa tarefa de consulta, transmita a opção legacy_sql: true com a sua consulta.

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

O que se segue?