Topik ini menjelaskan sintaks pernyataan INSERT INTO yang digunakan untuk menyisipkan data ke dalam tabel di ApsaraDB for ClickHouse.
Sintaks
Kode berikut menunjukkan sintaks pernyataan INSERT INTO:
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
Untuk bidang yang didefinisikan dalam skema tabel tetapi tidak ditentukan dalam pernyataan INSERT INTO, sistem mengisi bidang tersebut berdasarkan aturan berikut:
- Jika ekspresi didefinisikan untuk nilai default dari bidang tersebut, sistem menghitung nilai default menggunakan ekspresi ini dan kemudian menyisipkan nilai default ke dalam bidang tersebut.
- Jika tidak ada ekspresi yang didefinisikan untuk nilai default dari bidang tersebut, sistem menyisipkan 0 atau string kosong ke dalam bidang tersebut.
Menggunakan klausa SELECT dalam pernyataan INSERT INTO
Kode berikut menunjukkan sintaks:
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
Data dalam bidang yang di-query dalam klausa SELECT disisipkan ke dalam bidang yang ditentukan dalam pernyataan INSERT INTO secara berurutan. Nama dari dua set bidang tidak harus sama. Sistem mengonversi tipe data dari bidang sesuai kebutuhan.
Kecuali untuk tipe VALUES, semua tipe data lainnya tidak mendukung ekspresi seperti now() dan 1 + 2. Tipe VALUES memungkinkan Anda menggunakan ekspresi semacam itu. Namun, kami menyarankan agar Anda tidak menggunakan ekspresi ini karena eksekusi ekspresi ini tidak efisien.
Saran untuk memastikan kinerja tinggi pernyataan INSERT INTO
Ketika sistem mengeksekusi pernyataan INSERT INTO, sistem memproses data yang akan disisipkan. Misalnya, sistem mengurutkan data berdasarkan kunci utama atau mempartisi data berdasarkan bulan. Jika data yang akan disisipkan mencakup beberapa bulan, kinerja pernyataan INSERT INTO akan terganggu secara signifikan. Untuk mencegah masalah ini, Anda dapat mengambil langkah-langkah berikut:
- Selalu tulis sejumlah besar data sekaligus. Sebagai contoh, Anda bisa menulis 100.000 baris data setiap kali.
- Kelompokkan data sebelum menulis data ke kluster ApsaraDB for ClickHouse.
Dalam skenario berikut, kinerja pernyataan INSERT INTO tidak terpengaruh:
- Data selalu ditulis secara real-time.
- Data yang akan ditulis sudah diurutkan berdasarkan waktu.