Como ativar o SQL padrão

Neste tópico, descrevemos como habilitar o SQL padrão quando você consulta os dados do BigQuery.

Para aprender os primeiros passos com a IU da Web do BigQuery, consulte o Guia de início rápido de uso da IU da Web.

Para aprender os primeiros passos com a ferramenta de linha de comando bq, consulte o guia de início rápido de uso da ferramenta de linha de comando bq.

Definição da opção "useLegacySql"

Para ativar o SQL padrão para uma consulta:

IU da Web

  1. Abra a IU da Web do BigQuery.
  2. Clique em Escrever consulta.
  3. Clique em Mostrar opções.
  4. Desmarque a caixa de seleção Usar SQL legado.

Linha de comando

Adicione a sinalização --use_legacy_sql=false à declaração da linha de comando.

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

C#

Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery C#.

Por padrão, o SQL padrão é usado na execução de uma consulta.

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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Como usar o SQL legado

Para usar o SQL legado ao executar consultas, 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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Go.

Por padrão, a biblioteca de cliente do Go usa o SQL padrão.

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"
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.Println(row)
}

Como usar o SQL legado

Para alternar uma consulta de volta para o SQL legado, utilize a propriedade UseLegacySQL na configuração da consulta.

q := client.Query(sqlString)
q.UseLegacySQL = true

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.Println(row)
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

Por padrão, a biblioteca de cliente do Java usa o SQL padrão.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

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

Como usar o SQL legado

Defina o parâmetro useLegacySql como true para usar a sintaxe do SQL legado em um job de consulta.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
String query = "SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    // To use legacy SQL syntax, set useLegacySql to true.
    QueryJobConfiguration.newBuilder(query).setUseLegacySql(true).build();

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

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Node.js.

Por padrão, a biblioteca de cliente do Node.js usa o SQL padrão.

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

async function query() {
  // Queries the Shakespeare dataset with the cache disabled.

  // Create a client
  const bigqueryClient = new BigQuery();

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;
  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 bigqueryClient.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));
}
query();

Como usar o SQL legado

Defina o parâmetro useLegacySql como true para usar a sintaxe do SQL legado em um job de consulta.

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery PHP.

Por padrão, a biblioteca de cliente do PHP usa o SQL padrão.

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

Como usar o SQL legado

Defina o parâmetro useLegacySql como true para usar a sintaxe do SQL legado em um job de consulta.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python.

Por padrão, a biblioteca de cliente do Python usa o SQL padrão.

# from google.cloud import bigquery
# client = bigquery.Client()

query = (
    "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` "
    'WHERE state = "TX" '
    "LIMIT 100"
)
query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
)  # API request - starts the query

for row in query_job:  # API request - fetches results
    # Row values can be accessed by field name or index
    assert row[0] == row.name == row["name"]
    print(row)

Como usar o SQL legado

Defina o parâmetro use_legacy_sql como True para usar a sintaxe do SQL legado em um job de consulta.

# from google.cloud import bigquery
# 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()
job_config.use_legacy_sql = True

query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
    job_config=job_config,
)  # API request - starts the query

# Print the results.
for row in query_job:  # API request - fetches results
    print(row)

Ruby

Antes de testar esta amostra, siga as instruções de configuração do Ruby em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Ruby.

Por padrão, a biblioteca de cliente do Ruby usa o SQL padrão.

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

Como definir o prefixo de uma consulta

Defina a variante do SQL, legado ou padrão, incluindo um prefixo na sua consulta à IU da Web, na REST API ou ao usar uma biblioteca cliente.

Prefixo Descrição
#legacySQL Executa a consulta com SQL legado
#standardSQL Executa a consulta com SQL padrão

Por exemplo, se você copiar e colar a consulta a seguir na IU da Web, o BigQuery a executa usando o SQL padrão e ignora a definição da opção padrão Usar SQL legado.

#standardSQL
SELECT
  weight_pounds, state, year, gestation_weeks
FROM
  `bigquery-public-data.samples.natality`
ORDER BY weight_pounds DESC
LIMIT 10;

Se você definiu explicitamente a opção "useLegacySql", será necessário ser consistente com o prefixo. Por exemplo, na IU da Web, se você desmarcar a opção Usar SQL legado, não será possível usar o prefixo #legacySQL.

Os prefixos de consulta #legacySQL e #standardSQL:

  • não diferenciam maiúsculas e minúsculas;
  • precisam preceder a consulta;
  • têm que estar separados da tabela por um caractere de nova linha.

Algumas ferramentas de terceiros podem não ser compatíveis com esse prefixo se, por exemplo, modificarem o texto da consulta antes de enviá-la ao BigQuery.

Como configurar o SQL como padrão para a ferramenta de linha de comando

Você pode definir o SQL padrão como a sintaxe padrão para a ferramenta de linha de comando e o shell interativo editando o arquivo de configuração da ferramenta de linha de comando: .bigqueryrc.

Para mais informações sobre .bigqueryrc, consulte Como configurar valores padrão para sinalizadores específicos de comando.

Para definir --use_legacy_sql=false em .bigqueryrc:

  1. Abra o .bigqueryrc em um editor de texto. Por padrão, o .bigqueryrc precisa estar em seu diretório de usuário, por exemplo, $HOME/.bigqueryrc.

  2. Adicione o seguinte texto ao arquivo. Este exemplo define o SQL como a sintaxe padrão para consultas e para o comando mk (usado quando você cria uma visualização). Se você já tiver configurado valores padrão para query ou mk, não será necessário adicionar [query] ou [mk] novamente.

    [query]
    --use_legacy_sql=false
    
    [mk]
    --use_legacy_sql=false
    
  3. Salve e feche o arquivo.

  4. Se você estiver usando o shell interativo, precisará sair e reiniciar para que as mudanças sejam aplicadas.

Para informações sobre os sinalizadores de linha de comando disponíveis, consulte Referência da ferramenta de linha de comando bq.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.