Memecahkan masalah kueri
Dokumen ini dimaksudkan untuk membantu Anda memecahkan masalah umum terkait menjalankan kueri, seperti mengidentifikasi alasan kueri lambat, atau memberikan langkah-langkah penyelesaian untuk error umum yang ditampilkan oleh kueri yang gagal.
Memecahkan masalah kueri lambat
Untuk memecahkan masalah performa kueri yang lambat, lakukan hal berikut:
Periksa halaman Google Cloud Service Health untuk mengetahui pemadaman layanan BigQuery yang diketahui yang mungkin memengaruhi performa kueri.
Tinjau linimasa tugas untuk kueri Anda di penjelajah tugas untuk melihat durasi setiap tahap kueri berjalan.
Jika sebagian besar waktu yang berlalu disebabkan oleh waktu pembuatan yang lama, hubungi Cloud Customer Care untuk mendapatkan bantuan.
Jika sebagian besar waktu yang berlalu disebabkan oleh waktu eksekusi yang lama, tinjau insight performa kueri Anda. Insight performa kueri dapat memberi tahu Anda jika kueri berjalan lebih lama dari waktu eksekusi rata-rata, dan menyarankan kemungkinan penyebabnya. Kemungkinan penyebabnya mungkin mencakup pertentangan slot kueri atau kuota shuffle yang tidak memadai. Untuk mengetahui informasi selengkapnya tentang setiap masalah performa kueri dan kemungkinan penyelesaiannya, lihat Menafsirkan insight performa kueri.
Tinjau kolom
finalExecutionDurationMsdalam jenis objekJobStatisticsuntuk tugas kueri Anda. Kueri mungkin telah dicoba lagi. KolomfinalExecutionDurationMsberisi durasi dalam milidetik dari eksekusi upaya terakhir tugas ini.Tinjau byte yang diproses di halaman detail tugas kueri untuk melihat apakah jumlahnya lebih tinggi dari yang diharapkan. Anda dapat melakukannya dengan membandingkan jumlah byte yang diproses oleh kueri saat ini dengan tugas kueri lain yang selesai dalam waktu yang dapat diterima. Jika ada perbedaan byte yang besar yang diproses di antara kedua kueri, mungkin kueri tersebut lambat karena volume data yang besar. Untuk mengetahui informasi tentang cara mengoptimalkan kueri Anda untuk menangani volume data yang besar, lihat Mengoptimalkan komputasi kueri.
Anda juga dapat mengidentifikasi kueri dalam project yang memproses data dalam jumlah besar dengan menelusuri kueri yang paling mahal menggunakan tampilan
INFORMATION_SCHEMA.JOBS.Tinjau penggunaan pemesanan Anda dan periksa pertentangan slot. Untuk mengetahui informasi selengkapnya, lihat Analisis statistik workload.
Periksa eksekusi sebelumnya dan terbaru untuk hash kueri yang sama guna melihat apakah insight performa kueri baru tersedia untuk tugas yang lebih lambat, seperti perubahan skala input data. Anda dapat memfilter menurut hash kueri di penjelajah tugas administratif.
Membandingkan eksekusi lambat dan cepat dari kueri yang sama
Jika kueri yang sebelumnya berjalan cepat kini berjalan lambat, periksa output objek Job API untuk mengidentifikasi perubahan dalam eksekusinya.
Cache ditemukan
Konfirmasi apakah eksekusi tugas yang cepat merupakan cache ditemukan dengan melihat nilai cacheHit. Jika
nilainya adalah true untuk eksekusi kueri yang cepat, kueri tersebut menggunakan
hasil yang di-cache, bukan menjalankan kueri.
Jika Anda memperkirakan tugas yang lambat akan menggunakan hasil yang di-cache, selidiki alasan kueri tidak lagi menggunakan hasil yang di-cache. Jika Anda tidak mengharapkan kueri mengambil data dari cache, cari contoh eksekusi kueri cepat yang tidak mencapai cache untuk penyelidikan.
Penundaan kuota
Untuk menentukan apakah perlambatan disebabkan oleh penundaan kuota, periksa kolom quotaDeferments untuk kedua tugas. Bandingkan nilai untuk menentukan apakah waktu mulai kueri yang lebih lambat tertunda oleh penundaan kuota yang tidak memengaruhi tugas yang lebih cepat.
Durasi eksekusi
Untuk memahami perbedaan antara durasi eksekusi upaya terakhir kedua tugas, bandingkan nilainya untuk kolom finalExecutionDurationMs.
Jika nilai untuk finalExecutionDurationMs cukup mirip, tetapi perbedaan waktu eksekusi sebenarnya antara kedua kueri, yang dihitung sebagai startTime - endTime, jauh lebih besar, ini berarti mungkin ada percobaan ulang eksekusi kueri internal untuk tugas yang lambat karena kemungkinan masalah sementara. Jika Anda melihat
pola perbedaan ini berulang kali, hubungi Cloud Customer Care
untuk mendapatkan bantuan
Byte yang diproses
Tinjau byte yang diproses di halaman detail tugas kueri atau lihat totalBytesProcessed dari JobStatistics untuk mengetahui apakah nilainya lebih tinggi dari yang diharapkan. Jika ada perbedaan besar dalam byte yang diproses antara kedua kueri, kueri mungkin lambat karena perubahan volume data yang diproses. Untuk mengetahui informasi tentang cara mengoptimalkan kueri untuk menangani volume data yang besar, lihat Mengoptimalkan komputasi kueri.
Alasan berikut dapat menyebabkan peningkatan jumlah byte yang diproses oleh kueri:
- Ukuran tabel yang direferensikan oleh kueri telah meningkat.
- Kueri kini membaca partisi tabel yang lebih besar.
- Kueri mereferensikan tampilan yang definisinya telah berubah.
Tabel yang direferensikan
Periksa apakah kueri membaca tabel yang sama dengan menganalisis output kolom referencedTables di JobStatistics2.
Perbedaan dalam tabel yang direferensikan dapat dijelaskan sebagai berikut:
- Kueri SQL diubah untuk membaca tabel yang berbeda. Bandingkan teks kueri untuk mengonfirmasi hal ini.
- Definisi tampilan telah berubah di antara eksekusi kueri. Periksa definisi tampilan yang dirujuk dalam kueri ini dan perbarui jika perlu.
Perbedaan dalam tabel yang direferensikan dapat menjelaskan perubahan dalam
totalBytesProcessed.
Penggunaan tampilan terwujud
Jika kueri mereferensikan tampilan terwujud, perbedaan performa dapat disebabkan oleh tampilan terwujud yang dipilih atau ditolak selama eksekusi kueri. Periksa
MaterializedViewStatistics
untuk memahami apakah tampilan terwujud yang digunakan dalam kueri cepat
ditolak dalam kueri lambat. Lihat kolom chosen dan rejectedReason di
objek MaterializedView.
Statistik caching metadata
Untuk kueri yang melibatkan tabel BigLake Amazon S3 atau tabel BigLake Cloud Storage dengan caching metadata diaktifkan, bandingkan output MetadataCacheStatistics untuk memeriksa apakah ada perbedaan dalam penggunaan cache metadata antara kueri lambat dan cepat serta alasan yang sesuai. Misalnya, cache metadata mungkin berada di luar periode maxStaleness tabel.
Membandingkan statistik BigQuery BI Engine
Jika kueri menggunakan BigQuery BI Engine, analisis output
BiEngineStatistics
untuk menentukan apakah mode akselerasi yang sama diterapkan ke kueri lambat
dan cepat. Lihat kolom BiEngineReason
untuk memahami alasan umum akselerasi parsial atau tidak ada
akselerasi sama sekali, seperti memori tidak cukup, tidak ada pemesanan, atau input
terlalu besar.
Meninjau perbedaan dalam insight performa kueri
Bandingkan insight performa kueri untuk setiap kueri dengan melihat Execution Graph di konsol Google Cloud atau objek StagePerformanceStandaloneInsight untuk memahami kemungkinan masalah berikut:
- Persaingan slot (
slotContention) - Penggabungan kardinalitas tinggi (
highCardinalityJoins) - Kuota acak tidak mencukupi (
insufficientShuffleQuota) - Kecondongan data (
partitionSkew)
Perhatikan insight yang diberikan untuk tugas yang lambat serta perbedaan antara insight yang dihasilkan untuk tugas yang cepat guna mengidentifikasi perubahan tahap yang memengaruhi performa.
Penetapan pemesanan
Periksa apakah ada perbedaan dalam reservasi yang ditetapkan untuk kedua tugas tersebut. Perubahan dalam pemesanan atau perpindahan dari on-demand ke pemesanan dapat memengaruhi performa. Untuk mengetahui informasi selengkapnya, lihat Model pengelolaan workload dan ukuran pemesanan.
Analisis metadata eksekusi tugas yang lebih menyeluruh memerlukan peninjauan
satu tahap eksekusi kueri dengan membandingkan
objek ExplainQueryStage
untuk kedua tugas tersebut.
Untuk memulai, lihat metrik Wait ms dan Shuffle output bytes
yang dijelaskan di bagian
menafsirkan informasi tahap kueri.
Peringatan resource dari tampilan INFORMATION_SCHEMA.JOBS
Buat kueri kolom query_info.resource_warning dari
tampilan INFORMATION_SCHEMA.JOBS untuk melihat
apakah ada perbedaan dalam peringatan yang dianalisis oleh BigQuery
sehubungan dengan resource yang digunakan.
Analisis statistik workload
Resource slot yang tersedia dan pertentangan slot dapat memengaruhi waktu eksekusi kueri. Bagian berikut membantu Anda memahami penggunaan dan ketersediaan slot untuk eksekusi kueri tertentu.
Slot rata-rata per detik
Untuk menghitung jumlah rata-rata slot yang digunakan per milidetik oleh kueri, bagi nilai slot milidetik untuk tugas, totalSlotMs dari JobStatistics2, dengan durasi dalam milidetik dari eksekusi upaya terakhir tugas ini, finalExecutionDurationMs dari JobStatistics.
Anda juga dapat menghitung
jumlah rata-rata slot per milidetik yang digunakan oleh tugas
dengan mengkueri tampilan INFORMATION_SCHEMA.JOBS
Tugas yang melakukan jumlah pekerjaan yang sama dengan jumlah slot rata-rata per detik yang lebih besar akan selesai lebih cepat. Penggunaan slot rata-rata per detik yang lebih rendah dapat disebabkan oleh hal berikut:
- Tidak ada resource tambahan yang tersedia karena pertentangan resource antara berbagai tugas—reservasi telah mencapai batas maksimum.
- Tugas tidak meminta lebih banyak slot selama sebagian besar eksekusi. Misalnya, hal ini dapat terjadi jika ada kecondongan data.
Model pengelolaan workload dan ukuran pemesanan
Jika Anda menggunakan model penagihan on-demand, jumlah slot yang dapat Anda gunakan per project akan dibatasi. Project Anda juga terkadang memiliki lebih sedikit slot yang tersedia jika ada banyak pertentangan untuk kapasitas on-demand di lokasi tertentu.
Model berbasis kapasitas lebih dapat diprediksi dan memungkinkan Anda menentukan jumlah slot dasar pengukuran yang dikonfirmasi.
Pertimbangkan perbedaan ini saat membandingkan eksekusi kueri yang dijalankan menggunakan on-demand dengan eksekusi kueri yang menggunakan pemesanan.
Menggunakan pemesanan direkomendasikan untuk memiliki performa eksekusi kueri yang stabil dan dapat diprediksi. Untuk mengetahui informasi selengkapnya tentang perbedaan antara workload on-demand dan berbasis kapasitas, lihat Pengantar pengelolaan workload.
Konkurensi tugas
Konkurensi tugas menunjukkan persaingan di antara tugas untuk mendapatkan resource slot selama eksekusi kueri. Konkurensi tugas yang lebih tinggi umumnya menyebabkan eksekusi tugas yang lebih lambat karena tugas memiliki akses ke slot yang lebih sedikit.
Anda dapat mengkueri tampilan INFORMATION_SCHEMA.JOBS untuk menemukan jumlah rata-rata tugas serentak yang berjalan bersamaan dengan kueri tertentu dalam sebuah project.
Jika ada lebih dari satu project yang ditetapkan ke pemesanan, ubah kueri untuk
menggunakan JOBS_BY_ORGANIZATION, bukan JOBS_BY_PROJECT, guna mendapatkan data
tingkat pemesanan yang akurat.
Konkurensi rata-rata yang lebih tinggi selama eksekusi tugas yang lambat dibandingkan dengan tugas yang cepat merupakan faktor yang berkontribusi terhadap kelambatan secara keseluruhan.
Pertimbangkan untuk mengurangi konkurensi dalam project atau pemesanan dengan menyebarkan kueri yang menggunakan banyak resource, baik dari waktu ke waktu dalam pemesanan atau project, maupun di berbagai pemesanan atau project.
Solusi lainnya adalah membeli pemesanan atau meningkatkan ukuran pemesanan yang ada. Pertimbangkan untuk mengizinkan pemesanan menggunakan slot tidak ada aktivitas.
Untuk memahami jumlah slot yang perlu ditambahkan, baca artikel tentang memperkirakan persyaratan kapasitas slot.
Tugas yang berjalan dalam pemesanan dengan lebih dari satu project yang ditetapkan dapat mengalami hasil penetapan slot yang berbeda dengan konkurensi tugas rata-rata yang sama, bergantung pada project yang menjalankannya. Baca penjadwalan yang adil untuk mempelajari lebih lanjut.
Pemakaian reservasi
Diagram resource admin dan Cloud Monitoring BigQuery dapat digunakan untuk memantau pemakaian pemesanan. Untuk mengetahui informasi selengkapnya, lihat Memantau reservasi BigQuery.
Untuk memahami apakah suatu tugas meminta slot tambahan, lihat metrik perkiraan unit yang dapat dijalankan, yaitu estimatedRunnableUnits dari respons Job API, atau period_estimated_runnable_units di tampilan INFORMATION_SCHEMA.JOBS_TIMELINE.
Jika nilai untuk metrik ini lebih dari 0, tugas dapat memperoleh manfaat dari slot tambahan pada saat itu.
Untuk memperkirakan persentase waktu eksekusi tugas yang akan diuntungkan dari slot tambahan, jalankan kueri berikut terhadap tampilan INFORMATION_SCHEMA.JOBS_TIMELINE:
SELECT ROUND(COUNTIF(period_estimated_runnable_units > 0) / COUNT(*) * 100, 1) AS execution_duration_percentage FROM `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE job_id = 'my_job_id' GROUP BY job_id;
+---------------------------------+ | execution_duration_percentage | +---------------------------------+ | 96.7 | +---------------------------------+
Persentase yang rendah berarti ketersediaan resource slot bukan kontributor utama lambatnya kueri dalam skenario ini.
Jika persentasenya tinggi dan pemesanan tidak digunakan sepenuhnya selama waktu ini, hubungi Cloud Customer Care untuk menyelidiki.
Jika pemesanan digunakan sepenuhnya selama eksekusi tugas yang lambat dan persentasenya tinggi, tugas tersebut dibatasi pada resource. Pertimbangkan untuk mengurangi konkurensi, meningkatkan ukuran pemesanan, mengizinkan pemesanan menggunakan slot tidak ada aktivitas, atau membeli pemesanan jika tugas dijalankan on-demand.
Metadata tugas dan temuan analisis workload tidak meyakinkan
Jika Anda masih tidak dapat menemukan alasan untuk menjelaskan performa kueri yang lebih lambat dari yang diharapkan, hubungi Cloud Customer Care untuk mendapatkan bantuan.
Memecahkan masalah kueri menggunakan Gemini Cloud Assist
Untuk menggunakan Gemini Cloud Assist dalam membantu Anda memecahkan masalah kegagalan kueri atau masalah performa, lakukan hal berikut:
Di konsol Google Cloud , buka halaman BigQuery.
Di toolbar Google Cloud , klik spark Open or close Gemini Cloud Assist chat.
Di panel Cloud Assist, masukkan perintah yang menyertakan ID pekerjaan untuk menyelidiki eksekusi, metrik performa, atau alasan kegagalannya. Misalnya:
Mengapa JOB_ID gagal?Mengapa tugas ini memerlukan waktu begitu lama? JOB_IDRingkas performa tugas saya selama 24 jam terakhir.
Memecahkan masalah kegagalan kueri menggunakan gcpdiag
gcpdiag
adalah alat open source. Produk ini tidak didukung secara resmi oleh Google Cloud .
Anda dapat menggunakan alat gcpdiag untuk membantu mengidentifikasi dan memperbaiki Google Cloud
masalah project. Untuk mengetahui informasi selengkapnya, lihat
project gcpdiag di GitHub.
Alat gcpdiag membantu Anda menganalisis kueri BigQuery yang gagal untuk memahami apakah ada penyebab utama dan mitigasi yang diketahui untuk kegagalan tertentu.
Jalankan perintah gcpdiag
Anda dapat menjalankan perintah gcpdiag dari Google Cloud CLI:
KonsolGoogle Cloud
- Lengkapi, lalu salin perintah berikut.
- Buka konsol Google Cloud dan aktifkan Cloud Shell. Buka Konsol Cloud
- Tempel perintah yang disalin.
- Jalankan perintah
gcpdiag, yang mendownload image dockergcpdiag, lalu melakukan pemeriksaan diagnostik. Jika ada, ikuti petunjuk output untuk memperbaiki pemeriksaan yang gagal.
gcpdiag runbook bigquery/failed-query \
--parameter project_id=PROJECT_ID \
--parameter bigquery_job_region=JOB_REGION \
--parameter bigquery_job_id=JOB_ID \
--parameter bigquery_skip_permission_check=SKIP_PERMISSION_CHECKDocker
Anda dapat
menjalankan gcpdiag menggunakan wrapper yang memulai gcpdiag dalam
container Docker. Docker atau
Podman harus diinstal.
- Salin dan jalankan perintah berikut di workstation lokal Anda.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Jalankan perintah
gcpdiag../gcpdiag runbook bigquery/failed-query \ --parameter project_id=PROJECT_ID \ --parameter bigquery_job_region=JOB_REGION \ --parameter bigquery_job_id=JOB_ID \ --parameter bigquery_skip_permission_check=SKIP_PERMISSION_CHECK
Lihat parameter yang tersedia untuk runbook ini.
Ganti kode berikut:
- PROJECT_ID: ID project yang berisi resource.
- JOB_REGION: Region tempat tugas BigQuery dijalankan.
- JOB_ID: ID tugas dari tugas BigQuery.
- SKIP_PERMISSION_CHECK: (Opsional) tetapkan ini ke
Truejika Anda ingin melewati pemeriksaan izin yang relevan dan mempercepat eksekusi runbook (nilai defaultnya adalahFalse).
Flag yang berguna:
--universe-domain: Jika berlaku, domain Trusted Partner Sovereign Cloud yang menghosting resource--parameteratau-p: Parameter runbook
Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag, lihat
petunjuk penggunaan gcpdiag.
Resolusi skema Avro
String error: Cannot skip stream
Error ini dapat terjadi saat memuat beberapa file Avro dengan skema yang berbeda, yang mengakibatkan masalah resolusi skema dan menyebabkan tugas impor gagal dalam file acak.
Untuk mengatasi error ini, pastikan file alfabet terakhir dalam tugas pemuatan berisi superset (union) skema yang berbeda. Hal ini adalah persyaratan berdasarkan cara Avro menangani resolusi skema.
Kueri serentak yang bertentangan
String error: Concurrent jobs in the same session are not allowed
Error ini dapat terjadi jika beberapa kueri berjalan serentak dalam satu sesi, yang tidak didukung. Lihat batasan sesi.
Pernyataan DML yang bertentangan
String error: Could not serialize access to table due to concurrent update
Error ini terjadi saat pernyataan bahasa pengolahan data (DML) yang bermutasi serentak (UPDATE, DELETE, atau MERGE) mencoba mengubah data di partisi tabel yang sama secara bersamaan, atau saat tabel dipotong saat pernyataan DML sedang berjalan.
BigQuery memungkinkan pernyataan DML bermutasi serentak berjalan di tabel yang sama selama pernyataan tersebut mengubah partisi yang berbeda. Namun, jika dua tugas mencoba mengubah partisi yang sama, tugas pertama yang di-commit akan berhasil, dan tugas berikutnya akan gagal dengan error ini.
Untuk mengatasi error ini, coba langkah berikut:
- Coba lagi tugas yang gagal: jika konflik disebabkan oleh tumpang-tindih sementara dengan tugas lain, coba lagi kueri setelah tugas yang bertentangan selesai.
- Identifikasi dan koordinasikan tugas yang bertentangan: jalankan kueri diagnostik di bagian berikut untuk mengidentifikasi tugas yang bersaing, lalu koordinasikan jadwal sehingga operasi DML yang bermutasi pada partisi yang sama tidak berjalan pada saat yang sama.
- Partisi tabel Anda: jika tugas DML serentak memperbarui segmen data yang berbeda, partisi tabel Anda berdasarkan rentang tanggal atau bilangan bulat. Pernyataan DML bermutasi serentak berhasil tanpa konflik jika mengubah partisi yang berbeda.
- Operasi DML batch: gabungkan beberapa operasi
UPDATEatauDELETEindividual menjadi satu pernyataanMERGEatau tugas batch untuk mengurangi konkurensi dan overhead commit. Untuk mengetahui informasi selengkapnya, baca Praktik terbaik.
Mengidentifikasi tugas yang bertentangan
Untuk mengidentifikasi tugas mana yang secara serentak memperbarui tabel saat error
terjadi, jalankan kueri terhadap
tampilan INFORMATION_SCHEMA.JOBS:
SELECT job_id, query, start_time, end_time FROM `region-REGION`.INFORMATION_SCHEMA.JOBS WHERE creation_time BETWEEN TIMESTAMP_SUB(TIMESTAMP 'FAILED_JOB_START_TIME', INTERVAL 1 DAY) AND TIMESTAMP 'FAILED_JOB_END_TIME' AND destination_table.table_id = 'TABLE_NAME' AND destination_table.dataset_id = 'DATASET_NAME' AND statement_type IN ('UPDATE', 'DELETE', 'MERGE') AND start_time <= 'FAILED_JOB_END_TIME' AND (end_time >= 'FAILED_JOB_START_TIME' OR end_time IS NULL) ORDER BY start_time;
Ganti kode berikut:
REGION: nama region tempat set data Anda berada—misalnya,us.FAILED_JOB_START_TIME: stempel waktu saat tugas yang gagal dimulai—misalnya,2026-09-01 09:55:00 UTC.FAILED_JOB_END_TIME: stempel waktu saat tugas yang gagal berakhir—misalnya,2026-09-01 10:00:00 UTC.TABLE_NAME: nama tabel yang coba diperbarui oleh pernyataan DML yang gagal.DATASET_NAME: nama set data yang berisi tabel.
Jika kueri tidak menampilkan tugas yang bertentangan yang dimulai oleh pengguna, konflik mungkin disebabkan oleh operasi latar belakang lain, seperti masa berlaku partisi.
Penyebab lain konflik update serentak
- Masa berlaku partisi: tugas sistem latar belakang yang mengakhiri masa berlaku partisi dapat bertentangan dengan pernyataan DML, jika tugas tersebut mengubah partisi yang sama selama eksekusi tugas. Jika Anda menggunakan masa berlaku partisi, jadwalkan tugas DML di luar waktu masa berlaku partisi berakhir.
- Transaksi multi-pernyataan: saat transaksi multi-pernyataan mengubah tabel, transaksi tersebut akan memblokir semua pernyataan DML serentak lainnya pada tabel tersebut hingga transaksi selesai.
- Pernyataan DML yang memengaruhi nol baris: pernyataan
UPDATE,DELETE, atauMERGEmemperoleh kunci pada partisi yang ditargetkan dan dapat menyebabkan konflik serialisasi meskipun tidak ada baris yang cocok dengan kondisi filter.
Untuk mengetahui informasi selengkapnya, lihat Konflik pernyataan DML.
Subkueri berkorelasi
String error: Correlated subqueries that reference other tables are not
supported unless they can be de-correlated
Error ini dapat terjadi jika kueri Anda berisi subkueri yang mereferensikan kolom dari luar subkueri tersebut, yang disebut kolom korelasi. Subkueri yang berkorelasi dievaluasi menggunakan strategi eksekusi bertingkat yang tidak efisien, di mana subkueri dievaluasi untuk setiap baris dari kueri luar yang menghasilkan kolom korelasi. Terkadang, BigQuery dapat menulis ulang kueri secara internal dengan subkueri yang berkorelasi sehingga kueri tersebut dieksekusi dengan lebih efisien. Error subkueri yang berkorelasi terjadi saat BigQuery tidak dapat mengoptimalkan kueri secara memadai.
Untuk mengatasi error ini, coba langkah berikut:
- Hapus klausa
ORDER BY,LIMIT,EXISTS,NOT EXISTS, atauINdari subkueri Anda. - Gunakan kueri multi-pernyataan untuk membuat tabel sementara yang akan direferensikan dalam subkueri Anda.
- Tulis ulang kueri Anda untuk menggunakan
CROSS JOIN.
Izin kontrol akses tingkat kolom tidak memadai
String error:
Access denied: Requires fineGrainedGet permission on the read columns to execute the DML statements- `Access denied: User does not have permission to access policy tag projects/PROJECT_ID/locations/LOCATION/taxonomies/TAXONOMY_ID/policyTags/POLICY_TAG_ID on column PROJECT_ID.DATASET.TABLE.COLUMN.'
Error ini terjadi saat Anda mencoba menjalankan kueri SQL atau pernyataan DELETE, UPDATE, atau MERGE DML tanpa diberi peran Fine-Grained Reader pada kolom yang menggunakan kontrol akses tingkat kolom. Peran ini ditetapkan ke akun utama sebagai bagian dari konfigurasi tag kebijakan. Untuk mengetahui informasi selengkapnya, lihat
Dampak pada penulisan dari kontrol akses tingkat kolom.
Untuk mengatasi masalah ini, ubah kueri untuk mengecualikan kolom dengan tag kebijakan, atau berikan peran Fine-Grained Reader kepada pengguna. Peran ini ditetapkan ke akun utama sebagai bagian dari konfigurasi tag kebijakan. Untuk mengetahui informasi selengkapnya, lihat Memperbarui izin pada tag kebijakan.
Memecahkan masalah kueri terjadwal
Masalah berikut mungkin muncul selama konfigurasi atau eksekusi kueri terjadwal.
Kueri terjadwal memicu operasi duplikat
Kueri terjadwal mungkin dipicu lebih dari sekali pada waktu yang dijadwalkan.
Perilaku ini lebih mungkin terjadi untuk kueri yang dijadwalkan tepat pada jam tertentu (seperti pukul 09.00).
Hal ini dapat menyebabkan hasil yang tidak diharapkan,
seperti data duplikat jika kueri menjalankan operasi INSERT.
Untuk meminimalkan risiko duplikasi operasi, jadwalkan kueri Anda pada waktu di luar jam, seperti beberapa menit sebelum atau setelah jam (misalnya, 08.58 atau 09.03). Untuk mengetahui informasi selengkapnya, lihat Menjadwalkan kueri.
Kredensial tidak valid untuk kueri terjadwal
String error:
Error code: INVALID_USERIDError code 5: Authentication failure: User Id not foundPERMISSION_DENIED: BigQuery: Permission denied while getting Drive credentials
Error ini dapat terjadi jika kueri terjadwal gagal karena kredensial yang sudah tidak berlaku, terutama saat membuat kueri data Google Drive.
Untuk mengatasi error ini, ikuti langkah-langkah berikut:
- Pastikan Anda telah mengaktifkan BigQuery Data Transfer Service, yang merupakan prasyarat untuk menggunakan kueri terjadwal.
- Perbarui kredensial kueri terjadwal.
Kredensial akun layanan tidak valid
String error: HttpError 403 when requesting returned: The caller does not have permission
Error ini mungkin muncul saat Anda mencoba menyiapkan kueri terjadwal dengan akun layanan. Untuk mengatasi error ini, lihat langkah-langkah pemecahan masalah di Masalah otorisasi dan izin.
Waktu snapshot tidak valid
String error: Invalid snapshot time
Error ini dapat terjadi saat mencoba membuat kueri data historis yang berada di luar periode perjalanan waktu untuk set data tersebut. Untuk mengatasi error ini, ubah kueri untuk mengakses data historis dalam periode perjalanan waktu set data.
Error ini juga dapat muncul jika salah satu tabel yang digunakan dalam kueri dihapus dan dibuat ulang setelah kueri dimulai. Periksa apakah ada kueri terjadwal atau aplikasi yang melakukan operasi ini yang berjalan bersamaan dengan kueri yang gagal. Jika ada, coba pindahkan proses yang melakukan operasi lepas dan buat ulang agar dapat berjalan pada waktu yang tidak bertentangan dengan kueri yang membaca tabel tersebut.
Tugas sudah ada
String error: Already Exists: Job <job name>
Error ini dapat terjadi untuk tugas kueri yang harus mengevaluasi array besar, sehingga
perlu waktu lebih lama dari rata-rata untuk membuat tugas kueri. Misalnya, kueri dengan klausa WHERE seperti WHERE column IN (<2000+ elements array>).
Untuk mengatasi error ini, ikuti langkah-langkah berikut:
- Izinkan BigQuery untuk menghasilkan nilai
jobIdacak, bukan menentukannya. - Gunakan kueri berparameter untuk memuat array.
Error ini juga dapat terjadi saat Anda menetapkan ID pekerjaan secara manual, tetapi pekerjaan tidak menampilkan keberhasilan dalam periode waktu tunggu. Dalam hal ini, Anda dapat menambahkan pengendali pengecualian untuk memeriksa apakah tugas ada. Jika ya, Anda dapat menarik hasil kueri dari tugas.
Tugas tidak ditemukan
String error: Job not found
Error ini dapat terjadi sebagai respons terhadap
panggilan getQueryResults,
jika tidak ada nilai yang ditentukan untuk kolom location. Jika demikian,
coba panggilan lagi dan berikan nilai location.
Untuk mengetahui informasi selengkapnya, lihat Menghindari beberapa evaluasi Common Table Expressions (CTE) yang sama.
Lokasi tidak ditemukan
String error: Dataset [project_id]:[dataset_id] was not found in location [region]
Error ini muncul saat Anda merujuk ke resource set data yang tidak ada, atau jika lokasi dalam permintaan tidak cocok dengan lokasi set data.
Untuk mengatasi masalah ini, tentukan lokasi set data dalam kueri atau konfirmasi bahwa set data tersedia di lokasi yang sama.
Kueri melebihi batas waktu eksekusi
String error: Query fails due to reaching the execution time limit
Jika kueri Anda mencapai batas waktu eksekusi kueri, periksa waktu eksekusi kueri sebelumnya dengan membuat kueri tampilan INFORMATION_SCHEMA.JOBS
dengan kueri yang mirip dengan contoh berikut:
SELECT TIMESTAMP_DIFF(end_time, start_time, SECOND) AS runtime_in_seconds FROM `region-us`.INFORMATION_SCHEMA.JOBS WHERE statement_type = 'QUERY' AND query = "my query string";
Jika kueri yang dijalankan sebelumnya memerlukan waktu yang jauh lebih singkat, gunakan analisis performa kueri untuk menentukan dan mengatasi masalah yang mendasarinya.
Kueri melebihi batas byte maksimum yang ditagih
String error: Query exceeded limit for bytes billed: LIMIT_BYTES. REQUIRED_BYTES or higher required.
Error HTTP 400 Bad Request (reason: bytesBilledLimitExceeded) ini terjadi
saat perkiraan byte pra-eksekusi yang akan ditagih untuk kueri
(REQUIRED_BYTES) melebihi batas byte yang dikonfigurasi di
maximumBytesBilled
(LIMIT_BYTES). BigQuery menggagalkan tugas
sebelum eksekusi dan tidak mengenakan biaya untuk kueri.
Karena harga sesuai permintaan
menerapkan minimum 10 MB (10,485,760 byte) per tabel yang direferensikan dan
estimasi pra-eksekusi untuk tabel yang dikelompokkan menghitung batas atas di semua
partisi yang cocok sebelum pemangkasan cluster terjadi,
REQUIRED_BYTES dapat lebih tinggi daripada byte sebenarnya
yang dipindai saat kueri berjalan.
Untuk menyelesaikan masalah ini, lakukan salah satu tindakan berikut:
- Melihat pratinjau estimasi byte dengan uji coba. Jalankan
uji coba (
bq query --dry_rundi bq CLI atauconfiguration.dryRun = truedi API) atau periksa validator kueri di konsol Google Cloud untuk memeriksatotalBytesProcessedsebelum menjalankan kueri. - Optimalkan kueri untuk memindai lebih sedikit byte. Pilih hanya kolom yang diperlukan kueri Anda, bukan menjalankan
SELECT *, dan filter pada kolom yang dipartisi sehingga BigQuery dapat memangkas partisi selama estimasi pra-eksekusi. Pemfilteran pada kolom yang dikelompokkan mengurangi byte sebenarnya yang ditagih saat kueri berjalan, tetapi tidak mengurangi estimasi batas atas pra-eksekusi yang diperiksa terhadapmaximumBytesBilled. Untuk mengetahui informasi selengkapnya, lihat Mengurangi pemrosesan data. - Tingkatkan batas
maximumBytesBilled. Tetapkan batas bytemaximumBytesBilledke nilai yang sama dengan atau di atas nilaiREQUIRED_BYTESyang dilaporkan dalam pesan error menggunakan Maximum bytes billed (di bagian Query settings > Advanced options) di konsol Google Cloud , flag--maximum_bytes_billeddi bq CLI, atau properti konfigurasi tugasconfiguration.query.maximumBytesBilleddi API.
Respons kueri terlalu besar
String error: responseTooLarge
Error ini terjadi jika hasil kueri Anda lebih besar dari ukuran respons maksimum, atau jika satu baris melebihi batas ukuran baris REST API.
Beberapa kueri dijalankan dalam beberapa tahapan, dan error ini terjadi saat salah satu tahap menampilkan ukuran respons yang terlalu besar, meskipun hasil akhir lebih kecil dari maksimumnya. Error ini biasanya terjadi saat kueri menggunakan klausa ORDER BY. Menghapus klausa ORDER BY atau menambahkan klausa LIMIT terkadang dapat
membantu. Untuk memastikan bahwa hasil yang besar dapat ditampilkan, tentukan tabel tujuan dalam konfigurasi tugas Anda. Untuk kueri legacy SQL, Anda juga harus menetapkan properti configuration.query.allowLargeResults ke true. Untuk informasi selengkapnya, lihat Menulis hasil kueri yang besar.
Batas ukuran respons satu baris terlampaui
String error:
Response too large to return. Message before conversion exceeds max row limit, limit: LIMIT actual: ACTUALResponse too large to return. single row too big to return due to byte limit, actual: ACTUAL limit: LIMIT
Error 403 Forbidden HTTP (reason: responseTooLarge) ini terjadi saat Anda
membaca hasil kueri atau baris tabel menggunakan
metode REST API
jobs.getQueryResults
atau tabledata.list (termasuk menampilkan hasil di konsol Google Cloud atau
alat command line bq), dan satu baris yang tidak bertingkat dan diserialisasi melebihi ukuran baris maksimum
yang didukung oleh endpoint penomoran halaman REST
(20 MB untuk jobs.getQueryResults,
atau 100 MB untuk tabledata.list).
Hal ini biasanya terjadi pada tabel dengan skema lebar, kolom ARRAY atau STRUCT berulang yang sangat bertingkat, atau nilai STRING atau BYTES yang besar.
Untuk membaca baris yang melebihi batas ukuran baris REST API, lakukan salah satu hal berikut:
- Gunakan BigQuery Storage Read API. Baca tabel atau tabel tujuan kueri sementara menggunakan Storage Read API, yang melakukan streaming data dalam format Apache Arrow atau Avro biner dan mendukung pembacaan throughput tinggi dari struktur baris yang besar dan kompleks.
- Ekspor tabel ke Cloud Storage. Ekspor tabel atau hasil kueri ke Cloud Storage menggunakan pernyataan
EXPORT DATAatau tugas ekstrak (misalnya, dalam format Avro, Parquet, atau JSON) dan baca file yang diekspor dari Cloud Storage. - Proyeksikan atau gabungkan lebih sedikit kolom. Daripada menjalankan
SELECT *, pilih hanya kolom atau subkolom tertentu yang diperlukan oleh aplikasi Anda, atau batalkan pengelompokan array berulang dalam kueri Anda sehingga setiap baris output tetap berada di bawah batas ukuran.
Parameter yang diperlukan tidak ada
String error: Required parameter is missing: PARAMETER_NAME
Error HTTP 400 Bad Request (reason: required) ini adalah error validasi API pra-eksekusi yang terjadi saat kolom wajib diisi dalam payload atau URL permintaan API tidak diberikan, atau saat properti wajib diisi pada objek konfigurasi library klien adalah null atau None.
Untuk mengatasi error ini, lakukan hal berikut:
- Periksa referensi REST API. Periksa
PARAMETER_NAMEdalam pesan error, dan tinjau isi permintaan dan parameter kueri yang diperlukan untuk metode tersebut di referensi BigQuery REST API untuk memastikan kode Anda mengisi semua kolom yang diperlukan. - Verifikasi parameter library klien. Jika Anda menggunakan library klien BigQuery (seperti library klien Java atau Python), periksa dokumentasi library klien untuk mengetahui parameter yang diperlukan dari metode yang Anda panggil.
- Periksa objek konfigurasi sebelum memanggil API. Gunakan debugger atau laporan log untuk memeriksa objek konfigurasi tugas atau permintaan tepat sebelum panggilan API dijalankan, dan periksa nilai
Noneataunullyang ditetapkan ke properti yang diperlukan sepertidestinationTable.
Reservasi tidak ditemukan atau tidak memiliki slot
String error: Cannot run query: project does not have the reservation in the data region or no slots are configured
Error ini terjadi jika pemesanan yang ditetapkan ke project di region kueri tidak memiliki slot yang ditetapkan. Anda dapat menambahkan slot ke pemesanan, mengizinkan pemesanan menggunakan slot tidak ada aktivitas, menggunakan pemesanan lain, atau menghapus penetapan dan menjalankan kueri sesuai permintaan.
Tabel tidak ditemukan
String error: Not found: Table [project_id]:[dataset].[table_name] was not found in location [region]
Error ini terjadi jika tabel dalam kueri Anda tidak dapat ditemukan dalam set data atau region yang Anda tentukan. Untuk mengatasi error ini, lakukan hal berikut:
- Pastikan kueri Anda berisi nama project, set data, dan tabel yang benar.
- Pastikan tabel ada di region tempat Anda menjalankan kueri.
- Pastikan tabel tidak dihapus dan dibuat ulang selama eksekusi tugas. Jika tidak, penyebaran metadata yang tidak lengkap dapat menyebabkan error ini.
Terlalu banyak pernyataan DML
String error: Too many DML statements outstanding against <table-name>, limit is 20
Error ini terjadi saat Anda melebihi batas 20 pernyataan DML yang bermutasi
dalam status PENDING dalam antrean untuk satu tabel. Error ini biasanya terjadi saat Anda mengirimkan tugas DML terhadap satu tabel lebih cepat daripada yang dapat diproses BigQuery.
Untuk memeriksa tugas dalam status PENDING yang mengisi antrean bersama dengan tugas RUNNING yang mungkin memblokirnya agar tidak keluar dari antrean, buat kueri tampilan INFORMATION_SCHEMA.JOBS:
SELECT
project_id,
job_id,
creation_time,
user_email,
statement_type,
state
FROM
`region-us`.INFORMATION_SCHEMA.JOBS
WHERE
statement_type IN ('UPDATE', 'DELETE', 'MERGE')
AND state IN ('RUNNING', 'PENDING')
ORDER BY
creation_time DESC;
Salah satu solusi yang memungkinkan adalah mengelompokkan beberapa operasi DML yang lebih kecil ke dalam tugas yang lebih besar, tetapi lebih sedikit—misalnya, dengan mengelompokkan update dan penyisipan. Saat Anda mengelompokkan tugas yang lebih kecil ke dalam tugas yang lebih besar, biaya untuk menjalankan tugas yang lebih besar akan diamortisasi dan eksekusinya akan lebih cepat. Menggabungkan pernyataan DML yang memengaruhi data yang sama umumnya meningkatkan efisiensi tugas DML, dan cenderung tidak melebihi batas kuota ukuran antrean. Untuk mengetahui informasi selengkapnya tentang cara mengoptimalkan operasi DML, lihat Menghindari pernyataan DML yang memperbarui atau menyisipkan baris tunggal.
Solusi lain untuk meningkatkan efisiensi DML Anda adalah dengan mempartisi atau mengelompokkan tabel Anda. Untuk mengetahui informasi selengkapnya, baca Praktik terbaik.
Error 403 Quota Exceeded
String error: 403 Quota exceeded: Your table exceeded quota for total number of
DML jobs writing to a table, pending + running.
Error ini terjadi jika jumlah total tugas DML (INSERT, UPDATE,
DELETE, dan MERGE) yang menulis ke satu tabel—dalam status PENDING dan RUNNING—melebihi kuota konkurensi tabel.
Meskipun error limit is 20 secara khusus membatasi antrean PENDING untuk pernyataan DML yang bermutasi (UPDATE, DELETE, dan MERGE), error 403 Quota
exceeded ini berlaku untuk total gabungan semua tugas DML (INSERT plus DML yang bermutasi) yang menulis ke tabel secara bersamaan. Karena DML yang bermutasi sudah dibatasi oleh batas antrean 20 tugas, error kuota 403 ini paling sering terjadi saat Anda mengirimkan terlalu banyak kueri INSERT serentak terhadap satu tabel. Untuk
mengatasi error ini, lakukan hal berikut:
- Tingkatkan Slot Pemesanan: Tingkatkan jumlah slot dalam pemesanan Anda untuk membantu tugas selesai lebih cepat dan mengurangi konkurensi tugas. Tindakan ini akan mengurangi jumlah tugas yang tertunda dalam antrean dan membantu menghindari tercapainya batas.
- Optimalkan Orkestrasi Alur Kerja: Batasi jumlah tugas DML serentak
di alat orkestrasi Anda untuk menghindari terlampauinya batas konkurensi tingkat tabel
(termasuk kueri
INSERTfrekuensi tinggi yang menargetkan tabel yang sama). - Operasi DML Batch: Gabungkan beberapa pernyataan DML yang lebih kecil menjadi lebih sedikit pernyataan yang lebih besar untuk mengurangi jumlah total tugas yang diantrekan terhadap tabel.
Transaksi dibatalkan karena update serentak
String error: Transaction is aborted due to concurrent update against table [table_name]
Error ini dapat terjadi saat dua pernyataan DML yang bermutasi berbeda mencoba memperbarui tabel yang sama secara serentak. Misalnya, Anda memulai transaksi dalam sesi yang berisi pernyataan DML yang bermutasi, diikuti dengan error. Jika tidak ada pengendali pengecualian, BigQuery akan otomatis me-roll back transaksi saat sesi berakhir, yang memerlukan waktu hingga 24 jam. Selama waktu ini, upaya lain untuk menjalankan pernyataan DML bermutasi pada tabel akan gagal.
Untuk mengatasi error ini,
cantumkan sesi aktif Anda dan periksa
apakah ada yang berisi tugas kueri dengan status ERROR yang menjalankan
pernyataan DML yang bermutasi pada tabel. Kemudian, hentikan sesi tersebut.
Error 412: Tugas mereferensikan tabel yang termasuk dalam set data failover
String error: Error 412: The job references a table that belongs to a failover dataset in the ... region (PROJECT_ID:DATASET_ID). However, only jobs that run on a reservation with the "ENTERPRISE_PLUS" edition can modify or write to failover datasets. Please also make sure that the job that is writing to the failover dataset is running in the current primary location.
Artinya, tugas tidak dijalankan di edisi BigQuery Enterprise Plus, atau tugas dijalankan di region selain lokasi utama set data failover. Lihat disaster recovery terkelola untuk mengetahui detail selengkapnya.
Terjadi error saat memuat tampilan saat menggunakan hasil yang di-cache
String error: BigQuery data export: There was an error loading this view. IAM
setPolicy failed for Dataset <PROJECT_ID>. One or more users named in the policy
do not belong to a permitted customer.
Error ini menunjukkan bahwa ID pelanggan Google Workspace Anda belum
diberi akses dalam batasan kebijakan organisasi Anda. Untuk mengetahui informasi tentang
cara menggunakan batasan iam.allowedPolicyMemberDomains, lihat
Menggunakan batasan iam.allowedPolicyMemberDomains untuk menerapkan berbagi yang dibatasi
domain.
Error legacy SQL
Error berikut dapat muncul saat menggunakan legacy SQL.
Cannot be queried with legacy SQL
String error: cannot be queried with legacy SQL. Please consider switching to standard SQL
Error ini dapat terjadi dalam salah satu dari dua skenario:
Kueri ditulis dalam SQL standar, tetapi opsi untuk menggunakan legacy SQL secara eksplisit telah disediakan. Pastikan untuk menjalankan kueri Anda menggunakan SQL standar dengan mengikuti dokumentasi publik , misalnya, dengan menyediakan
--use_legacy_sql=falsemenggunakan alat command line bq.Anda mencoba membuat kueri tabel dengan pemeriksaan menggunakan legacy SQL, yang tidak didukung.
Tabel dengan kolom yang diganti namanya tidak dapat dikueri dengan legacy SQL
String error: Table project:dataset.table with renamed columns cannot be queried with legacy SQL. Please consider switching to standard SQL or dropping column my_column
Error ini terjadi jika Anda mengkueri tabel dengan kolom yang diganti namanya menggunakan legacy SQL. Gunakan SQL standar sebagai gantinya.
Pengguna tidak memiliki izin
String error:
Access Denied: Project [project_id]: User does not have bigquery.jobs.create permission in project [project_id].User does not have permission to query table project-id:dataset.table.Access Denied: User does not have permission to query table or perhaps it does not exist.
Error ini dapat terjadi saat Anda menjalankan kueri tanpa izin bigquery.jobs.create
pada project tempat Anda menjalankan kueri, terlepas dari
izin Anda pada project yang berisi data.
Anda juga dapat menerima error ini jika akun layanan, pengguna, atau grup Anda tidak memiliki izin bigquery.tables.getData pada semua tabel dan tampilan yang dirujuk oleh kueri Anda. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan untuk menjalankan kueri, lihat Peran yang diperlukan.
Error ini juga dapat terjadi jika tabel tidak ada di region yang dikueri, seperti asia-south1. Anda dapat memverifikasi region dengan memeriksa lokasi set data.
Saat mengatasi error ini, pertimbangkan hal berikut:
Akun layanan: Akun layanan harus memiliki izin
bigquery.jobs.createpada project tempat akun tersebut dijalankan, dan harus memiliki izinbigquery.tables.getDatapada semua tabel dan tampilan yang direferensikan oleh kueri.Peran khusus: Peran IAM khusus harus memiliki izin
bigquery.jobs.createyang disertakan secara eksplisit dalam peran yang relevan, dan harus memiliki izinbigquery.tables.getDatapada semua tabel dan tampilan yang dirujuk oleh kueri.Set data bersama: Saat menggunakan set data bersama dalam project terpisah, Anda mungkin masih memerlukan izin
bigquery.jobs.createdalam project untuk menjalankan kueri atau tugas dalam set data tersebut.
Untuk memberikan izin akses ke tabel atau tampilan, lihat Memberikan akses ke tabel atau tampilan.
Izin bigquery.reservations.use ditolak pada pemesanan
String error:
Access Denied: Reservation projects/project/locations/region/reservations/reservation_name: Permission bigquery.reservations.use denied on reservation projects/project/locations/region/reservations/reservation_name (or it may not exist)
Error ini terjadi saat kueri ditetapkan untuk dijalankan dalam pemesanan tertentu menggunakan pernyataan SET @@reservation dan pengguna atau akun layanan tidak memiliki izin bigquery.reservations.use. Anda dapat memeriksa kegagalan di Cloud Logging atau halaman tugas BigQuery untuk mengidentifikasi akun utama mana yang mencoba melakukan operasi ini.
Error Access Denied lainnya
String error:
Access Denied: Dataset project_id:dataset_id: Permission bigquery.datasets.get denied on dataset project_id:dataset_id (or it may not exist).Access Denied: Dataset project_id:dataset_id: Permission bigquery.datasets.update denied on dataset project_id:dataset_id (or it may not exist).Access Denied: BigQuery BigQuery: User does not have permission to access data protected by policy tag
Untuk memecahkan masalah error Access Denied umum di BigQuery, gunakan
Penganalisis Kebijakan untuk
menentukan akses yang dimiliki akun utama pada resource.
Di Penganalisis Kebijakan, berikan resource BigQuery
yang ingin Anda akses (misalnya, //bigquery.googleapis.com/projects/YOUR_PROJECT/datasets/YOUR_DATASET/tables/YOUR_TABLE)
dan email pengguna atau akun layanan yang mendapatkan error Access Denied
sebagai entitas. Analisis ini menunjukkan izin akun utama pada resource, yang dapat Anda bandingkan dengan izin yang tidak ada dalam pesan error.
Enkripsi tujuan tidak didukung untuk skrip
String error: configuration.query.destinationEncryptionConfiguration cannot be set for scripts
Error ini terjadi saat mencoba menetapkan konfigurasi enkripsi tujuan untuk tugas skrip BigQuery, yang tidak didukung.
Akses ditolak oleh kebijakan organisasi
String error:
IAM setPolicy failed for Dataset DATASET: Operation
denied by org policy on resource.
Error ini terjadi saat kebijakan organisasi mencegah akun utama mengkueri resource BigQuery. Layanan Kebijakan Organisasi memungkinkan Anda menerapkan batasan pada resource yang didukung di seluruh hierarki organisasi Anda.
Jika akun utama seharusnya memiliki akses ke resource, Anda harus menggunakan alat pemecahan masalah VPC yang tersedia untuk mendiagnosis masalah pada kebijakan organisasi Anda.
Masalah resource terlampaui
Masalah berikut terjadi saat BigQuery tidak memiliki resource yang cukup untuk menyelesaikan kueri Anda.
Kueri melebihi resource CPU
String error: Query exceeded resource limits. This query used
CPU_SECONDS_USED CPU seconds but would charge only
ANALYSIS_MEGABYTES_BILLEDM Analysis bytes. This exceeds the ratio
supported by the on-demand pricing model. Please consider moving this workload
to a capacity-based pricing model, which does not have this limit.
CPU_SECONDS_USED CPU seconds were used, and this query must use less
than CPU_SECONDS_LIMIT CPU seconds.
Error ini (billingTierLimitExceeded) terjadi saat kueri yang menggunakan harga on-demand melebihi batas penggunaan CPU maksimum per data yang dipindai sekitar 256 detik CPU per MiB data yang dipindai. Hal ini terjadi saat kueri on-demand menjalankan operasi yang menggunakan banyak CPU—seperti operasi CROSS
JOIN tanpa batasan, kondisi join yang tidak tepat, ekspresi reguler yang kompleks, fungsi jendela analisis yang tidak dipartisi, atau UDF JavaScript yang berat secara komputasi—pada jumlah data yang dipindai yang relatif kecil.
Untuk mengatasi error ini, lakukan salah satu tindakan berikut:
- Optimalkan kueri. Lakukan refaktorisasi SQL Anda untuk mengurangi overhead komputasi yang terkait dengan data yang dipindai, seperti dengan menghapus Cartesian product yang tidak diinginkan (operasi
CROSS JOINtanpa pemfilteran), mengganti predikat join yang tidak tepat, menyederhanakan ekspresi reguler yang kompleks, menambahkan klausaPARTITION BYke fungsi jendela pada jendela besar yang tidak dipartisi, atau mengoptimalkan UDF JavaScript. Untuk mengetahui informasi selengkapnya, lihat Menghindari pola anti-SQL, Pengantar pengoptimalan performa kueri, dan Memecahkan masalah resource yang melebihi batas. - Beralih ke harga berdasarkan kapasitas. Jalankan workload menggunakan harga berbasis kapasitas (slot). Dalam harga berbasis kapasitas, kueri tidak tunduk pada batas rasio CPU terhadap byte on-demand.
Kueri melebihi resource memori
String error: Resources exceeded during query execution: The query could not be executed in the allotted memory
Untuk pernyataan SELECT, error ini terjadi saat kueri menggunakan terlalu banyak resource.
Untuk mengatasi error ini, lihat Memecahkan masalah resource melebihi batas.
Ruang stack habis
String error: Out of stack space due to deeply nested query expression during query resolution.
Error ini dapat terjadi jika kueri berisi terlalu banyak panggilan fungsi bertingkat.
Terkadang, bagian kueri diterjemahkan ke panggilan fungsi selama penguraian.
Misalnya, ekspresi dengan operator penyambungan berulang, seperti A || B || C || ...CONCAT(A, CONCAT(B, CONCAT(C, ...)))
Untuk mengatasi error ini, tulis ulang kueri Anda untuk mengurangi jumlah bertingkat.
Resource terlampaui selama eksekusi kueri
String error: Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: [percentage]% of limit. Top memory consumer(s): ORDER BY operations.
Hal ini dapat terjadi pada kueri ORDER BY ... LIMIT ... OFFSET .... Karena detail implementasi, pengurutan mungkin terjadi pada satu unit komputasi, yang dapat kehabisan memori jika perlu memproses terlalu banyak baris sebelum LIMIT dan OFFSET diterapkan, terutama dengan OFFSET yang besar.
Untuk mengatasi error ini, hindari nilai OFFSET yang besar dalam kueri ORDER BY ... LIMIT. Atau, gunakan fungsi jendela ROW_NUMBER() yang skalabel untuk menetapkan peringkat berdasarkan urutan yang dipilih, lalu filter peringkat ini dalam klausa WHERE. Contoh:
SELECT ...
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ...) AS rn
FROM ...
)
WHERE rn > @start_index AND rn <= @page_size + @start_index -- note that row_number() starts with 1
Worker TensorFlow kehabisan memori
String error: Resources exceeded during query execution: TensorFlow worker out
of memory.
Model yang melebihi batas memori (biasanya 250 MB), terutama saat menggunakan fungsi yang memerlukan banyak resource seperti ML.EXPLAIN_PREDICT, dapat memicu error ini.
Untuk mengatasi error ini, lakukan hal berikut:
Menggunakan model jarak jauh Gemini Enterprise Agent Platform: Untuk model yang melebihi batas memori, deploy model Anda ke Agent Platform menggunakan langkah-langkah Vertex AI SDK for Python untuk men-deploy model, lalu akses menggunakan model jarak jauh. Hal ini memindahkan persyaratan memori ke infrastruktur Agent Platform khusus.
Optimalkan model: Kurangi jejak RAM model dengan menggunakan penyederhanaan, kuantisasi, atau pemangkasan arsitektur.
Gunakan fungsi yang tidak terlalu intensif: Jika error terjadi selama panggilan
ML.EXPLAIN_PREDICT, coba jalankan tugas denganML.PREDICTuntuk menentukan apakah model dapat dijalankan tanpa overhead tambahan dari fitur penjelasan.Menganalisis ukuran data input: Baris individual yang besar dapat menyebabkan kehabisan memori. Periksa ukuran baris terbesar Anda menggunakan:
SELECT BYTE_LENGTH(TO_JSON_STRING(t)) AS row_size FROM your_table AS t ORDER BY row_size DESC LIMIT 10
Kueri melebihi resource shuffle
String error: Resources exceeded during query execution: Your project or organization exceeded the maximum disk and memory limit available for shuffle operations
Error ini terjadi saat kueri tidak dapat mengakses resource acak yang memadai.
Untuk mengatasi error ini, sediakan lebih banyak slot atau kurangi jumlah data yang diproses oleh kueri. Untuk mengetahui informasi selengkapnya tentang cara melakukannya, lihat Kuota acak tidak memadai.
Jika menggunakan model harga on-demand, Anda dibatasi hingga maksimum 2.000 slot. Untuk meningkatkan jumlah slot, Anda harus beralih ke model harga berbasis kapasitas.
Untuk mengetahui informasi tambahan tentang cara menyelesaikan masalah ini, lihat Memecahkan masalah resource yang melebihi batas.
Kueri terlalu rumit
String error: Resources exceeded during query execution: Not enough resources for query planning - too many subqueries or query is too complex
Error ini terjadi jika kueri terlalu kompleks. Penyebab utama kompleksitas adalah:
- Klausul
WITHyang bertingkat banyak atau digunakan berulang kali. - Tampilan yang bertingkat banyak atau digunakan berulang kali.
- Penggunaan berulang operator
UNION ALL.
Untuk mengatasi error ini, coba opsi berikut:
- Pisahkan kueri menjadi beberapa kueri, lalu gunakan bahasa prosedur untuk menjalankan kueri tersebut secara berurutan dengan status bersama.
- Gunakan tabel sementara, bukan klausa
WITH. - Tulis ulang kueri Anda untuk mengurangi jumlah objek yang direferensikan dan perbandingan.
Anda dapat memantau kueri yang mendekati batas kompleksitas secara proaktif
menggunakan kolom query_info.resource_warning dalam
tampilan INFORMATION_SCHEMA.JOBS.
Contoh berikut menampilkan kueri dengan penggunaan resource yang tinggi selama
tiga hari terakhir:
SELECT
ANY_VALUE(query) AS query,
MAX(query_info.resource_warning) AS resource_warning
FROM
<your_project_id>.`region-us`.INFORMATION_SCHEMA.JOBS
WHERE
creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 3 DAY)
AND query_info.resource_warning IS NOT NULL
GROUP BY
query_info.query_hashes.normalized_literals
LIMIT
1000
Untuk mengetahui informasi tambahan tentang cara menyelesaikan masalah ini, lihat Memecahkan masalah resource yang melebihi batas.
Memecahkan masalah resource yang melebihi batas
Untuk tugas kueri:
Untuk mengoptimalkan kueri Anda, coba langkah-langkah berikut:
- Coba hapus klausa
ORDER BY. - Jika kueri Anda menggunakan
JOIN, pastikan tabel yang lebih besar berada di sisi kiri klausa. Pastikan juga data Anda tidak berisi kunci gabungan duplikat. - Jika kueri Anda menggunakan
FLATTEN, tentukan apakah kueri ini diperlukan untuk kasus penggunaan Anda. Untuk informasi selengkapnya, lihat data bertingkat dan berulang. - Jika kueri Anda menggunakan
EXACT_COUNT_DISTINCT, pertimbangkan untuk menggunakanCOUNT(DISTINCT). - Jika kueri Anda menggunakan
COUNT(DISTINCT <value>, <n>)dengan nilai<n>yang besar, sebaiknya gunakanGROUP BY. Untuk mengetahui informasi selengkapnya, lihatCOUNT(DISTINCT). - Jika kueri Anda menggunakan
UNIQUE, pertimbangkan untuk menggunakanGROUP BY, atau fungsi jendela di dalam subpilihan. - Jika kueri Anda mewujudkan banyak baris menggunakan klausa
LIMIT, pertimbangkan untuk memfilter kolom lain, misalnyaROW_NUMBER(), atau menghapus klausaLIMITsepenuhnya untuk memungkinkan paralelisasi penulisan. - Jika kueri Anda menggunakan tampilan bertingkat yang dalam dan klausa
WITH, hal ini dapat menyebabkan pertumbuhan eksponensial dalam kompleksitas, sehingga mencapai batasnya. - Gunakan tabel sementara, bukan klausa
WITH. KlausaWITHmungkin harus dihitung ulang beberapa kali, yang dapat membuat kueri menjadi kompleks dan lambat. Mempertahankan hasil perantara dalam tabel sementara justru mengurangi kompleksitas. - Hindari penggunaan kueri
UNION ALL. - Jika kueri Anda menggunakan
MATCH_RECOGNIZE, ubah klausaPARTITION BYuntuk mengurangi ukuran partisi, atau tambahkan klausaPARTITION BYjika belum ada.
Untuk informasi selengkapnya, lihat referensi berikut:
- Mengoptimalkan komputasi kueri.
- Dapatkan detail selengkapnya tentang peringatan resource
- Memantau respons, pemanfaatan resource, dan tugas
Untuk tugas pemuatan:
Jika Anda memuat file Avro atau Parquet, kurangi ukuran baris dalam file. Periksa batasan ukuran tertentu untuk format file yang sedang Anda muat:
Jika Anda mendapatkan pesan error ini saat memuat file ORC, hubungi Dukungan.
Untuk Storage API:
String error: Stream memory usage exceeded
Selama panggilan ReadRows Storage Read API, beberapa aliran data dengan penggunaan memori yang tinggi mungkin mendapatkan error RESOURCE_EXHAUSTED dengan pesan ini.
Hal ini dapat terjadi saat membaca dari tabel lebar atau tabel dengan skema yang kompleks. Sebagai penyelesaian,
kurangi ukuran baris hasil dengan memilih lebih sedikit kolom untuk
dibaca (menggunakan
parameter selected_fields),
atau dengan menyederhanakan skema tabel.
Memecahkan masalah konektivitas
Bagian berikut menjelaskan cara memecahkan masalah konektivitas saat mencoba berinteraksi dengan BigQuery:
Mengizinkan DNS Google
Gunakan alat Google IP Dig untuk me-resolve endpoint DNS BigQuery bigquery.googleapis.com ke satu IP data 'A'. Pastikan IP ini tidak diblokir di setelan firewall Anda.
Secara umum, sebaiknya izinkan nama DNS Google. Rentang IP yang dibagikan dalam file https://www.gstatic.com/ipranges/goog.json dan https://www.gstatic.com/ipranges/cloud.json sering berubah; oleh karena itu, sebaiknya izinkan nama DNS Google. Berikut daftar nama DNS umum yang sebaiknya ditambahkan ke daftar yang diizinkan:
*.1e100.net*.google.com*.gstatic.com*.googleapis.com*.googleusercontent.com*.appspot.com*.gvt1.com
Mengidentifikasi proxy atau firewall yang menghapus paket
Untuk mengidentifikasi semua hop paket antara klien dan Google Front End (GFE), jalankan perintah traceroute di komputer klien Anda yang dapat menandai server yang menghapus paket yang diarahkan ke GFE. Berikut adalah contoh perintah traceroute:
traceroute -T -p 443 bigquery.googleapis.com
Anda juga dapat mengidentifikasi hop paket untuk alamat IP GFE tertentu jika masalahnya terkait dengan alamat IP tertentu:
traceroute -T -p 443 142.250.178.138
Jika ada masalah waktu tunggu di sisi Google, Anda akan melihat permintaan tersebut sampai ke GFE.
Jika Anda melihat bahwa paket tidak pernah mencapai GFE, hubungi administrator jaringan Anda untuk menyelesaikan masalah ini.
Membuat file PCAP dan menganalisis firewall atau proxy Anda
Buat file pengambilan paket (PCAP) dan analisis file tersebut untuk memastikan firewall atau proxy tidak memfilter paket ke IP Google dan mengizinkan paket mencapai GFE.
Berikut adalah contoh perintah yang dapat dijalankan dengan alat tcpdump:
tcpdump -s 0 -w debug.pcap -K -n host bigquery.googleapis.com
Menyiapkan percobaan ulang untuk masalah konektivitas yang terputus-putus
Ada situasi saat load balancer GFE mungkin menghentikan koneksi dari IP klien - misalnya, jika mendeteksi pola traffic DDoS, atau jika instance load balancer sedang diperkecil skalanya, yang dapat menyebabkan IP endpoint didaur ulang. Jika load balancer GFE menghentikan koneksi, klien harus menangkap permintaan yang waktu tunggunya habis dan mencoba lagi permintaan ke endpoint DNS. Pastikan Anda tidak menggunakan alamat IP yang sama hingga permintaan akhirnya berhasil, karena alamat IP mungkin telah berubah.
Jika Anda telah mengidentifikasi masalah terkait waktu tunggu yang konsisten di sisi Google dan percobaan ulang tidak membantu, hubungi Cloud Customer Care dan pastikan untuk menyertakan file PCAP baru yang dihasilkan dengan menjalankan alat penangkapan paket seperti tcpdump.
Langkah berikutnya
- Mendapatkan insight performa kueri.
- Pelajari lebih lanjut cara mengoptimalkan kueri untuk performa.
- Tinjau kuota dan batas untuk kueri.
- Pelajari lebih lanjut pesan error BigQuery lainnya.