In diesem Dokument wird beschrieben, wie Sie interaktive (On-Demand) und Batch-Abfragejobs ausführen.
Erforderliche Berechtigungen
Jobs sind Aktionen, die BigQuery für Sie ausführt, beispielsweise Daten laden, Daten exportieren, Daten abfragen oder Daten kopieren.
Wenn Sie die Cloud Console, die klassische BigQuery-Web-UI oder die Befehlszeile verwenden, um Daten zu laden, zu exportieren, abzufragen oder zu kopieren, wird automatisch eine Jobressource erstellt, geplant und ausgeführt. Lade-, Export-, Abfrage- oder Kopierjobs können auch programmatisch erstellt werden. Wenn Sie einen Job programmatisch erstellen, wird er von BigQuery geplant und ausgeführt.
Da das Ausführen von Jobs sehr lange dauern kann, werden sie asynchron ausgeführt. Der Ausführungsstatus kann abgefragt werden. Kürzere Aktionen wie das Auflisten von Ressourcen oder das Abrufen von Metadaten werden nicht über eine Jobressource verwaltet.
Zum Ausführen eines Abfragejobs müssen Sie mindestens bigquery.jobs.create-Berechtigungen haben. Damit der Abfragejob erfolgreich abgeschlossen werden kann, muss Ihnen auch Zugriff auf die Datasets gewährt werden, die die Tabellen oder Ansichten enthalten, auf die die Abfrage verweist. Weitere Informationen zur Dataset-Zugriffssteuerung finden Sie unter Zugriff auf Datasets steuern.
Die folgenden vordefinierten Cloud IAM-Rollen enthalten die Berechtigungen des Typs bigquery.jobs.create:
bigquery.userbigquery.jobUserbigquery.admin
Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, wird ihm dafür außerdem bigquery.dataOwner-Zugriff gewährt.
Mit bigquery.dataOwner-Zugriff hat der Nutzer die Möglichkeit, Tabellen und Ansichten im Dataset abzufragen.
Weitere Informationen zu Cloud IAM-Rollen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.
Interaktive Abfragen ausführen
BigQuery führt standardmäßig interaktive (On-Demand) Abfragejobs aus. Dies bedeutet, dass die Abfrage so bald wie möglich ausgeführt wird. Interaktive Abfragen werden auf die Limits gleichzeitiger Abfragen und das Tageslimit mit angerechnet.
Die Abfrageergebnisse werden immer entweder in einer temporären oder permanenten Tabelle gespeichert. Sie können auswählen, ob Sie Daten in einer vorhandenen Tabelle anhängen oder überschreiben möchten oder ob Sie eine neue Tabelle erstellen, wenn keine mit demselben Namen vorhanden ist.
So führen Sie eine interaktive Abfrage aus, die in eine temporäre Tabelle schreibt:
Konsole
Rufen Sie in der Cloud Console die BigQuery-Web-UI auf.
Zur Cloud ConsoleKlicken Sie auf Compose new query (Neue Abfrage erstellen).
Geben Sie im Textbereich des Abfrageeditors eine gültige BigQuery-SQL-Abfrage ein.
Optional: Klicken Sie auf More (Mehr) und dann auf Query setting (Abfrageeinstellungen), um den Ort der Datenverarbeitung zu ändern. Klicken Sie unter Processing location (Verarbeitungsstandort) auf Auto-select (Automatische Auswahl) und wählen Sie den Standort Ihrer Daten aus. Klicken Sie abschließend auf Save (Speichern), um die Abfrageeinstellungen zu aktualisieren.
Klicken Sie auf Run (Ausführen).
Dadurch wird ein Abfragejob erstellt, der die Ausgabe in eine temporäre Tabelle schreibt.
Klassische UI
Zur BigQuery-Web-UI
Zur BigQuery-Web-UIKlicken Sie auf Compose query (Abfrage erstellen).
Geben Sie in den Textbereich New Query (Neue Abfrage) eine gültige SQL-Abfrage ein.
Klicken Sie auf Show Options (Optionen anzeigen).
Optional: Klicken Sie bei Processing Location (Verarbeitungsstandort) auf Unspecified (Nicht angegeben) und wählen Sie den Standort Ihrer Daten aus.
Klicken Sie auf Run query (Abfrage ausführen).
Dadurch wird ein Abfragejob erstellt, der die Ausgabe in eine temporäre Tabelle schreibt.
Befehlszeile
Geben Sie den Befehl bq query ein und fügen Sie den Abfragetext ein.
Optional: Geben Sie das Flag --location an und legen Sie als Wert Ihren Standort fest.
Sie können die folgenden optionalen Flags angeben. Die Liste enthält einige der am häufigsten verwendeten Flags. Eine vollständige Liste der Flags für den Befehl query finden Sie in der Referenz zum bq-Befehlszeilentool unter bq query.
Geben Sie die folgenden Flags an:
- Das Flag
--destination_table, um eine permanente Tabelle auf Basis der Abfrageergebnisse zu erstellen. Wenn Sie die Abfrageergebnisse in eine Tabelle schreiben möchten, die sich nicht in Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: project_id:dataset. Wenn--destination_tablenicht angegeben ist, wird ein Abfragejob generiert, der die Ausgabe in eine temporäre (Cache-)Tabelle schreibt. - Das Flag
--append_table, um die Abfrageergebnisse an eine Zieltabelle anzufügen. - Das Flag
--destination_kms_key, um einen Key Management Service-Schlüssel zum Verschlüsseln der Zieltabellendaten zu verwenden. - Das Flag
--use_legacy_sql=false, um die Standard-SQL-Syntax für die Abfrage zu verwenden. Mithilfe der Datei.bigqueryrckönnen Sie eine Standardsyntax für das Befehlszeilentool einrichten. - Das Flag
--label, um ein Label in der Form key:value auf den Abfragejob anzuwenden. Wiederholen Sie dieses Flag, um mehrere Labels anzugeben. - Das Flag
--max_rowsoder-n, um die Anzahl der in den Abfrageergebnissen zurückzugebenden Zeilen anzugeben. - Das Flag
--maximum_bytes_billed, um die für die Abfrage berechneten Byte zu begrenzen. Abfragen, die das Limit überschreiten, schlagen fehl (ohne dass eine Gebühr anfällt). Wenn nicht angegeben, wird die Menge der berechneten Byte auf den Standardwert des Projekts eingestellt. - Das Flag
--udf_resource, um eine Codedatei zu laden und auszuwerten, die als benutzerdefinierte Funktionsressource verwendet werden soll. Sie können einen Cloud Storage-URI oder den Pfad zu einer lokalen Codedatei angeben. Wiederholen Sie dieses Flag, um mehrere Dateien anzugeben.
Geben Sie den folgenden Befehl ein, um mit der Standard-SQL-Syntax eine interaktive Abfrage auszuführen:
bq --location=location query \ --use_legacy_sql=false \ 'query'
Dabei gilt:
- location ist der Name des Standorts, an dem die Abfrage verarbeitet wird. Das Flag
--locationist optional. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, können Sie den Wert des Flags aufasia-northeast1setzen. Mit der Datei ".bigqueryrc" können Sie einen Standardwert für den Standort festlegen. - query ist eine Abfrage in der Standard-SQL-Syntax.
Beispiele:
Mit dem folgenden Befehl schreiben Sie interaktive Abfrageergebnisse in eine Zieltabelle mit dem Namen mytable in mydataset. Das Dataset befindet sich in Ihrem Standardprojekt. Mit dieser Abfrage werden Daten aus dem öffentlichen Dataset USA Name Data abgerufen.
bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
Mit dem folgenden Befehl schreiben Sie interaktive Abfrageergebnisse in eine Zieltabelle mit dem Namen mytable in mydataset. Das Dataset befindet sich in myotherproject und nicht in Ihrem Standardprojekt. Mit der Abfrage werden Daten aus einer nicht partitionierten Tabelle abgerufen, dem öffentlichen Dataset USA Name Data.
bq query \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
Sie können die API zum Ausführen einer Abfrage verwenden. Dazu fügen Sie einen neuen Job ein und füllen das Attribut jobs#configuration.query mit Daten. Geben Sie im Abschnitt jobReference der Jobressource Ihren Standort im Attribut location an.
Rufen Sie getQueryResults auf, um die Ergebnisse abzufragen.
Führen Sie die Abfrage so lange aus, bis jobComplete gleich true ist. In der Liste errors werden Fehler und Warnungen angezeigt.
C#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von C# in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.
Go
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Go API.
Java
Bevor Sie dieses Beispiel ausprobieren, lesen Sie die Anleitung zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.
Node.js
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
PHP
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Anleitung zur PHP-Einrichtung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery PHP API.
Python
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Anleitung zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Python API.
Ruby
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Anleitung zur Ruby-Einrichtung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Ruby API.
Batch-Abfragen ausführen
Außerdem sind in BigQuery Batch-Abfragen möglich. BigQuery stellt jede Batch-Abfrage in Ihrem Namen in die Warteschlange und startet sie, sobald im gemeinsamen Ressourcenpool von BigQuery Ressourcen frei sind, meist innerhalb von ein paar Minuten. Wenn BigQuery die Abfrage nicht innerhalb von 24 Stunden gestartet hat, wird die Jobpriorität in interaktiv geändert.
Batch-Abfragen werden hinsichtlich der Grenze gleichzeitiger Abfragen nicht berücksichtigt. Dadurch ist es unter Umständen einfacher, viele Abfragen auf einmal zu starten. Batch-Abfragen verwenden dieselben Ressourcen wie interaktive Abfragen (On-Demand). Bei Pauschalpreisen teilen sich interaktive und Batch-Abfragen die zugewiesenen Slots.
So führen Sie eine Batch-Abfrage aus:
Konsole
Rufen Sie in der Cloud Console die BigQuery-Web-UI auf.
Zur Cloud ConsoleKlicken Sie auf die Schaltfläche Compose new query (Neue Abfrage erstellen).
Geben Sie im Textbereich des Query editor (Abfrageeditor) eine gültige SQL-Abfrage ein.
Klicken Sie auf More (Mehr) und dann auf Query settings (Abfrageeinstellungen).
Wählen Sie im Abschnitt Job priority (Jobpriorität) die Option Batchaus.
Optional: Klicken Sie bei Processing location (Verarbeitungsstandort) auf Unspecified (Nicht angegeben) und wählen Sie den Standort Ihrer Daten aus.
Klicken Sie auf Save (Speichern), um die Abfrageeinstellungen zu aktualisieren.
Klicken Sie auf Run (Ausführen).
Klassische UI
Zur BigQuery-Web-UI
Zur BigQuery-Web-UIKlicken Sie auf Compose query (Abfrage erstellen).
Geben Sie eine gültige BigQuery-SQL-Abfrage in den Textbereich New Query (Neue Abfrage) ein.
Klicken Sie auf Show Options (Optionen anzeigen).
Wählen Sie im Abschnitt Query Priority (Abfragepriorität) die Option Batch aus.
Optional: Klicken Sie bei Processing Location (Verarbeitungsstandort) auf Unspecified (Nicht angegeben) und wählen Sie den Standort Ihrer Daten aus.
Klicken Sie auf Run query (Abfrage ausführen).
Befehlszeile
Geben Sie den Befehl bq query ein und fügen Sie den Abfragetext ein. Verwenden Sie das Flag --
batch, um eine Batch-Abfrage auszuführen.
Optional: Geben Sie das Flag --location an und legen Sie als Wert Ihren Standort fest.
Sie können die folgenden optionalen Flags angeben. Die Liste enthält einige der am häufigsten verwendeten Flags. Eine vollständige Liste der Flags für den Befehl query finden Sie in der Referenz zum bq-Befehlszeilentool unter bq query.
Geben Sie die folgenden Flags an:
- Das Flag
--destination_table, um eine permanente Tabelle auf Basis der Abfrageergebnisse zu erstellen. Wenn Sie die Abfrageergebnisse in eine Tabelle schreiben möchten, die sich nicht in Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: project_id:dataset. Wenn--destination_tablenicht angegeben ist, wird ein Abfragejob generiert, der die Ausgabe in eine temporäre (Cache-)Tabelle schreibt. - Das Flag
--append_table, um die Abfrageergebnisse an eine Zieltabelle anzufügen. - Das Flag
--destination_kms_key, um einen Key Management Service-Schlüssel zum Verschlüsseln der Zieltabellendaten zu verwenden. - Das Flag
--use_legacy_sql=false, um die Standard-SQL-Syntax für die Abfrage zu verwenden. Mithilfe der Datei.bigqueryrckönnen Sie eine Standardsyntax für das Befehlszeilentool einrichten. - Das Flag
--label, um ein Label in der Form key:value auf den Abfragejob anzuwenden. Wiederholen Sie dieses Flag, um mehrere Labels anzugeben. - Das Flag
--max_rowsoder-n, um die Anzahl der in den Abfrageergebnissen zurückzugebenden Zeilen anzugeben. - Das Flag
--maximum_bytes_billed, um die für die Abfrage berechneten Byte zu begrenzen. Abfragen, die das Limit überschreiten, schlagen fehl (ohne dass eine Gebühr anfällt). Wenn nicht angegeben, wird die Menge der berechneten Byte auf den Standardwert des Projekts eingestellt. - Das Flag
--udf_resource, um eine Codedatei zu laden und auszuwerten, die als benutzerdefinierte Funktionsressource verwendet werden soll. Sie können einen Cloud Storage-URI oder den Pfad zu einer lokalen Codedatei angeben. Wiederholen Sie dieses Flag, um mehrere Dateien anzugeben.
Geben Sie den folgenden Befehl ein, um mit der Standard-SQL-Syntax eine interaktive Abfrage auszuführen:
bq --location=location query \ --batch \ --use_legacy_sql=false \ 'query'
Dabei gilt:
- location ist der Name des Standorts, an dem die Abfrage verarbeitet wird. Das Flag
--locationist optional. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, können Sie den Wert des Flags aufasia-northeast1setzen. Mit der Datei ".bigqueryrc" können Sie einen Standardwert für den Standort festlegen. - query ist eine Abfrage in der Standard-SQL-Syntax.
Beispiele:
Mit dem folgenden Befehl schreiben Sie große Abfrageergebnisse in eine Zieltabelle mit dem Namen mytable in mydataset. Das Dataset befindet sich in Ihrem Standardprojekt. Mit dieser Abfrage werden Daten aus dem öffentlichen Dataset USA Name Data abgerufen.
bq query \
--batch \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
Mit dem folgenden Befehl schreiben Sie große Abfrageergebnisse in eine Zieltabelle mit dem Namen mytable in mydataset. Das Dataset befindet sich in myotherproject und nicht in Ihrem Standardprojekt. Mit der Abfrage werden Daten aus einer nicht partitionierten Tabelle abgerufen, dem öffentlichen Dataset USA Name Data.
bq query \
--batch \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
Sie können die API zum Ausführen einer Abfrage verwenden. Dazu fügen Sie einen neuen Job ein und füllen das Jobkonfigurationsattribut query mit Daten. Optional: Geben Sie Ihren Standort im Attribut location im Abschnitt jobReference der Jobressource an.
Wenn Sie die Attribute des Abfragejobs angeben, nehmen Sie das Attribut configuration.query.priority mit dem Wert BATCH auf.
Go
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Go API.
Java
Zum Ausführen einer Batch-Abfrage legen Sie die Abfragepriorität fest, und zwar auf QueryJobConfiguration.Priority.BATCH, wenn Sie eine QueryJobConfiguration erstellen.
Python
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Anleitung zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Python API.