Bekerja dengan BigQuery

BigQuery adalah alat serbaguna yang mengatasi masalah penyimpanan dan pembuatan kueri set data besar tanpa harus mengkhawatirkan format data, resource dasar, dan hal-hal lain yang mengalihkan perhatian Anda dari analisis.

Sebelum Anda memulai

Anda harus meninjau referensi berikut:

Set data

Untuk menggunakan BigQuery di project Google Cloud, buat Dataset terlebih dahulu menggunakan cmdlet New-BqDataset. Tindakan ini akan mengambil informasi dasar dan membuat resource di sisi server. Secara lokal, objek referensi Dataset ditampilkan.

# Makes a new dataset with DatasetId "page_views".
$dataset = New-BqDataset "page_views" -Name "Page Views" `
    -Description "Page views from 2014 onwards"

Untuk mendapatkan objek referensi bagi set data yang ada, gunakan Get-BqDataset.

# Two ways to get a Dataset: by DatasetId and by Dataset object.
$dataset = Get-BqDataset "page_views"
$dataset = $dataset | Get-BqDataset

Objek $dataset ini dapat diubah dan diteruskan ke cmdlet lebih lanjut seperti Set-BqDataset untuk memanipulasi resource cloud. Cmdlet ini juga menangani penambahan dan penghapusan label dengan -SetLabel dan -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"}

Label digunakan untuk memberikan tag pada set data dengan kata kunci dan/atau nilai sehingga dapat difilter dan ditelusuri nanti. Cmdlet Get-BqDataset memiliki flag -Filter bawaan yang memungkinkan kontrol terperinci saat mencantumkan set data untuk diproses dengan cmdlet lainnya.

# Filter Datasets by the department label.
$stats = Get-BqDataset -Filter "department:statistics"

Datasets dapat dihapus oleh cmdlet Remove-BqDataset. Cmdlet ini mendukung ShouldProcess (parameter -WhatIf) dan akan meminta konfirmasi pengguna sebelum menghapus Dataset yang tidak kosong. Pengamanan ini dapat diabaikan dengan parameter -Force saat membuat skrip.

# Deletes $dataset.
$dataset | Remove-BqDataset

Tabel

Setiap Dataset memiliki jumlah Tables untuk menyimpan data. Tables dibuat menggunakan cmdlet New-BqTable dengan meneruskan TableId dan Dataset tempat tabel akan berada. Dataset dapat diteruskan oleh objek atau dengan parameter -DatasetId. Get-BqTable dan Set-BqTable berfungsi dengan cara yang sama seperti cmdlet set data Get- dan Set- di atas.

# 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 dapat dihapus oleh cmdlet Remove-BqTable. Cmdlet ini mendukung ShouldProcess (parameter -WhatIf) dan akan meminta konfirmasi pengguna sebelum menghapus Table yang berisi data. Pengamanan ini dapat diabaikan dengan parameter -Force.

# Deletes $table.
$table | Remove-BqTable -Force

Skema

Tables memerlukan Schemas untuk mendeskripsikan format data yang ada di dalamnya. Skema dibuat dengan cmdlet New-BqSchema dan Set-BqSchema. New-BqSchema dapat menggunakan format baris sebagai parameter secara langsung atau sebagai array JSON dari deskripsi baris. Hasil New-BqSchema selalu diteruskan ke Set-BqSchema yang dapat menghasilkan objek Schema atau menetapkan skema ke Table yang ada.

# 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

Objek Schema dapat diteruskan sebagai parameter dalam pembuatan Table jika dibuat sebelumnya.

# Creates a new table with the Schema object from above.
$table = $dataset | New-BqTable "logs2014" -Schema $schema

TableRow

Data ditambahkan dan dihapus dari Tables pada Baris. Baris ini dapat diakses menggunakan cmdlet Add-BqTableRow dan Get-BqTableRow. Add-BqTableRow mengambil file CSV, JSON, dan AVRO untuk diimpor ke 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

Pekerjaan

Ada empat jenis Jobs: Kueri, Muat, Ekstrak, dan Salin. Tugas kueri menjalankan kueri gaya SQL dan hasil output ke tabel.

# Query Job: starts a query and outputs results into $table.
Start-BqJob -Query "SELECT * FROM ``page_views:logs2014``" `
            -Destination $table

Tugas Load mengimpor file Cloud Storage ke 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"

Tugas Extract mengekspor tabel BigQuery ke Cloud Storage.

# Extract Job: exports $src_table to a Cloud Storage file.
$job = $src_table | Start-BqJob `
    -Extract CSV "gs://page_views/logs2014.csv"

Tugas Copy akan menyalin tabel yang ada ke tabel lain atau yang sudah ada.

# 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 memulai salah satu jenis tugas ini sebagai operasi asinkron. Gunakan flag -PollUntilComplete untuk memblokir cmdlet hingga tugas selesai. Receive-BqJob akan menampilkan hasil tugas kueri setelah selesai. Get-BqJob akan menampilkan objek referensi yang memerinci status saat ini dan statistik pada tugas. Stop-BqJob akan mengirim permintaan ke server untuk menghentikan tugas tertentu, lalu segera kembali.

Catatan tentang cara memformat nama tabel dalam string kueri: Format BigQuery menentukan bahwa nama tabel harus dikelilingi oleh tanda kutip terbalik, tetapi tanda kutip terbalik juga merupakan operator escape PowerShell. Oleh karena itu, {i>backtick <i}harus di-escape dengan menambahkan {i>backtick<i} kedua. Lihat kode contoh tugas Query sebagai contoh.