Utilizzo di BigQuery con C#

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 di Google Cloud per .NET per eseguire query sui set di dati pubblici di BigQuery con C#.

Cosa imparerai a fare

  • Come utilizzare Cloud Shell
  • Come abilitare l'API BigQuery
  • Come autenticare le richieste API
  • Come installare la libreria client Google Cloud per C#
  • 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 C#

Sondaggio

Come utilizzerai questo tutorial?

Leggilo e basta Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con C#?

Principiante Intermedio Avanzato

Come valuti la tua esperienza di utilizzo dei servizi Google Cloud Platform?

Principiante Intermedio Avanzato

2. Configurazione e requisiti

Configurazione dell'ambiente autonomo

  1. 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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. 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

  1. Nella console Cloud, fai clic su Attiva Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.

d95252b003979716.png

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

7833d5e1c5d18f54.png

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo necessari. 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 con un browser.

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è autenticato e il progetto è 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 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 BigQuery

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-json.googleapis.com      BigQuery API
...

Se l'API BigQuery non è abilitata, puoi utilizzare il seguente comando in Cloud Shell per abilitarla:

gcloud services enable bigquery-json.googleapis.com

4. Installa la libreria client di BigQuery per C#

Innanzitutto, crea una semplice applicazione console C# che utilizzerai per eseguire gli esempi dell'API BigQuery.

dotnet new console -n BigQueryDemo

Dovresti vedere l'applicazione creata e le dipendenze risolte:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

A questo punto, vai alla cartella BigQueryDemo:

cd BigQueryDemo

e aggiungi il pacchetto NuGet Google.Cloud.BigQuery.V2 al progetto:

dotnet add package Google.Cloud.BigQuery.V2
info : Adding PackageReference for package 'Google.Cloud.BigQuery.V2' into project '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
log  : Restoring packages for /home/atameldev/BigQueryDemo/BigQueryDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.BigQuery.V2' version '1.2.0' added to file '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.

Ora puoi utilizzare l'API BigQuery.

5. 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, alcuni dei quali sono ospitati anche da Google, ma molti altri 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 in bigquery-public-data:samples dataset. Una di queste tabelle si chiama shakespeare.. Contiene un indice delle parole delle opere di Shakespeare, che indica il numero di volte in cui ogni parola compare in ogni corpus.

In questo passaggio, eseguirai una query sulla tabella Shakespeare.

Innanzitutto, apri l'editor di codice dalla parte in alto a destra di Cloud Shell:

fd3fc1303e63572.png

Vai al file Program.cs all'interno della cartella BigQueryDemo e sostituisci il codice con il seguente. Assicurati di sostituire projectId con l'ID progetto effettivo:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "samples", "shakespeare");
            var sql = $"SELECT corpus AS title, COUNT(word) AS unique_words FROM {table} GROUP BY title ORDER BY unique_words DESC LIMIT 10";

            var results = client.ExecuteQuery(sql, parameters: null);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["title"]}: {row["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:

dotnet run

Dovresti visualizzare un elenco di parole e delle relative occorrenze:

hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...

6. Esegui una query sul set di dati GitHub

Per acquisire maggiore familiarità con BigQuery, ora eseguirai una query sul set di dati pubblico di 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 l'aspetto dei dati, apri il set di dati GitHub nell'interfaccia utente web BigQuery:

https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table

Per visualizzare un'anteprima rapida dell'aspetto dei dati, utilizza il pulsante Anteprima:

f706bfe3dfcbd267.png

Vai al file Program.cs all'interno della cartella BigQueryDemo e sostituisci il codice con il seguente. Assicurati di sostituire projectId con l'ID progetto effettivo:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
            
            var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";

            var results = client.ExecuteQuery(sql, parameters: null);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
            }
        }
    }
}

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:

dotnet run

Dovresti visualizzare un elenco dei messaggi di commit e delle relative occorrenze:

Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863

7. Memorizzazione nella cache e statistiche

