Pernyataan ALTER TABLE digunakan untuk memodifikasi skema tabel, seperti menambah atau menghapus kolom serta mengatur atribut tabel. Topik ini menjelaskan cara menggunakan pernyataan ALTER TABLE di LindormTable dan LindormTSDB.
Mesin dan versi
Sintaks ALTER TABLE dapat digunakan dengan LindormTable dan LindormTSDB di semua versi.
Catatan penggunaan
Operasi ALTER TABLE tidak mengunci tabel. Tabel tetap dapat dibaca dan ditulis selama operasi Data Definition Language (DDL). Namun, Anda mungkin mengalami error timeout, jitter ringan, atau gangguan karena alasan berikut:
Selama operasi DDL, setiap shard dimatikan lalu dibuka kembali untuk memuat ulang metadata. Proses ini berlangsung singkat, biasanya antara 10 ms hingga beberapa ratus milidetik. Jika permintaan dikirim ke shard saat sedang dibuka kembali, permintaan tersebut mungkin mengalami jitter ringan atau gangguan. Disarankan untuk menjalankan operasi DDL pada jam sepi.
Operasi DDL hanya mengembalikan hasil setelah semua shard dimodifikasi. Jika Anda menjalankan operasi DDL pada tabel besar, Anda mungkin mengalami error timeout jika periode timeout klien terlalu singkat. Namun, operasi DDL tetap berjalan di server hingga selesai.
Sintaks
alter_table_statement ::= ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=
add_column_list
| DROP COLUMN [ IF EXISTS ] column_name
| SET table_options
| COMPACT (idcName)?
add_column_list ::= ADD [COLUMN] column_def ( ',' ADD [COLUMN] column_def )*
column_def ::= column_name type [TAG]Perbedaan
Tabel berikut membandingkan perbedaan signifikan dalam sintaks ALTER TABLE antara LindormTable dan LindormTSDB.
Elemen sintaks | LindormTable | LindormTSDB |
ADD COLUMN | 〇 | 〇 |
COMPACT | 〇 Catatan Didukung oleh LindormTable 2.3.4 dan versi yang lebih baru. | ✖️ |
DROP COLUMN | 〇 Catatan Didukung oleh LindormTable 2.6.6 dan versi yang lebih baru. | ✖️ |
SET table_options | 〇 | ✖️ |
Penggunaan
ADD COLUMN (Tambah kolom)
LindormTable dan LindormTSDB sama-sama mendukung pernyataan ADD COLUMN.
Perhatikan aturan berikut saat menambahkan kolom:
Kolom baru tidak boleh menjadi primary key.
Untuk LindormTSDB, Anda hanya dapat menambahkan kolom tag (TAG) dan kolom field (FIELD). Kolom timestamp tidak dapat ditambahkan.
DROP COLUMN (Hapus kolom)
Hanya LindormTable 2.6.6 dan versi yang lebih baru yang mendukung DROP COLUMN.
Jika Anda tidak dapat melakukan upgrade instans ke LindormTable 2.6.6 atau versi yang lebih baru melalui Konsol, hubungi dukungan teknis Lindorm (DingTalk ID: s0s3eg3).
Operasi DROP COLUMN bersifat asinkron. Setelah pernyataan ALTER TABLE berhasil dieksekusi, sistem langsung menghapus kolom target. Namun, data dalam kolom tersebut hanya dihapus setelah sistem menyelesaikan operasi COMPACT. Untuk mempercepat proses pembersihan data, Anda dapat menjalankan operasi FLUSH dan COMPACT secara manual. Anda tidak dapat menambahkan kolom dengan nama yang sama hingga data benar-benar dihapus. Untuk informasi selengkapnya, lihat FAQ.
SET table_options (Atur atribut tabel)
Hanya LindormTable yang mendukung SET table_options.
Untuk daftar atribut tabel, lihat Atribut tabel. Anda dapat menjalankan pernyataan SHOW TABLE VARIABLES untuk memverifikasi bahwa atribut tabel telah diatur. Untuk informasi selengkapnya, lihat SHOW TABLE VARIABLES.
Perhatikan hal berikut saat memodifikasi atribut MUTABILITY dan CONSISTENCY:
Sebelum membuat indeks, Anda dapat memodifikasi MUTABILITY dan CONSISTENCY.
Setelah membuat indeks:
Anda tidak dapat memodifikasi MUTABILITY.
Anda hanya dapat mengubah nilai CONSISTENCY dari
eventualmenjadistrong. Perubahan daristrongkeeventualtidak diperbolehkan.
Untuk contoh penggunaan, lihat Aktifkan kolom dinamis.
COMPACT (Paksa kompaksi mayor)
Hanya LindormTable 2.3.4 dan versi yang lebih baru yang mendukung kompaksi mayor.
Operasi kompaksi mayor menggabungkan file data, membersihkan data yang dihapus atau kedaluwarsa, melepaskan ruang disk, serta meningkatkan performa baca dan tulis. Namun, operasi ini mengonsumsi sumber daya sistem.
Jika Anda tidak menentukan idcName:
Instans single-zone hanya memiliki satu IDC. Oleh karena itu, penentuan idcName tidak berpengaruh.
Instans multi-zona memiliki dua IDC. Jika Anda tidak menentukan idcName, operasi kompaksi mayor dijalankan berdasarkan aturan berikut:
Jika versi LindormTable lebih awal dari 2.6.4.2, kompaksi mayor hanya dijalankan pada idc1.
Jika versi LindormTable 2.6.4.2 atau lebih baru, kompaksi mayor dijalankan pada semua IDC secara default.
Jika Anda menentukan idcName, kompaksi mayor dijalankan pada IDC yang ditentukan. Anda dapat menentukan beberapa IDC yang dipisahkan dengan koma (,).
Untuk contoh penggunaan, lihat Jalankan kompaksi mayor.
Contoh
Contoh dalam topik ini didasarkan pada tabel sampel yang dibuat menggunakan pernyataan dalam topik CREATE TABLE.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time BIGINT NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);Tambah kolom
Tambahkan kolom bernama n1 ke tabel sensor.
ALTER TABLE sensor ADD COLUMN n1 DOUBLE;Tambahkan kolom spatio-temporal ke tabel data spatio-temporal roads.
Tambahkan satu kolom spatio-temporal.
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING);Tambahkan beberapa kolom spatio-temporal.
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING), g3 GEOMETRY(POLYGON);
Hapus kolom
Hapus kolom n1 dari tabel sensor.
ALTER TABLE sensor DROP COLUMN IF EXISTS n1;Verifikasi hasil
Jalankan pernyataan berikut untuk memverifikasi hasilnya.
DESCRIBE table sensor;Aktifkan kolom dinamis
Aktifkan kolom dinamis untuk tabel sensor.
ALTER TABLE sensor SET DYNAMIC_COLUMNS = 'true';Untuk informasi selengkapnya tentang kolom dinamis, lihat Kolom dinamis.
Atur konsistensi tabel
Atur konsistensi untuk tabel data spatio-temporal roads.
ALTER TABLE roads SET 'CONSISTENCY' = 'strong';Atur TTL data
Atur TTL data untuk tabel
sensor. Satuan adalah detik (s).ALTER TABLE sensor SET TTL = '2592000';Batalkan TTL data untuk tabel
sensor.ALTER TABLE sensor SET TTL = '';Verifikasi hasil
Pada halaman Overview sistem manajemen kluster, klik nama database target lalu klik tabel target. Di area Current table details, lihat nilai parameter ttl. Untuk informasi selengkapnya tentang cara login ke sistem manajemen kluster, lihat Log on to the cluster management system.
Atur algoritma kompresi
Atur algoritma kompresi untuk tabel
sensormenjadiZSTD.ALTER TABLE sensor SET COMPRESSION = 'ZSTD';Atur algoritma kompresi untuk tabel
sensormenjadiNONE.ALTER TABLE sensor SET COMPRESSION = 'NONE';Verifikasi hasil
Pada halaman Overview sistem manajemen kluster, klik nama database target lalu klik tabel target. Di area Current table details, klik View table properties dan lihat nilai parameter COMPRESSION.
Konfigurasi pemisahan data panas dan dingin
Untuk informasi selengkapnya tentang pemisahan data panas dan dingin, lihat Introduction to hot and cold data separation.
Atur batas pemisahan data panas dan dingin
Pisahkan data panas dan dingin berdasarkan timestamp
Atur batas pemisahan data panas dan dingin untuk tabel sensor. LindormTable mengarsipkan data ke cloud storage yang dioptimalkan penyimpanan berdasarkan timestamp saat data ditulis ke database (ingestion timestamp).
-- Aktifkan pemisahan data panas dan dingin untuk tabel sensor berdasarkan timestamp dan atur batas menjadi satu hari.
ALTER TABLE sensor SET CHS = '86400', CHS_L2 = 'storagetype=COLD';Verifikasi Hasil
Anda dapat menjalankan pernyataan SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; untuk melihat nilai parameter CHS dan CHS_L2. Untuk informasi selengkapnya tentang pernyataan SHOW VARIABLES, lihat SHOW VARIABLES.
Pisahkan data panas dan dingin berdasarkan kolom waktu kustom
Pemisahan data panas dan dingin berdasarkan kolom waktu kustom memiliki batasan dan persyaratan tertentu. Sebelum menggunakan fitur ini, tinjau catatan terkait. Untuk informasi selengkapnya, lihat Usage notes.
Atur kolom waktu kustom time untuk menentukan batas antara data panas dan dingin untuk tabel sensor. LindormTable menentukan apakah suatu baris data akan diarsipkan ke cloud storage yang dioptimalkan penyimpanan berdasarkan business timestamp dalam kolom time.
-- Aktifkan pemisahan data panas dan dingin untuk tabel sensor berdasarkan kolom kustom. Atur batas menjadi satu hari dan gunakan kolom time untuk pemisahan.
ALTER TABLE sensor SET CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=time';Verifikasi hasil
Anda dapat menjalankan pernyataan SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; untuk melihat nilai parameter CHS, CHS_L2, dan CHS_COLUMN. Untuk informasi selengkapnya tentang pernyataan SHOW VARIABLES, lihat SHOW VARIABLES.
Batalkan batas pemisahan data panas dan dingin
Batalkan batas pemisahan data panas dan dingin untuk tabel sensor.
ALTER TABLE sensor SET CHS = '', CHS_L2 = '';Verifikasi hasil
Anda dapat menjalankan pernyataan SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; untuk melihat nilai parameter CHS dan CHS_L2. Untuk informasi selengkapnya tentang pernyataan SHOW VARIABLES, lihat SHOW VARIABLES.
Jalankan kompaksi utama
Jalankan kompaksi mayor pada tabel sensor.
ALTER TABLE sensor COMPACT;CatatanJika instans merupakan instans multi-zona, perhatikan aturan berikut:
Jika versi LindormTable lebih awal dari 2.6.4.2 dan Anda tidak menentukan IDC, sistem menjalankan kompaksi mayor pada idc1 secara default.
Jika versi LindormTable 2.6.4.2 atau lebih baru, sistem menjalankan kompaksi mayor pada semua IDC secara default.
Jalankan kompaksi mayor pada idc2.
ALTER TABLE sensor COMPACT 'idc2';Jalankan kompaksi mayor pada idc1 dan idc2.
ALTER TABLE sensor COMPACT 'idc1,idc2';