从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');