Dokumen ini memberikan ringkasan langganan BigQuery, alur kerjanya, dan properti terkait.
Langganan BigQuery adalah jenis langganan ekspor yang menulis pesan ke tabel BigQuery yang sudah ada saat pesan diterima. Anda tidak perlu mengonfigurasi klien subscriber terpisah. Gunakan konsol, Google Cloud CLI, library klien, atau Pub/Sub API untuk membuat, memperbarui, mencantumkan, melepaskan, atau menghapus langganan BigQuery. Trusted Cloud
Tanpa jenis langganan BigQuery, Anda memerlukan langganan pull atau push dan pelanggan (seperti Dataflow) yang membaca pesan dan menuliskannya ke tabel BigQuery. Overhead menjalankan tugas Dataflow tidak diperlukan jika pesan tidak memerlukan pemrosesan tambahan sebelum disimpan dalam tabel BigQuery; Anda dapat menggunakan langganan BigQuery sebagai gantinya.
Namun, pipeline Dataflow tetap direkomendasikan untuk sistem Pub/Sub yang memerlukan beberapa transformasi data sebelum data disimpan dalam tabel BigQuery. Untuk mempelajari cara melakukan streaming data dari Pub/Sub ke BigQuery dengan transformasi menggunakan Dataflow, lihat Streaming dari Pub/Sub ke BigQuery.
Template langganan Pub/Sub ke BigQuery dari Dataflow menerapkan pengiriman tepat sekali secara default. Hal ini biasanya dicapai melalui mekanisme penghapusan duplikat dalam pipeline Dataflow. Namun, langganan BigQuery hanya mendukung pengiriman setidaknya sekali. Jika penghapusan duplikat yang tepat sangat penting untuk kasus penggunaan Anda, pertimbangkan proses downstream di BigQuery untuk menangani potensi duplikat.
Sebelum memulai
Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:
Cara kerja Pub/Sub dan berbagai istilah Pub/Sub.
Berbagai jenis langganan yang didukung Pub/Sub dan alasan Anda mungkin ingin menggunakan langganan BigQuery.
Cara kerja BigQuery dan cara mengonfigurasi serta mengelola tabel BigQuery.
Alur kerja langganan BigQuery
Gambar berikut menunjukkan alur kerja antara langganan BigQuery dan BigQuery.

