Exécuter des requêtes paramétrées
BigQuery accepte les paramètres de requête pour parer au risque d'injection SQL dans les requêtes conçues pour faire intervenir des entrées utilisateur. Cette fonctionnalité n'est disponible qu'avec la syntaxe GoogleSQL. Les paramètres de requête peuvent être utilisés pour remplacer des expressions arbitraires. Vous ne pouvez pas substituer un paramètre à un identifiant, à un nom de colonne, à un nom de table ni aucune autre partie de la requête.
Pour spécifier un paramètre nommé, utilisez le caractère @
suivi d'un identifiant, tel que @param_name
. Vous pouvez également utiliser la valeur d'espace réservé ?
pour spécifier un paramètre positionnel. Notez qu'une requête peut utiliser des paramètres positionnels ou des paramètres nommés, mais pas les deux à la fois.
Vous pouvez exécuter une requête paramétrée dans BigQuery de plusieurs manières :
- Commande
bq query
de l'outil de ligne de commande bq - L'API
- Bibliothèques clientes
L'exemple suivant montre comment transmettre des valeurs de paramètres à une requête paramétrée :
Console
Les requêtes paramétrées ne sont pas compatibles avec la console 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.
L'indicateur
--parameter
permet de fournir des valeurs pour les paramètres selon le formatname:type:value
. Un nom vide engendre un paramètre positionnel. Le type peut être omis s'il s'agit deSTRING
.L'option
--parameter
doit être utilisé conjointement avec l'option--use_legacy_sql=false
pour spécifier la syntaxe GoogleSQL.(Facultatif) Spécifiez votre emplacement à l'aide de l'option
--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
Pour utiliser des paramètres nommés, définissez parameterMode
sur NAMED
dans la configuration de la tâche query
.
Dans la configuration de la tâche query
, insérez la liste des paramètres dans queryParameters
. Définissez l'élément name
de chaque paramètre sur le paramètre @param_name
utilisé dans la requête.
Activez la syntaxe GoogleSQL en définissant useLegacySql
sur 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"
}
Testez cette requête dans l'explorateur d'API Google.
Pour utiliser des paramètres positionnels, définissez parameterMode
sur POSITIONAL
dans la configuration de la tâche query
.
C#
Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour C#.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Pour utiliser des paramètres nommés :Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour C#.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Pour utiliser des paramètres positionnels :Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Pour utiliser des paramètres nommés :Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Pour utiliser des paramètres nommés :Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Pour utiliser des paramètres nommés :Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Pour utiliser des paramètres nommés :Utiliser des tableaux dans des requêtes paramétrées
Pour utiliser un type ARRAY dans un paramètre de requête, définissez le type sur ARRAY<T>
, où T
correspond au type des éléments du tableau. Construisez la valeur sous la forme d'une liste entre crochets d'éléments séparés par des virgules, comme [1, 2,
3]
.
Console
Les requêtes paramétrées ne sont pas compatibles avec la console 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.
Par exemple, cette requête sélectionne les noms masculins les plus populaires pour les bébés nés dans les États américains dont le nom commence par la lettre 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;'
Veillez à délimiter la déclaration du type ARRAY par des guillemets simples, afin que le résultat de la commande ne puisse pas être redirigé accidentellement vers un fichier par le caractère
>
.
API
Pour utiliser un paramètre de type ARRAY, définissez parameterType
sur ARRAY
dans la configuration de la tâche query
.
Si les valeurs du tableau sont scalaires, définissez l'élément parameterType
sur le type de ces valeurs, par exemple STRING
. Si les valeurs du tableau sont des structures, définissez l'élément sur STRUCT
et ajoutez les définitions de champs requises à structTypes
.
Par exemple, cette requête sélectionne les noms masculins les plus populaires pour les bébés nés dans les États américains dont le nom commence par la lettre 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#
Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour C#.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Utiliser des valeurs d'horodatage dans des requêtes paramétrées
Pour utiliser un horodatage dans un paramètre de requête, l'API REST sous-jacente prend une valeur de type TIMESTAMP
au format YYYY-MM-DD HH:MM:SS.DDDDDD time_zone
. Si vous utilisez les bibliothèques clientes, vous créez un objet de date intégré dans cette langue que la bibliothèque convertit au format approprié. Pour en savoir plus, consultez les exemples spécifiques aux langages suivants.
Pour plus d'informations sur le type TIMESTAMP
, consultez la documentation sur les types de données.
Console
Les requêtes paramétrées ne sont pas compatibles avec la console 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.
Cette requête ajoute une heure à la valeur du paramètre d'horodatage :
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
Pour utiliser un paramètre de code temporel, définissez parameterType
sur TIMESTAMP
dans la configuration du job de requête.
Cette requête ajoute une heure à la valeur du paramètre d'horodatage.
{
"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#
Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour C#.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Utiliser des structures dans des requêtes paramétrées
Pour utiliser une structure dans un paramètre de requête, définissez le type sur STRUCT<T>
, où T
définit les champs et les types utilisés dans la structure. Les définitions de champ sont séparées par des virgules et prennent la forme field_name TF
, où TF
est le type du champ. Par exemple, STRUCT<x INT64, y STRING>
définit une structure contenant un champ nommé x
du type INT64
et un second champ nommé y
du type STRING
.
Pour plus d'informations sur le type STRUCT
, consultez la documentation sur les types de données.
Console
Les requêtes paramétrées ne sont pas compatibles avec la console 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.
Cette requête élémentaire illustre l'utilisation de types structurés en renvoyant la valeur du paramètre :
bq query \ --use_legacy_sql=false \ --parameter='struct_value:STRUCT<x INT64, y STRING>:{"x": 1, "y": "foo"}' \ 'SELECT @struct_value AS s;'
API
Pour utiliser un paramètre de structure, définissez parameterType
sur STRUCT
dans la configuration de la tâche de requête.
Ajoutez un objet à structTypes
pour chaque champ de la structure dans le paramètre queryParameters
de la tâche.
Si les valeurs de la structure sont des scalaires, définissez type
sur le type des valeurs, par exemple STRING
. Si les valeurs de structure sont des tableaux, définissez cette valeur sur ARRAY
, puis spécifiez le champ imbriqué arrayType
sur le type approprié. Si les valeurs de structure sont elles-mêmes des structures, définissez type
sur STRUCT
, puis ajoutez les valeurs structTypes
requises.
Cette requête élémentaire illustre l'utilisation de types structurés en renvoyant la valeur du paramètre.
{
"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#
La bibliothèque cliente BigQuery pour .NET n'est pas compatible avec les paramètres STRUCT.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.