本文简单的通过一个简单示例过程来说明GBase 8t 时间序列TimeSeries功能的使用。
本示例是模拟环境监控PM2.5业务场景,模拟15分钟时间间隔,10个监控设备采集空气相关指标:气温、湿度、风速、PM2.5值。
ts_time保存时间点,value1,vlaue2,value3,value4分别为:气温、湿度、风速、PM2.5值
CREATE ROW TYPE row_type(ts_time datetime year to fraction(5),value1 float,value2 float,value3 float,value4 float);
创建容器cn1用来存储时间序列的数据
execute procedure TsContainerCreate ('cn1','datadbs','row_type',10240,10240);
用来存储基本数据+时间序列数据。并创建一个索引,注意这里一定要定义一个primary key。
drop table if exists meter_table;
CREATE TABLE meter_table(
device_id integer,
name varchar(20),
addr varchar(255),
type char(1),
meter_data timeseries(row_type),
primary key(device_id)
);
create index idx_name on meter_table(name);
如果需要提供一个标准的table的访问格式,需要将时间序列表转换为标准表,创建一个虚表,类似view,不存储数据。
drop table if exists v_meter_table;
execute procedure tscreatevirtualtab ( 'v_meter_table', 'meter_table' );
即插入10个采集PM2.5的设备数据。
insert into meter_table values (1, '海淀设备','北京市海淀区中关村112号','A','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (2, '朝阳设备','北京市朝阳区太阳宫大厦','A','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (3, '丰台设备','北京市丰台区洋桥','B','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (4, '西城设备','北京市西城区木樨地100号','A','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (5, '怀柔设备','北京市怀柔雁西湖','A','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (6, '顺义设备','北京市顺义区北京国际机场3号航站楼','B','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (7, '昌平设备','北京市昌平区回龙观12号','A','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (8, '延庆设备','北京市延庆区八达岭','A','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (9, '房山设备','北京市房山区大学城','B','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
insert into meter_table values (10, '通州设备','北京市通州区潞城','B','calendar(ts_15min),origin(2016-10-01 00:00:00.00000), threshold(0),container(cn1), regular');
调用TSL_* function来 批量Insert数据记录。
可以在程序中嵌入如下SQL执行(可以在dbaccess直接执行),也可以通过java程序调用
注意事项:数据结束和开始不能有任何空格出现。
EXECUTE PROCEDURE IFX_ALLOW_NEWLINE('t');
EXECUTE FUNCTION TSL_init('meter_table','meter_data');
EXECUTE FUNCTION TSL_Put('meter_table|meter_data',
"1|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
1|2016-10-01 01:02:00.00000|24.9|75.1|2.5|143|
1|2016-10-01 01:03:00.00000|25.6|65.1|2.5|143|
2|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
2|2016-10-01 01:02:00.00000|24.9|85.1|2.5|143|
2|2016-10-01 01:03:00.00000|25.6|95.1|2.5|143|
3|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
3|2016-10-01 01:02:00.00000|24.9|65.1|2.5|143|
3|2016-10-01 01:03:00.00000|25.6|55.1|2.5|143|
4|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
4|2016-10-01 01:02:00.00000|24.9|75.1|2.5|143|
4|2016-10-01 01:03:00.00000|25.6|65.1|2.5|143|
5|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
5|2016-10-01 01:02:00.00000|24.9|85.1|2.5|143|
5|2016-10-01 01:03:00.00000|25.6|95.1|2.5|143|
6|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
6|2016-10-01 01:02:00.00000|24.9|65.1|2.5|143|
6|2016-10-01 01:03:00.00000|25.6|55.1|2.5|143|
7|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
7|2016-10-01 01:02:00.00000|24.9|75.1|2.5|143|
7|2016-10-01 01:03:00.00000|25.6|65.1|2.5|143|
8|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
8|2016-10-01 01:02:00.00000|24.9|85.1|2.5|143|
8|2016-10-01 01:03:00.00000|25.6|95.1|2.5|143|
9|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
9|2016-10-01 01:02:00.00000|24.9|65.1|2.5|143|
9|2016-10-01 01:03:00.00000|25.6|55.1|2.5|143|
10|2016-10-01 01:01:00.00000|25.1|75.1|2.5|143|
10|2016-10-01 01:02:00.00000|24.9|75.1|2.5|143|
10|2016-10-01 01:03:00.00000|25.6|65.1|2.5|143|
");
Begin work;
EXECUTE FUNCTION TSL_Flush('meter_table|meter_data');
commit;
可以通过SQL语句访问数据,可以通过虚表访问。
select * from meter_table where device_id=2;
select * from v_meter_table where device_id=2;
更多的关于TimeSeries的操作及访问函数,请阅读<TimeSeire用户手册>
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论1 条评论
2016-12-14 18:31