All Products
Search
Document Center

AnalyticDB:Writes and queries

Last Updated:Aug 25, 2026

Topik ini menjawab pertanyaan yang sering diajukan mengenai operasi write dan query di AnalyticDB for MySQL.

Catatan

Jika edisi produk tidak disebutkan dalam suatu pertanyaan, jawaban hanya berlaku untuk AnalyticDB for MySQL Data Warehouse Edition dan Enterprise Edition.

Ikhtisar FAQ

Apakah kluster Enterprise Edition, Basic Edition, dan Data Lakehouse Edition mendukung peng-query-an data dari tabel Hudi melalui JDBC?

Ya. Setelah Anda membuat tabel Hudi di kluster Enterprise Edition, Basic Edition, atau Data Lakehouse Edition, Anda dapat langsung meng-query tabel Hudi tersebut menggunakan JDBC.

Apakah kluster Enterprise Edition, Basic Edition, dan Data Lakehouse Edition mendukung pembacaan data tabel Hudi dari OSS?

Ya. Untuk informasi lebih lanjut tentang membaca data dari tabel Hudi di OSS menggunakan tabel eksternal, lihat Gunakan tabel eksternal untuk mengimpor data ke kluster Data Lakehouse Edition.

Enterprise Edition, Basic Edition, dan Data Lakehouse Edition: Apakah kluster mendukung pengalihan otomatis antara job XIHE MPP dan job XIHE BSP?

Tidak. Saat Anda mengirimkan job, Anda harus secara manual menentukan apakah akan mengirimkan job ke kelompok sumber daya Interactive atau Job. Hal ini menentukan apakah job dijalankan sebagai job XIHE MPP atau job XIHE BSP.

Bagaimana memilih antara XIHE MPP dan XIHE BSP untuk menjalankan job pada kluster Enterprise Edition, Basic Edition, dan Data Lakehouse Edition?

Secara default, job XIHE BSP dikirimkan secara asinkron. Perbedaan antara pengiriman sinkron dan asinkron adalah apakah client harus menunggu hingga query selesai.

Pengiriman asinkron memiliki batasan berikut:

  • Set hasil dapat berisi maksimal 10.000 baris.

  • Maksimal 1.000 set hasil, termasuk tautan unduhan file CSV-nya, dapat disimpan selama maksimal 30 hari.

Kami merekomendasikan menggunakan pengiriman asinkron untuk query yang memiliki durasi eksekusi panjang dan beban komputasi tinggi tetapi menghasilkan set hasil kecil, seperti INSERT INTO SELECT, INSERT OVERWRITE SELECT, atau CREATE TABLE AS SELECT.

Kluster Enterprise Edition, Basic Edition, dan Data Lakehouse Edition: Cara melihat status job XIHE BSP?

  • Jika Anda mengirimkan job XIHE BSP menggunakan job editor di kluster Data Lakehouse Edition, buka halaman Job Editor > SQL Development dan lihat status job pada tab Execution Records di bagian bawah halaman.

  • Jika Anda tidak mengirimkan job XIHE BSP dari job editor, Anda dapat meng-query statusnya dari tabel sistem internal. Jalankan pernyataan berikut:

    SELECT status FROM information_schema.kepler_meta_elastic_job_list WHERE process_id='<job_id>';

    Untuk mendapatkan jumlah semua job XIHE BSP berdasarkan status, jalankan pernyataan berikut:

    SELECT status,count(*) FROM information_schema.kepler_meta_elastic_job_list GROUP BY status;

Isolasi resource untuk job SQL

Kluster Data Warehouse Edition (mode Elastic) dan kluster Enterprise Edition, Basic Edition, dan Data Lakehouse Edition mendukung kelompok sumber daya. Untuk informasi lebih lanjut tentang jenis kelompok sumber daya, lihat Ikhtisar kelompok sumber daya (Data Warehouse Edition) dan Ikhtisar kelompok sumber daya (Data Lakehouse Edition). Anda dapat membuat berbagai jenis kelompok sumber daya dan mengirimkan job SQL ke kelompok yang sesuai untuk mencapai isolasi resource.

Menangani terlalu banyak item dalam klausa IN

AnalyticDB for MySQL membatasi jumlah item dalam daftar IN. Secara default, batasannya adalah 2.000, tetapi Anda dapat menyesuaikan nilai ini.

