Cambia los dialectos de SQL

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

Para aprender a consultar datos mediante la IU web de BigQuery, consulta Guía de inicio rápido con la IU web en GCP Console.

Para aprender a consultar datos mediante la herramienta de línea de comandos de bq, consulta Guía de inicio rápido con la herramienta de línea de comandos de bq.

Cambia el dialecto predeterminado

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

  • En Cloud 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.

Para cambiar a un dialecto diferente, sigue estos pasos:

Console

El dialecto predeterminado para Cloud Console es SQL estándar. Para cambiar el dialecto a SQL heredado, haz lo siguiente:

  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 volver a seleccionar la opción SQL heredado.

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, haz lo siguiente:

  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 a anular la selección de la opción SQL heredado.

CLI

El dialecto predeterminado para las consultas en la herramienta de línea de comandos de bq es SQL heredado. Para cambiar al dialecto SQL estándar, agrega las marcas --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 este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en Guía de inicio rápido: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de BigQuery para C#.

Cuando se ejecuta una consulta, se usa 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: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de BigQuery para Go.

De forma predeterminada, la biblioteca cliente de Go usa 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 Guía de inicio rápido: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de BigQuery para Java.

Según la configuración predeterminada, la biblioteca cliente de Java usa 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 este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran en Guía de inicio rápido: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de BigQuery para Node.js.

De forma predeterminada, la biblioteca cliente de Node.js usa 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: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de BigQuery para PHP.

De forma predeterminada, la biblioteca cliente de PHP usa 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 Guía de inicio rápido: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de Python de BigQuery.

De forma predeterminada, la biblioteca cliente de Python usa 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 este ejemplo, sigue las instrucciones de configuración de Ruby que se encuentran en la Guía de inicio rápido: usa bibliotecas cliente. Si deseas obtener más información, consulta la página sobre la documentación de referencia de la API de Ruby de BigQuery.

De forma predeterminada, la biblioteca cliente de Ruby usa 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 Cloud Console o en la IU web clásica si incluyes un prefijo de dialecto de SQL en 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 Cloud Console, cuando usas un prefijo de consulta, la opción de Dialecto SQL está inhabilitada 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 Cloud Console, BigQuery ejecuta la consulta con SQL heredado y, también, ignora la configuración predeterminada. La configuración predeterminada para Cloud 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 salto de línea.

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 de la herramienta de línea de comandos y la shell interactiva si editas 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, haz lo siguiente:

  1. Abre .bigqueryrc en un editor de texto. De forma predeterminada, .bigqueryrc debe aparecer en el directorio de usuarios, 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 el comando mk (que se usa cuando se crea una vista). Si ya configuraste los valores predeterminados para las marcas de comando query o mk, no es necesario que vuelvas a agregar [query] o [mk].

    [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 las marcas de línea de comandos disponibles, consulta Referencia de la herramienta de línea de comandos.

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

Enviar comentarios sobre...

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