Usa consultas de Dataflow SQL parametrizadas

En esta página, se explica cómo ejecutar consultas de Dataflow SQL parametrizadas.

Dataflow SQL admite parámetros de consulta con nombre y posicionales. Especifica parámetros de consulta con la siguiente sintaxis:

  • Parámetros con nombre con el carácter @ seguido de un identificador, como @param_name
  • Parámetros posicionales con el carácter ?

Puedes usar parámetros con nombre o posicionales en una consulta, pero no ambos.

Ejecuta consultas con parámetros

Para ejecutar una consulta parametrizada, define el tipo de dato y el valor de los parámetros de consulta. El tipo y el valor de los parámetros de consulta deben coincidir con el tipo de objetos de base de datos que los parámetros representan.

Puedes definir parámetros de consulta con la consola de Google Cloud o Google Cloud CLI:

Console

Para definir los parámetros de consulta, usa la IU de Dataflow SQL:

  1. Ve a la IU de Dataflow SQL.

    Ir a la IU de Dataflow SQL

  2. Ingresa la consulta de Dataflow SQL en el editor de consultas.

    Por ejemplo, la siguiente consulta selecciona viajes en taxi que cuestan al menos el precio especificado:

    SELECT *
    FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
    WHERE
     ride_status = "dropoff"
     AND meter_reading >= @price_min
    
  3. Haz clic en Crear trabajo de Cloud Dataflow para abrir un panel de opciones de trabajo.

  4. En la sección Parámetros de consulta de SQL del panel, completa los campos Nombre, Tipo y Valor. El nombre del parámetro en el ejemplo es price_min, y el tipo es FLOAT64.

    Si el parámetro es posicional, omite el campo Nombre.

  5. Si la consulta contiene más parámetros, haga clic en Agregar parámetro (Opcional).

La consola de Google Cloud no es compatible con los parámetros ARRAY ni STRUCT. Para especificar los parámetros ARRAY o STRUCT, usa Google Cloud CLI.

gcloud

Para definir los parámetros de consulta, usa el comando gcloud dataflow sql query y las marcas --parameter.

Puedes repetir la marca --parameter para cada parámetro de consulta. Establece cada marca --parameter en name:type:value.

El siguiente comando ejecuta una consulta parametrizada en una transmisión de Pub/Sub de viajes en taxi:

gcloud dataflow sql query \
  --job-name=job-name \
  --region=region \
  --bigquery-dataset=destination-dataset \
  --bigquery-table=destination-table \
  --parameter=status:STRING:dropoff \
  --parameter=price_min:FLOAT64:5.5 \
'SELECT *
FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
WHERE
  ride_status = @status
  AND meter_reading >= @price_min'

Si el parámetro es posicional, configura las marcas --parameter en :type:value.

Usa arreglos en consultas con parámetros

Para usar un tipo de arreglo en un parámetro de consulta, establece el tipo en ARRAY<data-type>. Crea el valor como una lista separada por comas de elementos entre corchetes, como ["pickup", "enroute", "dropoff"].

Console

La IU de Dataflow SQL no admite parámetros ARRAY en consultas de Dataflow SQL.

gcloud

Para definir un parámetro de arreglo, configura la marca --parameter del comando gcloud dataflow sql query en name:ARRAY<data-type>:value.

El siguiente comando ejecuta la consulta con un parámetro de arreglo con nombre en una transmisión de Pub/Sub de viajes en taxi:

gcloud dataflow sql query \
  --job-name=job-name
  --region=region
  --bigquery-dataset=destination-dataset \
  --bigquery-table=destination-table \
  --parameter='status:ARRAY<STRING>:["pickup", "enroute", "dropoff"]' \
'SELECT *
FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
WHERE
  ride_status IN UNNEST(@status)'

A fin de obtener más información, consulta la referencia de Dataflow SQL para tipos ARRAY.

Usa marcas de tiempo en consultas con parámetros

Para usar una marca de tiempo en un parámetro de consulta, establece el tipo en STRING, pero construye el valor en el formato de marca de tiempo canónico.

Console

Para definir parámetros de marcas de tiempo, usa la IU de Dataflow SQL:

  1. Ve a la IU de Dataflow SQL.

    Ir a la IU de Dataflow SQL

  2. Ingresa la consulta de Dataflow SQL en el editor de consultas.

    Por ejemplo, la siguiente consulta selecciona viajes en taxi que se realizaron después de la fecha especificada:

    SELECT *
    FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
    WHERE
      event_timestamp >= TIMESTAMP (@date_min)
    
  3. Haz clic en Crear trabajo de Cloud Dataflow para abrir un panel de opciones de trabajo.

  4. En la sección Parámetros de consulta de SQL, haz clic en Agregar parámetro.

  5. En el campo Tipo, selecciona STRING.

  6. En el campo Valor, ingresa una marca de tiempo.

gcloud

Para definir un parámetro de marca de tiempo, establece la marca --parameter del comando gcloud dataflow sql query en name:STRING:value.

El siguiente comando ejecuta una consulta con un parámetro de marca de tiempo con nombre en una transmisión de Pub/Sub de viajes en taxi:

gcloud dataflow sql query \
  --job-name=job-name \
  --region=region \
  --bigquery-dataset=destination-dataset \
  --bigquery-table=destination-table \
  --parameter='date_min:STRING:2020-01-01 00:00:00.000 UTC' \
'SELECT *
FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
WHERE
  event_timestamp >= TIMESTAMP (@date_min)'

A fin de obtener más información, consulta la referencia de Dataflow SQL para los tipos TIMESTAMP.

Usa structs en consultas con parámetros

Para usar un struct en un parámetro de consulta, establece el tipo en STRUCT<field-name data-type, ...>. Construye el valor como una lista separada por comas de pares clave-valor.

Por ejemplo, STRUCT<date_min TIMESTAMP, status STRING> define una struct con un campo llamado date_min de tipo TIMESTAMP y un campo llamado status de tipo STRING.

Console

La IU de Dataflow SQL no admite parámetros STRUCT en consultas de Dataflow SQL.

gcloud

Para definir un parámetro de arreglo, configura la marca --parameter del comando gcloud dataflow sql query en name:STRUCT<field-name data-type, ...>:value.

El siguiente comando ejecuta una consulta con un parámetro de struct con nombre en una transmisión de Pub/Sub de viajes en taxi:

gcloud dataflow sql query \
  --job-name=job-name \
  --region=region \
  --bigquery-dataset=destination-dataset \
  --bigquery-table=destination-table \
  --parameter='rides:STRUCT<riders_min INT64, status STRING>:
  {"riders_min": 2, "status": "dropoff"}' \
'SELECT *
FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
WHERE
  passenger_count >= @rides.riders_min
  AND ride_status = @rides.status'

A fin de obtener más información, consulta la referencia de Dataflow SQL para los tipos STRUCT.