Trabaje con BigQuery

BigQuery es una herramienta versátil que resuelve el problema de almacenar y consultar conjuntos de datos masivos sin tener que preocuparse por los formatos de datos, los recursos subyacentes y otros aspectos que te distraen de tu análisis.

Antes de comenzar

Debes revisar los siguientes recursos:

Conjunto de datos

Para usar BigQuery en un proyecto de Google Cloud, primero crea un Dataset con el cmdlet New-BqDataset. Esto toma información básica y crea los recursos del lado del servidor. De forma local, se muestra un objeto de referencia Dataset.

# Makes a new dataset with DatasetId "page_views".
$dataset = New-BqDataset "page_views" -Name "Page Views" `
    -Description "Page views from 2014 onwards"

Para obtener un objeto de referencia para un conjunto de datos existente, usa Get-BqDataset.

# Two ways to get a Dataset: by DatasetId and by Dataset object.
$dataset = Get-BqDataset "page_views"
$dataset = $dataset | Get-BqDataset

Este objeto $dataset se puede modificar y pasar a otros cmdlets como Set-BqDataset para manipular los recursos de la nube. Este cmdlet también controla la adición y eliminación de etiquetas con -SetLabel y -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"}

Las etiquetas se usan a fin de etiquetar conjuntos de datos con palabras clave o valores para que se puedan filtrar y buscar más adelante. El cmdlet Get-BqDataset tiene una marca de -Filter integrada que permite un control detallado cuando enumeras conjuntos de datos para procesar con otros cmdlets.

# Filter Datasets by the department label.
$stats = Get-BqDataset -Filter "department:statistics"

Datasets se puede borrar con el cmdlet Remove-BqDataset. Este cmdlet admite ShouldProcess (el parámetro -WhatIf) y solicitará la confirmación del usuario antes de borrar un Dataset que no esté vacío. Esta protección se puede omitir con el parámetro -Force cuando se ejecuta la secuencia de comandos.

# Deletes $dataset.
$dataset | Remove-BqDataset

Table

Cada Dataset tiene una serie de Tables para contener datos. Tables se crean con el cmdlet New-BqTable si se pasa un TableId y el Dataset donde residirá la tabla. El Dataset se puede pasar por objeto o con el parámetro -DatasetId. Get-BqTable y Set-BqTable funcionan de la misma manera que los conjuntos de datos de cmdlets Get- y Set- anteriores.

# 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 se puede borrar con el cmdlet Remove-BqTable. Este cmdlet admite ShouldProcess (el parámetro -WhatIf) y solicitará la confirmación del usuario antes de borrar un Table que contenga datos. Esta protección se puede omitir con el parámetro -Force.

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

Schema

Tables necesita Schemas para describir el formato de los datos que contiene. Los esquemas se crean con los cmdlets New-BqSchema y Set-BqSchema. New-BqSchema puede tomar los formatos de las filas como parámetros directamente o como un arreglo JSON de descripciones de filas. Los resultados de New-BqSchema siempre se pasan a Set-BqSchema, que puede generar un objeto Schema o asignar el esquema a un Table existente.

# 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

Los objetos Schema se pueden pasar como parámetros en la creación de Table si se crean con anticipación.

# Creates a new table with the Schema object from above.
$table = $dataset | New-BqTable "logs2014" -Schema $schema

Fila de la tabla

Los datos se agregan y se quitan de Tables en Filas. Se puede acceder a estas filas con los cmdlets Add-BqTableRow y Get-BqTableRow. Add-BqTableRow toma los archivos CSV, JSON y AVRO para importarlos a 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

Trabajos

Hay cuatro tipos de Jobs: Consulta, carga, extracción y copia. Los trabajos de consulta ejecutan consultas de estilo SQL y generan resultados en tablas.

# Query Job: starts a query and outputs results into $table.
Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" `
            -Destination $table

Los trabajos de carga importan archivos de Cloud Storage en 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"

Los trabajos de extracción exportan tablas de 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"

Los trabajos de copia copian una tabla existente a otra tabla nueva o existente.

# 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 inicia cualquiera de estos tipos de trabajos como una operación asíncrona. Usa la marca -PollUntilComplete para tener el bloque de cmdlet hasta que el trabajo esté hecho. Receive-BqJob mostrará los resultados de un trabajo de consulta una vez que haya finalizado. Get-BqJob mostrará un objeto de referencia que detalla el estado actual y las estadísticas del trabajo. Stop-BqJob enviará una solicitud al servidor para detener un trabajo determinado y luego regresará de inmediato.

Nota sobre el formato de los nombres de las tablas dentro de las strings de consulta: El formato de BigQuery especifica que los nombres de las tablas deben estar rodeados por acentos graves, pero los acentos graves también son operadores de escape de PowerShell. Debido a esto, los acentos graves deben escaparse cuando agregues un segundo acento grave. Consulta el código de muestra de trabajos de consulta para ver un ejemplo.