Carica ed esegui query sui dati con lo strumento a riga di comando bq per BigQuery

1. Introduzione

BigQuery è il database di analisi NoOps a basso costo e completamente gestito di Google. Con BigQuery, puoi eseguire query su terabyte di dati senza un amministratore di database o un'infrastruttura. BigQuery utilizza un ambiente SQL familiare e un modello di addebito basato sul solo pagamento a consumo. BigQuery permette di concentrarsi sull'analisi dei dati per trovare informazioni significative. In questo codelab, utilizzerai lo strumento a riga di comando bq per caricare un file CSV locale in una nuova tabella BigQuery.

Cosa imparerai a fare

  • Come utilizzare lo strumento a riga di comando bq per BigQuery
  • Come caricare file di dati locali in una tabella BigQuery

Che cosa ti serve

2. Configurazione

Abilitare BigQuery

Se non disponi già di un Account Google, devi crearne uno.

  1. Accedi alla console Google Cloud e vai a BigQuery. Puoi anche aprire direttamente la UI web di BigQuery inserendo il seguente URL nel tuo browser.
https://console.cloud.google.com/bigquery
  1. Accetta i Termini di servizio.
  2. Prima di poter utilizzare BigQuery, devi creare un progetto. Segui le istruzioni per creare il nuovo progetto.

Scegli un nome per il progetto e prendi nota dell'ID. 1884405a64ce5765.png

L'ID progetto è un nome univoco tra tutti i progetti Google Cloud. Verrà indicato più avanti in questo codelab come PROJECT_ID.

Questo codelab utilizza le risorse BigQuery entro i limiti della sandbox di BigQuery. Non è richiesto un account di fatturazione. Se in un secondo momento vuoi rimuovere i limiti della sandbox, puoi aggiungere un account di fatturazione registrandoti alla prova senza costi di Google Cloud.

Cloud Shell

Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud.

Attiva Cloud Shell

  1. Dalla console Cloud, fai clic su Attiva Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

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:

70f315d7b402b476.png

Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.

