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 Terabyte an Daten mit integrierten Funktionen wie maschinellem Lernen, raumbezogener Analyse 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 im Rahmen einer Workflow-Orchestrierung nacheinander mehrere BigQuery-Abfragen nacheinander ausführen. Schließlich parallelisieren Sie die Abfragen mit der parallelen Iterationsfunktion von Workflows, um die Geschwindigkeit um bis zu fünfmal zu verbessern.
Lerninhalte
- So führen Sie BigQuery-Abfragen für das Wikipedia-Dataset aus.
- So führen Sie mehrere Abfragen als Teil einer Workflow-Orchestrierung nacheinander aus.
- Hier erfahren Sie, wie Sie Abfragen mit der parallelen Iteration von Workflows parallelisieren, um die Geschwindigkeit um bis zu 5-mal zu verbessern.
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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die üblicherweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.
Cloud Shell starten
Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, 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 dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Alle Arbeiten in diesem Codelab können in einem Browser erledigt werden. Sie müssen nichts installieren.
3. Das Wikipedia-Dataset untersuchen
Sehen Sie sich zuerst das Wikipedia-Dataset in BigQuery an.
Rufen Sie in der Google Cloud Console den Bereich „BigQuery“ auf:
Unter bigquery-samples
sollten verschiedene öffentliche Datasets angezeigt werden, darunter einige zu Wikipedia gehörende Datasets:
Im Dataset wikipedia_pageviews
finden Sie verschiedene Tabellen für Seitenaufrufe aus verschiedenen Jahren:
Sie können eine der Tabellen auswählen (z. B. 201207
) und sehen Sie sich eine Vorschau der Daten an:
Sie können auch Abfragen für die Tabelle ausführen. Die folgende Abfrage wählt beispielsweise die 100 Titel mit den meisten Aufrufen aus:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
Nach dem Ausführen der Abfrage 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 einfach. Mehrere Abfragen für mehrere Tabellen auszuführen und die Ergebnisse zu sortieren, kann jedoch sehr mühsam sein. Zu diesem Zweck kann Workflows mit seiner Iterationssyntax helfen.
Erstellen Sie in Cloud Shell eine workflow-serial.yaml
-Datei, um einen Workflow zum Ausführen mehrerer Abfragen für mehrere Tabellen zu erstellen:
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 mit Tabellennamen nachzuverfolgen. 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
Definieren Sie als Nächstes einen runQueries
-Schritt. Dieser Schritt durchläuft alle Tabellen und verwendet BigQuery-Connector zum Ausführen einer Abfrage, um die 100 Titel mit den meisten Seitenaufrufen in jeder Tabelle zu ermitteln. Anschließend werden der Top-Titel und die besten Ansichten aus jeder Tabelle in der Ergebniszuordnung 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 Karte results
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 prüfen, ob die Workflows API aktiviert ist. Sie können sie über die Google Cloud Console oder mithilfe von gcloud
in Cloud Shell aktivieren:
gcloud services enable workflows.googleapis.com
Erstellen Sie ein Dienstkonto für Workflows:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Das Dienstkonto muss die Rollen zum Protokollieren und Ausführen von BigQuery-Jobs haben:
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
Schließlich können Sie den Workflow ausführen.
Suchen Sie in der Cloud Console im Abschnitt „Workflows“ 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 dauert etwa eine Minute (20 Sekunden für jede der fünf Tabellen).
Am Ende sehen Sie die Ausgabe jeder Tabelle mit Top-Titeln und -Ansichten:
6. Mehrere Abfragen mit parallelen Schritten parallelisieren
Der Workflow im vorherigen Schritt dauerte etwa eine Minute, weil 5 Abfragen mit jeweils 20 Sekunden ausgeführt wurden. Da es sich hierbei um unabhängige Abfragen handelt, können Sie sie mit der Funktion für parallele Iterationen von Workflows parallel ausführen.
Kopieren Sie die Datei workflow-serial.yaml
in eine neue workflow-parallel.yaml
-Datei. In der neuen Datei nehmen Sie einige Änderungen vor, um die seriellen Schritte in parallele Schritte umzuwandeln.
Ändern Sie in der Datei workflow-parallel.yaml
den Schritt runQueries
. Fügen Sie zuerst das Keyword parallel
hinzu. Dadurch 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 Zweig beschreibbar sein. 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
Führen Sie den Workflow aus:
gcloud workflows run bigquery-parallel
Die Workflowausführung dauert etwa 20 Sekunden. Dies ist darauf zurückzuführen, dass alle fünf Abfragen parallel ausgeführt werden. Bis zu 5-fache Geschwindigkeit mit nur wenigen Codeänderungen
Am Ende sehen Sie die gleiche Ausgabe aus jeder Tabelle mit Top-Titeln und -Aufrufen, aber mit viel kürzerer Ausführungszeit:
7. Glückwunsch
Glückwunsch, du hast das Codelab abgeschlossen. Weitere Informationen finden Sie in der Dokumentation zu parallelen Schritten.
Behandelte Themen
- So führen Sie BigQuery-Abfragen für das Wikipedia-Dataset aus.
- So führen Sie mehrere Abfragen als Teil einer Workflow-Orchestrierung nacheinander aus.
- Abfragen mit paralleler Iteration von Workflows parallelisieren, um die Geschwindigkeit um bis zu 5-mal zu verbessern.