Dopo la query iniziale, BigQuery memorizza nella cache i risultati. Di conseguenza, le query successive richiedono molto meno tempo. È possibile disattivare la memorizzazione nella cache con le opzioni di query. BigQuery tiene traccia anche di alcune statistiche sulle query, come l'ora di creazione, l'ora di fine e il numero totale di byte elaborati.

In questo passaggio, disattiverai la memorizzazione nella cache e visualizzerai alcune statistiche sulle query.

Vai al file Program.cs all'interno della cartella BigQueryDemo e sostituisci il codice con il seguente. Assicurati di sostituire projectId con l'ID progetto effettivo:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
            
            var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
            var queryOptions = new QueryOptions {
                UseQueryCache = false
            };

            var results = client.ExecuteQuery(sql, parameters: null, queryOptions: queryOptions);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
            }

            var job = client.GetJob(results.JobReference);
            var stats = job.Statistics;
            Console.WriteLine("----------");
            Console.WriteLine($"Creation time: {stats.CreationTime}");
            Console.WriteLine($"End time: {stats.EndTime}");
            Console.WriteLine($"Total bytes processed: {stats.TotalBytesProcessed}");
        }
    }
}

Ecco un paio di cose da notare sul codice. Innanzitutto, la memorizzazione nella cache viene disattivata introducendo le opzioni di query e impostando UseQueryCache su false. In secondo luogo, hai eseguito l'accesso alle statistiche sulla query dall'oggetto job.

Torna a Cloud Shell ed esegui l'app:

dotnet run

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: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
----------
Creation time: 1533052057398
End time: 1533052066961
Total bytes processed: 9944197093

8. Caricamento di dati in BigQuery

Se vuoi eseguire query sui tuoi dati, devi prima caricarli in BigQuery. BigQuery supporta il caricamento di dati da molte origini, come Google Cloud Storage, altri servizi Google e un'origine leggibile. Puoi anche trasmettere in streaming i dati utilizzando gli inserimenti in streaming. Puoi leggere di più nella pagina Caricamento di dati in BigQuery.

In questo passaggio, caricherai un file JSON archiviato in Google 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 .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][  2.0 KiB/  2.0 KiB]                                                
Operation completed over 1 objects/2.0 KiB.

Puoi notare che contiene l'elenco degli stati degli Stati Uniti e che ogni stato è un documento JSON su una riga separata:

less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

Per caricare questo file JSON in BigQuery, vai al file Program.cs all'interno della cartella BigQueryDemo e sostituisci il codice con quanto segue. Assicurati di sostituire projectId con l'ID progetto effettivo:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var gcsUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
            var client = BigQueryClient.Create("projectId");
            var dataset = client.GetOrCreateDataset("us_states_dataset");

            var schema = new TableSchemaBuilder 
            {
                { "name", BigQueryDbType.String },
                { "post_abbr", BigQueryDbType.String }
            }.Build();

            var jobOptions = new CreateLoadJobOptions
            {
                SourceFormat = FileFormat.NewlineDelimitedJson
            };

            var table = dataset.GetTableReference("us_states_table");
            var loadJob = client.CreateLoadJob(gcsUri, table, schema, jobOptions);

            loadJob.PollUntilCompleted();
            loadJob.ThrowOnAnyError();
            Console.WriteLine("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:

dotnet run

Vengono creati un set di dati e una tabella in BigQuery

Json file loaded to BigQuery

Per verificare che il set di dati sia stato effettivamente creato, puoi andare alla console BigQuery. Dovresti visualizzare un nuovo set di dati e una nuova tabella creati. Se passi alla scheda Anteprima della tabella, puoi visualizzare i dati effettivi:

7d9f7c493acbbf9a.png

9. Complimenti!

Hai imparato a utilizzare BigQuery con C#.

Esegui la pulizia

Per evitare che al tuo account Google Cloud Platform vengano addebitate le risorse utilizzate in questa guida rapida, procedi come segue.

  • Vai alla console Cloud Platform.
  • Seleziona il progetto che vuoi chiudere, quindi fai clic su "Elimina" in alto: il progetto verrà pianificato per l'eliminazione.

Scopri di più

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.