Parametrisierte Abfragen ausführen
BigQuery unterstützt Abfrageparameter, mit denen eine SQL-Injection verhindert werden kann, wenn Abfragen über Nutzereingaben erstellt werden. Diese Funktion ist nur in Verbindung mit der GoogleSQL-Syntax verfügbar. Abfrageparameter können als Ersatz für beliebige Ausdrücke dienen. Es ist jedoch nicht möglich, Parameter anstelle von Kennzeichnungen, Spaltennamen, Tabellennamen oder anderen Teilen der Abfrage zu nutzen.
Verwenden Sie zum Angeben eines benannten Parameters das Zeichen @
, gefolgt von einer Kennzeichnung wie @param_name
. Verwenden Sie alternativ den Platzhalterwert ?
, um einen Positionsparameter anzugeben. Beachten Sie, dass eine Abfrage benannte Parameter oder Positionsparameter, aber nicht beides enthalten darf.
Sie können parametrisierte Abfragen in BigQuery auf folgende Arten ausführen:
- Mit dem Befehl
bq query
des bq-Befehlszeilentools - Mit der API
- Mit den Clientbibliotheken
Das folgende Beispiel zeigt, wie Parameterwerte an eine parametrisierte Abfrage übergeben werden:
Console
Parametrisierte Abfragen werden von der Google Cloud Console nicht unterstützt.
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.
Verwenden Sie
--parameter
, um Werte für Parameter in der Formname:type:value
bereitzustellen. Wenn der Name weggelassen wird, ergibt sich ein Positionsparameter. Wenn der Typ weggelassen wird, wird vom TypSTRING
ausgegangen.Das Flag
--parameter
muss in Verbindung mit dem Flag--use_legacy_sql=false
verwendet werden, um die GoogleSQL-Syntax anzugeben.(Optional) Geben Sie Ihren Standort mit dem Flag
--location
an.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
Wenn Sie benannte Parameter verwenden möchten, legen Sie in der query
-Jobkonfiguration den parameterMode
auf NAMED
fest.
Füllen Sie queryParameters
mit der Liste der Parameter in der query
-Jobkonfiguration. Legen Sie unter name
für jeden Parameter den in der Abfrage verwendeten @param_name
fest.
Aktivieren Sie die GoogleSQL-Syntax, indem Sie useLegacySql
auf false
setzen.
{
"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"
}
Hier können Sie es im Google APIs Explorer ausprobieren.
Wenn Sie Positionsparameter verwenden möchten, legen Sie in der query
-Jobkonfiguration parameterMode
auf POSITIONAL
fest.
C#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
So verwenden Sie benannte Parameter:Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
So verwenden Sie Positionsparameter:Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
So verwenden Sie benannte Parameter:Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
So verwenden Sie benannte Parameter:Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
So verwenden Sie benannte Parameter:Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
So verwenden Sie benannte Parameter:Arrays in parametrisierten Abfragen verwenden
Wenn Sie in einem Abfrageparameter einen Array-Typ verwenden möchten, setzen Sie den Typ auf ARRAY<T>
, wobei T
der Typ der Elemente im Array ist. Erstellen Sie den Wert als kommagetrennte Liste von Elementen, die in eckige Klammern eingeschlossen sind, beispielsweise [1, 2,
3]
.
Weitere Informationen zum Arraytyp finden Sie in der Datentypreferenz.
Console
Parametrisierte Abfragen werden von der Google Cloud Console nicht unterstützt.
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.
Durch die folgende Abfrage werden die beliebtesten Jungennamen mit dem Anfangsbuchstaben W für in den USA geborene Kinder ausgewählt:
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;'
Achten Sie darauf, die Arraytyp-Deklaration in einfache Anführungszeichen zu setzen, damit die Befehlsausgabe nicht versehentlich durch das Zeichen
>
zu einer Datei weitergeleitet wird.
API
Wenn Sie einen Parameter mit einem Arraywert verwenden möchten, setzen Sie in der query
-Jobkonfiguration parameterType
auf ARRAY
.
Falls die Arraywerte Skalare sind, setzen Sie parameterType
auf den Typ der Werte, beispielsweise auf STRING
. Sind die Array-Werte Strukturen, legen Sie dafür STRUCT
fest und fügen Sie die erforderlichen Felddefinitionen in structTypes
ein.
Durch die folgende Abfrage werden z. B. die beliebtesten Jungennamen mit dem Anfangsbuchstaben W für in den USA geborene Kinder ausgewählt:
{
"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#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Zeitstempel in parametrisierten Abfragen verwenden
Zur Verwendung eines Zeitstempels in einem Suchparameter verwendet die zugrunde liegende REST API einen Wert vom Typ TIMESTAMP
im Format YYYY-MM-DD HH:MM:SS.DDDDDD time_zone
. Wenn Sie die Clientbibliotheken verwenden, erstellen Sie ein integriertes Datumsobjekt in dieser Sprache. Die Bibliothek konvertiert das Format entsprechend. Weitere Informationen finden Sie in den folgenden sprachspezifischen Beispielen.
Weitere Informationen zum Typ TIMESTAMP
finden Sie in der Datentypreferenz.
Console
Parametrisierte Abfragen werden von der Google Cloud Console nicht unterstützt.
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.
Durch die folgende Abfrage wird eine Stunde zum Zeitstempel-Parameterwert hinzugefügt:
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
Wenn Sie einen Zeitstempelparameter verwenden möchten, legen Sie in der Konfiguration des Abfragejobs den parameterType
auf TIMESTAMP
fest.
Durch die folgende Abfrage wird eine Stunde zum Zeitstempel-Parameterwert hinzugefügt:
{
"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#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Strukturen in parametrisierten Abfragen verwenden
Wenn Sie in einem Abfrageparameter eine Struktur verwenden möchten, setzen Sie den Typ auf STRUCT<T>
, wobei durch T
die Felder und Typen der Struktur definiert werden. Felddefinitionen werden durch Kommas getrennt und haben die Form field_name TF
, wobei TF
der Feldtyp ist. Beispielsweise definiert STRUCT<x INT64, y STRING>
eine Struktur mit einem Feld namens x
vom Typ INT64
und einem zweiten Feld namens y
vom Typ STRING
.
Weitere Informationen zum Typ STRUCT
finden Sie in der Datentypreferenz.
Console
Parametrisierte Abfragen werden von der Google Cloud Console nicht unterstützt.
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.
Diese einfache Abfrage veranschaulicht die Verwendung strukturierter Typen durch Zurückgeben des Parameterwerts:
bq query \ --use_legacy_sql=false \ --parameter='struct_value:STRUCT<x INT64, y STRING>:{"x": 1, "y": "foo"}' \ 'SELECT @struct_value AS s;'
API
Wenn Sie einen Strukturparameter verwenden möchten, legen Sie in der Konfiguration des Abfragejobs den parameterType
auf STRUCT
fest.
Fügen Sie in den queryParameters
des Jobs unter structTypes
für jedes Feld der Struktur ein Objekt hinzu.
Falls die Strukturwerte Skalare sind, setzen Sie type
auf den Typ der Werte, beispielsweise STRING
. Sind die Strukturwerte Arrays, legen Sie dafür ARRAY
fest und setzen das verschachtelte Feld arrayType
auf den entsprechenden Typ. Wenn die Strukturwerte Strukturen sind, setzen Sie type
auf STRUCT
und fügen Sie die erforderlichen structTypes
hinzu.
Diese einfache Abfrage veranschaulicht die Verwendung strukturierter Typen durch das Zurückgeben des Parameterwerts.
{
"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#
Die BigQuery-Clientbibliothek für .NET unterstützt keine Strukturparameter.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.