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:

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 menggunakan COUNT(DISTINCT).
  • Jika kueri Anda menggunakan COUNT(DISTINCT <value>, <n>) dengan nilai <n> yang besar, sebaiknya gunakan GROUP BY. Untuk informasi selengkapnya, lihat COUNT(DISTINCT).
  • Jika kueri Anda menggunakan UNIQUE, sebaiknya gunakan GROUP BY, atau fungsi jendela di dalam sub-pilihan.
  • Jika kueri Anda mewujudkan banyak baris menggunakan klausa LIMIT, pertimbangkan untuk memfilter di kolom lain, misalnya ROW_NUMBER(), atau menghapus klausa LIMIT 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:

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