Realizar consultas con parámetros

BigQuery admite parámetros de consulta para ayudar a evitar la inyección de SQL cuando las consultas se crean con entradas de usuario. Esta función solo está disponible con la sintaxis de GoogleSQL. Los parámetros de consulta se pueden usar como sustitutos de expresiones arbitrarias. Los parámetros no se pueden usar como sustitutos de identificadores, nombres de columnas, nombres de tablas u otras partes de la consulta.

Para especificar un parámetro con nombre, usa el carácter @ seguido de un identificador, como @param_name. También puedes usar el valor de marcador de posición ? para especificar un parámetro posicional. Ten en cuenta que una consulta puede usar parámetros posicionales o con nombre, pero no ambos.

Cuando se usa un parámetro, el valor proporcionado no se registra en los registros de BigQuery para proteger la información potencialmente sensible.

Puedes ejecutar una consulta con parámetros en BigQuery de las siguientes formas:

  • El comando bq query de la herramienta de línea de comandos bq
  • la API
  • las bibliotecas de cliente

En el siguiente ejemplo se muestra cómo transferir valores de parámetros a una consulta parametrizada:

Consola

La consola Google Cloud no admite consultas parametrizadas.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Usa --parameter para proporcionar valores de parámetros con el formato name:type:value. Si el nombre está vacío, se genera un parámetro posicional. El tipo se puede omitir para asumir STRING.

    La marca --parameter debe usarse junto con la marca --use_legacy_sql=false para especificar la sintaxis de GoogleSQL.

    (Opcional) Especifica tu ubicación con la marca --location.

    bq query \
       --use_legacy_sql=false \
       --parameter=corpus::romeoandjuliet \
       --parameter=min_word_count:INT64:250 \
       'SELECT
         word,
         word_count
       FROM
         `bigquery-public-data.samples.shakespeare`
       WHERE
         corpus = @corpus
       AND
         word_count >= @min_word_count
       ORDER BY
         word_count DESC;'
  3. API

    Para usar parámetros con nombre, asigna el valor NAMED a parameterMode en la configuración del trabajo query.

    Rellena queryParameters con la lista de parámetros del trabajo query. Asigna el name de cada parámetro con el @param_name usado en la consulta.

    Habilita la sintaxis de GoogleSQL definiendo useLegacySql como false.

    {
      "query": "SELECT word, word_count FROM `bigquery-public-data.samples.shakespeare` WHERE corpus = @corpus AND word_count >= @min_word_count ORDER BY word_count DESC;",
      "queryParameters": [
        {
          "parameterType": {
            "type": "STRING"
          },
          "parameterValue": {
            "value": "romeoandjuliet"
          },
          "name": "corpus"
        },
        {
          "parameterType": {
            "type": "INT64"
          },
          "parameterValue": {
            "value": "250"
          },
          "name": "min_word_count"
        }
      ],
      "useLegacySql": false,
      "parameterMode": "NAMED"
    }
    

    Pruébalo en el Explorador de APIs de Google.

    Para usar parámetros posicionales, asigna el valor POSITIONAL a parameterMode en la configuración del trabajo query.

    C#

    Antes de probar este ejemplo, sigue las C#instrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API C# de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    Para usar parámetros con nombre, sigue estos pasos:
    
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryQueryWithNamedParameters
    {
        public void QueryWithNamedParameters(string projectId