Esecuzione di query con parametri
BigQuery supporta i parametri di query per contribuire a impedire l'iniezione SQL quando le query vengono costruite utilizzando l'input dell'utente. Questa funzionalità è disponibile solo con la sintassi GoogleSQL. I parametri di query possono essere utilizzati come sostituti di espressioni arbitrarie. I parametri non possono essere utilizzati come sostituti di identificatori, nomi di colonne, nomi di tabelle o altre parti della query.
Per specificare un parametro denominato, utilizza il carattere @
seguito da un
identificatore, ad esempio
@param_name
. In alternativa, utilizza il valore segnaposto ?
per specificare un parametro posizionale. Tieni presente che una query può utilizzare parametri posizionali o denominati, ma non entrambi.
Puoi eseguire una query con parametri in BigQuery nei seguenti modi:
- il comando
bq query
dello strumento a riga di comando bq - l'API
- le librerie client
L'esempio seguente mostra come passare i valori dei parametri a un modello query:
Console
Le query con parametri non sono supportate dalla 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.
Utilizza
--parameter
per fornire i valori per i parametri nel moduloname:type:value
. Un nome vuoto genera un parametro posizionale. Il tipo può essere omesso per presupporreSTRING
.Il flag
--parameter
deve essere utilizzato insieme al flag--use_legacy_sql=false
per specificare la sintassi di GoogleSQL.(Facoltativo) Specifica la tua posizione utilizzando il 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
Per utilizzare i parametri denominati, imposta parameterMode
su NAMED
nella configurazione del job query
.
Compila queryParameters
con l'elenco dei parametri nel job query
configurazione. Imposta il name
di ogni parametro con il @param_name
utilizzato nella query.
Attiva la sintassi GoogleSQL impostando useLegacySql
su 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"
}
Provalo nell'Explorer API di Google.
Per utilizzare i parametri posizionali, imposta parameterMode
su POSITIONAL
nella configurazione del job query
.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery C#.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API C# BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Per utilizzare i parametri posizionali:Vai
Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Per utilizzare i parametri con nome:Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Node.js
Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Node.js BigQuery documentazione di riferimento.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Per utilizzare i parametri con nome:Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API Python BigQuery documentazione di riferimento.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Utilizzo di array nelle query con parametri
Per utilizzare un tipo di array in un parametro di query, imposta il tipo su ARRAY<T>
, dove T
è il tipo di elementi nell'array. Costruisci il valore come
elenco di elementi separati da virgole racchiusi tra parentesi quadre, ad esempio [1, 2,
3]
.
Per ulteriori informazioni sul tipo di array, consulta la documentazione di riferimento sui tipi di dati.
Console
Le query con parametri non sono supportate dalla 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.
Questa query seleziona i nomi più comuni per i bambini nati negli stati degli Stati Uniti che iniziano con la lettera 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;'
Racchiudi la dichiarazione del tipo di array tra virgolette singole, in modo che non venga reindirizzato accidentalmente a un file dal carattere
>
.
API
Per utilizzare un set di parametri con valori di array,
Da parameterType
a ARRAY
pollici
la configurazione del job query
.
Se i valori dell'array sono scalari, imposta parameterType
sul tipo di valori, ad esempio STRING
. Se i valori dell'array sono
strutture lo impostano su STRUCT
e aggiungono le definizioni dei campi necessarie
structTypes
.
Ad esempio, questa query seleziona i nomi più popolari per i bambini nati negli stati degli Stati Uniti che iniziano con la lettera 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#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API C# BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Vai
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Go BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API Node.js BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API Python BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Utilizzo dei timestamp nelle query con parametri
Per utilizzare un timestamp in un parametro di query, l'API REST sottostante assume un valore
di tipo TIMESTAMP
nel formato YYYY-MM-DD HH:MM:SS.DDDDDD time_zone
. Se utilizzi le librerie client, crei un oggetto Data integrato in quel linguaggio e la libreria lo converte nel formato corretto. Per ulteriori informazioni,
consulta i seguenti esempi specifici per ogni lingua.
Per ulteriori informazioni sul tipo TIMESTAMP
, consulta il
riferimento ai tipi di dati.
Console
Le query con parametri non sono supportate dalla 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.
Questa query aggiunge un'ora al valore del parametro timestamp:
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
Per utilizzare un parametro timestamp, imposta il parametro
parameterType
a TIMESTAMP
nella configurazione del job di query.
Questa query aggiunge un'ora al valore parametro timestamp.
{
"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#
Prima di provare questo esempio, segui le istruzioni per la configurazione di C# nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API C# BigQuery documentazione di riferimento.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API Node.js BigQuery documentazione di riferimento.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Utilizzo di struct nelle query con parametri
Per utilizzare una struttura in un parametro di query, imposta il tipo su STRUCT<T>
, dove T
definisce i campi e i tipi all'interno della struttura. Le definizioni dei campi sono
separate da virgole e nel formato field_name TF
, dove TF
è il tipo
del campo. Ad esempio, STRUCT<x INT64, y STRING>
definisce una struttura con un
campo denominato x
di tipo INT64
e un secondo campo denominato y
di tipo STRING
.
Per ulteriori informazioni sul tipo STRUCT
, consulta il
riferimento ai tipi di dati.
Console
Le query con parametri non sono supportate dalla 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.
Questa query banale dimostra l'uso di tipi strutturati restituendo il valore valore parametro:
bq query \ --use_legacy_sql=false \ --parameter='struct_value:STRUCT<x INT64, y STRING>:{"x": 1, "y": "foo"}' \ 'SELECT @struct_value AS s;'
API
Per utilizzare un parametro struct, imposta
parameterType
su STRUCT
nella configurazione del job di query.
Aggiungi un oggetto per ogni campo dello struct
structTypes
nel queryParameters
del job.
Se i valori struct sono scalari, imposta la funzione
type
al tipo di valori, ad esempio STRING
. Se i valori della struttura sono array, imposta questo valore su ARRAY
e imposta il campo arrayType
nidificato sul tipo appropriato. Se i valori struct sono strutture, imposta type
su STRUCT
e aggiungi il structTypes
necessario.
Questa query banale dimostra l'uso di tipi strutturati restituendo il valore .
{
"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 libreria client BigQuery per .NET non supporta parametri struct.
Vai
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.