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:
Obtén más información sobre Tools for PowerShell.
Comprende los controles de acceso de BigQuery, ya que algunas tareas requieren permisos adicionales para ejecutarse.
Obtén más información sobre BigQuery.
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.