BigQuery è uno strumento versatile che risolve il problema dell'archiviazione e dell'esecuzione di query su set di dati di grandi dimensioni senza doversi preoccupare di formati dei dati, risorse sottostanti e altri elementi che possono distrarre l'analisi.
Prima di iniziare
Consulta le seguenti risorse:
Scopri di più su Strumenti per PowerShell.
Scopri di più sui controlli di accesso BigQuery, poiché alcune attività richiedono autorizzazioni aggiuntive per essere eseguite.
Scopri di più su BigQuery.
Set di dati
Per utilizzare BigQuery in un progetto Google Cloud, devi prima creare
un Dataset
con il Cmdlet New-BqDataset
. L'operazione acquisisce le informazioni di base
e crea la risorsa lato server. A livello locale, viene restituito un
oggetto di riferimento Dataset
.
# Makes a new dataset with DatasetId "page_views". $dataset = New-BqDataset "page_views" -Name "Page Views" ` -Description "Page views from 2014 onwards"
Per ottenere un oggetto di riferimento per un set di dati esistente, utilizza Get-BqDataset
.
# Two ways to get a Dataset: by DatasetId and by Dataset object. $dataset = Get-BqDataset "page_views" $dataset = $dataset | Get-BqDataset
Questo oggetto $dataset
può essere modificato e trasferito in ulteriori cmdlet come
Set-BqDataset
per manipolare le risorse cloud. Questo cmdlet gestisce anche l'aggiunta e la rimozione di etichette con -SetLabel
e -ClearLabel
.
# Updates the Name field of $dataset. $dataset.Name = "PageView Data" $dataset = Set-BqDataset "page_views" # Adds the labels 'department' and 'purpose' to $dataset. $dataset = Set-BqDataset "page_views" -SetLabel ` @{"department" = "statistics"; "purpose" = "metrics"}
Le etichette vengono utilizzate per taggare i set di dati con parole chiave e/o valori, in modo da poterli
filtrare e cercare in un secondo momento. Il cmdlet Get-BqDataset
ha un flag -Filter
integrato che consente un controllo granulare durante l'elenco dei set di dati da elaborare con altri cmdlet.
# Filter Datasets by the department label. $stats = Get-BqDataset -Filter "department:statistics"
Datasets
può essere eliminato dal cmdlet Remove-BqDataset
. Questo cmdlet supporta
ShouldProcess
(il parametro -WhatIf
) e richiederà la conferma dell'utente
prima di eliminare un Dataset
non vuoto. Questa protezione può essere bypassata con il parametro -Force
durante lo script.
# Deletes $dataset. $dataset | Remove-BqDataset
Tabella
Ogni Dataset
ha un numero di Tables
per contenere i dati. Tables
vengono creati con il cmdlet New-BqTable
passando un valore TableId
e il valore Dataset
in cui risiede la tabella. Dataset
può essere trasmesso per
oggetto o con il parametro -DatasetId
. Get-BqTable
e Set-BqTable
funzionano allo stesso modo dei cmdlet del set di dati Get-
e Set-
riportati sopra.
# Creates a new table in the dataset from above. $table = $dataset | New-BqTable "logs2014" ` -Description "Log data from Jan 2014 to Dec 2014 inclusive" # Gets a reference object for "page_views:logs2014". $table = Get-BqTable "logs2014" -DatasetId "page_views" # Modifies the Name attribute of logs2014. $table.Name = "Logs 2014" $table = $table | Set-BqTable
Tables
può essere eliminato dal cmdlet Remove-BqTable
. Questo cmdlet supporta
ShouldProcess (il parametro -WhatIf
) e richiederà la conferma dell'utente prima di eliminare un Table
che contiene dati. Questa salvaguardia può essere
ignorata con il parametro -Force
.
# Deletes $table. $table | Remove-BqTable -Force
Schema
Tables
deve avere Schemas
per descrivere il formato dei dati che contiene. Gli schemi vengono creati con i cmdlet New-BqSchema
e Set-BqSchema
. New-BqSchema
può assumere i formati delle righe direttamente come parametri o come array JSON di descrizioni delle righe. I risultati di New-BqSchema
vengono sempre trasferiti a
Set-BqSchema
, che può restituire un oggetto Schema
o assegnare lo schema
a un oggetto Table
esistente.
# Assigns a Schema to $table $table = Get-BqTable "logs2014" -DatasetId "page_views" New-BqSchema "Page" "STRING" | New-BqSchema "Referrer" "STRING" | New-BqSchema "Timestamp" "DATETIME" | Set-BqSchema $table # Creates a schema object to be used in multiple tables. $schema = New-BqSchema "Page" "STRING" | New-BqSchema "Referrer" "STRING" | New-BqSchema "Timestamp" "DATETIME" | Set-BqSchema
Schema
oggetti possono essere trasmessi come parametri nella creazione Table
se vengono
creati in anticipo.
# Creates a new table with the Schema object from above. $table = $dataset | New-BqTable "logs2014" -Schema $schema
TableRow
I dati vengono aggiunti e rimossi da Tables
in Righe. Queste righe sono
accessibili utilizzando i cmdlet Add-BqTableRow
e Get-BqTableRow
.
Add-BqTableRow
prende i file CSV, JSON e AVRO per essere importati in BigQuery.
# Ingests a CSV file and appends its rows onto the table 'my_dataset:my_table'. $table = New-BqTable "logs2014" -DatasetId "page_views" $table | Add-BqTableRow CSV $filename -SkipLeadingRows 1 ` -WriteMode WriteAppend # Returns a list of the rows in 'page_views:logs2014'. $list = Get-BqTable "logs2014" -DatasetID "page_views" | Get-BqTableRow
Job
Esistono quattro tipi di Jobs
: Query, Carica, Estrai e Copia. I job query eseguono query in stile SQL e restituiscono i risultati alle tabelle.
# Query Job: starts a query and outputs results into $table. Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" ` -Destination $table
I job di caricamento importano i file di Cloud Storage in BigQuery.
# Load Job: adds TableRows to $table from the file specified # on Cloud Storage. $job = $dest_table | Start-BqJob ` -Load CSV "gs://page_views/server_logs_raw_2014.csv"
I job di estrazione esportano le tabelle BigQuery in Cloud Storage.
# Extract Job: exports $src_table to a Cloud Storage file. $job = $src_table | Start-BqJob ` -Extract CSV "gs://page_views/logs2014.csv"
I job di copia copiano una tabella esistente in un'altra tabella nuova o esistente.
# Copy Job: Starts a copy job, cancels it, and polls until the job is completely done. $job = $table | Start-BqJob -Copy $dest_table $result = $job | Stop-BqJob while ($result.Status.State -ne "DONE") { $result = $result | Get-BqJob }
Start-BqJob
avvia uno qualsiasi di questi tipi di job come un'operazione asincrona.
Utilizza il flag -PollUntilComplete
per bloccare il cmdlet fino al completamento del job. Receive-BqJob
restituirà i risultati di un job di query una volta completato. Get-BqJob
restituirà un oggetto di riferimento con i dettagli dello stato corrente e delle statistiche del job. Stop-BqJob
invierà una richiesta al server per arrestare un determinato job, quindi tornerà immediatamente.
Nota sulla formattazione dei nomi delle tabelle all'interno delle stringhe di query: il formato BigQuery specifica che i nomi delle tabelle devono essere racchiusi tra apici inversi, ma sono anche operatori di escape di PowerShell. Per questo motivo, è necessario eseguire l'escape di un apice inverso aggiungendo un secondo apice inverso. Per un esempio, vedi l'esempio di codice dei job di query.