数据开发在图书馆场景的应用实践案例

简介: 本文介绍如何使用物联网平台SQL工作的实践案例
+关注继续查看

1. 需求描述

图书馆书籍上贴有"电子标签"(RFID),IoT平台设备对应"电子标签"。书籍/电子标签/IoT设备这些概念的对应关系,参考下表理解。


图书馆概念

IoT平台概念

作用

图书

产品

通过产品物模型来描述图书借阅的信息。具体有:读者标示、借阅行为、归还行为。

书籍

电子标签(RFID)设备

用设备标示一本书。例如图书馆中有5本《长安十二时辰》,编号假设为a00, a01, a02, a03, a04。那么在IoT平台会对应5个设备。设备名称分别为"a00", "a01", "a02", "a03", "a04"。


1.1 统计读者借阅时长

当读者从图书馆借走书籍扫描电子标签时,"电子标签"对应的设备会上报借阅属性值。当读者归还书籍扫描电子标签时,"电子标签"对应的设备会上报归还属性值。需要利用数据开发计算读者借阅时长。

1.2 产品模型

产品利用$device_name 对应电子标签码, Status=0标示读者借阅书籍, Status=1标示读者归还书籍, UserID读者标示。GID 书柜编码。参考下图理解。

image.png

1.3 设备数据概览

参考下图理解。

image.png

2. 实现方案

由于书籍借阅与书籍归还对应两条数据,无法直接使用减法计算。先对原始数据进行"扩宽处理",将读者标示、图书标示、借阅时间、归还时间字段放到一张表。

使用大数据中的数据分层思想来实现,期望宽表表头如下:

UserID

$device_name

LendOutTime

RestoreTime


2.1 借阅时间/归还时间定义

定义借阅时间/归还时间有两种方法,分别表述如下。

  • 方法一
select 
  UserID, 
  $device_name as book_name, 
  IF(`Status`=0, $event_time, null) as LendoutTime, -- status = 0 标示借出 
  IF(`status`=1, $event_time, null) AS RestoreTime  -- status = 1 标示归还
from ${pk.a1ZSNGbXFPf};

实际查询结果如下图所示。

image.png

  • 方法二

书籍一定先借出、再归还。如果按照书籍编号分组,再按照时间升序(先上传的在第一条),那么奇数行就是借出、偶数行就是归还。

select 
  UserID, 
  $device_name as book_name, 
  Status, 
  row_number() over (partition by $iot_id order by $event_time asc) as row_no, 
  $event_time as target_time 
from ${pk.a1ZSNGbXFPf}

实际查询效果如下所示。

image.png

2.2 包含借阅时间和借出时间的宽表

将借阅时间和借出时间拼成宽表,实际是解决数据分组的问题。把同一个用户对一本书籍借阅和归还的数据放到一个分组中。


这里有一个异常情况就是,如果用户还未归还书籍,那么分组中只有一条数据,需要补当前时间作为时间戳。


2.1小节中方法二已经实现了分组概念。因此延续2.1小节中方法二的思路。编写SQL如下:

select 
  user_name,
  book_name, 
  Status,
  nth_value (`target_time`, 1) over (partition by group_tag order by row_no asc) as LendoutTime,
  nth_value (`target_time`, 2) over (partition by group_tag order by row_no asc) as RestoreTime
from (
  select 
    row_no,
    UserID as user_name,
    book_name,
    Status,
    concat(book_name, IF (row_no % 2 = 1, row_no, row_no - 1)) as group_tag,
    target_time
  from (
    select UserID, $device_name as book_name, Status, row_number() over (partition by $iot_id order by $event_time asc) as row_no, $event_time as target_time from ${pk.a1ZSNGbXFPf}
  ) s_v
) ods_v 

执行结果如下所示。

image.png

2.3 计算借阅时长

select user_name, book_name, (RestoreTime - LendoutTime) as delta_time
from (
  select 
    user_name,
    book_name, 
    Status,
    nth_value (`target_time`, 1) over (partition by group_tag order by row_no asc) as LendoutTime,
    nth_value (`target_time`, 2) over (partition by group_tag order by row_no asc) as RestoreTime
  from (
    select 
      row_no,
      UserID as user_name,
      book_name,
      Status,
      concat(book_name, IF (row_no % 2 = 1, row_no, row_no - 1)) as group_tag,
      target_time
    from (
      select UserID, $device_name as book_name, Status, row_number() over (partition by $iot_id order by $event_time asc) as row_no, $event_time as target_time from ${pk.a1ZSNGbXFPf}
    ) s_v
  ) ods_v 
) dwd_v where Status = '1'; -- 简化处理分组内只有一个元素的1情况,直接丢弃

