從Hologres V0.10版本開始,Hologres創建的列存表數據存儲格式升級為AliORC,該存儲格式能夠進一步壓縮數據存儲大小,降低存儲成本。本文將會為您介紹在Hologres中如何更改列存表的數據存儲格式。
使用限制
在Hologres中更改列存表的數據存儲格式,具體限制如下:
該功能僅Hologres V0.10及以上版本支持,請在Hologres管控臺的實例詳情頁查看當前實例版本,如果您的實例是V0.10以下版本,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?。
升級前的數據列存表存儲格式為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格式的批量轉換。
查看當前數據庫已有的Segment格式表。
說明如果查詢結果為空,說明當前數據庫已經沒有需要切換的表、或者所有需要切換的表都已經在后臺切換當中,無需進一步處理。
select * from hologres.hg_table_properties where property_key = 'storage_format' and property_value like '%segment%';
批量將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.
的提示,說明還有需要切換的表。需要根據集群負載情況,繼續執行該命令,直到返回空為止。