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 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.