全部產品
Search
文件中心

Hologres:更改列存表的資料存放區格式

更新時間:Aug 24, 2024

從Hologres V0.10版本開始,Hologres建立的列存表資料存放區格式升級為AliORC,該儲存格式能夠進一步壓縮資料存放區大小,降低儲存成本。本文將會為您介紹在Hologres中如何更改列存表的資料存放區格式。

使用限制

在Hologres中更改列存表的資料存放區格式,具體限制如下:

  • 該功能僅Hologres V0.10及以上版本支援,請在Hologres管控台的執行個體詳情頁查看當前執行個體版本,如果您的執行個體是V0.10以下版本,請您使用自助升級或加入HologresDingTalk交流群反饋,詳情請參見如何擷取更多的線上支援?

  • 升級前的資料列存表格儲存體格式為segment,升級至Hologres V0.10版本後,建立的列存表將會預設為AliORC(參數值為orc)儲存格式,行存表為sst儲存格式。目前的版本支援對升級前的歷史資料更換,但有如下限制:

    • 目前的版本僅支援單錶轉換列存表格儲存體格式,不支援批量轉換。

    • 針對分區表,僅需對父表進行列存資料存放區格式轉換操作即可。

    • 轉換資料存放區格式後,通過後台線程非同步將舊的format資料切換到新的format上。後台非同步切換過程會消耗系統資源,包括CPI、I/O、網路等,切換期間可能會對線上任務有一定的效能影響,整個切換時間長度跟存量資料大小以及即時寫入量相關,請在業務低峰期進行切換

  • 不支援通過修改儲存格式完成列存錶轉換為行存表,如需變換,請重新建立新的表結構。

查看資料存放區格式

您可以使用如下SQL語句查看資料庫中各張表的儲存格式:

  • 文法樣本

    SELECT  *
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'storage_format'
    ;
  • 查詢結果

     table_namespace |     table_name     |  property_key  | property_value 
    -----------------+--------------------+----------------+----------------
     public          | part               | storage_format | segment
     public          | partsupp           | storage_format | segment
     public          | customer           | storage_format | segment
     public          | orders_row         | storage_format | sst
     public          | sp_orders          | storage_format | segment
     public          | sp_orders_20161231 | storage_format | segment
     public          | sp_orders_20171231 | storage_format | segment
     public          | sp_orders_20181231 | storage_format | segment
     public          | lineitem           | storage_format | segment
     public          | nation             | storage_format | orc
     public          | region             | storage_format | orc
     public          | supplier           | storage_format | orc
     public          | orders             | storage_format | orc
    (13 rows)
  • 查詢結果參數說明

    參數

    說明

    segment

    Hologres早期版本列存表的預設格式。

    sst

    行存表的預設格式。

    orc

    Hologres V0.10及以上版本列存表的預設格式。其中property_value為orc的即為使用AliORC格式儲存資料的表。

更新表的資料存放區格式

在您升級Hologres執行個體至V0.10版本後,預設建立的表均會以AliORC格式儲存資料。但是已經存在的資料表需要您手工修改其儲存類型,命令文法如下:

call set_table_property ('table_name', 'storage_format', 'orc');

其中,您需要將table_name替換為實際的表名。如下樣本將表part的儲存類型更換為AliORC儲存格式。

call set_table_property ('public.part', 'storage_format', 'orc');

批量轉換Segment為ORC格式

從Hologres V1.3後續版本開始,將不再支援建立表時設定儲存格式為Segment,建議儘早將Segment格式切換為ORC格式。涉及的情境如下。

  • 建立表。

    建立表如果設定為Segment格式,從Hologres V1.3.29版本開始,系統將會自動將Segment格式轉換為ORC格式,因此,在執行建表語句時將會收到如下提示:

    NOTICE:storage format 'segment' is no longer supported,converted to 'orc'
  • 存量Segment表。

    如果是已經建立的Segment存量表,可以通過以下步驟進行ORC格式的批量轉換。

    1. 查看當前資料庫已有的Segment格式表。

      說明

      如果查詢結果為空白,說明當前資料庫已經沒有需要切換的表、或者所有需要切換的表都已經在後台切換當中,無需進一步處理。

      select * from hologres.hg_table_properties
      where property_key = 'storage_format' and property_value like '%segment%';
    2. 批量將Segment格式轉換成ORC格式。

      從Hologres V1.3.35版本開始,支援將Segment格式的表批量轉換成ORC格式的表。命令文法如下。

      call hg_convert_segment_orc([<BATCH_SIZE>]);

      其中BATCH_SIZE為選擇性參數,代表同時進行切換的表數量,可以為空白,預設為100。

      命令說明:

      • 該命令語句是非同步執行的,所以會直接返回成功,但會在系統後台進行格式轉換。轉換過程中需要佔用一定的CPU和記憶體資源(指標上漲),對線上業務的運行有一定影響,因此請盡量在業務低峰期進行切換。常會在數分鐘到若干小時結束,可以通過查看CPU和記憶體指標觀察是否下降,下降則說明轉換完成。

      • 當命令返回為空白時,說明當前資料庫已經沒有需要切換的表、或者所有需要切換的表都已經在後台切換當中,無需進一步處理,可以繼續處理下個資料庫。

      • 如果命令返回類似continue to call hg_convert_segment_orc() if you want to convert all tables in current database.的提示,說明還有需要切換的表。需要根據叢集負載情況,繼續執行該命令,直到返回空為止。