BigQuery ospita una serie di set di dati pubblici disponibili per l'esecuzione di query da parte del pubblico. In questo tutorial creerai un flusso di lavoro che esegue più job di query BigQuery in parallelo, dimostrando un miglioramento delle prestazioni rispetto all'esecuzione dei job in serie, uno dopo l'altro.
Obiettivi
In questo tutorial, imparerai a:- Esegui una query su un set di dati pubblico di Wikipedia per determinare i titoli più visualizzati in un determinato mese.
- Esegui il deployment ed esegui un workflow che esegue più job di query BigQuery in serie, uno dopo l'altro.
- Esegui il deployment ed esegui un workflow che esegue i job BigQuery
utilizzando l'iterazione parallela,
e in cui i normali loop
forvengono eseguiti in parallelo.
Puoi eseguire i seguenti comandi nella console Google Cloud o utilizzando Google Cloud CLI nel terminale o in Cloud Shell.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Prima di iniziare
I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.
Console
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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
-
Accedi al tuo Account Google.
Se non ne hai già uno, registrati per creare un nuovo account.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita l'API Workflows:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable workflows.googleapis.com
-
Configura l'autenticazione:
-
Assicurati di disporre del ruolo IAM Creazione account di servizio
(
roles/iam.serviceAccountCreator) e del ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin). Scopri come concedere i ruoli. -
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sostituisci
SERVICE_ACCOUNT_NAMEcon un nome per il account di servizio. -
Concedi ruoli al account di servizio. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
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
Sostituisci quanto segue:
SERVICE_ACCOUNT_NAME: il nome del account di servizioPROJECT_ID: l'ID progetto in cui hai creato il account di servizioROLE: il ruolo da concedere
-
Assicurati di disporre del ruolo IAM Creazione account di servizio
(
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita l'API Workflows:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable workflows.googleapis.com
-
Configura l'autenticazione:
-
Assicurati di disporre del ruolo IAM Creazione account di servizio
(
roles/iam.serviceAccountCreator) e del ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin). Scopri come concedere i ruoli. -
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sostituisci
SERVICE_ACCOUNT_NAMEcon un nome per il account di servizio. -
Concedi ruoli al account di servizio. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
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
Sostituisci quanto segue:
SERVICE_ACCOUNT_NAME: il nome del account di servizioPROJECT_ID: l'ID progetto in cui hai creato il account di servizioROLE: il ruolo da concedere
-
Assicurati di disporre del ruolo IAM Creazione account di servizio
(
Esegui un job di query BigQuery
In BigQuery, puoi eseguire un job di query interattiva (on demand). Per ulteriori informazioni, consulta la sezione Esecuzione di job di query interattivi e batch.
Console
Nella console Google Cloud , vai alla pagina BigQuery.
Inserisci la seguente query SQL di BigQuery nell'area di testo Editor query:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100Fai clic su Esegui.
bq
Nel terminale, inserisci il seguente comando bq query per eseguire una
query interattiva utilizzando la sintassi SQL standard:
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'
Esegue una query che restituisce i 100 titoli di Wikipedia più visualizzati in un mese specifico e scrive l'output in una tabella temporanea.
Prendi nota del tempo necessario per l'esecuzione della query.
Esegui il deployment di un workflow che esegue più query in serie
Una definizione di workflow è costituita da una serie di passaggi descritti utilizzando la sintassi di Workflows. Dopo aver creato un workflow, esegui il deployment per renderlo disponibile per l'esecuzione. Il passaggio di deployment convalida anche che il file sorgente possa essere eseguito.
Il seguente flusso di lavoro definisce un elenco di cinque tabelle su cui eseguire una query utilizzando il connettore BigQuery di Workflows. Le query vengono eseguite in sequenza, una dopo l'altra, e i titoli più visualizzati di ogni tabella vengono salvati in una mappa dei risultati.
Console
Nella console Google Cloud , vai alla pagina Workflow:
Fai clic su Crea.
Inserisci un nome per il nuovo flusso di lavoro, ad esempio
workflow-serial-bqjobs.Scegli una regione appropriata, ad esempio us-central1.
Seleziona il service account che hai creato in precedenza.
Dovresti aver già concesso i ruoli IAM BigQuery > Utente job BigQuery e Logging > Writer log al service account.
Fai clic su Avanti.
Nell'editor del workflow, inserisci la seguente definizione per il workflow:
Fai clic su Esegui il deployment.
gcloud
Apri un terminale e crea un file di codice sorgente per il tuo workflow:
touch workflow-serial-bqjobs.yamlCopia il seguente workflow nel file del codice sorgente:
Esegui il deployment del flusso di lavoro inserendo questo comando:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Sostituisci
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.comcon l'email del account di servizio che hai creato in precedenza.Dovresti aver già concesso i ruoli IAM
roles/bigquery.jobUsereroles/logging.logWriteral service account.
Esegui il workflow ed esegui più query in serie
L'esecuzione di un workflow esegue la definizione attuale del workflow associata al workflow.
Console
Nella console Google Cloud , vai alla pagina Workflow:
Nella pagina Workflow, seleziona il workflow workflow-serial-bqjobs per accedere alla pagina dei dettagli.
Nella pagina Dettagli workflow, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Visualizza i risultati del workflow nel riquadro Output.
gcloud
Apri un terminale.
Esegui il workflow:
gcloud workflows run workflow-serial-bqjob
L'esecuzione del workflow dovrebbe richiedere circa un minuto o cinque volte il tempo di esecuzione precedente. Il risultato includerà ogni tabella e sarà simile a quanto segue:
{
"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"
}
}
Esegui il deployment ed esegui un flusso di lavoro che esegue più query in parallelo
Anziché eseguire cinque query in sequenza, puoi eseguirle in parallelo apportando alcune modifiche:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Un passaggio
parallelconsente a ogni iterazione del ciclofordi essere eseguita in parallelo. La variabile
resultsè dichiarata comeshared, il che consente a un ramo di scriverla e di aggiungere il risultato di ogni ramo.
Console
Nella console Google Cloud , vai alla pagina Workflow:
Fai clic su Crea.
Inserisci un nome per il nuovo flusso di lavoro, ad esempio
workflow-parallel-bqjobs.Scegli una regione appropriata, ad esempio us-central1.
Seleziona il service account che hai creato in precedenza.
Fai clic su Avanti.
Nell'editor del workflow, inserisci la seguente definizione per il workflow:
Fai clic su Esegui il deployment.
Nella pagina Dettagli workflow, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Visualizza i risultati del workflow nel riquadro Output.
gcloud
Apri un terminale e crea un file di codice sorgente per il tuo workflow:
touch workflow-parallel-bqjobs.yamlCopia il seguente workflow nel file del codice sorgente:
Esegui il deployment del flusso di lavoro inserendo questo comando:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Sostituisci
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.comcon l'email del account di servizio che hai creato in precedenza.Esegui il workflow:
gcloud workflows run workflow-parallel-bqjobs
Il risultato sarà simile all'output precedente, ma l'esecuzione del workflow dovrebbe richiedere circa 20 secondi o meno.
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, eliminalo. Se hai utilizzato un progetto esistente e vuoi conservarlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le risorse del tutorial
Elimina i workflow creati in questo tutorial:
gcloud workflows delete WORKFLOW_NAME
Passaggi successivi
- Per saperne di più sui passaggi paralleli, vedi Eseguire passaggi paralleli.
- Per saperne di più sui connettori di Workflows, consulta Informazioni sui connettori.
- Per scoprire di più su Workflows, consulta la panoramica di Workflows.