Bekerja dengan BigQuery

BigQuery adalah alat serbaguna yang memecahkan masalah penyimpanan dan kueri set data besar tanpa harus khawatir dengan format data, resource pokok, dan hal-hal lain yang mengalihkan perhatian Anda dari analisis.

Sebelum Anda memulai

Anda harus meninjau referensi berikut:

Set data

Untuk menggunakan BigQuery dalam project Google Cloud, buat Dataset terlebih dahulu menggunakan cmdlet New-BqDataset. Tindakan ini akan mengambil informasi dasar dan membuat sisi server resource. Secara lokal, objek referensi Dataset akan 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 untuk 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 memberi 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 lain.

# 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. Perlindungan ini dapat diabaikan dengan parameter -Force saat membuat skrip.

# Deletes $dataset.
$dataset | Remove-BqDataset

Tabel

Setiap Dataset memiliki sejumlah Tables untuk menyimpan data. Tables dibuat dengan 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 confirmasi pengguna sebelum menghapus Table yang berisi data. Perlindungan ini dapat diabaikan dengan parameter -Force.

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

Skema

Tables memerlukan Schemas untuk menjelaskan format data yang dikandungnya. Skema dibuat dengan cmdlet New-BqSchema dan Set-BqSchema. New-BqSchema dapat menggunakan format untuk baris sebagai parameter secara langsung atau sebagai array JSON 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 terlebih dahulu.

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

TableRow

Data ditambahkan dan dihapus dari Tables di Baris. Baris ini dapat diakses menggunakan cmdlet Add-BqTableRow dan Get-BqTableRow. Add-BqTableRow menggunakan 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 bergaya SQL dan menghasilkan 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 Salin menyalin tabel yang ada ke tabel baru 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 jenis tugas ini sebagai operasi asinkron. Gunakan flag -PollUntilComplete agar cmdlet diblokir hingga tugas selesai. Receive-BqJob akan menampilkan hasil tugas kueri setelah selesai. Get-BqJob akan menampilkan objek referensi yang menjelaskan status saat ini dan statistik pada tugas. Stop-BqJob akan mengirim permintaan ke server untuk menghentikan tugas tertentu, lalu segera ditampilkan.

Catatan tentang pemformatan nama tabel dalam string kueri: Format BigQuery menentukan bahwa nama tabel harus diapit oleh tanda petik terbalik, tetapi tanda petik terbalik juga merupakan operator escape PowerShell. Oleh karena itu, tanda petik terbalik harus di-escape dengan menambahkan tanda petik terbalik kedua. Lihat kode contoh tugas Kueri untuk mengetahui contohnya.