BigQuery 是一項多功能的工具,能夠解決儲存及查詢大量資料集的問題,而不需要擔心資料格式、基礎資源,以及其他會妨礙您專心分析的事物。
事前準備
您必須詳閱下列資源:
進一步瞭解 Tools for PowerShell。
瞭解 BigQuery 存取權控管,因為部分工作需要額外權限才能運作。
進一步瞭解 BigQuery。
資料集
如要在 Google Cloud 專案中使用 BigQuery,請先使用 New-BqDataset
指令碼建立 Dataset
。這樣做會接收基本資訊,並建立資源伺服器端。在本機上,系統會傳回 Dataset
參照物件。
# Makes a new dataset with DatasetId "page_views". $dataset = New-BqDataset "page_views" -Name "Page Views" ` -Description "Page views from 2014 onwards"
如要為現有資料集取得參照物件,請使用 Get-BqDataset
。
# Two ways to get a Dataset: by DatasetId and by Dataset object. $dataset = Get-BqDataset "page_views" $dataset = $dataset | Get-BqDataset
您可以修改 $dataset
物件並將其傳送到其他 cmdlets (例如 Set-BqDataset
),藉此控管雲端資源。這個 cmdlet 也可搭配 -SetLabel
和 -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"}
標籤的用途是為資料集加上關鍵字和/或值,以便之後篩選及搜尋。Get-BqDataset
cmdlet 含有內建的 -Filter
標記,可讓您在建立資料集清單以便和其他 cmdlet 一併處理時,能夠完全控制細節。
# Filter Datasets by the department label. $stats = Get-BqDataset -Filter "department:statistics"
Datasets
可透過 Remove-BqDataset
指令碼刪除。這個 cmdlet 支援 ShouldProcess
(-WhatIf
參數),在刪除非空白 Dataset
之前,會提示使用者確認。在編寫指令碼時,可以使用 -Force
參數略過這項保護措施。
# Deletes $dataset. $dataset | Remove-BqDataset
資料表
每個 Dataset
都有一些用來保存資料的 Tables
。Tables
可透過 New-BqTable
cmdlet 建立,方法是傳入「TableId」TableId和該資料表存放所在的 Dataset
。Dataset
可由物件傳入,或是透過 -DatasetId
參數傳入。Get-BqTable
和 Set-BqTable
的運作方式與上述的 Get-
和 Set-
資料集 cmdlet 相同。
# 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
可透過 Remove-BqTable
指令碼刪除。這個 cmdlet 支援 ShouldProcess (-WhatIf
參數),在刪除含有資料的 Table
之前,會提示使用者確認。可以使用 -Force
參數略過這項保護措施。
# Deletes $table. $table | Remove-BqTable -Force
結構定義
Tables
需要 Schemas
來描述本身包含的資料格式。結構定義可透過 New-BqSchema
和 Set-BqSchema
指令碼建立。New-BqSchema
可以直接將資料列格式視為參數,或視為資料列說明的 JSON 陣列。New-BqSchema
的結果一律會傳入 Set-BqSchema
,這可輸出 Schema
物件或將結構定義指派到現有的 Table
。
# 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
如果 Schema
物件的建立時間較早,就可以當做參數傳入 Table
建立項目中。
# Creates a new table with the Schema object from above. $table = $dataset | New-BqTable "logs2014" -Schema $schema
TableRow
資料可以新增至「資料列」中的 Tables
或從中移除。如要存取這些資料列,可使用 Add-BqTableRow
和 Get-BqTableRow
指令碼。Add-BqTableRow
會採用 CSV、JSON 和 AVRO 檔案匯入 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
有四種類型:Query、Load、Extract 和 Copy。查詢工作會執行 SQL 樣式查詢,並將結果輸出到資料表中。
# Query Job: starts a query and outputs results into $table. Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" ` -Destination $table
Load 工作會將 Cloud Storage 檔案匯入 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"
Extract 工作會將 BigQuery 資料表匯出到 Cloud Storage。
# Extract Job: exports $src_table to a Cloud Storage file. $job = $src_table | Start-BqJob ` -Extract CSV "gs://page_views/logs2014.csv"
Copy 工作會將現有的資料表複製到其他新的或現有的資料表中。
# 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
會以非同步作業的形式啟動上述任一類型的工作。使用 -PollUntilComplete
旗標可封鎖 cmdlet,直到工作完成為止。Receive-BqJob
會在查詢工作完成後傳回結果。Get-BqJob
會傳回詳述該工作目前狀態與統計資料的參照物件。Stop-BqJob
會向伺服器傳送要求來停止特定工作,然後立即傳回。
查詢字串中的資料表名稱格式設定注意事項:BigQuery 格式會指定資料表名稱必須以倒引號括住,但倒引號也是 PowerShell 的逸出運算子。因此,倒引號必須再加上第二組倒引號將其逸出。請參閱「Query」工作範例程式碼來取得範例。