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索引 |