BigQuery 是一个通用工具,您可以用它来解决存储和查询大量数据集的问题,而不必担心数据格式、底层资源以及其他让您无法专心分析的问题。
准备工作
您应查看以下资源:
详细了解 Tools for PowerShell。
了解 BigQuery 访问权限控制,因为某些任务需要更多权限才能运行。
详细了解 BigQuery。
数据集
要在 Google Cloud 项目中使用 BigQuery,请先使用 New-BqDataset
cmdlet 创建一个 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
并将其传递到其他 cmdlet(例如 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"
Remove-BqDataset
cmdlet 可以删除 Datasets
。此 cmdlet 支持 ShouldProcess
(-WhatIf
参数),并会在删除非空 Dataset
之前提示用户确认。编写脚本时,您可以使用 -Force
参数绕过此保护措施。
# Deletes $dataset. $dataset | Remove-BqDataset
表
每个 Dataset
都有多个 Tables
来保存数据。您可以使用 New-BqTable
cmdlet 通过传入 TableId 和表将驻留的 Dataset
来创建 Tables
。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
Remove-BqTable
cmdlet 可以删除 Tables
。此 cmdlet 支持 ShouldProcess(-WhatIf
参数),并会在删除包含数据的 Table
之前提示用户确认。您可以使用 -Force
参数绕过此保护措施。
# Deletes $table. $table | Remove-BqTable -Force
架构
Tables
需要使用 Schemas
来描述所包含数据的格式。您可以使用 New-BqSchema
和 Set-BqSchema
cmdlet 创建架构。New-BqSchema
可以直接将行的格式作为参数或作为行描述的 JSON 数组。New-BqSchema
的结果总是传递到可以输出 Schema
对象或将架构分配给现有 Table
的 Set-BqSchema
。
# 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
cmdlet 访问这些行。此外,还可使用 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
类型:查询、加载、提取和复制。查询作业运行 SQL 样式查询并将结果输出到表中。
# Query Job: starts a query and outputs results into $table. Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" ` -Destination $table
加载作业将 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"
提取作业将 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 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 的转义运算符。因此,必须通过添加第二个反引号来对该反引号进行转义。如需查看示例,请参阅“查询”作业示例代码。