1. Panoramica
BigQuery è il data warehouse di analisi di Google completamente gestito, a basso costo e con capacità di petabyte. BigQuery è NoOps, ovvero non esistono infrastrutture da gestire e non hai bisogno di un amministratore di database, per cui puoi concentrarti sull'analisi dei dati per trovare informazioni significative, utilizzare un ambiente SQL familiare e sfruttare i vantaggi offerti dal modello di pagamento a consumo.
In questo codelab utilizzerai le librerie client Google Cloud per Python per eseguire query sui set di dati pubblici BigQuery con Python.
Cosa imparerai a fare
- Come utilizzare Cloud Shell
- Come abilitare l'API BigQuery
- Come autenticare le richieste API
- Come installare la libreria client Python
- Come eseguire query sulle opere di Shakespeare
- Come eseguire query sul set di dati GitHub
- Come regolare le statistiche di memorizzazione nella cache e visualizzazione
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, ad esempio Chrome o Firefox
- Familiarità con l'utilizzo di Python
Sondaggio
Come utilizzerai questo tutorial?
Come valuteresti la tua esperienza con Python?
Come valuti la tua esperienza di utilizzo dei servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- 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 del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e 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). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come
PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto. - Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Attiva Cloud Shell
- Nella console Cloud, fai clic su Attiva Cloud Shell
.

Se non hai mai avviato Cloud Shell, viene visualizzata una schermata intermedia (sotto la piega) che ne descrive le funzionalità. In questo caso, fai clic su Continua e non comparirà più. Ecco come si presenta la schermata intermedia:

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto semplicemente con un browser o con Chromebook.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto:
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Abilita l'API
L'API BigQuery dovrebbe essere abilitata per impostazione predefinita in tutti i progetti Google Cloud. Puoi verificare se questa affermazione è vera con il seguente comando in Cloud Shell: dovresti visualizzare BigQuery nell'elenco:
gcloud services list
Dovresti visualizzare BigQuery nell'elenco:
NAME TITLE bigquery.googleapis.com BigQuery API ...
Se l'API BigQuery non è abilitata, puoi utilizzare il seguente comando in Cloud Shell per abilitarla:
gcloud services enable bigquery.googleapis.com
4. Autenticare le richieste API
Per effettuare richieste all'API BigQuery, devi utilizzare un service account. Un service account appartiene al tuo progetto e viene utilizzato dalla libreria client Python di Google Cloud per effettuare richieste all'API BigQuery. Come qualsiasi altro account utente, un service account è rappresentato da un indirizzo email. In questa sezione utilizzerai Cloud SDK per creare un service account e poi creare le credenziali necessarie per l'autenticazione come service account.
Innanzitutto, imposta una variabile di ambiente PROJECT_ID:
export PROJECT_ID=$(gcloud config get-value core/project)
Successivamente, crea un nuovo service account per accedere all'API BigQuery utilizzando:
gcloud iam service-accounts create my-bigquery-sa \ --display-name "my bigquery service account"
Poi, crea le credenziali che il codice Python utilizzerà per accedere al nuovo service account. Utilizza il seguente comando per creare le credenziali e salvarle in un file JSON ~/key.json:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com
Infine, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS, utilizzata dalla libreria client Python di BigQuery, trattata nel passaggio successivo, per trovare le tue credenziali. Il valore della variabile di ambiente deve essere il percorso completo del file JSON delle credenziali che hai creato, utilizzando:
export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
Puoi scoprire di più sull'autenticazione dell'API BigQuery.
5. Configurazione del controllo dell'accesso
BigQuery utilizza Identity and Access Management (IAM) per gestire l'accesso alle risorse. BigQuery dispone di una serie di ruoli predefiniti (utente, dataOwner, dataViewer e così via) che puoi assegnare al service account creato nel passaggio precedente. Puoi scoprire di più sul controllo dell'accesso nella documentazione di BigQuery.
Prima di poter eseguire query sui set di dati pubblici, devi assicurarti che il service account disponga almeno del ruolo roles/bigquery.user. In Cloud Shell, esegui questo comando per assegnare il ruolo utente al service account:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/bigquery.user"
Puoi eseguire questo comando per verificare che l'account di servizio disponga del ruolo utente:
gcloud projects get-iam-policy $PROJECT_ID
Dovresti visualizzare quanto segue:
bindings: - members: - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com role: roles/bigquery.user ...
6. Installa la libreria client
Installa la libreria client Python di BigQuery:
pip3 install --user --upgrade google-cloud-bigquery
Ora puoi iniziare a programmare con l'API BigQuery.
7. Esegui query sulle opere di Shakespeare
Un set di dati pubblico è un set di dati archiviato in BigQuery e reso disponibile al pubblico. Sono disponibili molti altri set di dati pubblici su cui eseguire query. Mentre alcuni set di dati sono ospitati da Google, la maggior parte è ospitata da terze parti. Per saperne di più, consulta la pagina Set di dati pubblici.
Oltre ai set di dati pubblici, BigQuery fornisce un numero limitato di tabelle di esempio su cui puoi eseguire query. Queste tabelle sono contenute nel set di dati bigquery-public-data:samples. La tabella shakespeare nel set di dati samples contiene un indice delle parole delle opere di Shakespeare. Indica il numero di volte in cui ogni parola compare in ciascun corpus.
In questo passaggio, eseguirai una query sulla tabella shakespeare.
Innanzitutto, in Cloud Shell crea una semplice applicazione Python che utilizzerai per eseguire gli esempi dell'API Translation.
mkdir bigquery-demo cd bigquery-demo touch app.py
Apri l'editor di codice dalla parte in alto a destra di Cloud Shell:

