In BigQuery werden eine Reihe von öffentlichen Datasets gehostet, die von der Allgemeinheit abgefragt werden können. In dieser Anleitung erstellen Sie einen Workflow, der mehrere BigQuery-Abfragejobs parallel ausführt. So wird die Leistungssteigerung im Vergleich zur sequenziellen Ausführung der Jobs (einer nach dem anderen) demonstriert.
BigQuery-Abfragejob ausführen
In BigQuery können Sie einen interaktiven (On-Demand-)Abfragejob ausführen. Weitere Informationen finden Sie unter Interaktive Jobs und Batch-Abfragejobs ausführen.
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Textbereich des Abfrageeditors die folgende BigQuery-SQL-Abfrage ein:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100
Klicken Sie auf Ausführen.
bq
Geben Sie im Terminal den folgenden bq query
-Befehl ein, um eine interaktive Abfrage mit Standard-SQL-Syntax auszuführen:
bq query \
--use_legacy_sql=false \
'SELECT
TITLE, SUM(views)
FROM
`bigquery-samples.wikipedia_pageviews.201207h`
GROUP BY
TITLE
ORDER BY
SUM(views) DESC
LIMIT 100'
Dadurch wird eine Abfrage ausgeführt, die die 100 Wikipedia-Titel mit den meisten Aufrufen in einem bestimmten Monat zurückgibt und die Ausgabe in eine temporäre Tabelle schreibt.
Achten Sie darauf, wie lange die Ausführung der Abfrage dauert.
Workflow bereitstellen, der mehrere Abfragen seriell ausführt
Ein Workflow besteht aus einer Reihe von Schritten, die mit der Workflows-Syntax beschrieben werden. Nachdem Sie einen Workflow erstellt haben, stellen Sie ihn bereit, um ihn für die Ausführung verfügbar zu machen. Der Bereitstellungsschritt überprüft auch, ob die Quelldatei ausgeführt werden kann.
Im folgenden Workflow wird eine Liste mit fünf Tabellen definiert, für die eine Abfrage mit dem BigQuery-Connector von Workflows ausgeführt werden soll. Die Abfragen werden nacheinander ausgeführt und die am häufigsten aufgerufenen Titel aus jeder Tabelle werden in einer Ergebniskarte gespeichert.
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf:
Klicken Sie auf Erstellen.
Geben Sie einen Namen für den neuen Workflow ein, z. B.
workflow-serial-bqjobs
.Wählen Sie eine geeignete Region aus, z. B. us-central1.
Wählen Sie das Dienstkonto aus, das Sie zuvor erstellt haben.
Sie sollten dem Dienstkonto bereits die IAM-Rollen BigQuery > BigQuery-Jobnutzer und Logging > Logs Writer zugewiesen haben.
Klicken Sie auf Weiter.
Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein:
Klicken Sie auf Bereitstellen.
gcloud
Öffnen Sie ein Terminal und erstellen Sie eine Quellcodedatei für Ihren Workflow:
touch workflow-serial-bqjobs.yaml
Kopieren Sie den folgenden Workflow in Ihre Quellcodedatei:
Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Ersetzen Sie
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
durch die E-Mail-Adresse des Dienstkontos, das Sie zuvor erstellt haben.Sie sollten dem Dienstkonto bereits die IAM-Rollen
roles/bigquery.jobUser
undroles/logging.logWriter
zugewiesen haben.
Workflow ausführen und mehrere Abfragen seriell ausführen
Bei der Ausführung eines Workflows wird die aktuelle Workflowdefinition ausgeführt, die dem Workflow zugeordnet ist.
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf:
Wählen Sie auf der Seite Workflows den Workflow workflow-serial-bqjobs aus, um die Detailseite aufzurufen.
Klicken Sie auf der Seite Workflow-Details auf play_arrow Ausführen.
Klicken Sie noch einmal auf Ausführen.
Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.
gcloud
Öffnen Sie ein Terminalfenster.
Führen Sie den Workflow aus:
gcloud workflows run workflow-serial-bqjob
Die Ausführung des Workflows sollte etwa eine Minute oder fünfmal so lange wie die vorherige Laufzeit dauern. Das Ergebnis enthält jede Tabelle und sieht in etwa so aus:
{
"201201h": {
"title": "Special:Search",
"views": "14591339"
},
"201202h": {
"title": "Special:Search",
"views": "132765420"
},
"201203h": {
"title": "Special:Search",
"views": "123316818"
},
"201204h": {
"title": "Special:Search",
"views": "116830614"
},
"201205h": {
"title": "Special:Search",
"views": "131357063"
}
}
Workflow bereitstellen und ausführen, der mehrere Abfragen parallel ausführt
Anstatt fünf Abfragen nacheinander auszuführen, können Sie sie parallel ausführen, indem Sie einige Änderungen vornehmen:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Mit einem
parallel
-Schritt kann jede Iteration derfor
-Schleife parallel ausgeführt werden. Die Variable
results
wird alsshared
deklariert, sodass sie von einem Zweig geschrieben werden kann und das Ergebnis jedes Zweigs angehängt werden kann.
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf:
Klicken Sie auf Erstellen.
Geben Sie einen Namen für den neuen Workflow ein, z. B.
workflow-parallel-bqjobs
.Wählen Sie eine geeignete Region aus, z. B. us-central1.
Wählen Sie das Dienstkonto aus, das Sie zuvor erstellt haben.
Klicken Sie auf Weiter.
Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein:
Klicken Sie auf Bereitstellen.
Klicken Sie auf der Seite Workflow-Details auf play_arrow Ausführen.
Klicken Sie noch einmal auf Ausführen.
Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.
gcloud
Öffnen Sie ein Terminal und erstellen Sie eine Quellcodedatei für Ihren Workflow:
touch workflow-parallel-bqjobs.yaml
Kopieren Sie den folgenden Workflow in Ihre Quellcodedatei:
Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Ersetzen Sie
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
durch die E-Mail-Adresse des Dienstkontos, das Sie zuvor erstellt haben.Führen Sie den Workflow aus:
gcloud workflows run workflow-parallel-bqjobs
Das Ergebnis ähnelt der vorherigen Ausgabe, die Workflowausführung sollte jedoch etwa 20 Sekunden oder weniger dauern.