Catatan

Jumlah item dalam daftar IN tidak boleh melebihi 5.000. Jumlah yang lebih besar dapat menurunkan kinerja.

Sebagai contoh, untuk mengatur batas menjadi 3.000, jalankan pernyataan berikut:

SET ADB_CONFIG max_in_items_count=3000;

Menangani error "Query exceeded maximum time limit"

Error ini terjadi karena query SQL melebihi timeout eksekusi default 1.800.000 ms (30 menit) yang ditetapkan di AnalyticDB for MySQL. Anda dapat mengonfigurasi timeout query untuk satu query atau untuk semua query di kluster:

  • Atur timeout untuk satu query.

    /*+ QUERY_TIMEOUT=xxx */SELECT count(*) FROM t;
  • Atur timeout untuk semua query di kluster.

    SET ADB_CONFIG QUERY_TIMEOUT=xxx;

    Untuk informasi lebih lanjut, lihat Parameter konfigurasi umum.

Menangani error kehabisan memori

Penyebab: Mungkin terdapat query SQL besar dan berdurasi panjang di kluster AnalyticDB for MySQL. Query-query ini mengonsumsi banyak memori, sehingga menyebabkan error kehabisan memori saat Anda mengirimkan query SQL baru.

Solusi: Tunggu beberapa menit, lalu jalankan kembali pernyataan SQL tersebut.

Menangani error "STORAGE_INDEX_ERROR"

Penyebab: Error ini disebabkan oleh cacat yang diketahui pada beberapa versi kernel AnalyticDB for MySQL versi awal. Dalam kondisi tertentu, cacat ini dapat menyebabkan inkonsistensi pada metadata indeks tabel. Akibatnya, indeks tidak ditemukan saat query dijalankan, sehingga memicu pengecualian STORAGE_INDEX_ERROR.

Solusi: Tingkatkan versi kernel kluster Anda. Masalah ini telah diperbaiki pada versi kernel yang lebih baru.

Penting
  • Durasi peningkatan: Peningkatan versi kernel biasanya memakan waktu sekitar 30 menit.

  • Gangguan layanan: Selama peningkatan, terjadi gangguan koneksi sementara selama beberapa detik.

  • Rekomendasi: Lakukan peningkatan selama jendela pemeliharaan terjadwal atau jam sepi. Pastikan aplikasi Anda memiliki mekanisme rekoneksi otomatis untuk menangani gangguan koneksi sementara tersebut dengan lancar.

Menangani error "multi-statement found"

Hanya kluster dengan versi kernel 3.1.9.3 atau lebih baru yang mendukung fitur multi-statement. Pertama, verifikasi bahwa versi kernel kluster Anda adalah 3.1.9.3 atau lebih baru. Jika versi kernel lebih lama dari 3.1.9.3, hubungi dukungan teknis untuk melakukan peningkatan. Jika versi kernel sudah 3.1.9.3 atau lebih baru tetapi error masih muncul, fitur multi-statement mungkin dinonaktifkan di sisi client.

Sebagai contoh, saat Anda menggunakan client JDBC MySQL untuk terhubung ke kluster, Anda tidak hanya harus menjalankan perintah SET ADB_CONFIG ALLOW_MULTI_QUERIES=true; untuk mengaktifkan fitur Multi-Statement secara manual, tetapi juga harus mengatur properti koneksi JDBC allowMultiQueries menjadi true.

Memecahkan masalah nilai waktu terpotong dalam hasil query

Pertama, verifikasi hasilnya menggunakan client MySQL. Jika nilai waktu ditampilkan dengan benar di client MySQL, kemungkinan masalah disebabkan oleh tool client lain yang memproses set hasil tersebut.

Memperbaiki error pada fungsi AES_ENCRYPT

Pernyataan berikut melaporkan error.

 SELECT CONVERT(AES_DECRYPT(AES_ENCRYPT('ABC123','key_string'),'key_string'),char(10));

Penyebab: Error terjadi karena tipe data argumen pertama x dalam fungsi AES_ENCRYPT(varbinary x, varchar y) harus berupa varbinary. Contoh berikut menunjukkan pernyataan yang valid:

SELECT CONVERT(AES_DECRYPT(AES_ENCRYPT(CAST('ABC123' AS VARBINARY), 'key_string'), 'key_string'),char(10)); 

