Memecahkan masalah langganan BigQuery

Halaman ini memberikan beberapa tips pemecahan masalah umum untuk langganan BigQuery.

Memeriksa status langganan BigQuery

Untuk memeriksa status langganan, lakukan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman langganan Pub/Sub.

    Buka Langganan

  2. Periksa ikon Status untuk langganan BigQuery Anda.

    Jika ikonnya berupa tanda centang hijau, langganan tersebut berfungsi dengan baik.

    Jika ikonnya adalah tanda seru merah, langganan tersebut dalam status error.

  3. Klik langganan BigQuery.

    Halaman detail langganan akan terbuka.

  4. Periksa Status langganan untuk melihat pesan error.

  5. Bergantung pada pesan error, buka bagian yang relevan di halaman ini untuk memecahkan masalah.

Setelah masalah teratasi, langganan pada akhirnya akan kembali ke status yang baik.

Tidak dapat membuat atau memperbarui langganan

Berikut adalah beberapa masalah umum yang dapat Anda hadapi jika mengalami masalah saat membuat atau memperbarui langganan BigQuery.

Error tabel tidak ditemukan

Jika tabel yang Anda tentukan dalam alur kerja pembuatan atau pembaruan langganan tidak ada, alur kerja akan menampilkan error tabel tidak ditemukan. Di konsol Google Cloud, pesannya mirip dengan berikut ini:

The BigQuery table or dataset specified cannot be found.

Untuk mengatasi masalah ini, buat tabel dan pastikan Anda dapat memeriksa statusnya sebelum menggunakannya dengan langganan BigQuery.

Error ketidakcocokan skema

Jika skema tabel dan topik tidak kompatibel, alur kerja pembuatan atau pembaruan langganan akan menampilkan error ketidakcocokan skema. Di konsol Google Cloud, pesannya mirip dengan berikut ini:

Incompatible schema type for field project_ids: expected INT64, got STRING

Pesan error yang ditentukan adalah untuk ketidakcocokan skema untuk kolom yang disebut project_ids. Bergantung pada jenis ketidakcocokan skema yang Anda miliki, Anda mungkin melihat variasi pesan error yang berbeda.

Untuk mengatasi masalah ini, periksa apakah pemetaan skema kompatibel.

Terjadi error pada akun layanan

Jika Anda belum mengonfigurasi akun layanan Pub/Sub dengan izin yang tepat, maka alur kerja pembuatan atau pembaruan langganan akan menampilkan error. Di konsol Google Cloud, pesannya mirip dengan berikut ini:

Service account service-1234234234@gcp-sa-pubsub.iam.gserviceaccount.com
is missing permissions required to write to the BigQuery table:
bigquery.tables.get, bigquery.tables.updateData.

Untuk mengatasi masalah ini, periksa apakah akun layanan memiliki izin yang benar.

Status langganan menampilkan tanda seru merah

Jika Anda mengedit tabel setelah membuat langganan, tindakan ini dapat memengaruhi cara Pub/Sub menulis pesan ke tabel. Jika perubahan menyebabkan masalah, kolom status langganan akan ditetapkan ke status error.

Di halaman detail langganan, periksa status kolom Subscription state. Kolom Subscription state memberikan error yang lebih spesifik, yang mungkin salah satu dari berikut:

  • table not found: Tabel dihapus. Buat tabel dan periksa status tabel. Lihat Mendapatkan informasi tabel.

  • izin tabel ditolak: Akun layanan Pub/Sub tidak lagi memiliki izin untuk menulis ke tabel. Periksa apakah akun layanan memiliki izin yang benar.

  • ketidakcocokan skema tabel: Skema tabel tidak lagi kompatibel dengan setelan langganan BigQuery. Periksa apakah pemetaan skema kompatibel.

Saat langganan Pub/Sub dalam status error, pesan tidak ditulis ke tabel BigQuery dan tetap berada dalam backlog langganan. Perhatikan bahwa pesan tidak dikirim ke topik yang dihentikan pengirimannya yang dilampirkan, jika dikonfigurasi. Pesan yang tidak terkonfirmasi disimpan selama periode yang ditetapkan di message_retention_duration(7d, secara default).

Backlog menumpuk

Jika Anda melihat pesan yang tertunda di langganan atau pesan yang masuk ke topik pesan tidak terkirim langganan, tinjau kemungkinan penyebabnya berikut.

Pesan error INVALID_ARGUMENT

Error ini terjadi jika pesan yang diberikan dalam format yang dianggap valid oleh Pub/Sub, tetapi skema tabel tujuan BigQuery tidak. Artinya, satu atau beberapa kolom dalam pesan memiliki nilai yang tidak diizinkan oleh skema tabel BigQuery. Tinjau kompatibilitas skema untuk memverifikasi bahwa jenis dan format data sudah benar. Beberapa error yang paling umum meliputi:

  • String kosong ("") bukan JSON yang valid. Saat mengirim data ke kolom tabel BigQuery JSON nullable, berikan objek JSON kosong ({}), null, atau string JSON kosong ("\"\"") untuk mewakili nilai yang hilang. Mengirim string kosong akan menyebabkan error.

  • Jika nilai kolom pesan melebihi panjang maksimum kolom BigQuery, pesan akan gagal karena batasan ukuran.

Untuk memecahkan masalah error INVALID_ARGUMENT, tambahkan topik yang dihentikan pengirimannya ke langganan minat. Topik dead letter menangkap pesan yang tidak dapat ditulis ke BigQuery, beserta atribut yang disebut CloudPubSubDeadLetterSourceDeliveryErrorMessage yang menjelaskan alasan kegagalan.

Kegagalan pengiriman ini juga dapat dilihat di Metrics Explorer. Pilih metrik pubsub.googleapis.com/subscription/push_request_count dan filter menurut response_code=invalid_argument.

Pesan error RESOURCE_EXHAUSTED

Jika pesan ditulis ke BigQuery dengan lambat, Anda mungkin perlu meningkatkan kuota push Pub/Sub project atau kuota throughput tulis penyimpanan BigQuery. Untuk memeriksa apakah Anda mengalami batasan kuota, periksa metrik permintaan push (subscription/push_request_count) untuk menemukan error resource_exhausted.

Cara lain untuk mendiagnosis masalah kuota adalah dengan memeriksa kuota project. Buka IAM & Admin > Kuota dalam project yang berisi resource Pub/Sub atau instance BigQuery Anda. Telusuri kuota yang relevan, baik pubsub.googleapis.com/regionalpushsubscriber maupun bigquerystorage.googleapis.com/write/append_bytes. Jika salah satu kuota memerlukan peningkatan, Anda dapat meminta kuota yang lebih tinggi.

Tabel berpartisi per jam yang menampilkan __UNPARTITIONED__ di kolom ID partisi

Saat tabel tujuan BigQuery dipartisi berdasarkan jam, baris awalnya akan ditempatkan di partisi khusus berlabel __UNPARTITIONED__ dalam tampilan INFORMATION_SCHEMA.PARTITIONS. Ini adalah perilaku yang diharapkan untuk tabel yang menggunakan partisi waktu penyerapan.

BigQuery menggunakan buffering streaming untuk mengoptimalkan proses penulisan. Data mungkin berada di partisi __UNPARTITIONED__ hingga volume yang memadai terkumpul atau setidaknya satu jam telah berlalu. Setelah kondisi ini terpenuhi, BigQuery akan mempartisi ulang data ke dalam partisi per jam yang sesuai.

Anda dapat memantau data dalam partisi __UNPARTITIONED__ menggunakan tampilan INFORMATION_SCHEMA.PARTITIONS.

Langkah selanjutnya