首页 > 其他分享 >使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)

时间:2023-08-27 14:31:24浏览次数:37  
标签:11 架构设计 SQL ln IoT 语句 子句 2017 10

所有参数的详细说明见表3-5。

表 3-5 线性填充参数列表

参数名称(不区分大小写)

解释

路径,前缀路径

查询路径;必填项

T

查询时间戳(只能指定一个);必填项

data_type

填充方法使用的数据类型。可选值为 int32、int64、浮点型、双精度型、布尔值、文本;可选字段

before_range, after_range

表示线性方法的有效时间范围。当存在 [T-before_range, T+after_range] 范围内的值时,前一种方法有效。如果未显式指定before_range和after_range,则使用 default_fill_interval。-1 表示无穷大;可选字段

请注意,如果时间序列在查询时间戳 T 处具有有效值,则此值将用作线性填充值。否则,如果在 [T-before_range,T] 或 [T, T + after_range] 范围内没有有效的填充值,则线性填充方法将返回 null。

在这里,我们给出了使用线性方法填充空值的示例。SQL 语句如下:

  1. select temperature from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float [linear, 1m, 1m])

这意味着:

因为时间序列根.sgcc.wf03.wt01.temperature在2017-11-01T16:37:50.000为空,系统使用之前的时间戳2017-11-01T16:37:00.000(时间戳在[2017-11-01T16:36:50.000,2017-11-01T16:37:50.000]时间范围内)及其值21.927326,下一个时间戳2017-11-01T16:38:00.000(时间戳在[2017-11-01T16:37:50.000,2017-11-01T16:38:50.000]时间范围内)及其值25.311783进行线性拟合计算: 21.927326 + (25.311783-21.927326)/60s * 50s = 24.747707

此语句的执行结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_SQL

数据类型和填充方法之间的对应关系

数据类型和支持的填充方法如表 3-6 所示。

表 3-6 数据类型和支持的填充方法**

数据类型

支持的填充方法

布尔

以前

国际特32

上一篇, 线性

国际特64

上一篇, 线性


上一篇, 线性


上一篇, 线性

发短信

以前

值得注意的是,对于数据类型不支持的填充方法,IoTDB 会给出错误提示,如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_02

如果未指定 fill 方法,则每种数据类型都有自己的默认填充方法和参数。相应的关系如表3-7所示。

表 3-7 各种数据类型的默认填充方法和参数**

数据类型

默认填充方法和参数

布尔

前一页, 600000

国际特32

前一页, 600000

国际特64

前一页, 600000


前一页, 600000


前一页, 600000

发短信

前一页, 600000

注意:在 0.7.0 版中,至少应在 Fill 语句中指定一个填充方法。

对查询结果的行和列控制

物联网提供限制/限制条款和偏移/偏移子句,以使用户对查询结果有更多的控制权。使用 LIMIT 和 SLIMIT 子句允许用户控制查询结果的行数和列数,使用 OFFSET 和 SOFSET 子句允许用户设置结果的起始位置进行显示。

请注意,分组依据查询不支持 LIMIT 和 OFFSET。

本章主要介绍查询结果行列控制的相关示例。您还可以使用Java JDBC用于执行查询的标准接口。

对查询结果的行控制

通过使用 LIMIT 和 OFFSET 子句,用户可以以与行相关的方式控制查询结果。我们将通过以下示例演示如何使用 LIMIT 和 OFFSET 子句。

  • 示例 1:基本限制子句

SQL 语句为:

  1. select status, temperature from root.ln.wf01.wt01 limit 10

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列为“状态”和“温度”。SQL 语句要求返回查询结果的前 10 行。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_SQL_03

  • 示例 2:带偏移的 LIMIT 子句

SQL 语句为:

  1. select status, temperature from root.ln.wf01.wt01 limit 5 offset 3

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列为“状态”和“温度”。SQL 语句要求返回查询结果的第 3 行到第 7 行(第一行编号为第 0 行)。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_04

  • 示例 3:限制子句与 WHERE 子句的组合

SQL 语句为:

  1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time< 2017-11-01T00:12:00.000 limit 2 offset 3

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列为“状态”和“温度”。SQL 语句要求返回“3-4-2017T11:01:00.05”和“00-000-2017T11:01:00.12”之间的状态和温度传感器值的第 00 行到第 000 行(第一行编号为第 0 行)。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_05

  • 示例 4:LIMIT 子句与 GROUP BY 子句的组合

SQL 语句为:

  1. select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d) limit 5 offset 3

这意味着:

SQL 语句子句要求返回查询结果的第 3 行到第 7 行(第一行编号为第 0 行)。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_06

