O Google BigQuery é uma ferramenta versátil que resolve problemas de armazenamento e consulta de grandes conjuntos de dados. Com ele, você não precisa se preocupar com formatos de dados, recursos subjacentes e outros aspectos que não fazem parte da sua análise.
Antes de começar
Revise os seguintes recursos:
Saiba mais sobre as Ferramentas para o PowerShell.
Entenda os controles de acesso do BigQuery. Algumas tarefas requerem permissões complementares para serem executadas.
Conjunto de dados
Para usar o BigQuery em um projeto do Google Cloud, primeiro crie um Dataset
usando o cmdlet New-BqDataset
. Esse processo usa informações básicas e cria o recurso do lado do servidor. Um objeto de referência Dataset
é retornado localmente.
# Makes a new dataset with DatasetId "page_views". $dataset = New-BqDataset "page_views" -Name "Page Views" ` -Description "Page views from 2014 onwards"
Para receber um objeto de referência para um conjunto de dados, 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 para outros cmdlets como Set-BqDataset
para manipular recursos de nuvem. Esse cmdlet também processa a adição e remoção de rótulos 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"}
Os rótulos são usados para marcar conjuntos de dados com palavras-chave e/ou valores para posterior filtragem e pesquisa. O cmdlet Get-BqDataset
tem uma sinalização -Filter
integrada que permite um controle refinado na listagem de conjuntos de dados para processamento com outros cmdlets.
# Filter Datasets by the department label. $stats = Get-BqDataset -Filter "department:statistics"
Datasets
podem ser excluídos pelo cmdlet Remove-BqDataset
. Esse cmdlet é compatível com ShouldProcess
(o parâmetro -WhatIf
) e solicitará a confirmação do usuário antes de excluir um Dataset
que não esteja vazio. Essa proteção pode ser ignorada com o parâmetro -Force
na criação do script.
# Deletes $dataset. $dataset | Remove-BqDataset
Table
Cada Dataset
tem um número de Tables
para armazenar dados. Tables
são criadas com o cmdlet New-BqTable
por meio da transmissão de um TableId e do Dataset
em que a tabela residirá. O Dataset
pode ser transmitido por objeto ou com o parâmetro -DatasetId
. Get-BqTable
e Set-BqTable
funcionam da mesma maneira 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
podem ser excluídos pelo cmdlet Remove-BqTable
. Este cmdlet é compatível com o ShouldProcess, no parâmetro -WhatIf
, e solicitará confirmação do usuário antes de excluir uma Table
que contenha dados. Essa proteção pode ser ignorada com o parâmetro -Force
.
# Deletes $table. $table | Remove-BqTable -Force
Schema
Tables
precisa de Schemas
para descrever o formato dos dados que eles contêm. Os esquemas são criados com os cmdlets New-BqSchema
e Set-BqSchema
. New-BqSchema
pode aceitar os formatos das linhas como parâmetros diretamente ou como uma matriz JSON de descrições de linhas. Os resultados de New-BqSchema
são sempre passados para Set-BqSchema
, que podem gerar um objeto Schema
ou atribuir o esquema a um Table
atual.
# 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
Objetos de Schema
podem ser transmitidos como parâmetros na criação de Table
, se forem criados com antecedência.
# 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. Essas linhas podem ser acessadas usando os cmdlets Add-BqTableRow
e Get-BqTableRow
.
Add-BqTableRow
aceita arquivos CSV, JSON e AVRO para importação no 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
Jobs
Há quatro tipos de Jobs
: consulta, carregamento, extração e cópia. Os jobs de consulta executam consultas no estilo SQL e produzem resultados em tabelas.
# Query Job: starts a query and outputs results into $table. Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" ` -Destination $table
Os jobs de carregamento importam arquivos do Google 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"
Os jobs de extração exportam tabelas do BigQuery para o Google Cloud Storage.
# Extract Job: exports $src_table to a Cloud Storage file. $job = $src_table | Start-BqJob ` -Extract CSV "gs://page_views/logs2014.csv"
Os jobs de cópia copiam uma tabela atual 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 desses tipos de jobs como uma operação assíncrona.
Use a sinalização -PollUntilComplete
para ter o bloco cmdlet até que o job seja concluído. Receive-BqJob
retornará os resultados de um job de consulta assim que for concluído. Get-BqJob
retornará um objeto de referência que detalha o estado atual e as estatísticas no job. Stop-BqJob
enviará uma solicitação ao servidor para interromper um determinado job e depois retornará imediatamente.
Observação sobre a formatação dos nomes de tabelas dentro das strings de consulta: o formato do BigQuery determina que os nomes das tabelas sejam cercados por acentos graves, mas esses acentos também são operadores de escape do PowerShell. Por isso, eles precisam ser escapados, com a adição de um segundo acento grave. Consulte um exemplo no código de amostra dos jobs de Consulta.