Esta página explica como executar consultas SQL do Dataflow parametrizadas.
O SQL do Dataflow suporta parâmetros de consulta posicionais e com nome. Especifique os parâmetros de consulta com a seguinte sintaxe:
- Parâmetros com nome com o caráter
@
seguido de um identificador, como@param_name
- Parâmetros posicionais com o caráter
?
Pode usar parâmetros com nome ou posicionais numa consulta, mas não ambos.
Executar consultas parametrizadas
Para executar uma consulta parametrizada, defina o tipo de dados e o valor dos parâmetros de consulta. O tipo e o valor dos parâmetros de consulta têm de corresponder ao tipo dos objetos da base de dados que os parâmetros representam.
Pode definir parâmetros de consulta através da Google Cloud consola ou da CLI Google Cloud:
Consola
Para definir parâmetros de consulta, use a IU do SQL do Dataflow:
Aceda à IU do Dataflow SQL.
Introduza a consulta SQL do Dataflow no editor de consultas.
Por exemplo, a seguinte consulta seleciona viagens de táxi que custam, pelo menos, o preço especificado:
SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE ride_status = "dropoff" AND meter_reading >= @price_min
Clique em Criar tarefa do Cloud Dataflow para abrir um painel de opções de tarefas.
Na secção Parâmetros de consulta SQL do painel, preencha os campos Nome, Tipo e Valor. O nome do parâmetro no exemplo é
price_min
e o tipo éFLOAT64
.Se o parâmetro for posicional, omita o campo Nome.
(Opcional) Se a consulta contiver mais parâmetros, clique em Adicionar parâmetro.
A Google Cloud consola não suporta parâmetros ARRAY
nem STRUCT
. Para especificar parâmetros ARRAY
ou STRUCT
, use a CLI do Google Cloud.
gcloud
Para definir parâmetros de consulta, use o comando
gcloud dataflow sql query
e as flags --parameter
.
Pode repetir a flag --parameter
para cada parâmetro de consulta. Defina cada sinalizador --parameter
como name:type:value
.
O comando seguinte executa uma consulta parametrizada num stream do Pub/Sub de viagens de táxi:
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'
Se o parâmetro for posicional, defina as flags --parameter
como :type:value
.
Usar matrizes em consultas parametrizadas
Para usar um tipo de matriz num parâmetro de consulta, defina o tipo como ARRAY<data-type>
.
Construa o valor como uma lista de elementos separados por vírgulas entre parênteses retos, como ["pickup", "enroute", "dropoff"]
.
Consola
A IU do Dataflow SQL não suporta parâmetros ARRAY
em consultas do Dataflow SQL.
gcloud
Para definir um parâmetro de matriz, defina o sinalizador --parameter
do comando gcloud dataflow sql query
como name:ARRAY<data-type>:value
O comando seguinte executa uma consulta com um parâmetro de matriz com nome num fluxo do Pub/Sub de viagens de táxi:
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)'
Para mais informações, consulte a referência do SQL do Dataflow para os tipos ARRAY
.
Usar datas/horas nas consultas parametrizadas
Para usar uma data/hora num parâmetro de consulta, defina o tipo como STRING
, mas crie o valor no formato de data/hora canónico.
Consola
Para definir parâmetros de data/hora, use a IU SQL do Dataflow:
Aceda à IU do Dataflow SQL.
Introduza a consulta SQL do Dataflow no editor de consultas.
Por exemplo, a seguinte consulta seleciona viagens de táxi que ocorreram após a data especificada:
SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE event_timestamp >= TIMESTAMP (@date_min)
Clique em Criar tarefa do Cloud Dataflow para abrir um painel de opções de tarefas.
Na secção Parâmetros de consulta SQL, clique em Adicionar parâmetro.
No campo Tipo, selecione
STRING
.No campo Valor, introduza uma data/hora.
gcloud
Para definir um parâmetro de indicação de tempo, defina o sinalizador --parameter
do comando
gcloud dataflow sql query
como name:STRING:value
O comando seguinte executa uma consulta com um parâmetro de data/hora com nome numa stream do Pub/Sub de viagens de táxi:
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)'
Para mais informações, consulte a referência de SQL do Dataflow para os tipos TIMESTAMP
.
Usar structs em consultas parametrizadas
Para usar uma struct num parâmetro de consulta, defina o tipo como STRUCT<field-name data-type, ...>
.
Construa o valor como uma lista separada por vírgulas de pares de chave-valor.
Por exemplo, STRUCT<date_min TIMESTAMP, status STRING>
define uma struct com um campo denominado date_min
do tipo TIMESTAMP
e um campo denominado status
do tipo STRING
.
Consola
A IU do Dataflow SQL não suporta parâmetros STRUCT
em consultas do Dataflow SQL.
gcloud
Para definir um parâmetro de matriz, defina o sinalizador --parameter
do comando gcloud dataflow sql query
como name:STRUCT<field-name data-type, ...>:value
O comando seguinte executa uma consulta com um parâmetro struct denominado numa stream do Pub/Sub de viagens de táxi:
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'
Para mais informações, consulte a referência de SQL do Dataflow para os tipos STRUCT
.