BigQuery ospita numerosi set di dati pubblici disponibili al pubblico generale. 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:- Eseguire una query su un set di dati pubblico di Wikipedia per determinare i titoli più visti in un mese specifico.
- Esegui il deployment e l'esecuzione di un flusso di lavoro che esegue più modelli BigQuery a eseguire query in serie, uno dopo l'altro.
- Esegui il deployment e l'esecuzione di un flusso di lavoro che esegue i job BigQuery
utilizzando l'iterazione parallela,
e dove i loop
for
ordinari vengono eseguiti in parallelo.
Puoi eseguire i comandi seguenti nella console Google Cloud oppure utilizzando in 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 basata sull'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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Workflows.
-
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.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Workflows.
-
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
-
Accedi al tuo Account Google.
Se non ne hai già uno, crea un nuovo account.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
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.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Workflows.
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
-
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
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.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Workflows.
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
-
Esegui un job di query BigQuery
In BigQuery, puoi eseguire un job di query interattivo (on demand). Per ulteriori informazioni, vedi Esecuzione di job di query interattivi e batch.
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Inserisci la seguente query SQL BigQuery nel Area di testo Editor di query:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100
Fai clic su Esegui.
bq
Nel terminale, inserisci questo comando bq query
per eseguire un'operazione
query interattiva con 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'
Viene eseguita una query che restituisce i 100 titoli di Wikipedia più popolari di visualizzazioni 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 flusso di lavoro che esegue più query in serie
Una definizione di flusso di lavoro è composta da una serie di passaggi descritti utilizzando Sintassi di Workflows. Dopo aver creato un flusso di lavoro, ne 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 i Workflows Connettore BigQuery. Le query vengono eseguite in serie, una dopo l'altra, e i titoli più visualizzati di ogni tabella vengono salvate in una mappa dei risultati.
Console
Nella console Google Cloud, vai alla pagina Workflows:
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 l'account di servizio creato in precedenza.
Dovresti aver già concesso in licenza BigQuery > Utente job BigQuery e Logging > Ruoli IAM del Writer log per il servizio .
Fai clic su Avanti.
Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo flusso di lavoro:
Fai clic su Esegui il deployment.
gcloud
Apri un terminale e crea un file di codice sorgente per il tuo flusso di lavoro:
touch workflow-serial-bqjobs.yaml
Copia il seguente flusso di lavoro nel file del codice sorgente:
Esegui il deployment del flusso di lavoro inserendo il comando seguente:
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.COM
con l'indirizzo email dell'account di servizio che hai creato in precedenza.Dovresti aver già concesso
roles/bigquery.jobUser
eroles/logging.logWriter
ruoli IAM al servizio .
Esegui il flusso di lavoro ed esegui più query in serie
L'esecuzione di un flusso di lavoro esegue la definizione attuale del flusso di lavoro associata nel tuo flusso di lavoro.
Console
Nella console Google Cloud, vai alla pagina Workflows:
Nella pagina Flussi di lavoro, seleziona la workflow-serial-bqjobs per passare alla relativa pagina dei dettagli.
Nella pagina Dettagli del flusso di lavoro, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Visualizza i risultati del flusso di lavoro nel riquadro Output.
gcloud
Apri un terminale.
Esegui il flusso di lavoro:
gcloud workflows run workflow-serial-bqjob
L'esecuzione del flusso di lavoro dovrebbe richiedere circa un minuto o cinque volte di esecuzione precedente. Il risultato includerà ogni tabella e sarà simile a le seguenti:
{
"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 e l'esecuzione di un flusso di lavoro che esegue più query in parallelo
Invece di eseguire cinque query in sequenza, puoi eseguirle in in parallelo apportando alcune modifiche:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Un passaggio
parallel
consente l'esecuzione in parallelo di ogni iterazione del ciclofor
. La variabile
results
è dichiarata comeshared
, il che le consente di in scrittura da parte di un ramo, con la possibilità di aggiungere il risultato di ogni ramo.
Console
Nella console Google Cloud, vai alla pagina Workflows:
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 l'account di servizio creato in precedenza.
Fai clic su Avanti.
Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo flusso di lavoro:
Fai clic su Esegui il deployment.
Nella pagina Dettagli del flusso di lavoro, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Visualizza i risultati del flusso di lavoro nel riquadro Output.
gcloud
Apri un terminale e crea un file di codice sorgente per il tuo flusso di lavoro:
touch workflow-parallel-bqjobs.yaml
Copia il seguente flusso di lavoro nel file del codice sorgente:
Esegui il deployment del flusso di lavoro inserendo il comando seguente:
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.COM
con l'indirizzo email dell'account di servizio che hai creato in precedenza.Esegui il flusso di lavoro:
gcloud workflows run workflow-parallel-bqjobs
Il risultato sarà simile all'output precedente, ma l'esecuzione del flusso di lavoro dovrebbe richiedere circa venti secondi o meno.
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi mantenerlo senza l'aggiunta delle modifiche In questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto 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 flussi di lavoro creati in questo tutorial:
gcloud workflows delete WORKFLOW_NAME
Passaggi successivi
- Per scoprire di più sui passaggi paralleli, consulta Eseguire passaggi paralleli.
- Per saperne di più sui connettori Workflows, consulta Informazioni sui connettori.
- Per ulteriori informazioni su Workflows, consulta la panoramica di Workflows.