[Clickhouse] clickhouse中使用AggregatingMergeTree表引擎聚合k线数据
Contents
使用
AggregatingMergeTree
表来做增量数据的聚合统计,包括物化视图的数据聚合。
股市及期货市场中的K线图的画法包含四个数据,即开盘价、最高价、最低价、收盘价。
以及单位时间内的成交量,成交单数,交易额等数据。
而不同时间周期K线可以通过基础数据聚合获得。比如3分钟K线聚合自3条1分钟K线。
创建明细表
创建一张基础表,这里以1分钟k线做基础表,通过1分钟聚合3分钟5分钟,及更多周期的k线数据。
|
|
字段定义:start_time: 开盘时间,end_time: 收盘时间,open: 开盘价,close: 收盘价
high: 最高价,low: 最低价,volume: 成交量,trade_num: 成交笔数,quote_volume: 成交额
引擎选择 ReplaingMergeTree
, start_time 做唯一主键和排序。
创建基于1分钟K线的物化视图
物化视图表引擎选择 AggregatingMergeTree
, 字段添加 State
后缀,类型为 AggregateFunction
。
其能够以二进制的形式存储聚合数据的中间状态,聚合结果查询时需要调用 Merge
后缀函数。
|
|
当物化视图创建之后,如果源表被写入了新数据,那么物化视图也会同步更新。
POPULATE修饰符决定了物化视图的初始化策略:
-
如果使用了POPULATE修饰符,那么在创建视图的过程中,会连带将源表中 已存在的数据一并导入,如同执行了SELECT INTO一般;
-
反之,如果不使用POPULATE修饰符,那么物化视图在创建之后是没有数据的,它只会同步在此之后被写入源表的数据。
物化视图目前并不支持同步删除,如果在源表中删除了数据,物化视图的数据仍会保留。
物化视图本质上是一张特殊的数据表,可使用SHOW TABLE查看数据表的列表
创建基于物化视图的普通视图表
创建调用了Merge函数的普通视图,基于物化视图。
|
|
创建普通视图方便简化后续的查询SQL。
插入数据
|
|
查询普通视图表
|
|
预期查询结果为2条聚合后的3分钟k线数据。