Vai al file app.py all'interno della cartella bigquery-demo e sostituisci il codice con il seguente.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT corpus AS title, COUNT(word) AS unique_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY title
ORDER BY unique_words
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
title = row['title']
unique_words = row['unique_words']
print(f'{title:<20} | {unique_words}')
Prenditi un minuto o due per studiare il codice e vedere come viene eseguita la query sulla tabella.
Torna a Cloud Shell ed esegui l'app:
python3 app.py
Dovresti visualizzare un elenco di parole e delle relative occorrenze:
hamlet | 5318 kinghenryv | 5104 cymbeline | 4875 troilusandcressida | 4795 kinglear | 4784 kingrichardiii | 4713 2kinghenryvi | 4683 coriolanus | 4653 2kinghenryiv | 4605 antonyandcleopatra | 4582
8. Esegui una query sul set di dati GitHub
Per acquisire maggiore familiarità con BigQuery, ora eseguirai una query sul set di dati pubblico GitHub. I messaggi di commit più comuni sono disponibili su GitHub. Utilizzerai anche la console web di BigQuery per visualizzare l'anteprima ed eseguire query ad hoc.
Per vedere i dati, apri il set di dati GitHub nell'interfaccia utente web di BigQuery:
Fai clic sul pulsante Anteprima per vedere come appaiono i dati:

Vai al file app.py all'interno della cartella bigquery_demo e sostituisci il codice con il seguente.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
Dedica un minuto o due a studiare il codice e a vedere come viene eseguita la query sulla tabella per i messaggi di commit più comuni.
Torna a Cloud Shell ed esegui l'app:
python3 app.py
Dovresti visualizzare un elenco dei messaggi di commit e delle relative occorrenze:
Update README.md | 1,685,515
Initial commit | 1,577,543
update | 211,017
| 155,280
Create README.md | 153,711
Add files via upload | 152,354
initial commit | 145,224
first commit | 110,314
Update index.html | 91,893
Update README | 88,862
9. Memorizzazione nella cache e statistiche
BigQuery memorizza nella cache i risultati delle query. Di conseguenza, le query successive richiedono meno tempo. È possibile disattivare la memorizzazione nella cache con le opzioni di query. BigQuery tiene traccia anche delle statistiche sulle query, come l'ora di creazione, l'ora di fine e il numero totale di byte elaborati.
In questo passaggio, disabiliterai la memorizzazione nella cache e visualizzerai anche le statistiche sulle query.
Vai al file app.py all'interno della cartella bigquery_demo e sostituisci il codice con il seguente.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
print('-'*60)
print(f'Created: {results.created}')
print(f'Ended: {results.ended}')
print(f'Bytes: {results.total_bytes_processed:,}')
Ecco un paio di cose da notare sul codice. Innanzitutto, la memorizzazione nella cache viene disabilitata introducendo QueryJobConfig e impostando use_query_cache su false. In secondo luogo, hai eseguito l'accesso alle statistiche sulla query dall'oggetto job.
Torna a Cloud Shell ed esegui l'app:
python3 app.py
Come prima, dovresti visualizzare un elenco dei messaggi di commit e delle relative occorrenze. Inoltre, alla fine dovresti visualizzare alcune statistiche sulla query:
Update README.md | 1,685,515
Initial commit | 1,577,543
update | 211,017
| 155,280
Create README.md | 153,711
Add files via upload | 152,354
initial commit | 145,224
first commit | 110,314
Update index.html | 91,893
Update README | 88,862
------------------------------------------------------------
Created: 2020-04-03 13:30:08.801000+00:00
Ended: 2020-04-03 13:30:15.334000+00:00
Bytes: 2,868,251,894
10. Caricamento di dati in BigQuery
Se vuoi eseguire query sui tuoi dati, devi caricarli in BigQuery. BigQuery supporta il caricamento di dati da molte origini, tra cui Cloud Storage, altri servizi Google e altre origini leggibili. Puoi anche trasmettere in streaming i dati utilizzando gli inserimenti in streaming. Per ulteriori informazioni, consulta la pagina Caricamento di dati in BigQuery.
In questo passaggio, caricherai un file JSON archiviato in Cloud Storage in una tabella BigQuery. Il file JSON si trova in gs://cloud-samples-data/bigquery/us-states/us-states.json
Se vuoi conoscere i contenuti del file JSON, puoi utilizzare lo strumento a riga di comando gsutil per scaricarlo in Cloud Shell:
gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
Puoi notare che contiene l'elenco degli stati degli Stati Uniti e che ogni stato è un documento JSON su una riga separata:
head us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
Per caricare questo file JSON in BigQuery, vai al file app.py all'interno della cartella bigquery_demo e sostituisci il codice con quanto segue.
from google.cloud import bigquery
client = bigquery.Client()
gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'
dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')
job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
bigquery.SchemaField('name', 'STRING'),
bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)
print('JSON file loaded to BigQuery')
Dedica un minuto o due a studiare come il codice carica il file JSON e crea una tabella con uno schema in un set di dati.
Torna a Cloud Shell ed esegui l'app:
python3 app.py
In BigQuery vengono creati un set di dati e una tabella.
Per verificare che il set di dati sia stato creato, vai alla console BigQuery. Dovresti visualizzare un nuovo set di dati e una nuova tabella. Passa alla scheda Anteprima della tabella per visualizzare i dati:

11. Complimenti!
Hai imparato a utilizzare BigQuery con Python.
Pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial:
- In Cloud Console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il tuo progetto e poi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Scopri di più
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Python su Google Cloud: https://cloud.google.com/python/
- Librerie client di Cloud per Python: https://googleapis.github.io/google-cloud-python/
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.