全部产品
Search
文档中心

Hologres:Pengkodean kamus

更新时间:Jul 02, 2025

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 auto untuk sebuah kolom, Hologres secara otomatis menentukan apakah akan melakukan pengkodean kamus berdasarkan pengulangan nilai dalam kolom tersebut. Pengkodean kamus lebih cocok untuk kolom yang memiliki tingkat pengulangan nilai yang tinggi.

  • Secara default, Hologres V0.8 dan lebih lama mengaktifkan pengkodean kamus untuk semua kolom tipe data TEXT.

  • Di Hologres V0.9 dan lebih baru, properti dictionary_encoding_columns diatur ke auto untuk semua kolom tipe data TEXT secara default. Saat data ditulis ke kolom tabel, jika tingkat pengulangan nilai dalam kolom lebih besar atau sama dengan 90%, Hologres mengaktifkan pengkodean kamus untuk kolom tersebut.

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_columns ke auto.

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_columns diatur ke auto untuk semua kolom tipe data TEXT secara default. Saat data ditulis ke kolom tabel, jika tingkat pengulangan nilai dalam kolom lebih besar atau sama dengan 90%, 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