Esegui query con parametri
Le query con parametri in BigQuery ti consentono di sostituire espressioni arbitrarie direttamente nelle istruzioni GoogleSQL. Il passaggio di parametri per tipi di dati come array, timestamp, struct e intervalli consente di eseguire in modo sicuro le query effettuate dall'input utente, contribuendo al contempo a proteggere i dati dagli attacchi di SQL injection.
Limitazioni
- I parametri di query sono supportati solo nella sintassi GoogleSQL.
- I parametri non possono essere utilizzati come sostituti di identificatori, nomi di colonne, nomi di tabelle o altre parti della query.
- Il valore parametro di query non può essere
NULL.
Passa un parametro in una 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. Una query può utilizzare parametri posizionali o denominati, ma non entrambi.
Puoi eseguire una query con parametri in BigQuery nei seguenti modi:
- L'editor di query di BigQuery Studio nella console Google Cloud
- Il comando
bq querydello strumento a riga di comando bq - L'API
- Librerie client
I seguenti esempi mostrano come passare i valori parametro a una query parametrizzata:
Console
Per eseguire una query con parametri nella console Google Cloud , configura i parametri in Impostazioni query, quindi fai riferimento ai parametri nella query SQL aggiungendo il prefisso @ a ogni nome di parametro.
Tipi di dati supportati: la console Google Cloud supporta solo query parametrizzate di tipi di dati primitivi, come BIGNUMERIC, BOOL, BYTES, DATE, DATETIME, FLOAT64, GEOGRAPHY, INT64, INTERVAL, NUMERIC, STRING, TIME o TIMESTAMP. I tipi di dati complessi, come ARRAY e STRUCT, non sono supportati nella console Google Cloud .
Aggiungi i parametri nella console Google Cloud
Vai alla pagina BigQuery.
Nella barra degli strumenti dell'editor di query, fai clic su Modifica > Impostazioni query.
Nel riquadro Impostazioni query, individua la sezione Parametri di query e fai clic su Aggiungi parametro.
Per ogni parametro della query, fornisci quanto segue:
- Nome: inserisci il nome del parametro (non includere il carattere
@). - Tipo: seleziona il tipo di dati per il parametro.
- Valore: inserisci il valore che vuoi utilizzare per questa esecuzione.
- Nome: inserisci il nome del parametro (non includere il carattere
Fai clic su Salva.
Passa i valori parametro a una query nella console Google Cloud
Nell'editor di query, inserisci una query SQL utilizzando i parametri configurati nel passaggio precedente. Fai riferimento ai parametri aggiungendo il carattere
@come prefisso ai loro nomi, come mostrato nell'esempio.Esempio:
SELECT word, word_count FROM `bigquery-public-data.samples.shakespeare` WHERE corpus = @corpus AND word_count >= @min_word_count ORDER BY word_count DESC;Per questo esempio, devi aggiungere il parametro
corpuscomeSTRINGcon valoreromeoandjuliete il parametromin_word_countcomeINT64con valore250.Se la query contiene un parametro mancante o non valido, viene visualizzato un messaggio di errore. Fai clic su Imposta parametro nel messaggio di errore per regolare le impostazioni del parametro.
Per eseguire la query con parametri nell'editor di query, fai clic su Esegui.
bq
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud , viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Utilizza
--parameterper fornire i valori dei parametri nel moduloname:type:value. Un nome vuoto genera un parametro posizionale. Il tipo può essere omesso per assumereSTRING.Il flag
--parameterdeve essere utilizzato insieme al flag--use_legacy_sql=falseper specificare la sintassi GoogleSQL.(Facoltativo) Specifica la tua località 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 nella configurazione del job query. 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"
}
Prova in 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 di C# nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri posizionali:Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Per utilizzare i parametri denominati:Utilizza gli 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. Crea il valore come un elenco di elementi separati da virgole racchiusi tra parentesi quadre, ad esempio [1, 2,
3].
Per saperne di più sul tipo di array, consulta il riferimento sui tipi di dati.
Console
Gli array nelle query con parametri non sono supportati dalla consoleGoogle Cloud .
bq
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud , viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Questa query seleziona i nomi più popolari per i bambini maschi 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;'
Assicurati di racchiudere la dichiarazione del tipo di array tra virgolette singole in modo che l'output comando non venga reindirizzato accidentalmente a un file dal carattere
>.
API
Per utilizzare un parametro con valore di array, imposta
parameterType su ARRAY nella
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, imposta questo valore su STRUCT e aggiungi le definizioni dei campi necessarie a structTypes.
Ad esempio, questa query seleziona i nomi più popolari per i bambini maschi 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 di C# nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Utilizza i timestamp nelle query con parametri
Per utilizzare un timestamp in un parametro di query, l'API REST sottostante accetta 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 linguaggio.
Per saperne di più sul tipo TIMESTAMP, consulta il riferimento ai tipi di dati.
Console
Segui i passaggi per aggiungere parametri nella console Google Cloud descritti in precedenza in questo documento. Seleziona TIMESTAMP per il tipo di parametro e inserisci il valore del timestamp nel formato YYYY-MM-DD HH:MM:SS.DDDDDD time_zone.
bq
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud , viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Questa query aggiunge un'ora al valore 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
parameterType
su 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 di configurazione di C# nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Utilizza gli struct nelle query parametrizzate
Per utilizzare una struct in un parametro di query, imposta il tipo su STRUCT<T>, dove T definisce i campi e i tipi all'interno della struct. Le definizioni dei campi sono separate da virgole e hanno il formato field_name TF, dove TF è il tipo di 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 saperne di più sul tipo STRUCT, consulta il riferimento ai tipi di dati .
Console
Le strutture nelle query parametrizzate non sono supportate dalla consoleGoogle Cloud .
bq
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud , viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Questa query banale mostra l'utilizzo dei tipi strutturati restituendo il 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 della struct a structTypes nel queryParameters del job.
Se i valori della struttura sono scalari, imposta type sul tipo di valori, ad esempio STRING. Se i valori della struttura sono array, imposta questo campo su ARRAY e il campo arrayType nidificato sul tipo appropriato. Se i valori della struttura sono strutture, imposta type su STRUCT e aggiungi i structTypes necessari.
Questa query banale mostra l'utilizzo di tipi strutturati restituendo il valore parametro.
{
"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 di BigQuery per .NET non supporta i parametri struct.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Utilizza gli intervalli nelle query con parametri
Per utilizzare un intervallo in un parametro di query, imposta il campo type su RANGE.
Per saperne di più sul tipo RANGE, consulta il riferimento ai tipi di dati .
Console
Gli intervalli nelle query con parametri non sono supportati dalla consoleGoogle Cloud .
bq
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud , viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Questa query mostra l'utilizzo dei tipi di intervallo restituendo il valore parametro:
bq query \ --use_legacy_sql=false \ --parameter='my_param:RANGE<DATE>:[2020-01-01, 2020-12-31)' \ 'SELECT @my_param AS foo;'
API
Per utilizzare un parametro di intervallo, in
parameterType
imposta il campo type su RANGE e il campo
rangeElementType sul tipo di intervallo che vuoi utilizzare.
Questa query mostra come utilizzare il tipo di parametro RANGE restituendo il valore parametro.
{
"query": "SELECT @my_param AS value_of_range_parameter;",
"queryParameters": [
{
"name": "range_param",
"parameterType": {
"type": "RANGE",
"rangeElementTYpe": {
"type": "DATE"
}
},
"parameterValue": {
"rangeValue": {
"start": {
"value": "2020-01-01"
},
"end": {
"value": "2020-12-31"
}
}
}
}
],
"useLegacySql": false,
"parameterMode": "NAMED"
}
Passaggi successivi
- Scopri di più sulle query con parametri verificate nell'analisi conversazionale di BigQuery.