日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

字典編碼Dictionary Encoding

如果您數據表中字段的基數相對較小,使用字典編碼可以提高數據的壓縮率,以減少數據存儲量和提高查詢性能。Hologres支持對指定字段進行字典編碼,本文為您介紹在Hologres中設置字典編碼的命令及原理。

Dictionary Encoding介紹

字典編碼可以將字符串的比較轉成數字的比較,加速Group By、Filter等查詢,同時也會提升數據的壓縮比,進一步降低存儲。在Hologres中可以對指定字段進行字典編碼,即為指定字段的值構建字典映射,設置Dictionary Encoding的命令語法如下。

-- Hologres V2.1版本起支持的語法
CREATE TABLE <table_name> (...) WITH (dictionary_encoding_columns = '[<columnName>{:[on|off|auto]}[,...]]');

-- 所有版本支持的語法
CREATE TABLE <table_name> (...);
CALL set_table_property('table_name', 'dictionary_encoding_columns', '[<columnName>{:[on|off|auto]}[,...]]');

參數說明:

參數

說明

table_name

表名稱。

on

表示當前字段進行字典編碼。

off

表示當前字段關閉字典編碼。

auto

表示系統自動決定是否開啟字典編碼。如果設置了auto,Hologres會根據所在列數值的重復程度自動選擇是否進行字典編碼,值的重復度越高,字典編碼的收益越大。

  • 在Hologres V0.8版本及更早版本中,默認所有TEXT類型字段都會被設置開啟字典編碼。

  • 在Hologres V0.9及之后版本中,所有TEXT數據類型字段的dictionary_encoding_columns屬性默認取值auto。當表有數據寫入時,如果字段里數值的重復度大于等于90%,那么系統就會對該字段開啟字典編碼。

使用建議

  • 建議將有字符串比較的列設置為字典編碼列(dictionary_encoding_columns),并且列的基數較小,即數據重復度較高。

  • 不建議將所有的列都設置為字典編碼列,因為這樣做會帶來額外的編碼、解碼開銷。

  • 不建議為實際內容為JSON,但保存為text類型的列設置字典編碼。

  • 可以在建表之后單獨使用設置字典編碼。表示修改字典編碼列,修改之后非立即生效,字典編碼構建和刪除在后臺異步執行,詳情請參見ALTER TABLE

  • 不建議關閉字典編碼,會使得數據壓縮少,存儲有一定的增加。建議dictionary_encoding_columns值設置為auto

使用說明

  • Dictionary Encoding只能用于列存表或者行列共存表。

  • Dictionary Encoding指定的列可以為空。

  • 取值較少的列適合設置字典編碼,可以壓縮存儲。

  • Hologres V0.8及更早版本中默認所有TEXT類型字段都會被隱式地設置為Dictionary Encoding。Hologres V0.9及之后版本中,所有TEXT數據類型字段的dictionary_encoding_columns屬性默認取值auto。即當表有數據寫入時,如果字段里數值的重復度大于等于90%,那么系統就會對該字段開啟字典編碼。

技術原理

Dictionary Encoding是一種壓縮存儲的技術,系統會將原始數據編碼為數值類型存儲,同時也會維護對應的編碼表結構,在數據讀取時,會根據編碼表進行數據解碼操作,因此在字符串比較的場景中,尤其是對基數小的列,有加速作用,常用于Group By、Filter等過濾查詢場景中。系統會默認將TEXT數據類型的字段設置Dictionary Encoding。但是解碼會帶來額外的計算開銷,尤其是基數大的列(數據的重復度較低,比如一列里一半值都不相同)和用于Join的字段,字典編碼會帶來更多額外的編碼、解碼開銷,因此不建議所有的列都設置為Dictionary Encoding。字典編碼示意圖如下所示。字典編碼

使用示例

  • V2.1版本起支持的語法:

    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'
    );
    
    -- 修改dictionary_encoding_columns
    ALTER TABLE tbl SET (dictionary_encoding_columns = 'a:off');--ALTER TABLE語法僅支持全量修改
  • 所有版本支持的語法:

    --創建表tbl并設置dictionary_encoding_columns索引
    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;
    
    --修改dictionary_encoding_columns索引
    call set_table_property('tbl', 'dictionary_encoding_columns', 'a:off');--全量修改,b和c因為是text列,會被默認設置為dictionary_encoding_columns
    
    call update_table_property('tbl', 'dictionary_encoding_columns', 'c:off');--增量修改,僅將c關閉dictionary_encoding_columns

相關文檔