Utilizzo di BigQuery

BigQuery è uno strumento versatile che risolve il problema dell'archiviazione ed eseguire query su enormi set di dati senza doversi preoccupare dei formati dei dati, risorse sottostanti e altri elementi che ti distolgono dall'analisi.

Prima di iniziare

Dovresti consultare le seguenti risorse:

Set di dati

Per utilizzare BigQuery in un progetto Google Cloud, devi prima creare un Dataset utilizzando il cmdlet New-BqDataset. che prendono le informazioni di base e crea la risorsa lato server. A livello locale, un Dataset oggetto referenza.

# 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

L'oggetto $dataset può essere modificato e passato in altri cmdlet come Set-BqDataset per manipolare le risorse cloud. Questo cmdlet gestisce anche l'aggiunta e rimuovendo le 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 contrassegnare i set di dati con parole chiave e/o valori in modo che possano filtrati e cercati in un secondo momento. Il cmdlet Get-BqDataset ha un -Filter integrato che consente un controllo granulare quando si elencano i set di dati da elaborare con e 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 da parte dell'utente prima di eliminare un elemento Dataset non vuoto. Questa protezione può essere aggirata Parametro -Force durante la creazione di script.

# Deletes $dataset.
$dataset | Remove-BqDataset

Tabella

Ogni Dataset ha un numero di Tables per conservare i dati. Tables sono creato con il cmdlet New-BqTable passando a TableId e Dataset in cui si troverà la tabella. Il parametro Dataset può essere trasmesso da 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 richiede l'inserimento dell'utente conferma prima di eliminare un elemento Table che contiene dati. Questa salvaguardia può essere ignorato con il parametro -Force.

# Deletes $table.
$table | Remove-BqTable -Force

Schema

Tables devono Schemas per descrivere il formato dei dati che contengono. Schemi vengono create con i cmdlet New-BqSchema e Set-BqSchema. New-BqSchema può utilizzare i formati delle righe direttamente come parametri o come array JSON di descrizioni delle righe. I risultati di New-BqSchema vengono sempre trasmessi 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

Schema oggetti possono essere passati come parametri nella creazione di Table se sono creato 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 accessibile con i cmdlet Add-BqTableRow e Get-BqTableRow. Add-BqTableRow richiede i 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. Query che 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

Caricamento dei job importare 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"

Estrai esportazione dei job dalle tabelle BigQuery a 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 a 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 operazione asincrona. Utilizza il flag -PollUntilComplete per impostare il blocco cmdlet fino a quando il job viene fatto. Receive-BqJob restituirà i risultati di un job di query una volta completato. Get-BqJob restituirà un oggetto di riferimento che descrive in dettaglio lo stato attuale e statistiche sul lavoro. Stop-BqJob invierà una richiesta al server a interrompe un determinato job e poi ritorna immediatamente.

Nota sulla formattazione dei nomi delle tabelle nelle stringhe di query: BigQuery specifica che i nomi delle tabelle devono essere racchiusi tra apici inversi, ma gli accenti rovesciati sono anche operatori di escape di PowerShell. Per questo motivo, l'accento grave devono essere preceduti dal carattere di escape aggiungendo un secondo accento grave. Guarda l'esempio di job Query per vedere un esempio.