In BigQuery werden eine Reihe von öffentlichen Datasets gehostet, die der Allgemeinheit zur Abfrage zur Verfügung stehen. In dieser Anleitung erstellen Sie einen Workflow, in dem mehrere BigQuery-Abfragejobs parallel ausgeführt werden. Dies führt zu einer Leistungssteigerung im Vergleich zur seriellen Ausführung der Jobs nacheinander.
Lernziele
In dieser Anleitung werden Sie:- Führen Sie eine Abfrage an einem öffentlichen Wikipedia-Dataset aus, um die am häufigsten aufgerufenen Titel in einem bestimmten Monat zu ermitteln.
- Workflow bereitstellen und ausführen, bei dem mehrere BigQuery-Abfragejobs nacheinander ausgeführt werden.
- Einen Workflow bereitstellen und ausführen, bei dem die BigQuery-Jobs mithilfe einer parallelen Iteration ausgeführt werden und bei dem normale
for
-Schleifen parallel ausgeführt werden.
Sie können die folgenden Befehle in der Google Cloud Console oder über die Google Cloud CLI in Ihrem Terminal oder in Cloud Shell ausführen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Vorbereitung
Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln.
Console
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API:
gcloud services enable workflows.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/bigquery.jobUser, roles/logging.logWriter
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API:
gcloud services enable workflows.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/bigquery.jobUser, roles/logging.logWriter
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
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 Textfeld 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 mit der Standard-SQL-Syntax eine interaktive Abfrage 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.
Notieren Sie sich, wie lange die Ausführung der Abfrage dauert.
Workflow bereitstellen, in dem mehrere Abfragen nacheinander ausgeführt werden
Eine Workflowdefinition 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 mit dem BigQuery-Connector für Workflows eine Abfrage ausgeführt werden soll. Die Abfragen werden nacheinander ausgeführt und die meistgesehenen Titel aus jeder Tabelle werden in einer Ergebniskarte gespeichert.
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
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 Protokollierung > Protokollschreiber gewährt haben.
Klicken Sie auf Weiter.
Geben Sie im Workflow-Editor die 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 zuvor erstellten Dienstkontos.Sie sollten dem Dienstkonto bereits die IAM-Rollen
roles/bigquery.jobUser
undroles/logging.logWriter
zugewiesen haben.
Workflow ausführen und mehrere Abfragen nacheinander ausführen
Bei der Ausführung eines Workflows wird die aktuelle Workflowdefinition ausgeführt, die dem Workflow zugeordnet ist.
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
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 Workflowausführung sollte etwa eine Minute oder das Fünffache der vorherigen Laufzeit dauern. Das Ergebnis enthält alle Tabellen 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 Branch beschreibbar ist und das Ergebnis jedes Branches an sie angehängt werden kann.
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
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 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 zuvor erstellten Dienstkontos.Führen Sie den Workflow aus:
gcloud workflows run workflow-parallel-bqjobs
Das Ergebnis sollte der vorherigen Ausgabe ähneln, die Ausführung des Workflows sollte jedoch etwa 20 Sekunden oder weniger dauern.
Bereinigen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Anleitungsressourcen löschen
Löschen Sie die in dieser Anleitung erstellten Workflows:
gcloud workflows delete WORKFLOW_NAME
Nächste Schritte
- Weitere Informationen zu parallelen Schritten
- Weitere Informationen zu Workflow-Connectors finden Sie unter Informationen zu Connectors.
- Weitere Informationen zu Workflows finden Sie in der Übersicht zu Workflows.