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.
Ziele
In dieser Anleitung werden Sie:- Führen Sie eine Abfrage für ein öffentliches Wikipedia-Dataset aus, um die am häufigsten aufgerufenen Titel in einem bestimmten Monat zu ermitteln.
- Einen Workflow bereitstellen und ausführen, der mehrere BigQuery-Abfragejobs seriell ausführt, also nacheinander.
- Stellen Sie einen Workflow bereit und führen Sie ihn aus, der die BigQuery-Jobs mit paralleler Iteration ausführt und in dem gewöhnliche
for-Schleifen parallel ausgeführt werden.
Sie können die folgenden Befehle in der Google Cloud -Konsole oder über das Google Cloud CLI entweder 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.
Hinweis
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
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
Melden Sie sich in Ihrem Google-Konto an.
Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud -Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Workflows API aktivieren:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollengcloud services enable workflows.googleapis.com
-
Richten Sie die Authentifizierung ein:
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen -
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie
SERVICE_ACCOUNT_NAMEmit einem Namen für das Dienstkonto. -
Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl
roles/bigquery.jobUser, roles/logging.logWriterfür jede der folgenden IAM-Rollen einmal aus:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Dabei gilt:
SERVICE_ACCOUNT_NAME: der Name des DienstkontosPROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt habenROLE: die zu gewährende Rolle
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud -Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Workflows API aktivieren:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollengcloud services enable workflows.googleapis.com
-
Richten Sie die Authentifizierung ein:
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen -
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie
SERVICE_ACCOUNT_NAMEmit einem Namen für das Dienstkonto. -
Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl
roles/bigquery.jobUser, roles/logging.logWriterfür jede der folgenden IAM-Rollen einmal aus:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Dabei gilt:
SERVICE_ACCOUNT_NAME: der Name des DienstkontosPROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt habenROLE: die zu gewährende Rolle
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
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
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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 100Klicken 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.yamlKopieren 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.comdurch die E-Mail-Adresse des Dienstkontos, das Sie zuvor erstellt haben.Sie sollten dem Dienstkonto bereits die IAM-Rollen
roles/bigquery.jobUserundroles/logging.logWriterzugewiesen 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
resultswird alsshareddeklariert, 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.yamlKopieren 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.comdurch 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 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:
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
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 über Workflows.