Como executar consultas parametrizadas
O BigQuery aceita parâmetros de consulta para impedir a injeção de SQL quando consultas são criadas usando entradas dos usuários. Esse recurso está disponível somente com a sintaxe do GoogleSQL. É possível usar os parâmetros de consulta como substitutos de expressões arbitrárias. Eles não podem ser usados como substitutos de identificadores, nomes de colunas, nomes de tabelas ou outras partes da consulta.
Para especificar um parâmetro nomeado, use o caractere @
seguido de um identificador, como @param_name
. Se preferir, use o valor do marcador ?
para especificar um parâmetro de posição. Uma consulta pode usar parâmetros de posição ou nomeados, mas não os dois.
É possível executar uma consulta parametrizada no BigQuery das seguintes maneiras:
- O comando
bq query
da ferramenta de linha de comando bq; - A API
- As bibliotecas de cliente
O exemplo a seguir mostra como transmitir valores de parâmetro a uma consulta parametrizada:
Console
As consultas parametrizadas não são compatíveis com o Console do Google Cloud.
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
--parameter
para inserir valores para os parâmetros no formatoname:type:value
. Um nome vazio gera um parâmetro de posição. O tipo pode ser omitido para pressuporSTRING
.A sinalização
--parameter
precisa ser usada com--use_legacy_sql=false
para especificar a sintaxe do GoogleSQL.(Opcional) Especifique o local usando a sinalização
--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 nomeados, defina parameterMode
como NAMED
na configuração do job query
.
Preencha queryParameters
com a lista de parâmetros na configuração do job query
. Defina name
de cada parâmetro com o @param_name
usado na consulta.
Defina useLegacySql
como false
para ativar a sintaxe do GoogleSQL.
{
"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"
}
Tente fazer isso no Google APIs Explorer.
Para usar parâmetros de posição, defina parameterMode
como POSITIONAL
na configuração do job query
.
C#
Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em C#.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para usar parâmetros nomeados:Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em C#.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para usar parâmetros de posição:Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para usar parâmetros nomeados:Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para usar parâmetros nomeados:Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para usar parâmetros nomeados:Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para usar parâmetros nomeados:Como usar matrizes em consultas parametrizadas
Para usar um tipo de matriz em um parâmetro de consulta, defina o tipo como ARRAY<T>
, em que T
é o tipo dos elementos na matriz. Crie o valor como uma lista, entre colchetes, de elementos separados por vírgula, como [1, 2,
3]
.
Consulte a referência de tipos de dados para ver mais informações sobre o tipo de matriz.
Console
As consultas parametrizadas não são compatíveis com o Console do Google Cloud.
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.
Esta consulta seleciona os nomes mais populares de bebês do sexo masculino nascidos nos Estados Unidos que começam com a letra W:
bq query \ --use_legacy_sql=false \ --parameter='gender::M' \ --parameter='states:ARRAY<STRING>:["WA", "WI", "WV", "WY"]' \ 'SELECT name, SUM(number) AS count FROM `bigquery-public-data.usa_names.usa_1910_2013` WHERE gender = @gender AND state IN UNNEST(@states) GROUP BY name ORDER BY count DESC LIMIT 10;'
Coloque a declaração de tipo de matriz entre aspas simples para que a resposta ao comando não seja acidentalmente redirecionada para um arquivo pelo caractere
>
.
API
Para usar um parâmetro com valor de matriz, defina parameterType
como ARRAY
na configuração do job query
.
Se os valores da matriz forem escalares, defina parameterType
como o tipo dos valores, como STRING
. Se os valores da matriz forem estruturas, defina como STRUCT
e inclua as definições de campo necessárias em structTypes
.
Por exemplo, esta consulta seleciona os nomes mais comuns de bebês do sexo masculino nascidos nos Estados Unidos que começam com a letra W.
{
"query": "SELECT name, sum(number) as count\nFROM `bigquery-public-data.usa_names.usa_1910_2013`\nWHERE gender = @gender\nAND state IN UNNEST(@states)\nGROUP BY name\nORDER BY count DESC\nLIMIT 10;",
"queryParameters": [
{
"parameterType": {
"type": "STRING"
},
"parameterValue": {
"value": "M"
},
"name": "gender"
},
{
"parameterType": {
"type": "ARRAY",
"arrayType": {
"type": "STRING"
}
},
"parameterValue": {
"arrayValues": [
{
"value": "WA"
},
{
"value": "WI"
},
{
"value": "WV"
},
{
"value": "WY"
}
]
},
"name": "states"
}
],
"useLegacySql": false,
"parameterMode": "NAMED"
}
C#
Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em C#.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Como usar carimbos de data/hora em consultas parametrizadas
Para usar um carimbo de data/hora em um parâmetro de consulta, a API REST subjacente usa um valor
do tipo TIMESTAMP
no formato YYYY-MM-DD HH:MM:SS.DDDDDD time_zone
. Se você
estiver usando as bibliotecas de cliente, crie um objeto de data legado nesse idioma
para que a biblioteca o converta para o formato certo. Para ver mais informações, consulte os exemplos de linguagem específicos a seguir.
Para mais informações sobre o tipo TIMESTAMP
, consulte a referência de tipos de dados.
Console
As consultas parametrizadas não são compatíveis com o Console do Google Cloud.
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.
Esta consulta adiciona uma hora ao valor de parâmetro de carimbo de data/hora:
bq query \ --use_legacy_sql=false \ --parameter='ts_value:TIMESTAMP:2016-12-07 08:00:00' \ 'SELECT TIMESTAMP_ADD(@ts_value, INTERVAL 1 HOUR);'
API
Para usar um parâmetro de carimbo de data/hora, defina parameterType
como TIMESTAMP
na configuração do job de consulta.
Esta consulta adiciona uma hora ao valor de parâmetro de carimbo de data/hora.
{
"query": "SELECT TIMESTAMP_ADD(@ts_value, INTERVAL 1 HOUR);",
"queryParameters": [
{
"name": "ts_value",
"parameterType": {
"type": "TIMESTAMP"
},
"parameterValue": {
"value": "2016-12-07 08:00:00"
}
}
],
"useLegacySql": false,
"parameterMode": "NAMED"
}
C#
Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em C#.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Como usar estruturas em consultas parametrizadas
Para usar uma estrutura em um parâmetro de consulta, defina o tipo como STRUCT<T>
, em que T
define os campos e tipos dentro da estrutura. As definições de campo são separadas por vírgulas e têm o formato field_name TF
, em que TF
é o tipo do campo. Por exemplo, STRUCT<x INT64, y STRING>
define uma estrutura com um campo chamado x
do tipo INT64
e um segundo campo chamado y
do tipo STRING
.
Para mais informações sobre o tipo STRUCT
, consulte a referência dos tipos de dados .
Console
As consultas parametrizadas não são compatíveis com o Console do Google Cloud.
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.
Esta simples consulta demonstra o uso dos tipos estruturados retornando o valor de parâmetro:
bq query \ --use_legacy_sql=false \ --parameter='struct_value:STRUCT<x INT64, y STRING>:{"x": 1, "y": "foo"}' \ 'SELECT @struct_value AS s;'
API
Para usar um parâmetro de estrutura, defina parameterType
como STRUCT
na configuração do job de consulta.
Adicione um objeto para cada campo da estrutura a structTypes
no queryParameters
do job.
Se os valores da estrutura forem escalares, defina type
como o tipo dos valores, como STRING
. Se os valores da estrutura forem matrizes, defina como ARRAY
e defina o campo aninhado arrayType
para o tipo apropriado. Se os valores da estrutura forem estruturas, defina type
como STRUCT
e adicione structTypes
necessário.
Esta simples consulta demonstra o uso dos tipos estruturados retornando o valor de parâmetro.
{
"query": "SELECT @struct_value AS s;",
"queryParameters": [
{
"name": "struct_value",
"parameterType": {
"type": "STRUCT",
"structTypes": [
{
"name": "x",
"type": {
"type": "INT64"
}
},
{
"name": "y",
"type": {
"type": "STRING"
}
}
]
},
"parameterValue": {
"structValues": {
"x": {
"value": "1"
},
"y": {
"value": "foo"
}
}
}
}
],
"useLegacySql": false,
"parameterMode": "NAMED"
}
C#
A biblioteca de cliente do BigQuery para .NET não é compatível com parâmetros struct.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.