图书馆书籍上贴有"电子标签"(RFID),IoT平台设备对应"电子标签"。书籍/电子标签/IoT设备这些概念的对应关系,参考下表理解。
1.统计读者借阅时长
当读者从图书馆借走书籍扫描电子标签时,"电子标签"对应的设备会上报借阅属性值。当读者归还书籍扫描电子标签时,"电子标签"对应的设备会上报归还属性值。需要利用数据开发计算读者借阅时长。
2.产品模型
产品利用$device_name对应电子标签码,Status=0标示读者借阅书籍,Status=1标示读者归还书籍,UserID读者标示。GID书柜编码。参考下图理解。
3.设备数据概览
参考下图理解。
实现方案
使用大数据中的数据分层思想来实现,期望宽表表头如下:
方法一
实际查询结果如下图所示。
方法二
实际查询效果如下所示。
1小节中方法二已经实现了分组概念。因此延续1小节中方法二的思路。编写SQL如下:
1select
2user_name,
3book_name,
4Status,
5nth_value(`target_time`,1)over(partitionbygroup_tagorderbyrow_noasc)asLendoutTime,
6nth_value(`target_time`,2)over(partitionbygroup_tagorderbyrow_noasc)asRestoreTime
7from(
8select
9row_no,
10UserIDasuser_name,
11book_name,
12Status,
13concat(book_name,IF(row_no%2=1,row_no,row_no-1))asgroup_tag,
14target_time
15from(
16selectUserID,$device_nameasbook_name,Status,row_number()over(partitionby$iot_idorderby$event_timeasc)asrow_no,$event_timeastarget_timefrom${pk.a1ZSNGbXFPf}
17)s_v
18)ods_v
执行结果如下所示。
3.计算借阅时长
1selectuser_name,book_name,(RestoreTime-LendoutTime)asdelta_time
2from(
3select
4user_name,
5book_name,
6Status,
7nth_value(`target_time`,1)over(partitionbygroup_tagorderbyrow_noasc)asLendoutTime,
8nth_value(`target_time`,2)over(partitionbygroup_tagorderbyrow_noasc)asRestoreTime
9from(
10select
11row_no,
12UserIDasuser_name,
13book_name,
14Status,
15concat(book_name,IF(row_no%2=1,row_no,row_no-1))asgroup_tag,
16target_time
17from(
18selectUserID,$device_nameasbook_name,Status,row_number()over(partitionby$iot_idorderby$event_timeasc)asrow_no,$event_timeastarget_timefrom${pk.a1ZSNGbXFPf}
19)s_v
20)ods_v
21)dwd_vwhereStatus='1';--简化处理分组内只有一个元素的1情况,直接丢弃
结果使用
数据API
在云云对接场景用于应用集成,则可以配置API及SDK调用获取结果数据。
数据导出
如何结果数据需要线下备份或者使用xls进一步分析,可以使用“导出”功能。
详细操作步骤可以参考《IoT设备数据的存储、解析和价值挖掘实践》,这里不赘述。