Habilita SQL estándar

En este tema, se describe cómo habilitar SQL estándar cuando se consultan datos de BigQuery.

Si deseas obtener información sobre cómo comenzar a usar la IU web de BigQuery, consulta la Guía de inicio rápido sobre cómo utilizar la IU web.

Para aprender cómo comenzar a usar la herramienta de línea de comandos de bq, consulta la Guía de inicio rápido sobre cómo utilizar la herramienta de línea de comandos de bq.

Configura la opción useLegacySql

A fin de habilitar SQL estándar para una consulta, realiza lo siguiente:

IU web

  1. Abre la IU web de BigQuery.
  2. Haz clic en Redactar consulta.
  3. Haz clic en Mostrar opciones.
  4. Desmarca la casilla Usar SQL heredado.

Línea de comandos

Agrega la marca --use_legacy_sql=false a tu declaración de línea de comandos.

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 esta muestra, sigue las instrucciones de configuración para Go de 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 esta muestra, sigue las instrucciones de configuración de Java 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 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
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();

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 esta muestra, sigue las instrucciones de configuración para Python 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 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

Configura un prefijo de consulta

Puedes configurar la variante de SQL, ya sea heredado o estándar; para ello, incluye un prefijo en tu consulta en la IU web, la API de REST o cuando utilices una biblioteca cliente.

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

Por ejemplo, si copias y pegas la siguiente consulta en la IU web, BigQuery ignora la opción de configuración predeterminada Usar SQL heredado y ejecuta la consulta con SQL estándar.

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

Si estableces explícitamente la opción useLegacySql, debe ser coherente con el prefijo. Por ejemplo, si desmarcas la opción Usar SQL heredado en la IU web, no puedes usar el prefijo #legacySQL.

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 el shell interactivo; 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 específicas de comando.

Para configurar --use_legacy_sql=false en .bigqueryrc, realiza lo siguiente:

  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 estás utilizando el shell interactivo, 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 la Referencia de la herramienta de línea de comandos de bq.

Pasos siguientes

  • Para obtener más información acerca de SQL estándar, consulta la Referencia de SQL.
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.