Langganan BigQuery

Dokumen ini memberikan ringkasan tentang langganan BigQuery, alur kerjanya, dan properti terkait.

Langganan BigQuery adalah jenis langganan ekspor yang menulis pesan ke tabel BigQuery yang ada saat pesan diterima. Anda tidak perlu mengonfigurasi klien pelanggan terpisah. Gunakan konsol Google Cloud, Google Cloud CLI, library klien, atau Pub/Sub API untuk membuat, memperbarui, mencantumkan, melepaskan, atau menghapus langganan BigQuery.

Tanpa jenis langganan BigQuery, Anda memerlukan langganan pull atau push dan pelanggan (seperti Dataflow) yang membaca pesan dan menulisnya ke tabel BigQuery. Overhead untuk menjalankan tugas Dataflow tidak diperlukan jika pesan tidak memerlukan pemrosesan tambahan sebelum menyimpannya di tabel BigQuery; Anda dapat menggunakan langganan BigQuery.

Namun, pipeline Dataflow masih 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 satu kali. 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 serta cara mengonfigurasi dan mengelola tabel BigQuery.

Alur kerja langganan BigQuery

Gambar berikut menunjukkan alur kerja antara langganan BigQuery dan BigQuery.

Alur pesan untuk langganan BigQuery
Gambar 1. Alur kerja untuk langganan BigQuery

Berikut adalah deskripsi singkat alur kerja yang mereferensikan Gambar 1:

  1. Pub/Sub menggunakan BigQuery storage write API untuk mengirim data ke tabel BigQuery.
  2. Pesan dikirim secara massal ke tabel BigQuery.
  3. Setelah operasi tulis berhasil diselesaikan, API akan menampilkan respons OK.
  4. Jika ada kegagalan dalam operasi tulis, pesan Pub/Sub itu sendiri akan direspons secara negatif. Pesan kemudian akan dikirim ulang. Jika pesan gagal beberapa kali dan ada topik dead letter yang dikonfigurasi di langganan, pesan akan dipindahkan ke topik dead letter.

Properti langganan BigQuery

Properti yang Anda konfigurasikan untuk langganan BigQuery menentukan tabel BigQuery tempat Pub/Sub menulis pesan dan jenis skema tabel tersebut.

Untuk 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 skema mereka. 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.

  • Setiap pesan yang berisi kolom yang tidak diformat dengan benar tidak akan ditulis ke BigQuery.

  • Dalam skema BigQuery, INT, SMALLINT, INTEGER, BIGINT, TINYINT, dan BYTEINT adalah alias untuk INTEGER; DECIMAL adalah alias untuk NUMERIC; dan BIGDECIMAL adalah alias untuk BIGNUMERIC.

  • Jika jenis dalam skema topik adalah string dan jenis dalam tabel BigQuery adalah JSON, TIMESTAMP, DATETIME, DATE, TIME, NUMERIC, atau BIGNUMERIC, 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. Setiap jenis logika yang tidak tercantum hanya cocok dengan jenis Avro yang setara yang diberi anotasi, seperti yang 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 tersebut 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

BigQuery change data capture

Langganan BigQuery mendukung pembaruan pengambilan data perubahan (CDC) saat use_topic_schema atau use_table_schema ditetapkan ke true di properti langganan. Untuk menggunakan fitur dengan use_topic_schema, tetapkan skema topik dengan kolom berikut:

  • _CHANGE_TYPE (wajib): Kolom string yang ditetapkan ke UPSERT atau DELETE.

    • Jika pesan Pub/Sub yang ditulis ke tabel BigQuery memiliki _CHANGE_TYPE yang ditetapkan ke UPSERT, 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 ke DELETE, BigQuery akan menghapus baris dalam tabel dengan kunci yang sama jika ada.

  • _CHANGE_SEQUENCE_NUMBER (opsional): Kolom int64 (long) yang ditetapkan untuk memastikan bahwa pembaruan dan penghapusan yang dilakukan pada tabel BigQuery diproses secara berurutan. Pesan untuk kunci baris yang sama harus berisi nilai yang meningkat secara monoton untuk _CHANGE_SEQUENCE_NUMBER. Pesan dengan nomor urutan yang lebih rendah dari nomor urutan tertinggi yang diproses untuk baris tidak akan memengaruhi baris di tabel BigQuery. Perhatikan bahwa Pub/Sub memerlukan nilai berbasis bilangan bulat, bukan nilai berbasis string yang digunakan saat berinteraksi dengan BigQuery secara langsung.

Untuk menggunakan fitur dengan use_table_schema, sertakan kolom sebelumnya dalam pesan JSON.

Izin akun layanan Pub/Sub

Untuk membuat langganan BigQuery, akun layanan Pub/Sub harus memiliki izin untuk menulis ke tabel BigQuery tertentu dan membaca metadata tabel. Untuk mengetahui informasi selengkapnya, lihat Menetapkan peran BigQuery ke akun layanan Pub/Sub.

Menangani kegagalan pesan

Jika pesan Pub/Sub tidak dapat ditulis ke BigQuery, pesan tersebut tidak dapat dikonfirmasi. Untuk meneruskan pesan yang tidak dapat dikirim tersebut, konfigurasikan topik pesan tidak terkirim di langganan BigQuery. Pesan Pub/Sub yang diteruskan ke topik dead-letter berisi atribut CloudPubSubDeadLetterSourceDeliveryErrorMessage yang memiliki alasan bahwa pesan Pub/Sub tidak dapat ditulis ke BigQuery.

Jika Pub/Sub tidak dapat menulis pesan ke BigQuery, Pub/Sub akan membatalkan pengiriman pesan dengan cara yang mirip dengan perilaku push backoff. Namun, jika langganan memiliki topik yang dihentikan pengirimannya yang dilampirkan, Pub/Sub tidak akan membatalkan 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 Storage Write API BigQuery. 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 selanjutnya