值得注意的是,由于目前的 FILL 子句只能填充某个时间点的时间序列缺失值,也就是说 FILL 子句的执行结果正好是一行,所以 LIMIT 和 OFFSET 预计不会与 FILL 子句结合使用,否则会提示错误。例如,执行以下 SQL 语句:

  1. select temperature from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float[previous, 1m]) limit 10

SQL 语句将不会执行,相应的错误提示如下:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_07

对查询结果的列控制

通过使用 SLIMIT 和 SOFFSET 子句,用户可以以与列相关的方式控制查询结果。我们将通过以下示例演示如何使用 SLIMIT 和 SOFFSET 子句。

  • 示例 1:基本 SLIMIT 子句

SQL 语句为:

  1. select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列是此设备下的第一列,即电源状态。SQL 语句要求选择时间点“2017-11-01T00:05:00.000”和“2017-11-01T00:12:00.000”之间的状态传感器值。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_SQL_08

  • 示例 2:带有偏移量的 SLIMIT 子句

SQL 语句为:

  1. select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1 soffset 1

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列是该设备下的第二列,即温度。SQL 语句要求选择时间点“2017-11-01T00:05:00.000”和“2017-11-01T00:12:00.000”之间的温度传感器值。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_时间序列_09

  • 示例 3:SLIMIT 子句与 GROUP BY 子句的组合

SQL 语句为:

  1. select max_value(*) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d) slimit 1 soffset 1

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_时间序列_10

  • 示例 4:SLIMIT 子句与 FILL 子句的组合

SQL 语句为:

  1. select * from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float[previous, 1m]) slimit 1 soffset 1

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列是该设备下的第二列,即温度。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_11

值得注意的是,SLIMIT 子句预计会与星号路径或前缀路径结合使用,当 SLIMIT 子句与完整路径查询结合使用时,系统会提示错误。例如,执行以下 SQL 语句:

  1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1

SQL 语句将不会执行,相应的错误提示如下:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_时间序列_12

对查询结果的行和列控制

除了对查询结果进行行或列控制外,IoTDB 还允许用户控制查询结果的行和列。下面是一个包含 LIMIT 子句和 SLIMIT 子句的完整示例。

SQL 语句为:

  1. select * from root.ln.wf01.wt01 limit 10 offset 100 slimit 2 soffset 0

这意味着:

选择的设备是ln组wf01工厂wt01设备;所选时间序列是此设备下的第 0 到 1 列(第一列编号为 0 列)。SQL 语句子句要求返回查询结果的第 100 到 109 行(第一行编号为第 0 行)。

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_SQL_13

其他结果集格式

此外,IoTDB 还支持另外两种结果集格式:“按设备对齐”和“禁用对齐”。

“按设备对齐”表示将设备 ID 视为一列。因此,数据集中的列完全有限。

SQL 语句为:

  1. select s1,s2 from root.sg1.* GROUP BY DEVICE

有关更多语法说明,请阅读 SQL 参考。

“禁用对齐”表示结果集中每个时间序列有 3 列。有关更多语法说明,请阅读 SQL 参考。

错误处理

当 LIMIT/SLIMIT 的参数 N/SN 超过结果集大小时,IoTDB 将按预期返回所有结果。例如,原始 SQL 语句的查询结果由六行组成,我们通过 LIMIT 子句选择前 100 行:

  1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 limit 100

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_时间序列_14

当 LIMIT/SLIMIT 子句的参数 N/SN 超过允许的最大值(N/SN 的类型为 int32)时,系统将提示错误。例如,执行以下 SQL 语句:

  1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 limit 1234567890123456789

SQL 语句将不会执行,相应的错误提示如下:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_15

当 LIMIT/SLIMIT 子句的参数 N/SN 不是正向时,系统将提示错误。例如,执行以下 SQL 语句:

  1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 limit 13.1

SQL 语句将不会执行,相应的错误提示如下:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_数据类型_16

当 LIMIT 子句的参数 OFFSET 超过结果集的大小时,IoTDB 将返回一个空的结果集。例如,执行以下 SQL 语句:

  1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 limit 2 offset 6

结果如下所示:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_时间序列_17

当SLIMIT子句的参数SOFFSET不小于可用时间序列的数量时,系统将提示错误。例如,执行以下 SQL 语句:

  1. select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1 soffset 2

SQL 语句将不会执行,相应的错误提示如下:

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)_时间序列_18

删除

用户可以删除指定时间序列中满足删除条件的数据,方法是使用删除语句.删除数据时,用户可以选择一个或多个时间序列路径、前缀路径或带星号的路径删除特定时间之前的数据(当前版本不支持在封闭时间间隔内删除数据)。

