1. Einführung

Workflows ist ein vollständig verwalteter Orchestrierungsdienst, der Google Cloud- oder externe Dienste in der von Ihnen definierten Reihenfolge ausführt.
BigQuery ist ein vollständig verwaltetes Data Warehouse für Unternehmen, mit dem Sie Terabytes von Daten mit integrierten Funktionen wie maschinellem Lernen, raumbezogenen Analysen und Business Intelligence verwalten und analysieren können.
In diesem Codelab führen Sie einige BigQuery-Abfragen für das öffentliche Wikipedia-Dataset aus. Anschließend erfahren Sie, wie Sie mehrere BigQuery-Abfragen nacheinander im Rahmen einer Workflows-Orchestrierung ausführen. Schließlich parallelisieren Sie die Abfragen mit der Funktion für parallele Iterationen von Workflows, um die Geschwindigkeit um das Fünffache zu steigern.
Lerninhalte
- BigQuery-Abfragen für den Wikipedia-Datensatz ausführen
- So führen Sie mehrere Abfragen als Teil einer Workflow-Orchestrierung seriell aus.
- Abfragen mit paralleler Iteration in Workflows parallelisieren, um die Geschwindigkeit um das Fünffache zu steigern.
2. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.
Cloud Shell starten
Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.
3. Wikipedia-Dataset ansehen
Sehen Sie sich zuerst das Wikipedia-Dataset in BigQuery an.
Rufen Sie in der Google Cloud Console den BigQuery-Bereich auf:

Unter bigquery-samples sollten verschiedene öffentliche Datasets angezeigt werden, darunter einige Wikipedia-bezogene Datasets:

Unter dem Dataset wikipedia_pageviews sehen Sie verschiedene Tabellen für Seitenaufrufe aus verschiedenen Jahren:

Sie können eine der Tabellen auswählen (z. B. 201207) und sehen Sie sich die Daten in der Vorschau an:

Sie können auch Abfragen für die Tabelle ausführen. Mit dieser Abfrage werden beispielsweise die 100 Titel mit den meisten Aufrufen ausgewählt:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
Nachdem Sie die Abfrage ausgeführt haben, dauert es etwa 20 Sekunden, bis die Daten geladen sind:

4. Workflow zum Ausführen mehrerer Abfragen definieren
Das Ausführen einer Abfrage für eine einzelne Tabelle ist ganz einfach. Es kann jedoch sehr mühsam sein, mehrere Abfragen für mehrere Tabellen auszuführen und die Ergebnisse zusammenzustellen. Dabei kann die Iterationssyntax von Workflows helfen.
Erstellen Sie in Cloud Shell eine workflow-serial.yaml-Datei, um einen Workflow zu erstellen, mit dem mehrere Abfragen für mehrere Tabellen ausgeführt werden:
touch workflow-serial.yaml
Anschließend können Sie die Datei mit dem Editor in Cloud Shell bearbeiten:

