BigQuery è uno strumento versatile che risolve il problema dell'archiviazione e dell'esecuzione di query su set di dati di grandi dimensioni senza doverti preoccupare di formati dei dati, risorse sottostanti e altri elementi che ti distraggono dall'analisi.
Prima di iniziare
Ti consigliamo di esaminare le seguenti risorse:
Scopri di più su Tools for PowerShell.
Comprendi i 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, crea prima un Dataset
utilizzando il cmdlet New-BqDataset
. Vengono acquisite informazioni di base
e viene creata la risorsa 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 salvaguardia può essere aggirata con il parametro -Force
durante la creazione di script.
# Deletes $dataset. $dataset | Remove-BqDataset
Tabella
Ogni Dataset
ha un numero di Tables
per memorizzare i dati. Le Tables
vengono
create con il cmdlet New-BqTable
passando un TableId
e il Dataset
in cui risiederà la tabella. Dataset
può essere passato per oggetto o con il parametro -DatasetId
. Get-BqTable
e Set-BqTable
funzionano nello 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 (parametro -WhatIf
) e richiede all'utente di confermare prima di eliminare un Table
contenente dati. Questa salvaguardia può essere aggirata con il parametro -Force
.
# Deletes $table. $table | Remove-BqTable -Force
Schema
Tables
ha bisogno di Schemas
per descrivere il formato dei dati in esso contenuti. Gli schemi vengono creati con i cmdlet New-BqSchema
e Set-BqSchema
. New-BqSchema
può accettare i formati per le righe come parametri direttamente o come array JSON
delle descrizioni delle righe. I risultati di New-BqSchema
vengono sempre passati a
Set-BqSchema
, che può produrre 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 durante la 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
importa file CSV, JSON e AVRO 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, Load, Extract e Copy. I job Query eseguono query in stile SQL e generano 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 Load 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 Extract 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 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 qualsiasi tipo di job come operazione asincrona.
Utilizza il flag -PollUntilComplete
per bloccare il cmdlet finché il job non è completato. Receive-BqJob
restituirà i risultati di un job di query al termine. Get-BqJob
restituirà un oggetto di riferimento che descrive lo stato corrente
e le statistiche del job. Stop-BqJob
invierà una richiesta al server per interrompere un determinato job, quindi restituirà 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 barre graffe, ma le barre graffe sono anche operatori di escape di PowerShell. Per questo motivo, è necessario aggiungere un secondo carattere a capo per eseguire l'escapismo. Per un esempio, consulta il codice di esempio dei job Query.