请教一个建模/查询问题 #30635
JellyChangan
started this conversation in
General
请教一个建模/查询问题
#30635
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
现在我们的场景是这样的,有不同类型的设备,每种相同类型的设备归属到一个分类ID下面,每一类型的设备数据点以及数据类型都一致。不同分类之间的数据点不一致,但是会存在部分数据点是一样的。
比如设备A和设备B都属于同一个分类,那么设备A和设备B的所有数据点都一致,只是上报的数据不同。那么数据库里面会有多个分类,每个分类下面会有多个设备。
现在的建模是这样的,每个分类建立一个超级表,定义字段为时间戳和该分类设备的所有数据点,标签为分类ID,设备ID。对于每一个设备都在它所属的分类的超级表下面创建子表,子表名称命名为设备ID(设备ID不会重复)。
create stable db_2.iot_957239754(ts timestamp, temp1 int, temp2 int ......) tags (category_id varchar(50), dev_id varchar(50));
但是有这样的问题,假设我想要跨超级表进行查询,比如查询多个分类的设备中,某个数据点上报了某个值的设备ID。
比如现在有分类A(下面有设备A1,设备A2)、分类B(下面有设备B1、设备B2),要查询分类A和分类B下所有的设备里面,温度(temp1)上报了96的值的全部设备。
这种查询如何实现(如果不考虑在业务层循环根据每个分类去查,得到所有结果再合并的情况,因为想在数据库层做分页)?或者在建模上面有没有更好的建议,因为不仅要通过设备ID查数据,也需要通过异常数据查设备。
也看过虚拟表的使用,因为虚拟表不支持表的数值从超级表中取,只支持从普通表中取,这意味这我要多个分类下的所有子表的字段都放到一个虚拟表中,这种肯定不行,因为随着设备越来越多,子表的数量也会越来越多,这样虚拟表的字段肯定会超出限制
create vtable db_2.v_1(ts timestamp, d1_temp1 int from d1.temp1, d2_temp1 int from d2.temp1..............)..
Beta Was this translation helpful? Give feedback.
All reactions