Jika kardinalitas kolom dalam tabel relatif kecil, Anda dapat menggunakan pengkodean kamus untuk meningkatkan rasio kompresi data. Hal ini membantu mengurangi ukuran penyimpanan dan meningkatkan kinerja query. Hologres mendukung pengkodean kamus untuk kolom tertentu. Topik ini menjelaskan pernyataan yang digunakan untuk mengonfigurasi pengkodean kamus di Hologres serta prinsip terkait.
Ikhtisar
Pengkodean kamus mengubah perbandingan string menjadi perbandingan numerik untuk mempercepat query, seperti query yang melibatkan klausa GROUP BY dan FILTER. Selain itu, rasio kompresi data meningkat, sehingga ruang penyimpanan berkurang. Di Hologres, Anda dapat mengaktifkan pengkodean kamus untuk kolom tertentu. Dengan cara ini, pemetaan kamus dibuat untuk nilai-nilai kolom tersebut. Sintaksis berikut digunakan untuk mengonfigurasi fitur pengkodean kamus:
-- Sintaksis yang didukung di Hologres V2.1 dan lebih baru
CREATE TABLE <table_name> (...) WITH (dictionary_encoding_columns = '[<columnName>{:[on|off|auto]}[,...]]');
-- Sintaksis yang didukung di semua versi Hologres
CREATE TABLE <table_name> (...);
CALL set_table_property('table_name', 'dictionary_encoding_columns', '[<columnName>{:[on|off|auto]}[,...]]');Tabel berikut menjelaskan parameter dalam sintaksis sebelumnya.
Parameter | Deskripsi |
table_name | Nama tabel. |
on | Mengaktifkan pengkodean kamus untuk kolom saat ini. |
off | Menonaktifkan pengkodean kamus untuk kolom saat ini. |
auto | Menentukan bahwa Hologres secara otomatis menentukan apakah akan mengaktifkan pengkodean kamus atau tidak. Jika Anda mengatur parameter
|
Saran
Kami merekomendasikan membuat pemetaan kamus untuk kolom dengan perbandingan string dan tingkat pengulangan nilai yang tinggi.
Hindari membuat pemetaan kamus untuk semua kolom karena hal ini akan menambah overhead encoding dan decoding.
Hindari membuat pemetaan kamus untuk kolom tempat data berformat JSON disimpan sebagai tipe data TEXT.
Anda dapat membuat pemetaan kamus untuk kolom tertentu dengan memodifikasi properti dictionary_encoding_columns setelah tabel dibuat. Kolom yang dimodifikasi tidak langsung berlaku karena pemetaan kamus dibangun atau dihapus secara asinkron di backend. Untuk informasi lebih lanjut, lihat ALTER TABLE.
Hindari menonaktifkan pengkodean kamus karena hal ini akan mengurangi rasio kompresi data dan meningkatkan kebutuhan ruang penyimpanan. Kami merekomendasikan mengatur
dictionary_encoding_columnskeauto.
Catatan penggunaan
Pengkodean kamus hanya dapat diaktifkan untuk tabel yang menggunakan model penyimpanan berorientasi kolom atau hibrid baris-kolom.
Kolom yang ditentukan oleh properti dictionary_encoding_columns dapat bernilai null.
Kami merekomendasikan membuat pemetaan kamus hanya untuk kolom dengan beberapa nilai guna mengurangi kebutuhan penyimpanan.
Di Hologres V0.8 dan versi lebih lama, pengkodean kamus diaktifkan secara default untuk semua kolom tipe data TEXT. Di Hologres V0.9 dan versi lebih baru, properti
dictionary_encoding_columnsdiatur keautountuk semua kolom tipe data TEXT secara default. Saat data ditulis ke kolom tabel, jika tingkat pengulangan nilai dalam kolom lebih besar atau sama dengan90%, Hologres mengaktifkan pengkodean kamus untuk kolom tersebut.
Cara kerjanya
Pengkodean kamus adalah teknik kompresi data yang memungkinkan Hologres mengkodekan dan menyimpan data mentah sebagai data tipe NUMERIC serta mempertahankan skema pengkodean yang sesuai. Saat membaca data, Hologres mendekode data berdasarkan skema pengkodean. Oleh karena itu, pengkodean kamus dapat mempercepat query, seperti query yang mencakup klausa GROUP BY dan FILTER pada kolom dengan perbandingan string, terutama pada kolom dengan tingkat pengulangan nilai yang tinggi. Secara default, Hologres mengaktifkan pengkodean kamus untuk semua kolom tipe data TEXT. Namun, proses dekode menghasilkan overhead komputasi tambahan. Untuk kolom dengan tingkat pengulangan nilai rendah (setengah dari nilai dalam kolom berbeda) dan kolom yang digunakan dalam operasi join, pengkodean kamus menghasilkan overhead tambahan untuk encoding dan decoding. Oleh karena itu, kami merekomendasikan tidak membuat pemetaan kamus untuk semua kolom. Gambar berikut menunjukkan prinsip teknis pengkodean kamus.
Contoh
Sintaksis yang didukung di Hologres V2.1 dan versi lebih baru:
CREATE TABLE tbl ( a int NOT NULL, b text NOT NULL, c text NOT NULL ) WITH ( dictionary_encoding_columns = 'a:on,b:off,c:auto' ); -- Modifikasi pemetaan kamus. ALTER TABLE tbl SET (dictionary_encoding_columns = 'a:off'); --Pernyataan ALTER TABLE dapat digunakan untuk memodifikasi pemetaan kamus hanya untuk semua kolom.Sintaksis yang didukung di semua versi Hologres:
-- Buat tabel bernama tbl dan buat pemetaan kamus. begin; create table tbl ( a int not null, b text not null, c text not null ); call set_table_property('tbl', 'dictionary_encoding_columns', 'a:on,b:off,c:auto'); commit; -- Modifikasi pemetaan kamus. call set_table_property('tbl', 'dictionary_encoding_columns', 'a:off');-- Modifikasi properti dictionary_encoding_columns untuk semua kolom. Kolom b dan Kolom c adalah kolom tipe data TEXT, dan pemetaan kamus dibuat untuk mereka secara default. call update_table_property('tbl', 'dictionary_encoding_columns', 'c:off');-- Modifikasi properti dictionary_encoding_columns hanya untuk Kolom c. Nonaktifkan pengkodean kamus untuk Kolom c.
Referensi
Untuk informasi lebih lanjut tentang cara mengonfigurasi properti tabel berdasarkan skenario query bisnis, lihat Panduan Pembuatan dan Penyetelan Tabel Berbasis Skenario.
Untuk informasi lebih lanjut tentang pernyataan DDL untuk tabel internal Hologres, lihat topik-topik berikut: