Executar consultas parametrizadas
O BigQuery suporta parâmetros de consulta para ajudar a evitar a injeção SQL quando as consultas são criadas com a entrada do utilizador. Esta funcionalidade só está disponível com a sintaxe GoogleSQL. Os parâmetros de consulta podem ser usados como substitutos de expressões arbitrárias. Não é possível usar parâmetros como substitutos de identificadores, nomes de colunas, nomes de tabelas ou outras partes da consulta.
Para especificar um parâmetro com nome, use o caráter @ seguido de um
identificador, como
@param_name. Em alternativa, use o valor do marcador de posição ? para especificar um parâmetro posicional. Tenha em atenção que uma consulta pode usar parâmetros posicionais ou com nome, mas não ambos.
Pode executar uma consulta parametrizada no BigQuery das seguintes formas:
- O comando
bq queryda ferramenta de linhas de comando bq - a API
- as bibliotecas cliente
O exemplo seguinte mostra como transmitir valores de parâmetros a uma consulta parametrizada:
Consola
As consultas parametrizadas não são suportadas pela Google Cloud consola.
bq
-
In the Google Cloud console, 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.
Use
--parameterpara fornecer valores para parâmetros no formulárioname:type:value. Um nome vazio produz um parâmetro posicional. O tipo pode ser omitido para assumirSTRING.A flag
--parametertem de ser usada em conjunto com a flag--use_legacy_sql=falsepara especificar a sintaxe do GoogleSQL.(Opcional) Especifique a sua localização através da flag
--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;'
API
Para usar parâmetros com nome, defina parameterMode como NAMED na configuração da tarefa query.
Preencha queryParameters com a lista de parâmetros na configuração do trabalho query. Defina o name de cada parâmetro com o @param_name usado na consulta.
Ative a sintaxe GoogleSQL
definindo 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"
}
Experimente no Explorador de APIs Google.
Para usar parâmetros posicionais, defina parameterMode como POSITIONAL na configuração da tarefa query.
C#
Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Para usar parâmetros com nome:Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Para usar parâmetros posicionais: