1. Panoramica
BigQuery è il data warehouse di analisi di Google completamente gestito, a basso costo e con capacità di petabyte. BigQuery è NoOps: non c'è alcuna infrastruttura da gestire e non hai bisogno di un amministratore di database, quindi puoi concentrarti sull'analisi dei dati per trovare insight significativi, utilizzare un ambiente SQL familiare e sfruttare il nostro modello di pagamento a consumo.
In questo codelab, utilizzerai le librerie client di Google Cloud per Python per eseguire query su 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
- Installare la libreria client Python
- Come interrogare le opere di Shakespeare
- Come eseguire query sul set di dati GitHub
- Come regolare la memorizzazione nella cache e la visualizzazione delle statistiche
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, ad esempio Chrome o Firefox
- Dimestichezza nell'utilizzo di Python
Sondaggio
Come utilizzerai questo tutorial?
Come valuteresti la tua esperienza con Python?
Come giudichi la tua esperienza di utilizzo dei servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata 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, devi fare riferimento all'ID progetto (che solitamente è identificato come
PROJECT_ID
), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto. - C'è un terzo valore, il 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 le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. 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.
Attiva Cloud Shell
- Dalla console Cloud, fai clic su Attiva Cloud Shell .
Se non hai mai avviato Cloud Shell, ti viene mostrata una schermata intermedia (below the fold) che descrive di cosa si tratta. In tal caso, fai clic su Continua (e non la vedrai più). Ecco come appare quella singola schermata:
Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.
Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto semplicemente con un browser o 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 confermare che il comando gcloud è a conoscenza del 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 deve essere abilitata per impostazione predefinita in tutti i progetti Google Cloud. Per verificare se è vero, usa il comando seguente in Cloud Shell: Dovresti essere nell'elenco BigQuery:
gcloud services list
BigQuery dovrebbe essere elencato:
NAME TITLE bigquery.googleapis.com BigQuery API ...
Se l'API BigQuery non è abilitata, puoi utilizzare il comando seguente in Cloud Shell per abilitarla:
gcloud services enable bigquery.googleapis.com
4. Autentica le richieste API
Per effettuare richieste all'API BigQuery, devi utilizzare un account di servizio. Un account di servizio appartiene al progetto e viene utilizzato dalla libreria client Python di Google Cloud per effettuare richieste API BigQuery. Come qualsiasi altro account utente, un account di servizio è rappresentato da un indirizzo email. In questa sezione utilizzerai Cloud SDK per creare un account di servizio e quindi creare le credenziali necessarie per l'autenticazione come account di servizio.
Innanzitutto, imposta una variabile di ambiente PROJECT_ID
:
export PROJECT_ID=$(gcloud config get-value core/project)
Successivamente, crea un nuovo account di servizio per accedere all'API BigQuery utilizzando:
gcloud iam service-accounts create my-bigquery-sa \ --display-name "my bigquery service account"
Quindi, crea le credenziali che il codice Python utilizzerà per accedere come nuovo account di servizio. Crea le seguenti credenziali e salvale come file JSON ~/key.json
utilizzando il comando seguente:
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, descritta nel passaggio successivo, per trovare le tue credenziali. La variabile di ambiente deve essere impostata sul percorso completo del file JSON delle credenziali che hai creato utilizzando:
export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
Scopri 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 offre una serie di ruoli predefiniti (utente, proprietario dati, visualizzatore dati e così via) che puoi assegnare all'account di servizio che hai creato nel passaggio precedente. Puoi scoprire di più sul controllo dell'accesso nella documentazione di BigQuery.
Prima di eseguire query su set di dati pubblici, devi assicurarti che l'account di servizio abbia almeno il ruolo roles/bigquery.user
. In Cloud Shell, esegui questo comando per assegnare il ruolo utente all'account di servizio:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role "roles/bigquery.user"
Per verificare che l'account di servizio abbia il ruolo utente, puoi eseguire questo comando:
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. Interroga le opere di Shakespeare
Per set di dati pubblico si intende qualsiasi set di dati archiviato in BigQuery e reso disponibile al pubblico. Sono disponibili molti altri set di dati pubblici su cui eseguire query. Alcuni set di dati sono ospitati da Google, mentre la maggior parte è ospitata da terze parti. Per maggiori informazioni, 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 di 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 un'applicazione Python semplice che utilizzerai per eseguire gli esempi dell'API Translation.
mkdir bigquery-demo cd bigquery-demo touch app.py
Apri l'editor di codice dall'angolo in alto a destra di Cloud Shell:
Vai al file app.py
all'interno della cartella bigquery-demo
e sostituisci il codice con il codice 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 vengono eseguite le query sulla tabella.
Torna in Cloud Shell ed esegui l'app:
python3 app.py
Viene visualizzato un elenco di parole con le 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 familiarità con BigQuery, ora eseguirai una query sul set di dati pubblico GitHub. Troverai i messaggi di commit più comuni su GitHub. Utilizzerai anche la console web di BigQuery per visualizzare in anteprima ed eseguire query ad hoc.
Per vedere l'aspetto dei dati, apri il set di dati GitHub nella UI 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 codice 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,}')
Prenditi un minuto o due per studiare il codice e vedere come vengono eseguite query sulla tabella per i messaggi di commit più comuni.
Torna in Cloud Shell ed esegui l'app:
python3 app.py
Dovresti vedere un elenco di messaggi di commit e le 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 statistica
BigQuery memorizza nella cache i risultati delle query. Di conseguenza, le query successive richiedono meno tempo. È possibile disabilitare la memorizzazione nella cache usando le opzioni di query. BigQuery tiene anche traccia delle statistiche sulle query, ad esempio ora di creazione, ora di fine e byte totali elaborati.
In questo passaggio disattiverai la memorizzazione nella cache e verranno visualizzate anche le statistiche relative alle query.
Vai al file app.py
all'interno della cartella bigquery_demo
e sostituisci il codice con il codice 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:,}')
Due aspetti da considerare riguardo al codice. Innanzitutto, la memorizzazione nella cache viene disattivata introducendo QueryJobConfig
e impostando use_query_cache
su false. In secondo luogo, hai eseguito l'accesso alle statistiche sulla query dall'oggetto job.
Torna in Cloud Shell ed esegui l'app:
python3 app.py
Come prima, dovresti vedere un elenco dei messaggi di commit e delle relative occorrenze. Alla fine, dovresti vedere anche 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 i flussi di dati utilizzando gli inserimenti di flussi di dati. Per ulteriori informazioni, consulta la pagina Caricamento di dati in BigQuery.
In questo passaggio, caricherai un file JSON archiviato su Cloud Storage in una tabella BigQuery. Il file JSON si trova nel percorso gs://cloud-samples-data/bigquery/us-states/us-states.json
Se ti interessano 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 vedere che contiene l'elenco degli stati degli Stati Uniti e 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 il codice seguente.
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')
Prenditi qualche minuto per studiare in che modo il codice carica il file JSON e crea una tabella con uno schema in un set di dati.
Torna in 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 vedere 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:
- Nella console Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto e fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e 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.