Perubahan tidak terduga pada hasil query

Jika Anda memastikan bahwa data belum diperbarui, hasil query mungkin berubah secara tidak terduga karena alasan berikut:

  • Klausa LIMIT digunakan tanpa klausa ORDER BY. AnalyticDB for MySQL adalah database terdistribusi yang menjalankan query di banyak node dalam beberapa thread. Jika beberapa thread mengembalikan cukup baris untuk memenuhi klausa LIMIT, query akan dihentikan. Oleh karena itu, tanpa klausa ORDER BY, urutan hasil tidak dijamin karena sistem tidak dapat memastikan urutan respons thread yang tetap.

  • Dalam query agregat berkelompok, jika suatu bidang dalam daftar SELECT tidak berada dalam fungsi agregat dan tidak termasuk dalam klausa GROUP BY, nilai acak dari kelompok tersebut akan dikembalikan untuk bidang tersebut.

Jika masalah berlanjut, hubungi dukungan teknis.

Query ORDER BY yang lambat pada satu tabel

Penyebab: Data tidak diurutkan di lapisan penyimpanan dan disimpan secara tersebar. Hal ini dapat memicu banyak pembacaan data yang tidak perlu, sehingga meningkatkan waktu query.

Solusi: Buat indeks terkluster pada bidang yang ditentukan dalam klausa ORDER BY. Dengan indeks terkluster, data diurutkan sebagian di lapisan penyimpanan. Query ORDER BY kemudian membaca lebih sedikit data, sehingga meningkatkan kinerja. Untuk informasi lebih lanjut tentang cara membuat indeks terkluster, lihat Tambahkan indeks terkluster.

Catatan
  • Setiap tabel hanya mendukung satu indeks terkluster. Jika indeks terkluster sudah ada pada bidang lain, Anda harus menghapusnya sebelum membuat yang baru pada bidang yang ditentukan dalam klausa ORDER BY.

  • Setelah Anda menambahkan indeks terkluster ke tabel besar, waktu yang dibutuhkan untuk job BUILD meningkat, yang pada gilirannya memengaruhi pemanfaatan CPU pada node penyimpanan.

Ketidaksesuaian jumlah baris yang dipindai

Masalah ini biasanya disebabkan oleh tabel replikasi. Di AnalyticDB for MySQL, salinan tabel replikasi disimpan di setiap shard. Saat Anda meng-query tabel replikasi, jumlah baris yang dipindai dihitung berulang untuk setiap salinan.

Duplikasi data dengan INSERT OVERWRITE

Deduplikasi otomatis tidak didukung untuk tabel di AnalyticDB for MySQL yang tidak memiliki primary key.

Menangani error "Column not in GROUP BY clause"

Dalam query berkelompok, Anda tidak dapat menggunakan pernyataan query SELECT * FROM table GROUP BY key untuk mengambil semua bidang. Anda harus secara eksplisit mencantumkan semua bidang. Berikut adalah contoh SQL.

SELECT nation.name FROM nation GROUP BY nation.nationkey

Mengapa INSERT OVERWRITE SELECT tidak menimpa data di tabel asli?

Penyebab: Pernyataan INSERT OVERWRITE menimpa data berdasarkan partisi. Partisi baru menggantikan partisi lama yang memiliki nilai partisi yang sama. Jika hasil SELECT kosong, tidak ada partisi baru yang dibuat, sehingga data yang ada di tabel asli tidak tertimpa.

Solusi: Modifikasi pernyataan INSERT OVERWRITE SELECT untuk memastikan bahwa hasil SELECT tidak kosong sebelum menimpa data di tabel asli.

Batas jumlah nilai operator IN dalam hasil JSON

Untuk kluster AnalyticDB for MySQL dengan versi kernel 3.1.4 atau lebih lama, jumlah nilai yang ditentukan dalam operator IN tidak boleh melebihi 16. Untuk kluster dengan versi kernel lebih baru dari 3.1.4, tidak ada batasan. Untuk informasi tentang cara memeriksa versi kernel kluster Anda, lihat Lihat versi kernel kluster.

Menggunakan file CSV terkompresi GZIP dari OSS sebagai sumber data

