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 di dati, risorse sottostanti e altre cose che distraggono dall'analisi.
Prima di iniziare
Ti consigliamo di esaminare le seguenti risorse:
Scopri di più su Tools for PowerShell.
Comprendere i controlli dell'accesso a 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 , crea prima
un Dataset
utilizzando il cmdlet New-BqDataset
. Vengono prese le informazioni di base
e la risorsa viene creata lato server. A livello locale, viene restituito un Dataset
oggetto di riferimento.
# 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 passato ad altri 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 che possano essere
filtrati e cercati 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 richiede la conferma dell'utente
prima di eliminare un Dataset
non vuoto. Questa protezione può essere ignorata con il
parametro -Force
durante la creazione di script.
# Deletes $dataset. $dataset | Remove-BqDataset
Tabella
Ogni Dataset
ha un numero di Tables
per contenere i dati. Tables
vengono
create con il cmdlet New-BqTable
passando un TableId
e il Dataset
in cui risiederà la tabella. Dataset
può essere passato da
oggetto o con il parametro -DatasetId
. Get-BqTable
e Set-BqTable
funzionano allo stesso modo dei cmdlet del set di dati Get-
e Set-
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 richiede la conferma dell'utente
prima di eliminare un Table
che contiene dati. Questa protezione può essere
ignorata con il parametro -Force
.
# Deletes $table. $table | Remove-BqTable -Force
Schema
Tables
hanno bisogno di Schemas
per descrivere il formato dei dati che contengono. Gli schemi
vengono creati con i cmdlet New-BqSchema
e Set-BqSchema
. New-BqSchema
può accettare i formati per le righe direttamente come parametri o come array JSON
di descrizioni delle righe. I risultati di New-BqSchema
vengono sempre passati a
Set-BqSchema
, che può restituire un oggetto Schema
o assegnare lo schema
a un 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
Gli oggetti Schema
possono essere passati come parametri nella creazione di 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
accetta file CSV, JSON e AVRO da importare 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, Caricamento, Estrazione e Copia. I job Query
eseguono query in stile SQL e restituiscono i risultati nelle 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 Copy 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 di questi tipi di job come operazione asincrona.
Utilizza il flag -PollUntilComplete
per fare in modo che il cmdlet venga bloccato finché il job non è
terminato. Receive-BqJob
restituirà i risultati di un job di query al termine. Get-BqJob
restituirà un oggetto di riferimento che descrive in dettaglio lo stato attuale
e le statistiche del job. Stop-BqJob
invia una richiesta al server per
interrompere un determinato job e poi torna 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 gli apici inversi sono anche gli operatori di escape di PowerShell. Per questo motivo, i backtick devono essere sottoposti a escape aggiungendo un secondo backtick. Per un esempio, consulta il codice campione dei job Query.