fbe3a0674c982259.png

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.

  1. 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`
  1. 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. Crea un set di dati

Crea un set di dati che contenga le tabelle.

Che cos'è un set di dati?

Un set di dati BigQuery è una raccolta di tabelle. Tutte le tabelle di un set di dati sono archiviate nella stessa località dei dati. Puoi anche collegare controlli di accesso personalizzati per limitare l'accesso a un set di dati e alle relative tabelle.

Crea un set di dati

In Cloud Shell, utilizza il comando bq mk per creare un set di dati chiamato "bq_load_codelab".

bq mk bq_load_codelab

Visualizza le proprietà del set di dati

Verifica di aver creato il set di dati visualizzando le relative proprietà con il comando bq show.

bq show bq_load_codelab

Dovresti vedere un output simile al seguente:

Dataset my-project:bq_load_codelab

   Last modified           ACLs          Labels
 ----------------- -------------------- --------
  15 Jun 14:12:49   Owners:
                      projectOwners,
                      your-email@example.com
                    Writers:
                      projectWriters
                    Readers:
                      projectReaders

4. Crea il file di dati

BigQuery può caricare dati da diversi formati, tra cui JSON delimitato da nuova riga, Avro e CSV. Per semplicità, utilizzerai CSV.

Creare un file CSV

In Cloud Shell, crea un file CSV vuoto.

touch customer_transactions.csv

Apri il file CSV nell'editor di codice in Cloud Shell eseguendo il comando di modifica cloudshell, che aprirà una nuova finestra del browser con un editor di codice e il riquadro di Cloud Shell.

cloudshell edit customer_transactions.csv

Nell'editor di codice, inserisci alcuni valori separati da virgole da caricare in BigQuery.

ID,Zipcode,Timestamp,Amount,Feedback,SKU
c123,78757,2018-02-14 17:01:39Z,1.20,4.7,he4rt5
c456,10012,2018-03-14 15:09:26Z,53.60,3.1,ppiieee
c123,78741,2018-04-01 05:59:47Z,5.98,2.0,ch0c0

Salva il file CSV facendo clic su File > Modifica.

5. Carica dati

Usa il comando bq load per caricare il file CSV in una tabella BigQuery.

bq load \
    --source_format=CSV \
    --skip_leading_rows=1 \
    bq_load_codelab.customer_transactions \
    ./customer_transactions.csv \
    id:string,zip:string,ttime:timestamp,amount:numeric,fdbk:float,sku:string

Hai utilizzato le seguenti opzioni:

  • --source_format=CSV utilizza il formato dei dati CSV durante l'analisi del file di dati.
  • --skip_leading_rows=1 salta la prima riga del file CSV perché si tratta di una riga di intestazione.
  • Bq_load_codelab.customer_transactions—the first positional argument—definisce la tabella in cui caricare i dati.
  • ./customer_transactions.csv, il secondo argomento posizionale, definisce quale file caricare. Oltre ai file locali, il comando bq load può caricare file da Cloud Storage con gs://my_bucket/path/to/file URIs.
  • Uno schema, che può essere definito in un file di schema JSON o come elenco separato da virgole. Per semplicità, hai utilizzato un elenco separato da virgole.

Hai utilizzato il seguente schema nella tabella customer_transactions:

  • Id:string: un identificatore cliente
  • Zip:string: un codice postale statunitense
  • Ttime:timestamp: la data e l'ora in cui è avvenuta la transazione
  • Amount:numeric: l'importo di una transazione (una colonna numerica memorizza i dati in formato decimale, utile per i valori monetari).
  • Fdbk:float: la valutazione di un sondaggio di feedback sulla transazione
  • Sku:string: un identificatore dell'articolo acquistato

Visualizzare i dettagli della tabella

Verifica che la tabella sia stata caricata mostrandone le proprietà.

bq show bq_load_codelab.customer_transactions

Output:

Table my-project:bq_load_codelab.customer_transactions

   Last modified          Schema          Total Rows   Total Bytes
 ----------------- --------------------- ------------ -------------
  15 Jun 15:13:55   |- id: string         3            159
                    |- zip: string
                    |- ttime: timestamp
                    |- amount: numeric
                    |- fdbk: float
                    |- sku: string

6. Eseguire query sui dati

Ora che i dati sono stati caricati, puoi eseguire query utilizzando la UI web di BigQuery, il comando bq o l'API. Le query possono unire i dati a qualsiasi set di dati (o set di dati, purché si trovino nella stessa località) per il quale disponi dell'autorizzazione di lettura.

Esegui una query SQL standard che unisce il set di dati al set di dati dei codici postali degli Stati Uniti e somma le transazioni per stato degli Stati Uniti. Usa il comando bq query per eseguire la query.

bq query --nouse_legacy_sql '
SELECT SUM(c.amount) AS amount_total, z.state_code AS state_code
FROM `bq_load_codelab.customer_transactions` c
JOIN `bigquery-public-data.utility_us.zipcode_area` z
ON c.zip = z.zipcode
GROUP BY state_code
'

Il comando dovrebbe restituire un output simile al seguente:

Waiting on bqjob_r26...05a15b38_1 ... (1s) Current status: DONE   
+--------------+------------+
| amount_total | state_code |
+--------------+------------+
|         53.6 | NY         |
|         7.18 | TX         |
+--------------+------------+

La query che hai eseguito ha utilizzato un set di dati pubblico e quello privato. Per ulteriori informazioni, leggi questa versione commentata della stessa query:

#standardSQL
SELECT
  /* Total of all transactions in the state. */
  SUM(c.amount) AS amount_total,

  /* State corresponding to the transaction's zipcode. */
  z.state_code AS state_code

/* Query the table you just constructed.
 * Note: If you omit the project from the table ID,
 *       the dataset is read from your project. */
FROM `bq_load_codelab.customer_transactions` c

/* Join the table to the zipcode public dataset. */
JOIN `bigquery-public-data.utility_us.zipcode_area` z

/* Find the state corresponding to the transaction's zipcode. */
ON c.zip = z.zipcode

/* Group over all transactions by state. */
GROUP BY state_code

7. Esegui la pulizia

Elimina il set di dati che hai creato con il comando bq rm. Usa il flag -r per rimuovere tutte le tabelle che contiene.

bq rm -r bq_load_codelab

8. Complimenti

Hai caricato una tabella in BigQuery ed hai eseguito una query.

Argomenti trattati

  • Utilizzo dello strumento a riga di comando bq per interagire con BigQuery.
  • Unione dei tuoi dati e di un set di dati pubblico con una query BigQuery.

Passaggi successivi

Scopri di più su: