Memecahkan masalah error kueri
Dokumen ini dimaksudkan untuk membantu Anda memecahkan masalah error paling umum yang muncul oleh kueri yang gagal.
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 dapat terjadi saat memutasi pernyataan bahasa manipulasi data (DML) yang berjalan serentak pada tabel yang sama saling bertentangan, atau saat tabel terpotong selama pernyataan DML yang bermutasi. Untuk mengetahui informasi selengkapnya, lihat Konflik pernyataan DML.
Untuk mengatasi error ini, jalankan operasi DML yang memengaruhi satu tabel agar tidak tumpang tindih.
Izin kontrol akses tingkat kolom tidak memadai
String error: Requires raw access permissions on the read columns to execute the DML statements
Error ini terjadi saat Anda mencoba pernyataan DML DELETE
, UPDATE
, atau MERGE
, tanpa memiliki izin Fine-Grained Reader di kolom terpindai yang menggunakan kontrol akses tingkat kolom untuk membatasi akses di tingkat kolom. Untuk mengetahui informasi selengkapnya, lihat
Dampak terhadap penulisan dari kontrol akses tingkat kolom.
Kredensial untuk kueri terjadwal tidak valid
String error:
Error code: INVALID_USERID
Error code 5: Authentication failure: User Id not found
PERMISSION_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, 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.
Lowongan sudah ada
String error: Already Exists: Job <job name>
Error ini dapat terjadi pada tugas kueri yang harus mengevaluasi array besar, sehingga
memerlukan 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
jobId
acak, bukan menentukannya. - Gunakan kueri berparameter untuk memuat array.
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.
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.
Respons kueri terlalu besar
String error: responseTooLarge
Error ini terjadi jika hasil kueri Anda lebih besar dari ukuran respons maksimum.
Untuk mengatasi error ini, ikuti panduan yang disediakan untuk
pesan error responseTooLarge
.
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 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.
Salah satu solusi yang memungkinkan adalah mengelompokkan beberapa operasi DML yang lebih kecil ke dalam tugas yang lebih besar tetapi lebih sedikit. 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 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.
Masalah resource terlampaui
Masalah berikut terjadi ketika BigQuery tidak memiliki cukup resource untuk menyelesaikan kueri Anda.
Kueri melebihi resource CPU
String error: Query exceeded resource limits
Error ini terjadi saat kueri on-demand menggunakan terlalu banyak CPU dibandingkan dengan jumlah data yang dipindai. Untuk mengetahui informasi tentang cara menyelesaikan masalah ini, lihat Memecahkan masalah resource yang terlampaui.
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 yang terlampaui.
Kueri melampaui pengacakan resource
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.
Untuk mengetahui informasi tambahan tentang cara menyelesaikan masalah ini, lihat Memecahkan masalah resource yang terlampaui.
Kueri terlalu kompleks
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
WITH
yang 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.
Untuk mengetahui informasi tambahan tentang cara menyelesaikan masalah ini, lihat Memecahkan masalah resource yang terlampaui.
Memecahkan masalah resource terlampaui
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 sebelah kiri klausa. - 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 informasi selengkapnya, lihatCOUNT(DISTINCT)
. - Jika kueri Anda menggunakan
UNIQUE
, sebaiknya gunakanGROUP BY
, atau fungsi jendela di dalam sub-pilihan. - Jika kueri Anda mewujudkan banyak baris menggunakan klausa
LIMIT
, pertimbangkan untuk memfilter di kolom lain, misalnyaROW_NUMBER()
, atau menghapus klausaLIMIT
sepenuhnya untuk memungkinkan paralelisasi penulisan. - Jika kueri Anda menggunakan tampilan bertingkat yang dalam dan klausa
WITH
, hal ini dapat menyebabkan pertumbuhan kompleksitas yang eksponensial, sehingga mencapai batasnya. - Jangan ganti tabel sementara dengan klausa
WITH
. Klausa ini mungkin harus dihitung ulang beberapa kali, yang dapat membuat kueri menjadi kompleks dan lambat. Mempertahankan hasil perantara dalam tabel sementara akan membantu kompleksitas - Hindari penggunaan kueri
UNION ALL
.
Untuk informasi selengkapnya, lihat resource berikut:
- Optimalkan komputasi kueri.
- Mendapatkan detail selengkapnya tentang peringatan resource
- Memantau kondisi kesehatan, penggunaan resource, dan pekerjaan
Untuk tugas pemuatan:
Jika Anda memuat file Avro atau Parquet, kurangi ukuran baris dalam file. Periksa batasan ukuran tertentu untuk format file yang 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
tinggi mungkin mendapatkan error RESOURCE_EXHAUSTED
dengan pesan ini.
Hal ini dapat terjadi saat membaca dari tabel atau tabel lebar dengan skema yang kompleks. Sebagai resolusi,
kurangi ukuran baris hasil dengan memilih lebih sedikit kolom untuk
dibaca (menggunakan
parameter selected_fields
),
atau dengan menyederhanakan skema tabel.
Langkah selanjutnya
- Mendapatkan insight performa kueri.
- Pelajari lebih lanjut cara mengoptimalkan kueri untuk performa.
- Tinjau kuota dan batas untuk kueri.
- Pelajari pesan error BigQuery lainnya lebih lanjut.