文档首页/ 数据仓库服务 DWS/ 最佳实践/ 数据开发/ DWS时序表转HStore表最佳实践
更新时间:2025-08-22 GMT+08:00
分享

DWS时序表转HStore表最佳实践

由于新的列存HStore表在入库性能,压缩比和查询性能都优于时序表(TimeSeries表),所以推荐使用HStore表替代TimeSeries表。

TimeSeries表一般包含三种列:TSTime列,TSTag列和TSField列。

  • TSTime时序列,有且仅有一个,且按它进行自动分区。
  • TSTag表示维度列。
  • TSField表示事实列,维度与事实信息混存。

例如:创建时序表CPU

1
2
3
4
5
6
7
8
CREATE TABLE CPU(
scope_name text TSTag,
server_ip text TSTag,
group_path text TSTag,
time timestamptz TSTime,
idle numeric TSField,
users numeric TSField) 
with (TTL='30 days', PERIOD = '1 hour', orientation=TIMESERIES);

将时序表改造为HStore表,除了直接创建HStore表,还需要做二级分区,bitmap索引的设置,才能发挥HStore表的最佳能力。

  • 推荐将TSTime列作为分区键。
  • 推荐将第一个TSTag列作为二级分区列。
  • 推荐将所有TSTag列作为bitmap索引列。

改造后的建表语句如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE CPU(
scope_name text,
server_ip text,
group_path text,
time timestamptz,
idle numeric,
users numeric) 
WITH(TTL='30 days', PERIOD = '1 hour', 
ORIENTATION=column, ENABLE_HSTORE_OPT=true, --使用列存hstore_opt类型
SECONDARY_PART_COLUMN='scope_name', --将第一个TSTag列作为二级分区列
BITMAP_COLUMNS='scope_name,server_ip,group_path' --将所有TSTag列做为bitmap索引列
)
PARTITION BY RANGE(time) --time为TIMESERIES中的TSTime列
(
    PARTITION p1 VALUES LESS THAN('2023-02-13 12:00:00'),
    PARTITION p2 VALUES LESS THAN('2023-02-13 13:00:00')
	...
);
--根据查询性能,在其它TSTag列上,自行选择创建一个或多个B-Tree索引

相关文档