CREATE STABLE IF NOT EXISTS airsensor ( ts timestamp, 时间 pm25 int, PM2.5 pm10 int, PM1.0 tvoc int, TVOC co2 int, 二氧化碳 formaldehyde float, 甲醛 noise float, 噪音 temperature float, 温度 humidity float, 湿度 light int, 光照 h2s int, 硫化氢 ch4 int, 甲烷 co int, 一氧化碳 no2 float, 二氧化氮 h2 int, 氢气 odor float 异味 ) TAGS ( position NCHAR(200), space NCHAR(20), floor_area NCHAR(20), floor NCHAR(20), area NCHAR(20), device_code NCHAR(20), device_id int, factory NCHAR(50), model NCHAR(50) );
create stream if not exists mroom_stream trigger at_once into mroom_stream_status (ts,status) tags(
space,
floor_area,
floor,
area
) subtable(
cast(
concat('mss_', space, '_', floor_area, '_', floor, '_', area) as varchar
)
) as
SELECT
_wstart as ts,
case
when sum(status) > 0 then 1
else 0
end as status
FROM
bxserver.humensensor partition by space,
floor_area,
floor,
area interval(1m) fill(value,-1);select _wstart as ts, max(total_kwh)-min(total_kwh) as used from bxserver.powersensor partition by tbname interval(1d);
powersensor_loop 表按行记录传感器的瞬时实测值。为计算当天的用电量,需要对相邻两行取差值后再用
SUM 求和。最初我们采用的是如下嵌套子查询方案,不仅执行时间长,而且占用较大的临时空间:select TO_CHAR(_wstart, 'YYYY/MM/DD HH24:MI:00') as ts, TO_CHAR(_wstart, 'HH24') as hour, sum(kwh) as kwh, space,floor_area,floor,type from (select _rowts as ts, diff(kwh) as kwh, space, floor_area, floor, area, device_id, loop, type frombxserver.powersensor_loop partition by space, floor_area, floor, area, device_id, loop, type) where ts >= TO_UNIXTIMESTAMP('2025-08-28 00:00:00') and ts <= TO_UNIXTIMESTAMP('2025-08-28 23:59:59') partition by space, floor_area, floor, type interval(1d) order by floor asc;
select TO_CHAR(_wstart, 'YYYY/MM/DD HH24:MI:00') as ts, TO_CHAR(_wstart, 'HH24') as hour, sum(kwh) as kwh, space,floor_area,floor,type from (select _rowts as ts, diff(kwh) as kwh, space, floor_area, floor, area, device_id, loop, type frombxserver.powersensor_loop where ts >= TO_UNIXTIMESTAMP('2025-08-28 00:00:00') and ts <= TO_UNIXTIMESTAMP('2025-08-28 23:59:59') partition by space, floor_area, floor, area, device_id, loop, type) partition by space, floor_area, floor, type interval(1d) order by floor asc;
diff 函数,无法直接计算相邻数据差值。后续我们计划升级至最新版本 3.3.8,新版本已支持
diff 函数,可将每日电量数据的差值计算结果直接写入流计算结果表,进一步简化后续的查询与汇总分析流程。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70014783/viewspace-3108821/ ,如需转载,请注明出处,否则将追究法律责任。