Erstellen Sie in der Datei workflow-serial.yaml im ersten Schritt init eine results-Zuordnung, um jede Iteration nach Tabellennamen zu verfolgen. Definieren Sie außerdem ein tables-Array mit der Liste der Tabellen, für die Sie Abfragen ausführen möchten. In diesem Fall wählen wir 5 Tabellen aus:
main:
steps:
- init:
assign:
- results : {}
- tables:
- 201201h
- 201202h
- 201203h
- 201204h
- 201205h
Als Nächstes definieren Sie einen runQueries-Schritt. In diesem Schritt wird jede Tabelle durchlaufen und der BigQuery-Connector von Workflows verwendet, um eine Abfrage auszuführen, mit der die 100 Titel mit den meisten Seitenaufrufen in jeder Tabelle ermittelt werden. Anschließend werden der Top-Titel und die Aufrufe aus jeder Tabelle in der Ergebniskarte gespeichert:
- runQueries:
for:
value: table
in: ${tables}
steps:
- runQuery:
call: googleapis.bigquery.v2.jobs.query
args:
projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
body:
useLegacySql: false
useQueryCache: false
timeoutMs: 30000
# Find the top 100 titles with most views on Wikipedia
query: ${
"SELECT TITLE, SUM(views)
FROM `bigquery-samples.wikipedia_pageviews." + table + "`
WHERE LENGTH(TITLE) > 10
GROUP BY TITLE
ORDER BY SUM(VIEWS) DESC
LIMIT 100"
}
result: queryResult
- returnResult:
assign:
# Return the top title from each table
- results[table]: {}
- results[table].title: ${queryResult.rows[0].f[0].v}
- results[table].views: ${queryResult.rows[0].f[1].v}
Geben Sie im letzten Schritt die results-Karte zurück:
- returnResults:
return: ${results}
5. Mehrere Abfragen mit Workflows ausführen
Bevor Sie den Workflow bereitstellen und ausführen können, müssen Sie die Workflows API aktivieren. Sie können sie über die Google Cloud Console oder mit gcloud in Cloud Shell aktivieren:
gcloud services enable workflows.googleapis.com
Dienstkonto für Workflows erstellen:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Prüfen Sie, ob das Dienstkonto die Rollen zum Protokollieren und Ausführen von BigQuery-Jobs hat:
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Stellen Sie den Workflow mit dem Dienstkonto bereit:
gcloud workflows deploy bigquery-serial \
--source=workflow-serial.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Jetzt können Sie den Workflow ausführen.
Suchen Sie im Bereich „Workflows“ der Cloud Console nach dem Workflow bigquery-serial und klicken Sie auf die Schaltfläche Execute:

Alternativ können Sie den Workflow auch mit gcloud in Cloud Shell ausführen:
gcloud workflows run bigquery-serial
Die Workflowausführung sollte etwa 1 Minute dauern (20 Sekunden für jede der 5 Tabellen).
Am Ende sehen Sie die Ausgabe der einzelnen Tabellen mit den Top-Titeln und ‑Aufrufen:


6. Mehrere Abfragen mit parallelen Schritten parallelisieren
Der Workflow im vorherigen Schritt hat etwa eine Minute gedauert, da fünf Abfragen ausgeführt wurden, die jeweils 20 Sekunden in Anspruch genommen haben. Da es sich um unabhängige Abfragen handelt, können Sie sie mit der Funktion für parallele Iterationen von Workflows parallel ausführen.
Kopieren Sie die workflow-serial.yaml-Datei in eine neue workflow-parallel.yaml-Datei. In der neuen Datei nehmen Sie einige Änderungen vor, um die sequenziellen Schritte in parallele Schritte umzuwandeln.
Ändern Sie in der Datei workflow-parallel.yaml den Schritt runQueries. Fügen Sie zuerst das Keyword parallel hinzu. So kann jede Iteration der For-Schleife parallel ausgeführt werden. Zweitens deklarieren Sie die Variable results als shared-Variable. Dadurch kann die Variable von einem Branch geschrieben werden. Wir hängen jedes Ergebnis an diese Variable an.
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
Stellen Sie den parallelen Workflow bereit:
gcloud workflows deploy bigquery-parallel \
--source=workflow-parallel.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Workflow ausführen:
gcloud workflows run bigquery-parallel
Die Workflow-Ausführung sollte etwa 20 Sekunden dauern. Das liegt daran, dass alle fünf Abfragen parallel ausgeführt werden. Bis zu 5-mal schneller mit nur wenigen Codezeilen
Am Ende sehen Sie die gleiche Ausgabe aus jeder Tabelle mit den Top-Titeln und ‑Aufrufen, aber mit einer viel kürzeren Ausführungszeit:

7. Glückwunsch
Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen. Weitere Informationen finden Sie in der Dokumentation zu Workflows zu parallelen Schritten.
Behandelte Themen
- BigQuery-Abfragen für den Wikipedia-Datensatz ausführen
- So führen Sie mehrere Abfragen als Teil einer Workflow-Orchestrierung seriell aus.
- Abfragen mit paralleler Iteration in Workflows parallelisieren, um die Geschwindigkeit um bis zu 500 % zu steigern.