Cambia los dialectos de SQL

Este tema describe cómo configurar el dialecto de consulta cuando consultas datos de BigQuery. Puedes usar el SQL estándar o el dialecto SQL heredado.

Para aprender cómo comenzar a consultar datos mediante la IU web de BigQuery, consulta Guía de inicio rápido con la IU web de BigQuery.

Para aprender cómo comenzar a consultar datos mediante la herramienta de línea de comandos de bq, consulta Inicio rápido mediante la herramienta de línea de comandos de bq.

Cambia del dialecto predeterminado

La interfaz que usas para consultar tus datos determina qué dialecto de consulta es el predeterminado:

  • En GCP Console y las bibliotecas cliente, el SQL estándar es el predeterminado.
  • En la IU web clásica de BigQuery, la herramienta de línea de comandos de bq y la API de REST, el SQL heredado es el predeterminado.

A continuación, se explica cómo cambiar a un dialecto diferente:

Console

El dialecto predeterminado para GCP Console es SQL estándar. Para cambiar el dialecto a SQL heredado, realiza los siguientes pasos:

  1. Si es necesario, haz clic en Redactar consulta nueva para abrir la ventana del editor de consultas.

  2. Debajo del editor de consultas, haz clic en Más > Configuración de consulta.

  3. Haz clic en Opciones avanzadas.

  4. En la sección Configuración adicional, para el Dialecto SQL, haz clic en Heredado. Esto establece la opción de SQL heredado para esta consulta. Cuando haces clic en Redactar consulta nueva para crear una consulta nueva, debes seleccionar la opción sql heredada nuevamente.

IU clásica

El dialecto predeterminado para la IU web clásica de BigQuery es SQL heredado. Para cambiar el dialecto a SQL estándar, sigue estos pasos:

  1. En la IU web clásica, haz clic en Redactar consulta.

  2. Haz clic en Mostrar opciones.

  3. Para el Dialecto SQL, desmarca la casilla Usar SQL heredado. Esto establece la opción SQL estándar mientras tienes abierto el editor de consultas. Si cierras el editor de consultas y lo vuelves a abrir, debes anular la selección de la opción sql heredado nuevamente.

CLI

El dialecto de consulta predeterminado en la herramienta de línea de comandos de bq es SQL heredado. Para cambiar al dialecto SQL estándar, agrega el marcador --use_legacy_sql=false o --nouse_legacy_sql a tu declaración de línea de comandos.

Por ejemplo:

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

C#

Antes de probar esta muestra, sigue las instrucciones de configuración para C# que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de C# de BigQuery.

Cuando se ejecuta una consulta, se utiliza SQL estándar de forma predeterminada.


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"]}");
        }
    }
}

Usa SQL heredado

Para usar SQL heredado en la ejecución de consultas, configura el 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 probar este ejemplo, sigue las instrucciones de configuración de Go incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.

Según la configuración predeterminada, la biblioteca cliente de Go utiliza SQL estándar.


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

Usa SQL heredado

Para cambiar una consulta a SQL heredado, aprovecha la propiedad UseLegacySQL dentro de la configuración de la 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 probar este ejemplo, sigue las instrucciones de configuración de Java incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Java de BigQuery.

Según la configuración predeterminada, la biblioteca cliente de Java utiliza SQL estándar.

// 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");
}

Usa SQL heredado

Configura el parámetro useLegacySql como true para usar la sintaxis de SQL heredado en un trabajo 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 probar esta muestra, sigue las instrucciones de configuración para Node.js que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Node.js de BigQuery.

Según la configuración predeterminada, la biblioteca cliente de Node.js utiliza SQL estándar.

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

Usa SQL heredado

Configura el parámetro useLegacySql como true para usar la sintaxis de SQL heredado en un trabajo de consulta.

PHP

Antes de probar esta muestra, sigue las instrucciones de configuración de PHP que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de PHP de BigQuery.

Según la configuración predeterminada, la biblioteca cliente de PHP utiliza SQL estándar.

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

Usa SQL heredado

Configura el parámetro useLegacySql como true para usar la sintaxis de SQL heredado en un trabajo de consulta.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

Según la configuración predeterminada, la biblioteca cliente de Python utiliza SQL estándar.

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

Usa SQL heredado

Configura el parámetro use_legacy_sql como True para usar la sintaxis de SQL heredado en un trabajo 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 probar esta muestra, sigue las instrucciones de configuración para Ruby que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Ruby de BigQuery.

Según la configuración predeterminada, la biblioteca cliente de Ruby utiliza SQL estándar.

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

Usa un prefijo de consulta en la IU

También puedes configurar el dialecto SQL en GCP Console o la IU web clásica con un prefijo de dialecto SQL como parte de tu consulta.

Los siguientes prefijos te permiten configurar el dialecto SQL:

Prefijo Descripción
#legacySQL Ejecuta la consulta con SQL heredado.
#standardSQL Ejecuta la consulta con SQL estándar.

En GCP Console, cuando usas un prefijo de consulta, la opción de Dialecto SQL está deshabilitada en la Configuración de Consulta.

En la IU web clásica, cuando usas un prefijo de consulta, el prefijo debe coincidir con la opción de Dialecto SQL. Por ejemplo, en la IU web clásica, si desmarcas la opción Usar SQL heredado, no puedes usar el prefijo #legacySQL en tu consulta.

Por ejemplo, si copias y pegas la siguiente consulta en GCP Console, BigQuery ejecuta la consulta con SQL heredado y, también, ignora la configuración predeterminada. La configuración predeterminada para GCP Console es SQL estándar.

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

Los prefijos de consulta #legacySQL y #standardSQL tienen las siguientes características:

  • NO distinguen entre mayúsculas y minúsculas.
  • Deben preceder a la consulta.
  • Deben estar separados de la consulta por un carácter de línea nueva.

Es posible que algunas herramientas de terceros no admitan este prefijo si, por ejemplo, modifican el texto de la consulta antes de enviarla a BigQuery.

Establece SQL estándar como la configuración predeterminada para la herramienta de línea de comandos

Puedes establecer SQL estándar como la sintaxis predeterminada para la herramienta de línea de comandos y la shell interactiva; para ello, edita el archivo de configuración de la herramienta de línea de comandos: .bigqueryrc.

Si deseas obtener más información sobre .bigqueryrc, consulta Configura los valores predeterminados para marcas de línea de comandos.

Para configurar --use_legacy_sql=false en .bigqueryrc, sigue estos pasos:

  1. Abre .bigqueryrc en un editor de texto. .bigqueryrc debería aparecer en el directorio de usuarios de forma predeterminada; por ejemplo, $HOME/.bigqueryrc.

  2. Agrega el siguiente texto al archivo. En este ejemplo, se establece SQL estándar como la sintaxis predeterminada para las consultas y para el comando mk (que se usa cuando se crea una vista). Si ya has configurado valores predeterminados para las marcas de los comandos query o mk, no es necesario que agregues [query] o [mk] nuevamente.

    [query]
    --use_legacy_sql=false
    
    [mk]
    --use_legacy_sql=false
    
  3. Guarda y cierra el archivo.

  4. Si usas la shell interactiva, debes salir y reiniciar para que se apliquen los cambios.

Si deseas obtener información sobre los marcadores de línea de comandos disponibles, consulta la Referencia de la herramienta de línea de comandos de bq.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.