如何在Apache IoTDB中获取设备全局time跨度
在Apache IoTDB 2.0.5中获取设备所有测点的全局时间跨度
要获取设备所有测点的全局时间跨度(所有测点中最小时间戳与最大时间戳的差值),不能直接使用TIME_DURATION函数(该函数仅针对单个时间序列计算),需要通过嵌套查询实现:
解决方案SQL
SELECT (MAX(global_max_ts) - MIN(global_min_ts)) AS `global_time_duration(root.test.d1)` FROM ( SELECT MIN(time) AS global_min_ts, MAX(time) AS global_max_ts FROM `root.test.d1.*` )
逻辑说明
- 子查询层:通过
root.test.d1.*匹配设备root.test.d1下的所有测点,分别计算每个测点的最小时间戳(MIN(time))和最大时间戳(MAX(time))。 - 外层查询层:从子查询结果中,提取所有测点的最小时间戳的最小值(全局最早时间),以及所有测点的最大时间戳的最大值(全局最晚时间),两者相减得到设备的全局时间跨度。
执行结果
该SQL会返回预期结果:
+------------------------------------+ | global_time_duration(root.test.d1) | +------------------------------------+ | 5000 | +------------------------------------+
扩展说明
如果需要批量查询多个设备的全局时间跨度,可以结合ALIGN BY DEVICE实现:
SELECT device, (MAX(global_max_ts) - MIN(global_min_ts)) AS global_time_duration FROM ( SELECT device, MIN(time) AS global_min_ts, MAX(time) AS global_max_ts FROM `root.test.*.*` GROUP BY device ) GROUP BY device
内容的提问来源于stack exchange,提问作者Cecilia Wong
相关产品推荐
相关产品推荐