AnalyticDB for MySQL mendukung penggunaan file CSV terkompresi GZIP dari OSS sebagai sumber data untuk tabel eksternal. Untuk melakukannya, Anda harus menambahkan compress_type=gzip ke definisi tabel eksternal. Untuk informasi lebih lanjut tentang sintaks tabel eksternal OSS, lihat Tabel eksternal OSS non-partisi.

Apakah INSERT ON DUPLICATE KEY didukung?

AnalyticDB for MySQL hanya mendukung pembaruan berdasarkan kesamaan nilai, bukan ekspresi aritmetika.

Menggunakan klausa JOIN dalam pernyataan UPDATE

Fitur ini hanya tersedia untuk kluster AnalyticDB for MySQL dengan versi kernel 3.1.6.4 atau lebih baru. Untuk informasi lebih lanjut, lihat UPDATE.

Dapatkah saya menetapkan variabel dalam pernyataan SQL?

AnalyticDB for MySQL tidak mendukung penetapan variabel dalam pernyataan SQL.

Dapatkah Anda menggunakan pernyataan INSERT ON DUPLICATE KEY UPDATE untuk memasukkan data secara batch dengan plugin Logstash?

Ya. Saat Anda menggunakan pernyataan INSERT ON DUPLICATE KEY UPDATE untuk memasukkan data secara batch, Anda tidak perlu menambahkan ON DUPLICATE KEY UPDATE setelah setiap pernyataan VALUES(). Anda hanya perlu menambahkannya setelah pernyataan VALUES() terakhir.

Sebagai contoh, untuk memasukkan 3 catatan secara batch ke tabel student_course, jalankan pernyataan berikut:

INSERT INTO student_course(`id`, `user_id`, `nc_id`, `nc_user_id`, `nc_commodity_id`, `course_no`, `course_name`, `business_id`)
VALUES(277943, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'Industrial Accounting Practice V9.0--77', 'kuaiji'),
(277944, 11056943, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'Industrial Accounting Practice V9.0--88', 'kuaiji'),
(277945, 11056944, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'Industrial Accounting Practice V9.0--99', 'kuaiji')
ON DUPLICATE KEY UPDATE
course_name = 'Industrial Accounting Practice V9.0--77',
business_id = 'kuaiji';

Prasyarat untuk memuat dataset bawaan

Kluster harus memiliki minimal 24 ACU sumber daya penyimpanan yang dipesan, dan kelompok sumber daya user_default harus memiliki minimal 16 ACU sumber daya komputasi yang dipesan.

Memverifikasi pemuatan set data bawaan

Anda dapat melihat progres pemuaian pada halaman Job Development > SQL Development. Dataset berhasil dimuat jika ikon 1 pada tombol Load Built-in Dataset berubah menjadi abu-abu, dan database ADB_SampleData_TPCH beserta tabel-tabelnya terlihat pada tab Databases and Tables.

Menangani kegagalan saat memuat dataset bawaan

Anda harus terlebih dahulu menjalankan pernyataan SQL DROP TABLE table_name; untuk menghapus semua tabel di database. Kemudian, jalankan pernyataan SQL DROP DATABASE ADB_SampleData_TPCH; untuk menghapus database dataset bawaan. Setelah database ADB_SampleData_TPCH dihapus, muat ulang dataset tersebut.

Menggunakan dataset bawaan dengan akun standar

Fitur dataset bawaan mengikuti aturan pengelolaan izin AnalyticDB for MySQL. Meskipun dataset bawaan telah dimuat ke kluster, akun database standar tidak dapat menggunakannya tanpa izin pada database ADB_SampleData_TPCH. Akun istimewa harus memberikan izin yang diperlukan kepada akun standar dengan menjalankan pernyataan berikut:

GRANT select ON ADB_SampleData_TPCH.* TO <user_name>;

Menguji dataset bawaan

Setelah dataset berhasil dimuat, AnalyticDB for MySQL menyediakan serangkaian skrip query yang sesuai. Pada halaman SQL Development, buka tab Scripts dan jalankan pernyataan query contoh. Untuk informasi lebih lanjut tentang query tersebut, lihat Query pengujian TPC-H.

Penting

Untuk memastikan integritas dataset, kami merekomendasikan hanya melakukan operasi baca pada database ADB_SampleData_TPCH. Jika status pemuaian dataset menjadi abnormal akibat perubahan DDL atau DML, hapus database ADB_SampleData_TPCH dan muat ulang dataset tersebut.