从Hologres V0.10版本开始,Hologres创建的列存表数据存储格式全面升级为AliORC,该存储格式能够进一步压缩数据存储大小,降低存储成本。本文将会为您介绍在Hologres中如何更改列存表的数据存储格式。
使用限制
在Hologres中更改列存表的数据存储格式,具体限制如下:
- 该功能仅Hologres V0.10及以上版本支持,请在Hologres管控台的实例详情页查看当前实例版本,如果您的实例是V0.10以下版本,请您提交工单升级实例。
- 升级前的数据列存表存储格式为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');