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 debes crear 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 quitando 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 -Filter que permite un control detallado cuando se enumeran conjuntos de datos para su procesamiento 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 eludir con la El parámetro -Force durante la secuencia de comandos.

# Deletes $dataset.
$dataset | Remove-BqDataset

Table

Cada Dataset tiene una cantidad de Tables que contiene datos. Tables son creada con el cmdlet New-BqTable pasando un TableId y el Dataset donde residirá la tabla. El Dataset se puede pasar 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 se solicitará al usuario confirmación 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 necesitan Schemas para describir el formato de los datos que contienen. 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 array 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 objeto 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. Estas filas se y se puede acceder 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 se realice. listo. Receive-BqJob mostrará los resultados de un trabajo de consulta una vez que se 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, regresa 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.