1. Introduzione
Workflows è un servizio di orchestrazione completamente gestito che esegue Google Cloud o servizi esterni nell'ordine da te definito.
BigQuery è un data warehouse aziendale completamente gestito che ti aiuta a gestire e analizzare terabyte di dati con funzionalità integrate come machine learning, analisi geospaziale e business intelligence.
In questo codelab, eseguirai alcune query BigQuery sul set di dati pubblico di Wikipedia. Vedrai quindi come eseguire più query BigQuery una dopo l'altra in modo seriale, come parte di un'orchestrazione di Workflows. Infine, metterai in contemporanea le query utilizzando la funzionalità di iterazione parallela di Workflows per migliorare la velocità fino a 5 volte.
Obiettivi didattici
- Come eseguire query in BigQuery sul set di dati di Wikipedia.
- Come eseguire più query come parte di un'orchestrazione di Workflows in serie.
- Come caricare in contemporanea le query utilizzando l'iterazione parallela di Workflows per migliorare la velocità fino a 5 volte.
2. Configurazione e requisiti
Configurazione dell'ambiente autogestito
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Avvia Cloud Shell
Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Dalla console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:
Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non occorre installare nulla.
3. Esplorare il set di dati Wikipedia
Innanzitutto, esplora il set di dati di Wikipedia in BigQuery.
Vai alla sezione BigQuery della console Google Cloud:
Sotto bigquery-samples
, dovresti vedere vari set di dati pubblici, tra cui alcuni relativi a Wikipedia:
Sotto il set di dati wikipedia_pageviews
, puoi vedere varie tabelle per le visualizzazioni di pagina di anni diversi:
Puoi selezionare una delle tabelle (ad es. 201207
) e visualizza l'anteprima dei dati:
Puoi anche eseguire query sulla tabella. Ad esempio, questa query seleziona i primi 100 titoli con il maggior numero di visualizzazioni:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
Una volta eseguita la query, il caricamento dei dati richiede circa 20 secondi:
4. Definisci un flusso di lavoro per l'esecuzione di più query
Eseguire una query su una singola tabella è facile. Tuttavia, l'esecuzione di più query su più tabelle e il confronto dei risultati può essere piuttosto noioso. Per semplificare l'operazione, Workflows può aiutarti con la sintassi di iterazione.
All'interno di Cloud Shell, crea un file workflow-serial.yaml
per creare un flusso di lavoro per eseguire più query su più tabelle:
touch workflow-serial.yaml
Quindi, puoi modificare il file con l'editor in Cloud Shell:
All'interno del file workflow-serial.yaml
, nel primo passaggio init
, crea una mappa results
per tenere traccia di ogni iterazione in base ai nomi delle tabelle. Definisci inoltre un array tables
con l'elenco delle tabelle su cui eseguire le query. In questo caso, abbiamo scelto 5 tabelle:
main: steps: - init: assign: - results : {} - tables: - 201201h - 201202h - 201203h - 201204h - 201205h
A questo punto, definisci un passaggio runQueries
. Questo passaggio esegue l'iterazione su ogni tabella e utilizza Workflows Connettore BigQuery per eseguire una query per trovare i primi 100 titoli con il maggior numero di visualizzazioni di pagina in ogni tabella. Salva quindi il titolo e le visualizzazioni principali di ogni tabella nella mappa dei risultati:
- 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}
Nel passaggio finale, restituisci la mappa results
:
- returnResults: return: ${results}
5. Eseguire più query con Workflows
Prima di poter eseguire il deployment e il flusso di lavoro, devi assicurarti che l'API Workflows sia abilitata. Puoi abilitarlo dalla console Google Cloud o utilizzando gcloud
in Cloud Shell:
gcloud services enable workflows.googleapis.com
Crea un account di servizio per Workflows:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Assicurati che l'account di servizio disponga dei ruoli per registrare ed eseguire i job BigQuery:
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
Esegui il deployment del flusso di lavoro con l'account di servizio:
gcloud workflows deploy bigquery-serial \ --source=workflow-serial.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Infine, puoi eseguire il flusso di lavoro.
Individua il flusso di lavoro bigquery-serial
nella sezione Flussi di lavoro di Cloud Console e premi il pulsante Execute
:
In alternativa, puoi anche eseguire il flusso di lavoro con gcloud
in Cloud Shell:
gcloud workflows run bigquery-serial
L'esecuzione del flusso di lavoro dovrebbe durare circa 1 minuto (20 secondi per ciascuna delle 5 tabelle).
Alla fine, vedrai l'output di ogni tabella con i titoli e le visualizzazioni principali:
6. Caricare in contemporanea più query con passaggi paralleli
Il flusso di lavoro nel passaggio precedente ha richiesto circa un minuto perché ha eseguito 5 query della durata di 20 secondi ciascuna. Poiché si tratta di query indipendenti, puoi eseguirle in parallelo utilizzando la funzionalità di iterazione parallela di Workflows.
Copia il file workflow-serial.yaml
in un nuovo file workflow-parallel.yaml
. Nel nuovo file apporterai un paio di modifiche per trasformare i passaggi seriali in passaggi paralleli.
Nel file workflow-parallel.yaml
, modifica il passaggio runQueries
. Innanzitutto, aggiungi la parola chiave parallel
. In questo modo ogni iterazione del ciclo for può essere eseguita in parallelo. Quindi, dichiara la variabile results
come variabile shared
. Ciò consente alla variabile di essere scrivibile da un ramo. Ogni risultato verrà aggiunto a questa variabile.
- runQueries: parallel: shared: [results] for: value: table in: ${tables}
Esegui il deployment del flusso di lavoro parallelo:
gcloud workflows deploy bigquery-parallel \ --source=workflow-parallel.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Esegui il flusso di lavoro:
gcloud workflows run bigquery-parallel
L'esecuzione del flusso di lavoro dovrebbe durare circa 20 secondi. Ciò è dovuto al fatto che tutte e 5 le query vengono eseguite in parallelo. Miglioramento della velocità fino a 5 volte superiore con solo un paio di righe di modifica del codice.
Alla fine, otterrai lo stesso output per ogni tabella con i titoli e le visualizzazioni principali, ma con tempi di esecuzione molto più brevi:
7. Complimenti
Complimenti, hai completato il codelab. Per saperne di più, consulta la documentazione di Workflows sui passaggi paralleli.
Argomenti trattati
- Come eseguire query in BigQuery sul set di dati di Wikipedia.
- Come eseguire più query come parte di un'orchestrazione di Workflows in serie.
- Come caricare in contemporanea le query utilizzando l'iterazione parallela di Workflows per migliorare la velocità fino a 5 volte.