BigQuery는 데이터 형식, 기본 리소스, 그리고 분석으로부터 주의를 분산시키는 기타 요소를 신경 쓸 필요 없이 대규모의 데이터세트를 저장하고 쿼리하는 문제를 해결하는 만능 도구입니다.
시작하기 전에
다음 리소스를 확인하세요.
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
객체를 수정하고 Set-BqDataset
과 같은 추가 cmdlet에 전달하여 클라우드 리소스를 조작할 수 있습니다. 또한 이 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에는 다른 cmdlet으로 처리할 수 있는 데이터 세트를 나열할 때 세밀하게 제어할 수 있도록 -Filter
플래그가 기본 제공됩니다.
# Filter Datasets by the department label. $stats = Get-BqDataset -Filter "department:statistics"
Datasets
는 Remove-BqDataset
cmdlet에 의해 삭제될 수 있습니다. 이 cmdlet은 ShouldProcess
(-WhatIf
매개변수)을 지원하며 비어 있지 않은 Dataset
을 삭제하기 전에 사용자 확인을 요청하는 메시지를 표시합니다. 이 보호 장치는 스크립트할 때 -Force
매개변수를 통해 우회될 수 있습니다.
# Deletes $dataset. $dataset | Remove-BqDataset
표
각 Dataset
에는 데이터를 보관하는 다양한 Tables
가 있습니다. TableId와 테이블이 상주하는 Dataset
을 전달하여 New-BqTable
cmdlet을 통해 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
Tables
는 Remove-BqTable
cmdlet에 의해 삭제될 수 있습니다. 이 cmdlet은 ShouldProcess(-WhatIf
매개변수)를 지원하며 데이터가 포함된 Table
을 삭제하기 전에 사용자 확인을 요청하는 메시지를 표시합니다. 이 보호 장치는 -Force
매개변수를 통해 우회될 수 있습니다.
# Deletes $table. $table | Remove-BqTable -Force
스키마
Tables
가 포함된 데이터 형식을 설명하려면 Schemas
가 필요합니다. 스키마는 New-BqSchema
및 Set-BqSchema
cmdlet을 통해 생성됩니다. 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
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
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의 이스케이프 연산자이기도 합니다. 이 때문에 역따옴표는 두 번째 역따옴표를 추가하여 이스케이프 처리해야 합니다. 예시는 쿼리 작업 샘플 코드를 참조하세요.