在 JAVA 编程环境中,您可以使用Java JDBC以执行单个或批处理 UPDATE 语句。

删除单个时间序列

以ln集团为例,存在这样的使用场景:

wf02工厂的wt02设备在2017-11-01 16:26:00之前电源状态存在多段错误,无法正确分析数据。错误数据影响了与其他设备的相关性分析。此时,需要删除此时间点之前的数据。此操作的 SQL 语句为

  1. delete from root.ln.wf02.wt02.status where time<=2017-11-01T16:26:00;

删除多个时间序列

当02-02-2017 11:01:16之前的ln组wf26工厂wt00设备的电源状态和硬件版本都需要删除时,具有更广泛含义的前缀路径或具有星号的路径可用于删除数据。此操作的 SQL 语句为:

  1. delete from root.ln.wf02.wt02 where time <= 2017-11-01T16:26:00;

  1. delete from root.ln.wf02.wt02.* where time <= 2017-11-01T16:26:00;

需要注意的是,当删除的路径不存在时,IoTDB会给出相应的错误提示,如下所示:

  1. IoTDB> delete from root.ln.wf03.wt02.status where time < now()
  2. Msg: TimeSeries does not exist and its data cannot be deleted

标签:11,架构设计,SQL,ln,IoT,语句,子句,2017,10
From: https://blog.51cto.com/u_15123639/7253176

相关文章

  • oracle学习笔记(10)——逻辑存储结构——段
    段是由一个或多个扩展区组成的逻辑存储单元,数据库模式对象在逻辑上是以段来占据表空间的大小,段代表特定数据类型的数据存储结构。1、 段的类型    段分为:数据段、索引段、临时段、回滚段    1)数据段       数据段用来存储表或簇的数据,可以细分为表......
  • 最完美WIN10_Pro_22H2.19045.3393软件选装纯净特别版VIP52.0
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN10_PRO_22H2.19045.3393。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为19045.3393。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • windows10下SQL Prompt安装图文教程
    一、下载安装官网或者教程:www.red-gate.comvs可以去插件库       二、激活失效激活失效:方法1:在本地hosts加入以下代码:127.0.0.1licensing.red-gate.com127.0.0.1www.red-gate.com127.0.0.1red-gate.com127.0.0.1productusage.red-gate.com127.0.......
  • NC20277 [SCOI2010]字符串
    题目链接题目题目描述lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数。现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗?输入描述输入数据是一......
  • 解决win10下ensp连接cloud死机问题
    应用版本:eNSPV100R003C00SPC100VirtualBox-5.2.30-130521-WinWinPcap_4_1_3Wireshark-win64-3.0.3问题现象:链接cloud后 不能ping通 抓包发现好多来自192.168.56.1到192.168.56.2的udp包,一会儿就卡死出现#######可能是虚拟网卡问题,所以创建窗户自带的换回网卡解决问题......
  • 104
    给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例1: 输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2/***Definitionforabinarytreenode.*structTreeNod......
  • 报错test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regre
    问题描述:ubuntu18.04安装opencv4.5.1+contrib报错test_features2d.cpp:51:10:fatalerror:features2d/test/test_detectors_regression.impl.hpp:没有那个文件或目录解决方法如题,报错如下:解决方法:按照报错提示,将opencv-4.5.1/modules中的features2d文件夹一整个复制到ope......
  • 【OpenCV】features2d_converters.cpp:2:10: fatal error: common.h: 没有那个文件或
    Linux环境下使用opencv的dnn模块调用yolov4遇到的坑(纯CPU)一、问题描述Ubuntu安装opencv4.4,第一次编译完成安装成功,发现编译时少加了几个选项,于是重新编译,结果报如下错误:opencv_contrib-4.4.0/modules/xfeatures2d/test/features2d/misc/java/src/cpp/\features2d_converters.cpp:......
  • 暑假的最后10天
    2023-08-2220:03:48星期二从南昌回济南的飞机延误了五个小时,凌晨两点才起飞,从济南还要开车回淄博,到家已经是六点了,累.游记有时间另开一篇随笔进行记录,现在忙着复习教资,临近开学,压力大.大致写一下目前教资的学习情况,给自己明确一下学习任务:教资开始背科二的简答题了,整整100......
  • HCL AppScan Standard v10.3.0 (Windows) - 应用程序安全测试
    HCLAppScanStandardv10.3.0(Windows)-应用程序安全测试请访问原文链接:https://sysin.org/blog/appscan-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgESG技术评论:使用HCLAppScan实现持续的应用程序安全“AppScan通过直接集成到软件开发生命周期来支......