执行结果如下所示。

image.png

3. 结果使用

数据API

在云云对接场景用于应用集成,则可以配置API及SDK调用获取结果数据。

数据导出
如何结果数据需要线下备份或者使用xls进一步分析,可以使用“导出”功能。

image.png

可以按照时间范围进行数据导出,目前导出格式只支持csv

image.png

详细操作步骤可以参考《IoT设备数据的存储、解析和价值挖掘实践》,这里不赘述。

相关产品文档
如您想要了解更细节的产品功能使用指南,可以访问物联网平台的官网产品文档。
分析洞察官网文档:https://help.aliyun.com/document_detail/325547.html

产品操作实践文档:https://developer.aliyun.com/article/1166086

相关文章
|
1月前
2020考研公共课_基础精讲课_管理类联考综合能力 联考逻辑(读书笔记)
2020考研公共课_基础精讲课_管理类联考综合能力 联考逻辑(读书笔记)
|
3月前
|
移动开发 前端开发 JavaScript
高校宿舍管理系统的设计与实现(论文+源码)_kaic
摘要:本研究方向的主体内容是研发学生宿舍管理系统,该系统主要应用Eclipse开发平台进行开发,使用SSM三层架构,前端使用HTML5,CSS,JavaScript,Ajax等相关技术,后端使用Java计算机语言,数据库使用MySQL关系型数据库管理和维护信息数据。本设计所编写的是一个高校学生宿舍管理系统,根据实际使用的需求开发了学生角色用户和管理员角色用户两种功能权限用户身份,其功能主要涉及日常的学生宿舍管理功能。具体功能的体现,对于学生用户来讲,本系统具备了来访登记、报修申请以及卫生评分等功能;对于系统管理员用户来讲,本系统具备学生信息管理、入住状态查询、来访登记、报修审批以及发布公告等功
|
3月前
|
搜索推荐 前端开发 关系型数据库
大学生社团管理系统的设计与实现(论文+源码)_kaic
在网络迅速发展的时代,众多软件被开发出来,给社团的管理带了极大的便利,而学生随着时代的发展越来越最求更加个性化的需求。以此,现在的社团管理以学生为导向,根据学生的需求开发一个适合现代化的大学生社团管理系统,以社团创新作为目标的社团信息管理网站。通过引入学生社团信息管理系统,不仅可以节省管理员的工作量以及避免了许多不必要的人力及物力资源,还可以促进社团的管理更加完善,提高社团的质量。通过完成学生社团管理系统,学生可以更加方便的查询社团和申请社团,社团成员可以更加紧密的联系在一起。在分析了学生社团管理方式的研究比较的基础上,开发了一个基于MFC的学生社团管理系统。系统主要实现了用户登入,密码修改,
|
6月前
|
测试技术 开发者
软件工程高效学 | 实战案例:在线选修课程管理系统设计
软件工程是计算机领域的一门专业基础课,它对于培养开发者的软件素质、提高开发者的软件开发能力与软件项目管理能力具有重要意义。本篇介绍了利用Rational Rose进行“在线选修课程管理系统”面向对象的设计案例。
92 0
软件工程高效学 | 实战案例:在线选修课程管理系统设计
|
9月前
|
前端开发 Java 应用服务中间件
使用SSM框架开发和设计一个高校教材管理系统
使用SSM框架开发和设计一个高校教材管理系统
使用SSM框架开发和设计一个高校教材管理系统
|
10月前
|
数据可视化 数据管理 BI
员工管理系统综合实践|学习笔记(二)
快速学习员工管理系统综合实践
69 0
员工管理系统综合实践|学习笔记(二)
|
10月前
|
数据可视化 BI 调度
员工管理系统综合实践|学习笔记(一)
快速学习员工管理系统综合实践
108 0
员工管理系统综合实践|学习笔记(一)
|
10月前
|
人工智能 Kubernetes 算法
实战案例—流利说 | 学习笔记
快速学习实战案例—流利说
98 0
|
10月前
|
开发者 容器
招聘管理综合实践——面试流程搭建|学习笔记
快速学习招聘管理综合实践——面试流程搭建
88 0
招聘管理综合实践——面试流程搭建|学习笔记
|
10月前
|
数据可视化 数据管理 BI
招聘管理综合实践——生成在线简历库|学习笔记
快速学习招聘管理综合实践——生成在线简历库
143 0
招聘管理综合实践——生成在线简历库|学习笔记
相关产品
物联网平台
物联网络管理平台
物联网边缘计算
推荐文章
更多