O BigQuery é uma ferramenta versátil que resolve o problema do armazenamento e da consulta de conjuntos de dados massivos sem ter de se preocupar com formatos de dados, recursos subjacentes e outras questões que a distraem da sua análise.
Antes de começar
Deve rever os seguintes recursos:
Saiba mais sobre as ferramentas para o PowerShell.
Compreender os controlos de acesso do BigQuery, uma vez que algumas tarefas requerem autorizações adicionais para serem executadas.
Saiba mais acerca do BigQuery.
Conjunto de dados
Para usar o BigQuery num Google Cloud projeto, primeiro crie
um Dataset
com o cmdlet New-BqDataset
. Esta ação recebe informações básicas e cria o recurso do lado do servidor. Localmente, é devolvido um Dataset
objeto de referência.
# Makes a new dataset with DatasetId "page_views". $dataset = New-BqDataset "page_views" -Name "Page Views" ` -Description "Page views from 2014 onwards"
Para obter um objeto de referência para um conjunto de dados existente, use 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
pode ser modificado e transmitido a outros cmdlets, como Set-BqDataset
, para manipular recursos na nuvem. Este cmdlet também processa a adição e a remoção de etiquetas com -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"}
As etiquetas são usadas para etiquetar conjuntos de dados com palavras-chave e/ou valores para que possam ser filtrados e pesquisados mais tarde. O cmdlet Get-BqDataset
tem uma flag -Filter
integrada que permite um controlo preciso ao listar conjuntos de dados para processamento com outros cmdlets.
# Filter Datasets by the department label. $stats = Get-BqDataset -Filter "department:statistics"
Datasets
pode ser eliminado através do cmdlet Remove-BqDataset
. Este cmdlet suporta
ShouldProcess
(o parâmetro -WhatIf
) e pede confirmação ao utilizador
antes de eliminar um Dataset
não vazio. Esta salvaguarda pode ser ignorada com o parâmetro -Force
ao usar scripts.
# Deletes $dataset. $dataset | Remove-BqDataset
Tabela
Cada Dataset
tem um número de Tables
para armazenar dados. Tables
são criadas com o cmdlet New-BqTable
através da introdução de um TableId
e do Dataset
onde a tabela vai residir. O Dataset
pode ser transmitido por
objeto ou com o parâmetro -DatasetId
. As funções Get-BqTable
e Set-BqTable
funcionam da mesma forma que os cmdlets do conjunto de dados Get-
e Set-
acima.
# 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
pode ser eliminado através do cmdlet Remove-BqTable
. Este cmdlet suporta ShouldProcess (o parâmetro -WhatIf
) e pede confirmação ao utilizador antes de eliminar um Table
que contenha dados. Esta salvaguarda pode ser ignorada com o parâmetro -Force
.
# Deletes $table. $table | Remove-BqTable -Force
Esquema
Os elementos Tables
precisam de Schemas
para descrever o formato dos dados que contêm. Os esquemas são criados com os cmdlets New-BqSchema
e Set-BqSchema
. New-BqSchema
pode usar os formatos para linhas como parâmetros diretamente ou como uma matriz JSON
de descrições de linhas. Os resultados de New-BqSchema
são sempre transmitidos para Set-BqSchema
, que pode gerar um objeto Schema
ou atribuir o esquema a um 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
Os objetos Schema
podem ser transmitidos como parâmetros na criação de Table
se forem criados antecipadamente.
# Creates a new table with the Schema object from above. $table = $dataset | New-BqTable "logs2014" -Schema $schema
TableRow
Os dados são adicionados e removidos de Tables
em Linhas. Estas linhas são acessíveis através dos cmdlets Add-BqTableRow
e Get-BqTableRow
.
Add-BqTableRow
aceita ficheiros CSV, JSON e AVRO para importação para o 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
Empregos
Existem quatro tipos de Jobs
: consulta, carregamento, extração e cópia. Os trabalhos de consulta
executam consultas no estilo SQL e enviam os resultados para tabelas.
# Query Job: starts a query and outputs results into $table. Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" ` -Destination $table
As tarefas de carregamento importam ficheiros do Cloud Storage para o 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"
As tarefas de extração exportam tabelas do BigQuery para o Cloud Storage.
# Extract Job: exports $src_table to a Cloud Storage file. $job = $src_table | Start-BqJob ` -Extract CSV "gs://page_views/logs2014.csv"
As tarefas de cópia copiam uma tabela existente para outra tabela nova ou 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 qualquer um destes tipos de tarefas como uma operação assíncrona.
Use a flag -PollUntilComplete
para que o cmdlet fique bloqueado até que a tarefa esteja concluída. Receive-BqJob
devolve os resultados de uma tarefa de consulta assim que esta terminar. Get-BqJob
devolve um objeto de referência que detalha o estado atual e as estatísticas da tarefa. Stop-BqJob
envia um pedido ao servidor para parar uma determinada tarefa e, em seguida, retorna imediatamente.
Nota sobre a formatação de nomes de tabelas em strings de consulta: o formato do BigQuery especifica que os nomes das tabelas devem estar entre acentos graves, mas os acentos graves também são operadores de escape do PowerShell. Por este motivo, os acentos graves têm de ser escapados adicionando um segundo acento grave. Consulte o código de exemplo de tarefas Query para ver um exemplo.