Berikut deskripsi singkat alur kerja yang merujuk pada Gambar 1:
- Pub/Sub menggunakan BigQuery Storage Write API untuk mengirim data ke tabel BigQuery.
- Pesan dikirim dalam batch ke tabel BigQuery.
- Setelah operasi tulis berhasil diselesaikan, API akan menampilkan respons OK.
- Jika ada kegagalan dalam operasi penulisan, pesan Pub/Sub itu sendiri akan direspons negatif. Pesan kemudian dikirim ulang. Jika pesan gagal dikirim beberapa kali dan ada topik pesan yang tidak terkirim yang dikonfigurasi di langganan, maka pesan akan dipindahkan ke topik pesan yang tidak terkirim.
Properti langganan BigQuery
Properti yang Anda konfigurasi untuk langganan BigQuery menentukan tabel BigQuery tempat Pub/Sub menulis pesan dan jenis skema tabel tersebut.
Untuk mengetahui informasi selengkapnya, lihat Properti BigQuery.
Kompatibilitas skema
Bagian ini hanya berlaku jika Anda memilih opsi Gunakan skema topik saat membuat langganan BigQuery.
Pub/Sub dan BigQuery menggunakan cara yang berbeda untuk menentukan skemanya. Skema Pub/Sub ditentukan dalam format Apache Avro atau Protocol Buffer, sedangkan skema BigQuery ditentukan menggunakan berbagai format.
Berikut adalah daftar informasi penting terkait kompatibilitas skema antara topik Pub/Sub dan tabel BigQuery.
Pesan apa pun yang berisi kolom yang tidak diformat dengan benar tidak ditulis ke BigQuery.
Dalam skema BigQuery,
INT
,SMALLINT
,INTEGER
,BIGINT
,TINYINT
, danBYTEINT
adalah alias untukINTEGER
;DECIMAL
adalah alias untukNUMERIC
; danBIGDECIMAL
adalah alias untukBIGNUMERIC
.Jika jenis dalam skema topik adalah
string
dan jenis dalam tabel BigQuery adalahJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
, atauBIGNUMERIC
, maka nilai apa pun untuk kolom ini dalam pesan Pub/Sub harus mematuhi format yang ditentukan untuk jenis data BigQuery.Beberapa jenis logika Avro didukung, seperti yang ditentukan dalam tabel berikut. Jenis logika yang tidak tercantum hanya cocok dengan jenis Avro yang setara yang mereka anotasi, sebagaimana dijelaskan dalam spesifikasi Avro.
Berikut adalah kumpulan pemetaan berbagai format skema ke jenis data BigQuery.
Jenis Avro
Jenis Avro | Jenis Data BigQuery |
null |
Any NULLABLE |
boolean |
BOOLEAN |
int |
INTEGER , NUMERIC , atau
BIGNUMERIC |
long |
INTEGER , NUMERIC , atau
BIGNUMERIC |
float |
FLOAT64 , NUMERIC , atau
BIGNUMERIC |
double |
FLOAT64 , NUMERIC , atau
BIGNUMERIC |
bytes |
BYTES , NUMERIC , atau
BIGNUMERIC |
string |
STRING , JSON ,
TIMESTAMP , DATETIME ,
DATE , TIME ,
NUMERIC , atau BIGNUMERIC |
record |
RECORD/STRUCT |
array dari Type |
REPEATED Type |
map dengan jenis nilai ValueType
|
REPEATED STRUCT <key STRING, value
ValueType> |
union dengan dua jenis, satu adalah
null dan yang lainnya Type |
NULLABLE Type |
union lainnya |
Tidak dapat dipetakan |
fixed |
BYTES , NUMERIC , atau
BIGNUMERIC |
enum |
INTEGER |
Jenis logika Avro
Jenis Logika Avro | Jenis Data BigQuery |
timestamp-micros |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC atau BIGNUMERIC |
Jenis Buffering Protokol
Jenis Buffering Protokol | Jenis Data BigQuery |
double |
FLOAT64 , NUMERIC , atau
BIGNUMERIC |
float |
FLOAT64 , NUMERIC , atau
BIGNUMERIC |
int32 |
INTEGER , NUMERIC ,
BIGNUMERIC , atau DATE |
int64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME , atau TIMESTAMP |
uint32 |
INTEGER , NUMERIC ,
BIGNUMERIC , atau DATE |
uint64 |
NUMERIC atau BIGNUMERIC |
sint32 |
INTEGER , NUMERIC , atau
BIGNUMERIC |
sint64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME , atau TIMESTAMP |
fixed32 |
INTEGER , NUMERIC ,
BIGNUMERIC , atau DATE |
fixed64 |
NUMERIC atau BIGNUMERIC |
sfixed32 |
INTEGER , NUMERIC ,
BIGNUMERIC , atau DATE |
sfixed64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME , atau TIMESTAMP |
bool |
BOOLEAN |
string |
STRING , JSON ,
TIMESTAMP , DATETIME ,
DATE , TIME ,
NUMERIC , atau BIGNUMERIC |
bytes |
BYTES , NUMERIC , atau
BIGNUMERIC |
enum |
INTEGER |
message |
RECORD/STRUCT |
oneof |
Tidak dapat dipetakan |
map<KeyType, ValueType> |
REPEATED RECORD<key KeyType, value
ValueType> |
enum |
INTEGER |
repeated/array of Type |
REPEATED Type |
Representasi bilangan bulat tanggal dan waktu
Saat memetakan dari bilangan bulat ke salah satu jenis tanggal atau waktu, angka harus mewakili nilai yang benar. Berikut adalah pemetaan dari jenis data BigQuery ke bilangan bulat yang merepresentasikannya.
Jenis Data BigQuery | Representasi Bilangan Bulat |
DATE |
Jumlah hari sejak epoch Unix, 1 Januari 1970 |
DATETIME |
Tanggal dan waktu dalam mikrodetik yang dinyatakan sebagai waktu sipil menggunakan CivilTimeEncoder |
TIME |
Waktu dalam mikrodetik yang dinyatakan sebagai waktu sipil menggunakan CivilTimeEncoder |
TIMESTAMP |
Jumlah mikrodetik sejak epoch Unix, 1 Januari 1970 00.00.00 UTC |
Change data capture BigQuery
Langganan BigQuery mendukung pembaruan pengambilan data perubahan (CDC) saat
use_topic_schema
atau
use_table_schema
disetel ke true
di properti langganan. Untuk menggunakan fitur dengan
use_topic_schema
, tetapkan schema topik dengan
kolom berikut:
_CHANGE_TYPE
(wajib): Kolomstring
yang ditetapkan keUPSERT
atauDELETE
.Jika pesan Pub/Sub yang ditulis ke tabel BigQuery memiliki
_CHANGE_TYPE
yang ditetapkan keUPSERT
, BigQuery akan memperbarui baris dengan kunci yang sama jika ada atau menyisipkan baris baru jika tidak ada.Jika pesan Pub/Sub yang ditulis ke tabel BigQuery memiliki
_CHANGE_TYPE
yang ditetapkan keDELETE
, BigQuery akan menghapus baris dalam tabel dengan kunci yang sama jika ada.
_CHANGE_SEQUENCE_NUMBER
(opsional): Kumpulan kolomstring
yang ditetapkan untuk memastikan bahwa update dan penghapusan yang dilakukan pada tabel BigQuery diproses secara berurutan. Pesan untuk kunci baris yang sama harus berisi nilai_CHANGE_SEQUENCE_NUMBER
yang meningkat secara monoton. Pesan dengan nomor urut yang lebih kecil dari nomor urut tertinggi yang diproses untuk baris tidak akan memengaruhi baris di tabel BigQuery. Nomor urut harus mengikuti format_CHANGE_SEQUENCE_NUMBER
.
Untuk menggunakan fitur dengan use_table_schema
, sertakan kolom sebelumnya dalam
pesan JSON.
Untuk mengetahui informasi tentang harga CDC, lihat Harga CDC.
Tabel BigLake untuk Apache Iceberg di BigQuery
Langganan BigQuery dapat digunakan dengan tabel BigLake untuk Apache Iceberg di BigQuery tanpa memerlukan perubahan tambahan.
Tabel BigLake untuk Apache Iceberg di BigQuery memberikan fondasi untuk membangun lakehouse berformat terbuka di Trusted Cloud by S3NS. Tabel ini menawarkan pengalaman terkelola sepenuhnya yang sama dengan tabel BigQuery standar (bawaan), tetapi menyimpan data di bucket penyimpanan milik pelanggan menggunakan Parquet agar dapat beroperasi dengan format tabel terbuka Iceberg.
Untuk mengetahui informasi tentang cara membuat tabel BigLake untuk Apache Iceberg di BigQuery , lihat Membuat tabel Iceberg.
Menangani kegagalan pesan
Jika pesan Pub/Sub tidak dapat ditulis ke
BigQuery, pesan tidak dapat dikonfirmasi. Untuk meneruskan pesan yang tidak terkirim tersebut, konfigurasikan topik pesan yang tidak terkirim pada langganan BigQuery. Pesan Pub/Sub yang diteruskan ke topik yang dihentikan pengirimannya berisi atribut CloudPubSubDeadLetterSourceDeliveryErrorMessage
yang memiliki alasan mengapa pesan Pub/Sub tidak dapat ditulis ke BigQuery.
Jika Pub/Sub tidak dapat menulis pesan ke BigQuery, Pub/Sub akan menghentikan pengiriman pesan dengan cara yang mirip dengan perilaku penghentian sementara push. Namun, jika langganan memiliki topik yang dihentikan pengirimannya yang dilampirkan kepadanya, Pub/Sub tidak menghentikan pengiriman saat kegagalan pesan disebabkan oleh error kompatibilitas skema.
Kuota dan batas
Ada batasan kuota pada throughput pelanggan BigQuery per region. Untuk mengetahui informasi selengkapnya, lihat kuota dan batas Pub/Sub.
Langganan BigQuery menulis data menggunakan BigQuery Storage Write API. Untuk mengetahui informasi tentang kuota dan batas Storage Write API, lihat permintaan BigQuery Storage Write API. Langganan BigQuery hanya menggunakan kuota throughput untuk Storage Write API. Anda dapat mengabaikan pertimbangan kuota Storage Write API lainnya dalam kasus ini.
Harga
Untuk mengetahui harga langganan BigQuery, lihat halaman harga Pub/Sub.
Langkah berikutnya
Buat langganan, seperti langganan BigQuery.
Memecahkan masalah langganan BigQuery.
Baca tentang BigQuery.
Tinjau harga untuk Pub/Sub, termasuk langganan BigQuery.
Buat atau ubah langganan dengan perintah
gcloud
CLI.Buat atau ubah langganan dengan REST API.