Dokumen ini menjelaskan cara membuat langganan BigQuery. Anda dapat menggunakan konsol Google Cloud , Google Cloud CLI, library klien, atau Pub/Sub API untuk membuat langganan BigQuery.
Sebelum memulai
Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:
Cara kerja langganan.
Alur kerja untuk langganan BigQuery.
Cara mengonfigurasi topik yang dihentikan pengirimannya untuk menangani kegagalan pesan.
Selain memahami Pub/Sub dan BigQuery, pastikan Anda memenuhi prasyarat berikut sebelum membuat langganan BigQuery:
Tabel BigQuery sudah ada. Atau, Anda dapat membuatnya saat membuat langganan BigQuery seperti yang dijelaskan di bagian selanjutnya dalam dokumen ini.
Kompatibilitas antara skema topik Pub/Sub dan tabel BigQuery. Jika Anda menambahkan tabel BigQuery yang tidak kompatibel, Anda akan mendapatkan pesan error terkait kompatibilitas. Untuk mengetahui informasi selengkapnya, lihat Kompatibilitas skema.
Peran dan izin yang diperlukan
Untuk mendapatkan izin yang
diperlukan guna membuat langganan BigQuery,
minta administrator untuk memberi Anda
peran IAM Pub/Sub Editor (roles/pubsub.editor) di project.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk membuat langganan BigQuery. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk membuat langganan BigQuery:
-
pubsub.subscriptions.createpada project -
pubsub.topics.attachSubscriptiontentang topik ini
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Langganan lintas project
Jika Anda membuat langganan di satu project untuk topik di project lain, Anda harus memiliki izin pubsub.subscriptions.create pada project tempat Anda membuat langganan, dan izin pubsub.topics.attachSubscription pada topik tersebut.
Memberikan peran IAM ke akun layanan
Pub/Sub menggunakan akun layanan Identity and Access Management (IAM) untuk mengakses resource Google Cloud . Secara default, layanan ini menggunakan agen layanan Pub/Sub (service-PROJECT_NUMBER@gcp-sa-pubsub.).
Agar Pub/Sub dapat menulis ke tabel BigQuery,
akun layanan memerlukan peran BigQuery Data Editor
(roles/bigquery.dataEditor). Anda dapat memberikan izin akun layanan
untuk project atau tabel, sebagai berikut:
Project
Di konsol Google Cloud , buka halaman IAM.
Pilih Sertakan pemberian peran yang disediakan Google.
Temukan baris untuk akun layanan Cloud Pub/Sub, lalu klik Edit principal.
Klik Add another role, lalu pilih peran BigQuery Data Editor.
Untuk mengetahui informasi selengkapnya, lihat Memberikan peran IAM menggunakan konsol.
Tabel
Di konsol Google Cloud , buka BigQuery Studio.
Di kotak penelusuran panel Explorer berlabel Filter by name and labels, ketik nama tabel, lalu tekan Enter.
Di hasil penelusuran, klik nama tabel yang ingin Anda beri izin.
Di panel detail, klik Share > Manage permissions.
Klik Add principal, lalu masukkan ID akun layanan, dalam format berikut:
service-PROJECT_NUMBER@gcp-sa-pubsub..Dalam daftar Assign roles, pilih BigQuery Data Editor.
Klik Simpan. Akun utama diberi peran pada resource.
Menggunakan akun layanan khusus
Dengan memberikan peran BigQuery Data Editor ke akun layanan Cloud Pub/Sub, setiap pengguna yang memiliki izin untuk membuat langganan di project Anda dapat menulis ke tabel BigQuery. Jika Anda ingin memberikan izin yang lebih terperinci, konfigurasikan akun layanan yang dikelola pengguna.
Izin berikut diperlukan untuk mengonfigurasi akun layanan yang dikelola pengguna agar dapat menulis ke BigQuery:
Akun layanan yang dikelola pengguna harus memiliki peran BigQuery Data Editor.
Akun layanan Cloud Pub/Sub harus memiliki izin
iam.serviceAccounts.getAccessTokendi akun layanan terkelola pengguna.Pengguna yang membuat langganan harus memiliki izin
iam.serviceAccounts.actAspada akun layanan terkelola pengguna.
Saat Anda membuat langganan, tentukan akun layanan yang dikelola pengguna sebagai akun layanan langganan.
Properti langganan BigQuery
Langganan BigQuery mendukung semua properti langganan umum. Bagian berikut menjelaskan properti yang khusus untuk langganan BigQuery.
Menggunakan skema topik
Opsi ini memungkinkan Pub/Sub menggunakan skema topik Pub/Sub yang dilampirkan ke langganan. Selain itu, Pub/Sub menulis kolom dalam pesan ke kolom yang sesuai di tabel BigQuery.
Saat Anda menggunakan opsi ini, ingatlah untuk memeriksa persyaratan tambahan berikut:
Kolom dalam skema topik dan skema BigQuery harus memiliki nama yang sama dan jenisnya harus kompatibel satu sama lain.
Setiap kolom opsional dalam skema topik juga harus opsional dalam skema BigQuery.
Kolom wajib di skema topik tidak harus wajib di skema BigQuery.
Jika ada kolom BigQuery yang tidak ada dalam skema topik, kolom BigQuery ini harus dalam mode
NULLABLE.Jika skema topik memiliki kolom tambahan yang tidak ada dalam skema BigQuery dan kolom ini dapat dihapus, pilih opsi Drop unknown fields.
Anda hanya dapat memilih salah satu properti langganan, Use topic schema atau Use table schema.
Jika Anda tidak memilih opsi Use topic schema atau Use table schema,
pastikan tabel BigQuery memiliki kolom bernama data dengan
jenis BYTES, STRING, atau JSON. Pub/Sub menulis pesan ke kolom BigQuery ini.
Anda mungkin tidak langsung melihat perubahan pada skema topik Pub/Sub atau skema tabel BigQuery diterapkan dengan pesan yang ditulis ke tabel BigQuery. Misalnya, jika opsi Drop unknown fields diaktifkan dan kolom ada dalam skema Pub/Sub, tetapi tidak ada dalam skema BigQuery, pesan yang ditulis ke tabel BigQuery mungkin masih tidak berisi kolom setelah menambahkannya ke skema BigQuery. Pada akhirnya, skema akan disinkronkan dan pesan berikutnya akan menyertakan kolom tersebut.
Saat menggunakan opsi Use topic schema untuk langganan BigQuery, Anda juga dapat memanfaatkan change data capture (CDC) BigQuery. CDC memperbarui tabel BigQuery Anda dengan memproses dan menerapkan perubahan pada baris yang ada.
Untuk mempelajari fitur ini lebih lanjut, lihat Men-streaming update tabel dengan change data capture.
Untuk mempelajari cara menggunakan fitur ini dengan langganan BigQuery, lihat Pengambilan data perubahan BigQuery.
Menggunakan skema tabel
Opsi ini memungkinkan Pub/Sub menggunakan skema tabel BigQuery untuk menulis kolom pesan JSON ke kolom yang sesuai. Saat Anda menggunakan opsi ini, jangan lupa untuk memeriksa persyaratan tambahan berikut:
Nama setiap kolom dalam tabel BigQuery hanya boleh berisi huruf (a-z, A-Z), angka (0-9), atau garis bawah (_).
Pesan yang dipublikasikan harus dalam format JSON.
Jika kolom tabel BigQuery memiliki jenis data
JSON, kolom yang sesuai dalam pesan Pub/Sub Anda harus berupa JSON yang valid dalam string yang di-escape. Misalnya, untuk kolom bernamamyData, kolom pesan harus berupa"myData": "{\"key\":\"value\"}". BigQuery menolak pesan yang tidak berisi JSON yang valid.Konversi JSON berikut didukung:
Jenis JSON Jenis Data BigQuery stringNUMERIC,BIGNUMERIC,DATE,TIME,DATETIME, atauTIMESTAMPnumberNUMERIC,BIGNUMERIC,DATE,TIME,DATETIME, atauTIMESTAMP- Saat menggunakan
numberuntuk konversiDATE,DATETIME,TIME, atauTIMESTAMP, angkanya harus sesuai dengan representasi yang didukung. - Saat menggunakan konversi
numberkeNUMERICatauBIGNUMERIC, presisi dan rentang nilai dibatasi pada nilai yang diterima oleh standar IEEE 754 untuk aritmetika floating point. Jika Anda memerlukan presisi tinggi atau rentang nilai yang lebih luas, gunakan konversistringkeNUMERICatauBIGNUMERIC. - Saat menggunakan konversi
stringkeNUMERICatauBIGNUMERIC, Pub/Sub mengasumsikan string tersebut adalah angka yang dapat dibaca manusia (misalnya,"123.124"). Jika pemrosesan string sebagai angka yang dapat dibaca manusia gagal, Pub/Sub akan memperlakukan string tersebut sebagai byte yang dienkode dengan BigDecimalByteStringEncoder.
- Saat menggunakan
Jika topik langganan memiliki skema yang terkait dengannya, properti encoding pesan harus ditetapkan ke
JSON.Jika ada kolom BigQuery yang tidak ada dalam pesan, kolom BigQuery ini harus dalam mode
NULLABLE.Jika pesan memiliki kolom tambahan yang tidak ada dalam skema BigQuery dan kolom ini dapat dihapus, pilih opsi Drop unknown fields.
Anda hanya dapat memilih salah satu properti langganan, Use topic schema atau Use table schema.
Jika Anda tidak memilih opsi Use topic schema atau Use table schema,
pastikan tabel BigQuery memiliki kolom bernama data dengan
jenis BYTES, STRING, atau JSON. Pub/Sub menulis pesan ke kolom BigQuery ini.
Anda mungkin tidak langsung melihat perubahan pada skema tabel BigQuery diterapkan dengan pesan yang ditulis ke tabel BigQuery. Misalnya, jika opsi Drop unknown fields diaktifkan dan kolom ada dalam pesan, tetapi tidak ada dalam skema BigQuery, pesan yang ditulis ke tabel BigQuery mungkin masih tidak berisi kolom tersebut setelah menambahkannya ke skema BigQuery. Pada akhirnya, skema akan disinkronkan dan pesan berikutnya akan menyertakan kolom tersebut.
Saat menggunakan opsi Use table schema untuk langganan BigQuery, Anda juga dapat memanfaatkan change data capture (CDC) BigQuery. CDC memperbarui tabel BigQuery Anda dengan memproses dan menerapkan perubahan pada baris yang ada.
Untuk mempelajari fitur ini lebih lanjut, lihat Men-streaming update tabel dengan change data capture.
Untuk mempelajari cara menggunakan fitur ini dengan langganan BigQuery, lihat Change data capture BigQuery.
Menghapus kolom yang tidak diketahui
Opsi ini digunakan dengan opsi Use topic schema atau Use table schema. Jika diaktifkan, opsi ini memungkinkan Pub/Sub menghapus kolom apa pun yang ada dalam skema topik atau pesan, tetapi tidak ada dalam skema BigQuery. Kolom yang bukan bagian dari skema BigQuery akan dihapus saat menulis pesan ke tabel BigQuery.
Jika Drop unknown fields tidak ditetapkan, pesan dengan kolom tambahan tidak akan ditulis ke BigQuery dan tetap berada dalam backlog langganan, kecuali jika Anda mengonfigurasi topik yang dihentikan pengirimannya.
Setelan Drop unknown fields tidak memengaruhi kolom yang tidak ditentukan dalam skema topik Pub/Sub atau skema tabel BigQuery. Dalam hal ini, pesan Pub/Sub yang valid dikirim ke langganan. Namun, karena BigQuery tidak memiliki kolom yang ditentukan untuk kolom tambahan ini, kolom tersebut akan dihapus selama proses penulisan BigQuery. Untuk mencegah perilaku ini, pastikan setiap kolom yang ada dalam pesan Pub/Sub juga ada dalam skema tabel BigQuery.
Perilaku terkait kolom tambahan juga dapat bergantung pada jenis skema tertentu (Avro, Protocol Buffer) dan encoding (JSON, Biner) yang digunakan. Untuk mengetahui informasi tentang pengaruh faktor-faktor ini terhadap penanganan kolom tambahan, lihat dokumentasi untuk jenis skema dan encoding spesifik Anda.
Menulis metadata
Opsi ini memungkinkan Pub/Sub menulis metadata setiap pesan ke kolom tambahan di tabel BigQuery. Jika tidak, metadata tidak akan ditulis ke tabel BigQuery.
Jika Anda memilih opsi Write metadata, pastikan tabel BigQuery memiliki kolom yang dijelaskan dalam tabel berikut.
Jika Anda tidak memilih opsi Write metadata, tabel BigQuery tujuan hanya memerlukan kolom data, kecuali jika
use_topic_schema bernilai benar (true). Jika Anda memilih opsi Write metadata dan
Use topic schema, skema topik tidak boleh
berisi kolom dengan nama yang cocok dengan parameter metadata.
Batasan ini mencakup versi camelcase dari parameter snake case ini.
| Parameter | |
|---|---|
subscription_name |
STRING Nama langganan. |
message_id |
STRING ID pesan |
publish_time |
TIMESTAMP Waktu publikasi pesan. |
data |
BYTES, STRING, atau JSON Isi pesan. Kolom |
attributes |
STRING atau JSON Objek JSON yang berisi semua atribut pesan. Kolom ini juga berisi kolom tambahan yang merupakan bagian dari pesan Pub/Sub, termasuk kunci pengurutan, jika ada. |
Akun layanan
Anda memiliki opsi berikut untuk menulis pesan ke tabel BigQuery:
Konfigurasikan akun layanan kustom agar hanya pengguna yang memiliki izin
iam.serviceAccounts.actAsdi akun layanan yang dapat membuat langganan yang menulis ke tabel. Contoh peran yang menyertakan iziniam.serviceAccounts.actAsadalah peran Pengguna Akun Layanan (roles/iam.serviceAccountUser).Gunakan agen layanan Pub/Sub default yang memungkinkan pengguna mana pun yang memiliki kemampuan untuk membuat langganan dalam project membuat langganan yang menulis ke tabel. Agen layanan Pub/Sub adalah setelan default jika Anda tidak menentukan akun layanan kustom.
Membuat langganan BigQuery
Untuk membuat langganan dengan pengiriman BigQuery, lakukan langkah-langkah berikut.
Konsol
Di konsol Google Cloud , buka halaman Create subscription.
Untuk kolom Subscription ID, masukkan nama. Untuk mengetahui informasi tentang cara memberi nama langganan, lihat Panduan untuk memberi nama topik atau langganan.
Di kotak Select a Cloud Pub/Sub topic, ketik atau pilih topik untuk menerima pesan.
Untuk Delivery type, pilih Write to BigQuery.
Pilih tabel BigQuery:
Untuk Project, pilih project Google Cloud yang berisi tabel BigQuery.
Untuk Dataset, pilih set data yang ada atau klik Create new dataset untuk membuat set data baru. Untuk mengetahui informasi tentang cara membuat set data, lihat Membuat set data.
Di kolom Tabel, masukkan nama tabel. Untuk membuat tabel baru, klik link yang mengarahkan Anda ke halaman Create new table BigQuery. Halaman akan terbuka di tab terpisah. Untuk mengetahui informasi tentang cara membuat tabel, lihat Membuat dan menggunakan tabel.
Untuk Schema Configuration, pilih salah satu opsi berikut:
Jangan gunakan skema. Pub/Sub menulis byte pesan ke kolom bernama
data.Gunakan skema topik. Pub/Sub menggunakan skema yang terkait dengan topik. Untuk mengetahui informasi selengkapnya, lihat Menggunakan skema topik.
Gunakan skema tabel. Pub/Sub menggunakan skema tabel BigQuery. Untuk mengetahui informasi selengkapnya, lihat Menggunakan skema tabel.
Opsional. Untuk menulis metadata pesan ke tabel BigQuery, pilih Write metadata. Untuk mengetahui informasi selengkapnya, lihat Menulis metadata.
Opsional. Untuk menghapus kolom yang tidak ada dalam skema tabel BigQuery, pilih Drop unknown fields. Untuk mengetahui informasi selengkapnya, lihat Menghapus kolom yang tidak diketahui.
Konfigurasikan properti langganan umum sesuai kebutuhan. Sebaiknya aktifkan Dead lettering untuk menangani kegagalan pesan. Untuk mengetahui informasi selengkapnya, lihat Topik yang dihentikan pengirimannya.
Klik Create.
gcloud
-
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan terbuka dan menampilkan prompt command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
Untuk membuat langganan Pub/Sub, gunakan perintah
gcloud pubsub subscriptions create:gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_IDJika Anda ingin menggunakan akun layanan kustom, berikan akun tersebut sebagai argumen tambahan:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID \ --bigquery-service-account-email=SERVICE_ACCOUNT_NAMEGanti kode berikut:
SUBSCRIPTION_ID: Menentukan ID langganan.TOPIC_ID: Menentukan ID topik. Topik memerlukan skema.PROJECT_ID: Menentukan ID project.DATASET_ID: Menentukan ID set data yang ada. Untuk membuat set data, lihat Membuat set data.TABLE_ID: Menentukan ID tabel yang ada. Tabel memerlukan kolomdatajika topik Anda tidak memiliki skema. Untuk membuat tabel, lihat Membuat tabel kosong dengan definisi skema.SERVICE_ACCOUNT_NAME: Menentukan nama akun layanan yang akan digunakan untuk menulis ke BigQuery.
C++
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C++ Pub/Sub.
C#
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Pub/Sub.
Go
Contoh berikut menggunakan versi utama library klien Pub/Sub Go (v2). Jika Anda masih menggunakan library v1, lihat panduan migrasi ke v2. Untuk melihat daftar contoh kode v1, lihat contoh kode yang tidak digunakan lagi.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Pub/Sub.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Pub/Sub.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.
Node.ts
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.
PHP
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Pub/Sub.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Python API.
Ruby
Contoh berikut menggunakan library klien Pub/Sub Ruby v3. Jika Anda masih menggunakan library v2, lihat panduan migrasi ke v3. Untuk melihat daftar contoh kode Ruby v2, lihat contoh kode yang tidak digunakan lagi.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Ruby di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Pub/Sub.
Memantau langganan BigQuery
Cloud Monitoring menyediakan sejumlah metrik untuk memantau langganan.
Untuk mengetahui daftar semua metrik yang tersedia terkait Pub/Sub dan deskripsinya, lihat Dokumentasi pemantauan untuk Pub/Sub.
Anda juga dapat memantau langganan dari dalam Pub/Sub.
Langkah berikutnya
- Membuat atau mengubah langganan dengan perintah
gcloud. - Membuat atau mengubah langganan dengan REST API.
- Memecahkan masalah langganan BigQuery.