blob: 50810e8cc2a1639b2b254da7dc834080653df447 [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[346],{913:function(s,t,a){"use strict";a.r(t);var e=a(69),n=Object(e.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"dml-数据操作语言"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dml-数据操作语言"}},[s._v("#")]),s._v(" DML (数据操作语言)")]),s._v(" "),a("h2",{attrs:{id:"数据接入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据接入"}},[s._v("#")]),s._v(" 数据接入")]),s._v(" "),a("p",[s._v("IoTDB为用户提供多种插入实时数据的方式,例如在"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Client/Command Line Interface.html"}},[s._v("Cli/Shell工具")]),s._v("中直接输入插入数据的INSERT语句,或使用Java API(标准"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Client/Programming - JDBC.html"}},[s._v("Java JDBC")]),s._v("接口)单条或批量执行插入数据的INSERT语句。")],1),s._v(" "),a("p",[s._v("本节主要为您介绍实时数据接入的INSERT语句在场景中的实际使用示例,有关INSERT SQL语句的详细语法请参见本文"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("INSERT语句")]),s._v("节。")],1),s._v(" "),a("h3",{attrs:{id:"使用insert语句"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#使用insert语句"}},[s._v("#")]),s._v(" 使用INSERT语句")]),s._v(" "),a("p",[s._v("使用INSERT语句可以向指定的已经创建的一条或多条时间序列中插入数据。对于每一条数据,均由一个时间戳类型的时间戳和一个数值或布尔值、字符串类型的传感器采集值组成。")]),s._v(" "),a("p",[s._v("在本节的场景实例下,以其中的两个时间序列"),a("code",[s._v("root.ln.wf02.wt02.status")]),s._v("和"),a("code",[s._v("root.ln.wf02.wt02.hardware")]),s._v("为例 ,它们的数据类型分别为BOOLEAN和TEXT。")]),s._v(" "),a("p",[s._v("单列数据插入示例代码如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('IoTDB > insert into root.ln.wf02.wt02(timestamp,status) values(1,true)\nIoTDB > insert into root.ln.wf02.wt02(timestamp,hardware) values(1, "v1")\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("以上示例代码将长整型的timestamp以及值为true的数据插入到时间序列"),a("code",[s._v("root.ln.wf02.wt02.status")]),s._v("中和将长整型的timestamp以及值为”v1”的数据插入到时间序列"),a("code",[s._v("root.ln.wf02.wt02.hardware")]),s._v("中。执行成功后会返回执行时间,代表数据插入已完成。")]),s._v(" "),a("blockquote",[a("p",[s._v("注意:在IoTDB中,TEXT类型的数据单双引号都可以来表示,上面的插入语句是用的是双引号表示TEXT类型数据,下面的示例将使用单引号表示TEXT类型数据。")])]),s._v(" "),a("p",[s._v("INSERT语句还可以支持在同一个时间点下多列数据的插入,同时向2时间点插入上述两个时间序列的值,多列数据插入示例代码如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (2, false, 'v2')\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("插入数据后我们可以使用SELECT语句简单查询已插入的数据。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB > select * from root.ln.wf02 where time < 3\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果如图所示。由查询结果可以看出,单列、多列数据的插入操作正确执行。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+--------------------------+------------------------+\n| Time|root.ln.wf02.wt02.hardware|root.ln.wf02.wt02.status|\n+-----------------------------+--------------------------+------------------------+\n|1970-01-01T08:00:00.001+08:00| v1| true|\n|1970-01-01T08:00:00.002+08:00| v2| false|\n+-----------------------------+--------------------------+------------------------+\nTotal line number = 2\nIt costs 0.170s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h2",{attrs:{id:"数据查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据查询"}},[s._v("#")]),s._v(" 数据查询")]),s._v(" "),a("h3",{attrs:{id:"时间切片查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#时间切片查询"}},[s._v("#")]),s._v(" 时间切片查询")]),s._v(" "),a("p",[s._v("本节主要介绍时间切片查询的相关示例,主要使用的是"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("IoTDB SELECT语句")]),s._v("。同时,您也可以使用"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Client/Programming - JDBC.html"}},[s._v("Java JDBC")]),s._v("标准接口来执行相关的查询语句。")],1),s._v(" "),a("h4",{attrs:{id:"根据一个时间区间选择一列数据"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#根据一个时间区间选择一列数据"}},[s._v("#")]),s._v(" 根据一个时间区间选择一列数据")]),s._v(" "),a("p",[s._v("SQL语句为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select temperature from root.ln.wf01.wt01 where time < 2017-11-01T00:08:00.000\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("其含义为:")]),s._v(" "),a("p",[s._v("被选择的设备为ln集团wf01子站wt01设备;被选择的时间序列为温度传感器(temperature);该语句要求选择出该设备在“2017-11-01T00:08:00.000”(此处可以使用多种时间格式,详情可参看"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Concept/Data Model and Terminology.html"}},[s._v("2.1节")]),s._v(")时间点以前的所有温度传感器的值。")],1),s._v(" "),a("p",[s._v("该SQL语句的执行结果如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.temperature|\n+-----------------------------+-----------------------------+\n|2017-11-01T00:00:00.000+08:00| 25.96|\n|2017-11-01T00:01:00.000+08:00| 24.36|\n|2017-11-01T00:02:00.000+08:00| 20.09|\n|2017-11-01T00:03:00.000+08:00| 20.18|\n|2017-11-01T00:04:00.000+08:00| 21.13|\n|2017-11-01T00:05:00.000+08:00| 22.72|\n|2017-11-01T00:06:00.000+08:00| 20.71|\n|2017-11-01T00:07:00.000+08:00| 21.45|\n+-----------------------------+-----------------------------+\nTotal line number = 8\nIt costs 0.026s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("h4",{attrs:{id:"根据一个时间区间选择多列数据"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#根据一个时间区间选择多列数据"}},[s._v("#")]),s._v(" 根据一个时间区间选择多列数据")]),s._v(" "),a("p",[s._v("SQL语句为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select status, temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("其含义为:")]),s._v(" "),a("p",[s._v("被选择的设备为ln集团wf01子站wt01设备;被选择的时间序列为供电状态(status)和温度传感器(temperature);该语句要求选择出“2017-11-01T00:05:00.000”至“2017-11-01T00:12:00.000”之间的所选时间序列的值。")]),s._v(" "),a("p",[s._v("该SQL语句的执行结果如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+-----------------------------+------------------------+-----------------------------+\n|2017-11-01T00:06:00.000+08:00| false| 20.71|\n|2017-11-01T00:07:00.000+08:00| false| 21.45|\n|2017-11-01T00:08:00.000+08:00| false| 22.58|\n|2017-11-01T00:09:00.000+08:00| false| 20.98|\n|2017-11-01T00:10:00.000+08:00| true| 25.52|\n|2017-11-01T00:11:00.000+08:00| false| 22.91|\n+-----------------------------+------------------------+-----------------------------+\nTotal line number = 6\nIt costs 0.018s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("h4",{attrs:{id:"按照多个时间区间选择同一设备的多列数据"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#按照多个时间区间选择同一设备的多列数据"}},[s._v("#")]),s._v(" 按照多个时间区间选择同一设备的多列数据")]),s._v(" "),a("p",[s._v("IoTDB支持在一次查询中指定多个时间区间条件,用户可以根据需求随意组合时间区间条件。例如,")]),s._v(" "),a("p",[s._v("SQL语句为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select status,temperature from root.ln.wf01.wt01 where (time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000) or (time >= 2017-11-01T16:35:00.000 and time <= 2017-11-01T16:37:00.000);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("其含义为:")]),s._v(" "),a("p",[s._v("被选择的设备为ln集团wf01子站wt01设备;被选择的时间序列为“供电状态(status)”和“温度传感器(temperature)”;该语句指定了两个不同的时间区间,分别为“2017-11-01T00:05:00.000至2017-11-01T00:12:00.000”和“2017-11-01T16:35:00.000至2017-11-01T16:37:00.000”;该语句要求选择出满足任一时间区间的被选时间序列的值。")]),s._v(" "),a("p",[s._v("该SQL语句的执行结果如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+-----------------------------+------------------------+-----------------------------+\n|2017-11-01T00:06:00.000+08:00| false| 20.71|\n|2017-11-01T00:07:00.000+08:00| false| 21.45|\n|2017-11-01T00:08:00.000+08:00| false| 22.58|\n|2017-11-01T00:09:00.000+08:00| false| 20.98|\n|2017-11-01T00:10:00.000+08:00| true| 25.52|\n|2017-11-01T00:11:00.000+08:00| false| 22.91|\n|2017-11-01T16:35:00.000+08:00| true| 23.44|\n|2017-11-01T16:36:00.000+08:00| false| 21.98|\n|2017-11-01T16:37:00.000+08:00| false| 21.93|\n+-----------------------------+------------------------+-----------------------------+\nTotal line number = 9\nIt costs 0.018s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h4",{attrs:{id:"按照多个时间区间选择不同设备的多列数据"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#按照多个时间区间选择不同设备的多列数据"}},[s._v("#")]),s._v(" 按照多个时间区间选择不同设备的多列数据")]),s._v(" "),a("p",[s._v("该系统支持在一次查询中选择任意列的数据,也就是说,被选择的列可以来源于不同的设备。例如,SQL语句为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select wf01.wt01.status,wf02.wt02.hardware from root.ln where (time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000) or (time >= 2017-11-01T16:35:00.000 and time <= 2017-11-01T16:37:00.000);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("其含义为:")]),s._v(" "),a("p",[s._v("被选择的时间序列为“ln集团wf01子站wt01设备的供电状态”以及“ln集团wf02子站wt02设备的硬件版本”;该语句指定了两个时间区间,分别为“2017-11-01T00:05:00.000至2017-11-01T00:12:00.000”和“2017-11-01T16:35:00.000至2017-11-01T16:37:00.000”;该语句要求选择出满足任意时间区间的被选时间序列的值。")]),s._v(" "),a("p",[s._v("该SQL语句的执行结果如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+--------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf02.wt02.hardware|\n+-----------------------------+------------------------+--------------------------+\n|2017-11-01T00:06:00.000+08:00| false| v1|\n|2017-11-01T00:07:00.000+08:00| false| v1|\n|2017-11-01T00:08:00.000+08:00| false| v1|\n|2017-11-01T00:09:00.000+08:00| false| v1|\n|2017-11-01T00:10:00.000+08:00| true| v2|\n|2017-11-01T00:11:00.000+08:00| false| v1|\n|2017-11-01T16:35:00.000+08:00| true| v2|\n|2017-11-01T16:36:00.000+08:00| false| v1|\n|2017-11-01T16:37:00.000+08:00| false| v1|\n+-----------------------------+------------------------+--------------------------+\nTotal line number = 9\nIt costs 0.014s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h4",{attrs:{id:"根据时间降序返回"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#根据时间降序返回"}},[s._v("#")]),s._v(" 根据时间降序返回")]),s._v(" "),a("p",[s._v("IoTDB 在 0.11 版本开始支持 'order by time' 语句, 用于对结果按照时间进行降序展示。例如,SQL语句为:")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("ln "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("time")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("order")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("by")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("time")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("desc")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("limit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("语句执行的结果为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+--------------------------+------------------------+-----------------------------+------------------------+\n| Time|root.ln.wf02.wt02.hardware|root.ln.wf02.wt02.status|root.ln.wf01.wt01.temperature|root.ln.wf01.wt01.status|\n+-----------------------------+--------------------------+------------------------+-----------------------------+------------------------+\n|2017-11-07T23:59:00.000+08:00| v1| false| 21.07| false|\n|2017-11-07T23:58:00.000+08:00| v1| false| 22.93| false|\n|2017-11-07T23:57:00.000+08:00| v2| true| 24.39| true|\n|2017-11-07T23:56:00.000+08:00| v2| true| 24.44| true|\n|2017-11-07T23:55:00.000+08:00| v2| true| 25.9| true|\n|2017-11-07T23:54:00.000+08:00| v1| false| 22.52| false|\n|2017-11-07T23:53:00.000+08:00| v2| true| 24.58| true|\n|2017-11-07T23:52:00.000+08:00| v1| false| 20.18| false|\n|2017-11-07T23:51:00.000+08:00| v1| false| 22.24| false|\n|2017-11-07T23:50:00.000+08:00| v2| true| 23.7| true|\n+-----------------------------+--------------------------+------------------------+-----------------------------+------------------------+\nTotal line number = 10\nIt costs 0.016s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("p",[s._v("更多语法请参照 "),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("SQL REFERENCE")]),s._v(".")],1),s._v(" "),a("h4",{attrs:{id:"其他结果返回形式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#其他结果返回形式"}},[s._v("#")]),s._v(" 其他结果返回形式")]),s._v(" "),a("p",[s._v("IoTDB支持另外两种结果返回形式: 按设备时间对齐 'align by device' 和 时序不对齐 'disable align'.")]),s._v(" "),a("p",[s._v("'align by device' 对齐方式下,设备ID会单独作为一列出现。在 select 子句中写了多少列,最终结果就会有该列数+2 (时间列和设备名字列)。SQL形如:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select * from root.ln.* where time <= 2017-11-01T00:01:00 align by device\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------+-----------+------+--------+\n| Time| Device|temperature|status|hardware|\n+-----------------------------+-----------------+-----------+------+--------+\n|2017-11-01T00:00:00.000+08:00|root.ln.wf01.wt01| 25.96| true| null|\n|2017-11-01T00:01:00.000+08:00|root.ln.wf01.wt01| 24.36| true| null|\n|1970-01-01T08:00:00.001+08:00|root.ln.wf02.wt02| null| true| v1|\n|1970-01-01T08:00:00.002+08:00|root.ln.wf02.wt02| null| false| v2|\n|2017-11-01T00:00:00.000+08:00|root.ln.wf02.wt02| null| true| v2|\n|2017-11-01T00:01:00.000+08:00|root.ln.wf02.wt02| null| true| v2|\n+-----------------------------+-----------------+-----------+------+--------+\nTotal line number = 6\nIt costs 0.012s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("'disable align' 意味着每条时序就有 2 列存在。Disable Align只能用于查询语句句尾,不能用于聚合查询、Fill语句、Group by或Group by device语句,但可用于Limit语句。结果显示若无数据显示为空白。")]),s._v(" "),a("p",[s._v("SQL形如:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select * from root.ln.* where time <= 2017-11-01T00:01:00 disable align\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+\n| Time|root.ln.wf02.wt02.hardware| Time|root.ln.wf02.wt02.status| Time|root.ln.wf01.wt01.temperature| Time|root.ln.wf01.wt01.status|\n+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+\n|1970-01-01T08:00:00.001+08:00| v1|1970-01-01T08:00:00.001+08:00| true|2017-11-01T00:00:00.000+08:00| 25.96|2017-11-01T00:00:00.000+08:00| true|\n|1970-01-01T08:00:00.002+08:00| v2|1970-01-01T08:00:00.002+08:00| false|2017-11-01T00:01:00.000+08:00| 24.36|2017-11-01T00:01:00.000+08:00| true|\n|2017-11-01T00:00:00.000+08:00| v2|2017-11-01T00:00:00.000+08:00| true| null| null| null| null|\n|2017-11-01T00:01:00.000+08:00| v2|2017-11-01T00:01:00.000+08:00| true| null| null| null| null|\n+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+\nTotal line number = 4\nIt costs 0.018s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("更多语法请参照"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("SQL REFERENCE")]),s._v("。")],1),s._v(" "),a("h3",{attrs:{id:"时间序列生成函数查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#时间序列生成函数查询"}},[s._v("#")]),s._v(" 时间序列生成函数查询")]),s._v(" "),a("p",[s._v("时间序列生成函数可接受若干原始时间序列作为输入,产生一列时间序列输出。与聚合函数不同的是,时间序列生成函数的结果集带有时间戳列。")]),s._v(" "),a("p",[s._v("所有的时间序列生成函数都可以接受 * 作为输入,都可以与原始查询混合进行。")]),s._v(" "),a("h4",{attrs:{id:"数学函数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数学函数"}},[s._v("#")]),s._v(" 数学函数")]),s._v(" "),a("p",[s._v("目前IoTDB支持下列数学函数,这些数学函数的行为与这些函数在Java Math标准库中对应实现的行为一致。")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("函数名")]),s._v(" "),a("th",[s._v("输入序列类型")]),s._v(" "),a("th",[s._v("输出序列类型")]),s._v(" "),a("th",[s._v("Java标准库中的对应实现")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("SIN")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#sin(double)")])]),s._v(" "),a("tr",[a("td",[s._v("COS")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#cos(double)")])]),s._v(" "),a("tr",[a("td",[s._v("TAN")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#tan(double)")])]),s._v(" "),a("tr",[a("td",[s._v("ASIN")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#asin(double)")])]),s._v(" "),a("tr",[a("td",[s._v("ACOS")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#acos(double)")])]),s._v(" "),a("tr",[a("td",[s._v("ATAN")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#atan(double)")])]),s._v(" "),a("tr",[a("td",[s._v("DEGREES")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#toDegrees(double)")])]),s._v(" "),a("tr",[a("td",[s._v("RADIANS")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#toRadians(double)")])]),s._v(" "),a("tr",[a("td",[s._v("ABS")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("与输入序列的实际类型一致")]),s._v(" "),a("td",[s._v("Math#abs(int) / Math#abs(long) /Math#abs(float) /Math#abs(double)")])]),s._v(" "),a("tr",[a("td",[s._v("SIGN")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#signum(double)")])]),s._v(" "),a("tr",[a("td",[s._v("CEIL")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#ceil(double)")])]),s._v(" "),a("tr",[a("td",[s._v("FLOOR")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#floor(double)")])]),s._v(" "),a("tr",[a("td",[s._v("ROUND")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#rint(double)")])]),s._v(" "),a("tr",[a("td",[s._v("EXP")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#exp(double)")])]),s._v(" "),a("tr",[a("td",[s._v("LN")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#log(double)")])]),s._v(" "),a("tr",[a("td",[s._v("LOG10")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#log10(double)")])]),s._v(" "),a("tr",[a("td",[s._v("SQRT")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("Math#sqrt(double)")])])])]),s._v(" "),a("p",[s._v("例如:")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" cos"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" tan"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sg1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("d1 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("limit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("offset")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------+-------------------+--------------------+-------------------+\n| Time| root.sg1.d1.s1|sin(root.sg1.d1.s1)| cos(root.sg1.d1.s1)|tan(root.sg1.d1.s1)|\n+-----------------------------+-------------------+-------------------+--------------------+-------------------+\n|2020-12-10T17:11:49.037+08:00|7360723084922759782| 0.8133527237573284| 0.5817708713544664| 1.3980636773094157|\n|2020-12-10T17:11:49.038+08:00|4377791063319964531|-0.8938962705202537| 0.4482738644511651| -1.994085181866842|\n|2020-12-10T17:11:49.039+08:00|7972485567734642915| 0.9627757585308978|-0.27030138509681073|-3.5618602479083545|\n|2020-12-10T17:11:49.040+08:00|2508858212791964081|-0.6073417341629443| -0.7944406950452296| 0.7644897069734913|\n|2020-12-10T17:11:49.041+08:00|2817297431185141819|-0.8419358900502509| -0.5395775727782725| 1.5603611649667768|\n+-----------------------------+-------------------+-------------------+--------------------+-------------------+\nTotal line number = 5\nIt costs 0.008s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h4",{attrs:{id:"字符串函数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#字符串函数"}},[s._v("#")]),s._v(" 字符串函数")]),s._v(" "),a("p",[s._v("目前IoTDB支持下列字符串处理函数:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("函数名")]),s._v(" "),a("th",[s._v("输入序列类型")]),s._v(" "),a("th",[s._v("必要的属性参数")]),s._v(" "),a("th",[s._v("输出序列类型")]),s._v(" "),a("th",[s._v("功能描述")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("STRING_CONTAINS")]),s._v(" "),a("td",[s._v("TEXT")]),s._v(" "),a("td",[a("code",[s._v("s")]),s._v(": 待搜寻的字符串")]),s._v(" "),a("td",[s._v("BOOLEAN")]),s._v(" "),a("td",[s._v("判断字符串中是否存在"),a("code",[s._v("s")])])]),s._v(" "),a("tr",[a("td",[s._v("STRING_MATCHES")]),s._v(" "),a("td",[s._v("TEXT")]),s._v(" "),a("td",[a("code",[s._v("regex")]),s._v(": Java标准库风格的正则表达式")]),s._v(" "),a("td",[s._v("BOOLEAN")]),s._v(" "),a("td",[s._v("判断字符串是否能够被正则表达式"),a("code",[s._v("regex")]),s._v("匹配")])])])]),s._v(" "),a("p",[s._v("例如:")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" string_contains"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"s"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"warn"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" string_matches"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"regex"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"[^\\\\s]+37229"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sg1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("d4"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('+-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+\n| Time|root.sg1.d4.s1|string_contains(root.sg1.d4.s1, "s"="warn")|string_matches(root.sg1.d4.s1, "regex"="[^\\\\s]+37229")|\n+-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+\n|1970-01-01T08:00:00.001+08:00| warn:-8721| true| false|\n|1970-01-01T08:00:00.002+08:00| error:-37229| false| true|\n|1970-01-01T08:00:00.003+08:00| warn:1731| true| false|\n+-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+\nTotal line number = 3\nIt costs 0.007s\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("h4",{attrs:{id:"选择函数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#选择函数"}},[s._v("#")]),s._v(" 选择函数")]),s._v(" "),a("p",[s._v("目前IoTDB支持如下选择函数:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("函数名")]),s._v(" "),a("th",[s._v("输入序列类型")]),s._v(" "),a("th",[s._v("必要的属性参数")]),s._v(" "),a("th",[s._v("输出序列类型")]),s._v(" "),a("th",[s._v("功能描述")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("TOP_K")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE / TEXT")]),s._v(" "),a("td",[a("code",[s._v("k")]),s._v(": 最多选择的数据点数,必须大于0小于等于1000")]),s._v(" "),a("td",[s._v("与输入序列的实际类型一致")]),s._v(" "),a("td",[s._v("返回某时间序列中值最大的"),a("code",[s._v("k")]),s._v("个数据点。若多于"),a("code",[s._v("k")]),s._v("个数据点的值并列最大,则返回时间戳最小的数据点。")])]),s._v(" "),a("tr",[a("td",[s._v("BOTTOM_K")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE / TEXT")]),s._v(" "),a("td",[a("code",[s._v("k")]),s._v(": 最多选择的数据点数,必须大于0小于等于1000")]),s._v(" "),a("td",[s._v("与输入序列的实际类型一致")]),s._v(" "),a("td",[s._v("返回某时间序列中值最小的"),a("code",[s._v("k")]),s._v("个数据点。若多于"),a("code",[s._v("k")]),s._v("个数据点的值并列最小,则返回时间戳最小的数据点。")])])])]),s._v(" "),a("p",[s._v("例如:")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" top_k"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"k"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" bottom_k"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"k"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sg1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("d2 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("time")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2020")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("12")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v("T20:"),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("36")]),s._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("15.530")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("08")]),s._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("00")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('+-----------------------------+--------------------+------------------------------+---------------------------------+\n| Time| root.sg1.d2.s1|top_k(root.sg1.d2.s1, "k"="2")|bottom_k(root.sg1.d2.s1, "k"="2")|\n+-----------------------------+--------------------+------------------------------+---------------------------------+\n|2020-12-10T20:36:15.531+08:00| 1531604122307244742| 1531604122307244742| null|\n|2020-12-10T20:36:15.532+08:00|-7426070874923281101| null| null|\n|2020-12-10T20:36:15.533+08:00|-7162825364312197604| -7162825364312197604| null|\n|2020-12-10T20:36:15.534+08:00|-8581625725655917595| null| -8581625725655917595|\n|2020-12-10T20:36:15.535+08:00|-7667364751255535391| null| -7667364751255535391|\n+-----------------------------+--------------------+------------------------------+---------------------------------+\nTotal line number = 5\nIt costs 0.006s\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h4",{attrs:{id:"趋势计算函数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#趋势计算函数"}},[s._v("#")]),s._v(" 趋势计算函数")]),s._v(" "),a("p",[s._v("目前IoTDB支持如下趋势计算函数:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("函数名")]),s._v(" "),a("th",[s._v("输入序列类型")]),s._v(" "),a("th",[s._v("输出序列类型")]),s._v(" "),a("th",[s._v("功能描述")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("TIME_DIFFERENCE")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE / BOOLEAN / TEXT")]),s._v(" "),a("td",[s._v("INT64")]),s._v(" "),a("td",[s._v("统计序列中某数据点的时间戳与前一数据点时间戳的差。范围内第一个数据点没有对应的结果输出。")])]),s._v(" "),a("tr",[a("td",[s._v("DIFFERENCE")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("与输入序列的实际类型一致")]),s._v(" "),a("td",[s._v("统计序列中某数据点的值与前一数据点的值的差。范围内第一个数据点没有对应的结果输出。")])]),s._v(" "),a("tr",[a("td",[s._v("NON_NEGATIVE_DIFFERENCE")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("与输入序列的实际类型一致")]),s._v(" "),a("td",[s._v("统计序列中某数据点的值与前一数据点的值的差的绝对值。范围内第一个数据点没有对应的结果输出。")])]),s._v(" "),a("tr",[a("td",[s._v("DERIVATIVE")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("统计序列中某数据点相对于前一数据点的变化率,数量上等同于 DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。")])]),s._v(" "),a("tr",[a("td",[s._v("NON_NEGATIVE_DERIVATIVE")]),s._v(" "),a("td",[s._v("INT32 / INT64 / FLOAT / DOUBLE")]),s._v(" "),a("td",[s._v("DOUBLE")]),s._v(" "),a("td",[s._v("统计序列中某数据点相对于前一数据点的变化率的绝对值,数量上等同于 NON_NEGATIVE_DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。")])])])]),s._v(" "),a("p",[s._v("例如:")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" time_difference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" difference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" non_negative_difference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" derivative"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" non_negative_derivative"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("s1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sg1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("d1 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("limit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("offset")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+\n| Time| root.sg1.d1.s1|time_difference(root.sg1.d1.s1)|difference(root.sg1.d1.s1)|non_negative_difference(root.sg1.d1.s1)|derivative(root.sg1.d1.s1)|non_negative_derivative(root.sg1.d1.s1)|\n+-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+\n|2020-12-10T17:11:49.037+08:00|7360723084922759782| 1| -8431715764844238876| 8431715764844238876| -8.4317157648442388E18| 8.4317157648442388E18|\n|2020-12-10T17:11:49.038+08:00|4377791063319964531| 1| -2982932021602795251| 2982932021602795251| -2.982932021602795E18| 2.982932021602795E18|\n|2020-12-10T17:11:49.039+08:00|7972485567734642915| 1| 3594694504414678384| 3594694504414678384| 3.5946945044146785E18| 3.5946945044146785E18|\n|2020-12-10T17:11:49.040+08:00|2508858212791964081| 1| -5463627354942678834| 5463627354942678834| -5.463627354942679E18| 5.463627354942679E18|\n|2020-12-10T17:11:49.041+08:00|2817297431185141819| 1| 308439218393177738| 308439218393177738| 3.0843921839317773E17| 3.0843921839317773E17|\n+-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+\nTotal line number = 5\nIt costs 0.014s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h4",{attrs:{id:"自定义序列生成函数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#自定义序列生成函数"}},[s._v("#")]),s._v(" 自定义序列生成函数")]),s._v(" "),a("p",[s._v("请参考 "),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/UDF User Defined Function.html"}},[s._v("UDF (用户定义函数)")]),s._v("。")],1),s._v(" "),a("h3",{attrs:{id:"聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#聚合查询"}},[s._v("#")]),s._v(" 聚合查询")]),s._v(" "),a("p",[s._v("本章节主要介绍聚合查询的相关示例,\n主要使用的是IoTDB SELECT语句的聚合查询函数。")]),s._v(" "),a("h4",{attrs:{id:"统计总点数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#统计总点数"}},[s._v("#")]),s._v(" 统计总点数")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.wt01;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-------------------------------+\n|count(root.ln.wf01.wt01.status)|\n+-------------------------------+\n| 10080|\n+-------------------------------+\nTotal line number = 1\nIt costs 0.016s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h4",{attrs:{id:"分层聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#分层聚合查询"}},[s._v("#")]),s._v(" 分层聚合查询")]),s._v(" "),a("p",[s._v('在时间序列层级结构中,分层聚合查询用于对某一层级进行聚合查询。\n这里使用LEVEL来统计指定层级下的聚合范围,该语句约定root为第0层序列,若统计"root.ln"下所有序列则需指定level为1。')]),s._v(" "),a("p",[s._v('例如:在"root.ln.wf01"下存在多个子序列:wt01,wt02,wt03等均有名为status的序列,\n如果需要统计这些子序列的status包含的点个数,使用以下查询:')]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.* group by level=2\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("运行结果为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+----------------------------+\n|count(root.ln.wf01.*.status)|\n+----------------------------+\n| 10080|\n+----------------------------+\nTotal line number = 1\nIt costs 0.003s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v('假设此时添加两条序列,"root.ln.wf01.wt01.temperature" and "root.ln.wf02.wt01.temperature"。\n需要同时查询"root.ln.*.*.temperature"在第二层级的count聚合结果和sum聚合结果,可以使用下列查询语句:')]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(temperature), sum(temperature) from root.ln.*.* group by level=2\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("运行结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+---------------------------------+---------------------------------+-------------------------------+-------------------------------+\n|count(root.ln.wf02.*.temperature)|count(root.ln.wf01.*.temperature)|sum(root.ln.wf02.*.temperature)|sum(root.ln.wf01.*.temperature)|\n+---------------------------------+---------------------------------+-------------------------------+-------------------------------+\n| 8| 4| 228.0| 91.83000183105469|\n+---------------------------------+---------------------------------+-------------------------------+-------------------------------+\nTotal line number = 1\nIt costs 0.013s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v('若统计"root.ln.*.*"下第一层级的count聚合结果和sum聚合结果,则设置level=1即可:')]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(temperature), sum(temperature) from root.ln.*.* group by level=1\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("运行结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+------------------------------+----------------------------+\n|count(root.ln.*.*.temperature)|sum(root.ln.*.*.temperature)|\n+------------------------------+----------------------------+\n| 12| 319.8300018310547|\n+------------------------------+----------------------------+\nTotal line number = 1\nIt costs 0.013s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("分层聚合查询也可被用于其他聚合函数,当前所支持的聚合函数为:count, sum, avg, last_value, first_value, min_time, max_time, min_value, max_value")]),s._v(" "),a("p",[s._v("对于sum, avg, min_value, max_value四种聚合函数,需保证所有聚合的时间序列数据类型相同。其他聚合函数没有此限制。")]),s._v(" "),a("h3",{attrs:{id:"降频聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#降频聚合查询"}},[s._v("#")]),s._v(" 降频聚合查询")]),s._v(" "),a("p",[s._v("本章节主要介绍降频聚合查询的相关示例,\n主要使用的是IoTDB SELECT语句的"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("GROUP BY子句")]),s._v(",\n该子句是IoTDB中用于根据用户给定划分条件对结果集进行划分,并对已划分的结果集进行聚合计算的语句。\nIoTDB支持根据时间间隔和自定义的滑动步长(默认值与时间间隔相同,自定义的值必须大于等于时间间隔)对结果集进行划分,默认结果按照时间升序排列。\n同时,您也可以使用Java JDBC标准接口来执行相关的查询语句。")],1),s._v(" "),a("p",[s._v("GROUP BY语句为用户提供三类指定参数:")]),s._v(" "),a("ul",[a("li",[s._v("参数1:时间轴显示时间窗参数")]),s._v(" "),a("li",[s._v("参数2:划分时间轴的时间间隔参数(必须为正数)")]),s._v(" "),a("li",[s._v("参数3:滑动步长(可选参数,默认值与时间间隔相同,自定义的值必须大于等于时间间隔)")])]),s._v(" "),a("p",[s._v("三类参数的实际含义已经在图5.2中指出,这三类参数里,第三个参数是可选的。\n接下来,我们将给出三种典型的降频聚合查询的例子:\n滑动步长未指定,\n指定滑动步长,\n带值过滤条件。")]),s._v(" "),a("center",[a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/16079446/69109512-f808bc80-0ab2-11ea-9e4d-b2b2f58fb474.png"}}),s._v("\n**图 5.2 三类参数的实际含义**")]),s._v(" "),a("h4",{attrs:{id:"未指定滑动步长的降频聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#未指定滑动步长的降频聚合查询"}},[s._v("#")]),s._v(" 未指定滑动步长的降频聚合查询")]),s._v(" "),a("p",[s._v("对应的SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("这条查询的含义是:")]),s._v(" "),a("p",[s._v("由于用户没有指定滑动步长,滑动步长将会被默认设置为跟时间间隔参数相同,也就是"),a("code",[s._v("1d")]),s._v("。")]),s._v(" "),a("p",[s._v("上面这个例子的第一个参数是显示窗口参数,决定了最终的显示范围是[2017-11-01T00:00:00, 2017-11-07T23:00:00)。")]),s._v(" "),a("p",[s._v("上面这个例子的第二个参数是划分时间轴的时间间隔参数,将"),a("code",[s._v("1d")]),s._v("当作划分间隔,显示窗口参数的起始时间当作分割原点,时间轴即被划分为连续的时间间隔:[0,1d), [1d, 2d), [2d, 3d)等等。")]),s._v(" "),a("p",[s._v("然后系统将会用WHERE子句中的时间和值过滤条件以及GROUP BY语句中的第一个参数作为数据的联合过滤条件,获得满足所有过滤条件的数据(在这个例子里是在[2017-11-01T00:00:00, 2017-11-07 T23:00:00)这个时间范围的数据),并把这些数据映射到之前分割好的时间轴中(这个例子里是从2017-11-01T00:00:00到2017-11-07T23:00:00:00的每一天)")]),s._v(" "),a("p",[s._v("每个时间间隔窗口内都有数据,SQL执行后的结果集如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+----------------------------------------+\n| Time|count(root.ln.wf01.wt01.status)|max_value(root.ln.wf01.wt01.temperature)|\n+-----------------------------+-------------------------------+----------------------------------------+\n|2017-11-01T00:00:00.000+08:00| 1440| 26.0|\n|2017-11-02T00:00:00.000+08:00| 1440| 26.0|\n|2017-11-03T00:00:00.000+08:00| 1440| 25.99|\n|2017-11-04T00:00:00.000+08:00| 1440| 26.0|\n|2017-11-05T00:00:00.000+08:00| 1440| 26.0|\n|2017-11-06T00:00:00.000+08:00| 1440| 25.99|\n|2017-11-07T00:00:00.000+08:00| 1380| 26.0|\n+-----------------------------+-------------------------------+----------------------------------------+\nTotal line number = 7\nIt costs 0.024s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h4",{attrs:{id:"指定滑动步长的降频聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#指定滑动步长的降频聚合查询"}},[s._v("#")]),s._v(" 指定滑动步长的降频聚合查询")]),s._v(" "),a("p",[s._v("对应的SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-07 23:00:00), 3h, 1d);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("这条查询的含义是:")]),s._v(" "),a("p",[s._v("由于用户指定了滑动步长为"),a("code",[s._v("1d")]),s._v(",GROUP BY语句执行时将会每次把时间间隔往后移动一天的步长,而不是默认的3小时。")]),s._v(" "),a("p",[s._v("也就意味着,我们想要取从2017-11-01到2017-11-07每一天的凌晨0点到凌晨3点的数据。")]),s._v(" "),a("p",[s._v("上面这个例子的第一个参数是显示窗口参数,决定了最终的显示范围是[2017-11-01T00:00:00, 2017-11-07T23:00:00)。")]),s._v(" "),a("p",[s._v("上面这个例子的第二个参数是划分时间轴的时间间隔参数,将"),a("code",[s._v("3h")]),s._v("当作划分间隔,显示窗口参数的起始时间当作分割原点,时间轴即被划分为连续的时间间隔:[2017-11-01T00:00:00, 2017-11-01T03:00:00), [2017-11-02T00:00:00, 2017-11-02T03:00:00), [2017-11-03T00:00:00, 2017-11-03T03:00:00)等等。")]),s._v(" "),a("p",[s._v("上面这个例子的第三个参数是每次时间间隔的滑动步长。")]),s._v(" "),a("p",[s._v("然后系统将会用WHERE子句中的时间和值过滤条件以及GROUP BY语句中的第一个参数作为数据的联合过滤条件,获得满足所有过滤条件的数据(在这个例子里是在[2017-11-01T00:00:00, 2017-11-07 T23:00:00)这个时间范围的数据),并把这些数据映射到之前分割好的时间轴中(这个例子里是从2017-11-01T00:00:00到2017-11-07T23:00:00:00的每一天的凌晨0点到凌晨3点)")]),s._v(" "),a("p",[s._v("每个时间间隔窗口内都有数据,SQL执行后的结果集如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+----------------------------------------+\n| Time|count(root.ln.wf01.wt01.status)|max_value(root.ln.wf01.wt01.temperature)|\n+-----------------------------+-------------------------------+----------------------------------------+\n|2017-11-01T00:00:00.000+08:00| 180| 25.98|\n|2017-11-02T00:00:00.000+08:00| 180| 25.98|\n|2017-11-03T00:00:00.000+08:00| 180| 25.96|\n|2017-11-04T00:00:00.000+08:00| 180| 25.96|\n|2017-11-05T00:00:00.000+08:00| 180| 26.0|\n|2017-11-06T00:00:00.000+08:00| 180| 25.85|\n|2017-11-07T00:00:00.000+08:00| 180| 25.99|\n+-----------------------------+-------------------------------+----------------------------------------+\nTotal line number = 7\nIt costs 0.006s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h4",{attrs:{id:"按照自然月份的降频聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#按照自然月份的降频聚合查询"}},[s._v("#")]),s._v(" 按照自然月份的降频聚合查询")]),s._v(" "),a("p",[s._v("对应的SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.wt01 where time > 2017-11-01T01:00:00 group by([2017-11-01T00:00:00, 2019-11-07T23:00:00), 1mo, 2mo);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("这条查询的含义是:")]),s._v(" "),a("p",[s._v("由于用户指定了滑动步长为"),a("code",[s._v("2mo")]),s._v(",GROUP BY语句执行时将会每次把时间间隔往后移动2个自然月的步长,而不是默认的1个自然月。")]),s._v(" "),a("p",[s._v("也就意味着,我们想要取从2017-11-01到2019-11-07每2个自然月的第一个月的数据。")]),s._v(" "),a("p",[s._v("上面这个例子的第一个参数是显示窗口参数,决定了最终的显示范围是[2017-11-01T00:00:00, 2019-11-07T23:00:00)。")]),s._v(" "),a("p",[s._v("起始时间为2017-11-01T00:00:00,滑动步长将会以起始时间作为标准按月递增,取当月的1号作为时间间隔的起始时间。")]),s._v(" "),a("p",[s._v("上面这个例子的第二个参数是划分时间轴的时间间隔参数,将"),a("code",[s._v("1mo")]),s._v("当作划分间隔,显示窗口参数的起始时间当作分割原点,时间轴即被划分为连续的时间间隔:[2017-11-01T00:00:00, 2017-12-01T00:00:00), [2018-02-01T00:00:00, 2018-03-01T00:00:00), [2018-05-03T00:00:00, 2018-06-01T00:00:00)等等。")]),s._v(" "),a("p",[s._v("上面这个例子的第三个参数是每次时间间隔的滑动步长。")]),s._v(" "),a("p",[s._v("然后系统将会用WHERE子句中的时间和值过滤条件以及GROUP BY语句中的第一个参数作为数据的联合过滤条件,获得满足所有过滤条件的数据(在这个例子里是在[2017-11-01T00:00:00, 2019-11-07T23:00:00)这个时间范围的数据),并把这些数据映射到之前分割好的时间轴中(这个例子里是从2017-11-01T00:00:00到2019-11-07T23:00:00:00的每两个自然月的第一个月)")]),s._v(" "),a("p",[s._v("每个时间间隔窗口内都有数据,SQL执行后的结果集如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+\n| Time|count(root.ln.wf01.wt01.status)|\n+-----------------------------+-------------------------------+\n|2017-11-01T00:00:00.000+08:00| 259|\n|2018-01-01T00:00:00.000+08:00| 250|\n|2018-03-01T00:00:00.000+08:00| 259|\n|2018-05-01T00:00:00.000+08:00| 251|\n|2018-07-01T00:00:00.000+08:00| 242|\n|2018-09-01T00:00:00.000+08:00| 225|\n|2018-11-01T00:00:00.000+08:00| 216|\n|2019-01-01T00:00:00.000+08:00| 207|\n|2019-03-01T00:00:00.000+08:00| 216|\n|2019-05-01T00:00:00.000+08:00| 207|\n|2019-07-01T00:00:00.000+08:00| 199|\n|2019-09-01T00:00:00.000+08:00| 181|\n|2019-11-01T00:00:00.000+08:00| 60|\n+-----------------------------+-------------------------------+\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("对应的SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.wt01 group by([2017-10-31T00:00:00, 2019-11-07T23:00:00), 1mo, 2mo);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("这条查询的含义是:")]),s._v(" "),a("p",[s._v("由于用户指定了滑动步长为"),a("code",[s._v("2mo")]),s._v(",GROUP BY语句执行时将会每次把时间间隔往后移动2个自然月的步长,而不是默认的1个自然月。")]),s._v(" "),a("p",[s._v("也就意味着,我们想要取从2017-10-31到2029-11-07每2个自然月的第一个月的数据。")]),s._v(" "),a("p",[s._v("与上述示例不同的是起始时间为2017-10-31T00:00:00,滑动步长将会以起始时间作为标准按月递增,取当月的31号(即最后一天)作为时间间隔的起始时间。若起始时间设置为30号,滑动步长会将时间间隔的起始时间设置为当月30号,若不存在则为最后一天。")]),s._v(" "),a("p",[s._v("上面这个例子的第一个参数是显示窗口参数,决定了最终的显示范围是[2017-10-31T00:00:00, 2019-11-07T23:00:00)。")]),s._v(" "),a("p",[s._v("上面这个例子的第二个参数是划分时间轴的时间间隔参数,将"),a("code",[s._v("1mo")]),s._v("当作划分间隔,显示窗口参数的起始时间当作分割原点,时间轴即被划分为连续的时间间隔:[2017-10-31T00:00:00, 2017-11-31T00:00:00), [2018-02-31T00:00:00, 2018-03-31T00:00:00), [2018-05-31T00:00:00, 2018-06-31T00:00:00)等等。")]),s._v(" "),a("p",[s._v("上面这个例子的第三个参数是每次时间间隔的滑动步长。")]),s._v(" "),a("p",[s._v("然后系统将会用WHERE子句中的时间和值过滤条件以及GROUP BY语句中的第一个参数作为数据的联合过滤条件,获得满足所有过滤条件的数据(在这个例子里是在[2017-10-31T00:00:00, 2019-11-07T23:00:00)这个时间范围的数据),并把这些数据映射到之前分割好的时间轴中(这个例子里是从2017-10-31T00:00:00到2019-11-07T23:00:00:00的每两个自然月的第一个月)")]),s._v(" "),a("p",[s._v("每个时间间隔窗口内都有数据,SQL执行后的结果集如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+\n| Time|count(root.ln.wf01.wt01.status)|\n+-----------------------------+-------------------------------+\n|2017-10-31T00:00:00.000+08:00| 251|\n|2017-12-31T00:00:00.000+08:00| 250|\n|2018-02-28T00:00:00.000+08:00| 259|\n|2018-04-30T00:00:00.000+08:00| 250|\n|2018-06-30T00:00:00.000+08:00| 242|\n|2018-08-31T00:00:00.000+08:00| 225|\n|2018-10-31T00:00:00.000+08:00| 216|\n|2018-12-31T00:00:00.000+08:00| 208|\n|2019-02-28T00:00:00.000+08:00| 216|\n|2019-04-30T00:00:00.000+08:00| 208|\n|2019-06-30T00:00:00.000+08:00| 199|\n|2019-08-31T00:00:00.000+08:00| 181|\n|2019-10-31T00:00:00.000+08:00| 69|\n+-----------------------------+-------------------------------+\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("h4",{attrs:{id:"左开右闭区间"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#左开右闭区间"}},[s._v("#")]),s._v(" 左开右闭区间")]),s._v(" "),a("p",[s._v("每个区间的结果时间戳为区间右端点,对应的SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("这条查询语句的时间区间是左开右闭的,结果中不会包含时间点5的数据,但是会包含时间点40的数据。")]),s._v(" "),a("p",[s._v("SQL执行后的结果集如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+\n| Time|count(root.ln.wf01.wt01.status)|\n+-----------------------------+-------------------------------+\n|2017-11-02T00:00:00.000+08:00| 1440|\n|2017-11-03T00:00:00.000+08:00| 1440|\n|2017-11-04T00:00:00.000+08:00| 1440|\n|2017-11-05T00:00:00.000+08:00| 1440|\n|2017-11-06T00:00:00.000+08:00| 1440|\n|2017-11-07T00:00:00.000+08:00| 1440|\n|2017-11-07T23:00:00.000+08:00| 1380|\n+-----------------------------+-------------------------------+\nTotal line number = 7\nIt costs 0.004s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h4",{attrs:{id:"降采样后按level聚合查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#降采样后按level聚合查询"}},[s._v("#")]),s._v(" 降采样后按Level聚合查询")]),s._v(" "),a("p",[s._v("除此之外,还可以通过定义LEVEL来统计指定层级下的数据点个数。")]),s._v(" "),a("p",[s._v("例如:")]),s._v(" "),a("p",[s._v("统计降采样后的数据点个数")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d), level=1;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------+\n| Time|COUNT(root.ln.*.*.status)|\n+-----------------------------+-------------------------+\n|2017-11-02T00:00:00.000+08:00| 1440|\n|2017-11-03T00:00:00.000+08:00| 1440|\n|2017-11-04T00:00:00.000+08:00| 1440|\n|2017-11-05T00:00:00.000+08:00| 1440|\n|2017-11-06T00:00:00.000+08:00| 1440|\n|2017-11-07T00:00:00.000+08:00| 1440|\n|2017-11-07T23:00:00.000+08:00| 1380|\n+-----------------------------+-------------------------+\nTotal line number = 7\nIt costs 0.006s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("加上滑动Step的降采样后的结果也可以汇总")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select count(status) from root.ln.wf01.wt01 group by ([0,20),2ms,3ms), level=1;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------+\n| Time|COUNT(root.ln.*.*.status)|\n+-----------------------------+-------------------------+\n|2017-11-01T00:00:00.000+08:00| 180|\n|2017-11-02T00:00:00.000+08:00| 180|\n|2017-11-03T00:00:00.000+08:00| 180|\n|2017-11-04T00:00:00.000+08:00| 180|\n|2017-11-05T00:00:00.000+08:00| 180|\n|2017-11-06T00:00:00.000+08:00| 180|\n|2017-11-07T00:00:00.000+08:00| 180|\n+-----------------------------+-------------------------+\nTotal line number = 7\nIt costs 0.004s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h4",{attrs:{id:"降频聚合查询补空值"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#降频聚合查询补空值"}},[s._v("#")]),s._v(" 降频聚合查询补空值")]),s._v(" "),a("p",[s._v("降频聚合出的各个时间段的结果,支持使用前值补空。")]),s._v(" "),a("p",[s._v("不允许设置滑动步长,默认为聚合时间区间,实际为定长采样。现在只支持 last_value 聚合函数。")]),s._v(" "),a("p",[s._v("目前不支持线性插值补空值。")]),s._v(" "),a("h5",{attrs:{id:"previous-和-previousuntillast-的区别"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#previous-和-previousuntillast-的区别"}},[s._v("#")]),s._v(" PREVIOUS 和 PREVIOUSUNTILLAST 的区别")]),s._v(" "),a("ul",[a("li",[s._v("PREVIOUS:只要空值前边有值,就会用其填充空值。")]),s._v(" "),a("li",[s._v("PREVIOUSUNTILLAST:不会填充此序列最新点后的空值")])]),s._v(" "),a("p",[s._v("首先我们检查一下root.ln.wf01.wt01.temperature在时间2017-11-07T23:50:00以后的值")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB> SELECT temperature FROM root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00\n+-----------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.temperature|\n+-----------------------------+-----------------------------+\n|2017-11-07T23:50:00.000+08:00| 23.7|\n|2017-11-07T23:51:00.000+08:00| 22.24|\n|2017-11-07T23:52:00.000+08:00| 20.18|\n|2017-11-07T23:53:00.000+08:00| 24.58|\n|2017-11-07T23:54:00.000+08:00| 22.52|\n|2017-11-07T23:55:00.000+08:00| 25.9|\n|2017-11-07T23:56:00.000+08:00| 24.44|\n|2017-11-07T23:57:00.000+08:00| 24.39|\n|2017-11-07T23:58:00.000+08:00| 22.93|\n|2017-11-07T23:59:00.000+08:00| 21.07|\n+-----------------------------+-----------------------------+\nTotal line number = 10\nIt costs 0.002s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("我们发现root.ln.wf01.wt01.temperature的最后时间和值是2017-11-07T23:59:00和21.07。")]),s._v(" "),a("p",[s._v("SQL 示例:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([2017-11-07T23:50:00, 2017-11-08T00:01:00),1m) FILL (float[PREVIOUSUNTILLAST]);\nSELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([2017-11-07T23:50:00, 2017-11-08T00:01:00),1m) FILL (float[PREVIOUS]);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("结果:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------------------------------+\n| Time|last_value(root.ln.wf01.wt01.temperature)|\n+-----------------------------+-----------------------------------------+\n|2017-11-07T23:50:00.000+08:00| 23.7|\n|2017-11-07T23:51:00.000+08:00| 22.24|\n|2017-11-07T23:52:00.000+08:00| 20.18|\n|2017-11-07T23:53:00.000+08:00| 24.58|\n|2017-11-07T23:54:00.000+08:00| 22.52|\n|2017-11-07T23:55:00.000+08:00| 25.9|\n|2017-11-07T23:56:00.000+08:00| 24.44|\n|2017-11-07T23:57:00.000+08:00| 24.39|\n|2017-11-07T23:58:00.000+08:00| 22.93|\n|2017-11-07T23:59:00.000+08:00| 21.07|\n|2017-11-08T00:00:00.000+08:00| null|\n+-----------------------------+-----------------------------------------+\nTotal line number = 11\nIt costs 0.005s\n\n+-----------------------------+-----------------------------------------+\n| Time|last_value(root.ln.wf01.wt01.temperature)|\n+-----------------------------+-----------------------------------------+\n|2017-11-07T23:50:00.000+08:00| 23.7|\n|2017-11-07T23:51:00.000+08:00| 22.24|\n|2017-11-07T23:52:00.000+08:00| 20.18|\n|2017-11-07T23:53:00.000+08:00| 24.58|\n|2017-11-07T23:54:00.000+08:00| 22.52|\n|2017-11-07T23:55:00.000+08:00| 25.9|\n|2017-11-07T23:56:00.000+08:00| 24.44|\n|2017-11-07T23:57:00.000+08:00| 24.39|\n|2017-11-07T23:58:00.000+08:00| 22.93|\n|2017-11-07T23:59:00.000+08:00| 21.07|\n|2017-11-08T00:00:00.000+08:00| 21.07|\n+-----------------------------+-----------------------------------------+\nTotal line number = 11\nIt costs 0.006s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br")])]),a("p",[s._v("解释:")]),s._v(" "),a("p",[s._v("使用 PREVIOUSUNTILLAST 将不会填充2017-11-07T23:59:00以后的值。")]),s._v(" "),a("h3",{attrs:{id:"最新数据查询"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#最新数据查询"}},[s._v("#")]),s._v(" 最新数据查询")]),s._v(" "),a("p",[s._v("SQL语法:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select last <Path> [COMMA <Path>]* from < PrefixPath > [COMMA < PrefixPath >]* <WhereClause>\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("其含义是:查询时间序列prefixPath.path中最近时间戳的数据")]),s._v(" "),a("p",[s._v("<WhereClause>中当前只支持含有'>'或'>='的时间过滤条件,任何其他过滤条件都将会返回异常。")]),s._v(" "),a("p",[s._v("结果集为三列的结构")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("| Time | Path | Value |\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("示例 1:查询 root.ln.wf01.wt01.status 的最新数据点")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB> select last status from root.ln.wf01.wt01\n+-----------------------------+------------------------+-----+\n| Time| timeseries|value|\n+-----------------------------+------------------------+-----+\n|2017-11-07T23:59:00.000+08:00|root.ln.wf01.wt01.status|false|\n+-----------------------------+------------------------+-----+\nTotal line number = 1\nIt costs 0.000s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("p",[s._v("示例 2:查询 root.ln.wf01.wt01 下 status,temperature 时间戳大于等于2017-11-07T23:50:00的最新数据点。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB> select last status, temperature from root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00\n+-----------------------------+-----------------------------+---------+\n| Time| timeseries| value|\n+-----------------------------+-----------------------------+---------+\n|2017-11-07T23:59:00.000+08:00| root.ln.wf01.wt01.status| false|\n|2017-11-07T23:59:00.000+08:00|root.ln.wf01.wt01.temperature|21.067368|\n+-----------------------------+-----------------------------+---------+\nTotal line number = 2\nIt costs 0.002s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("h3",{attrs:{id:"自动填充"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#自动填充"}},[s._v("#")]),s._v(" 自动填充")]),s._v(" "),a("p",[s._v("在IoTDB的实际使用中,当进行时间序列的查询操作时,可能会出现在某些时间点值为null的情况,这会妨碍用户进行进一步的分析。 为了更好地反映数据更改的程度,用户希望可以自动填充缺失值。 因此,IoTDB系统引入了自动填充功能。")]),s._v(" "),a("p",[s._v("自动填充功能是指对单列或多列执行时间序列查询时,根据用户指定的方法和有效时间范围填充空值。 如果查询点的值不为null,则填充功能将不起作用。")]),s._v(" "),a("blockquote",[a("p",[s._v("注意:在当前版本中,IoTDB为用户提供两种方法:Previous 和Linear。 Previous 方法用前一个值填充空白。 Linear方法通过线性拟合来填充空白。 并且填充功能只能在执行时间点查询时使用。")])]),s._v(" "),a("h4",{attrs:{id:"填充功能"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#填充功能"}},[s._v("#")]),s._v(" 填充功能")]),s._v(" "),a("ul",[a("li",[s._v("Previous功能")])]),s._v(" "),a("p",[s._v("当查询的时间戳值为空时,将使用前一个时间戳的值来填充空白。 形式化的先前方法如下(有关详细语法,请参见第7.1.3.6节):")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select <path> from <prefixPath> where time = <T> fill(<data_type>[previous, <before_range>], …)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("表3-4给出了所有参数的详细说明。")]),s._v(" "),a("center",[s._v("**表3-4previous填充参数列表**\n"),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("参数名称(不区分大小写)")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("解释")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("path, prefixPath")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("查询路径; 必填项")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("T")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("查询时间戳(只能指定一个); 必填项")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("data_type")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("填充方法使用的数据类型。 可选值是int32,int64,float,double,boolean,text; 可选字段")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("before_range")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("表示前一种方法的有效时间范围。 当[T-before \\ _range,T]范围内的值存在时,前一种方法将起作用。 如果未指定before_range,则before_range会使用默认值default_fill_interval; -1表示无穷大; 可选字段")])])])])]),s._v(" "),a("p",[s._v("在这里,我们举一个使用先前方法填充空值的示例。 SQL语句如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select temperature from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float[previous, 1m]) \n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("由于时间根目录root.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]范围)进行填充和显示。")]),s._v(" "),a("p",[s._v("在"),a("a",{attrs:{href:"https://github.com/thulab/iotdb/files/4438687/OtherMaterial-Sample.Data.txt",target:"_blank",rel:"noopener noreferrer"}},[s._v("样例数据中"),a("OutboundLink")],1),s._v(", 该语句的执行结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+\n| Time|root.sgcc.wf03.wt01.temperature|\n+-----------------------------+-------------------------------+\n|2017-11-01T16:37:50.000+08:00| 21.93|\n+-----------------------------+-------------------------------+\nTotal line number = 1\nIt costs 0.016s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("值得注意的是,如果在指定的有效时间范围内没有值,系统将不会填充空值,如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB> select temperature from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float[previous, 1s]) \n+-----------------------------+-------------------------------+\n| Time|root.sgcc.wf03.wt01.temperature|\n+-----------------------------+-------------------------------+\n|2017-11-01T16:37:50.000+08:00| null|\n+-----------------------------+-------------------------------+\nTotal line number = 1\nIt costs 0.004s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("ul",[a("li",[s._v("Linear方法")])]),s._v(" "),a("p",[s._v("当查询的时间戳值为空时,将使用前一个和下一个时间戳的值来填充空白。 形式化线性方法如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select <path> from <prefixPath> where time = <T> fill(<data_type>[linear, <before_range>, <after_range>]…)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("表3-5中给出了所有参数的详细说明。")]),s._v(" "),a("center",[s._v("**表3-5线性填充参数列表**\n"),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("参数名称(不区分大小写)")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("解释")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("path, prefixPath")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("查询路径; 必填项")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("T")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("查询时间戳(只能指定一个); 必填项")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("data_type")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("填充方法使用的数据类型。 可选值是int32,int64,float,double,boolean,text; 可选字段")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("before_range, after_range")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("表示线性方法的有效时间范围。 当[T-before_range,T + after_range]范围内的值存在时,前一种方法将起作用。 如果未明确指定before_range和after_range,则使用default_fill_interval。 -1表示无穷大; 可选字段")])])])])]),s._v(" "),a("p",[s._v("需要注意的是一旦时间序列在查询时间戳T时刻存在有效值,线性填充就回使用这个值作为结果返回。\n除此之外,如果在[T-before_range,T]或[T, T + after_range]两个范围中任意一个范围内不存在有效填充值,则线性填充返回null值。")]),s._v(" "),a("p",[s._v("在这里,我们举一个使用线性方法填充空值的示例。 SQL语句如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select temperature from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float [linear, 1m, 1m])\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("由于时间根目录root.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-11] 01T16:37:50.000、2017-11-01T16:38:50.000]时间范围)及其值25.311783以执行线性拟合计算:")]),s._v(" "),a("p",[s._v("21.927326 +(25.311783-21.927326)/ 60s * 50s = 24.747707")]),s._v(" "),a("p",[s._v("在 "),a("a",{attrs:{href:"https://github.com/thulab/iotdb/files/4438687/OtherMaterial-Sample.Data.txt",target:"_blank",rel:"noopener noreferrer"}},[s._v("样例数据"),a("OutboundLink")],1),s._v(", 该语句的执行结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+\n| Time|root.sgcc.wf03.wt01.temperature|\n+-----------------------------+-------------------------------+\n|2017-11-01T16:37:50.000+08:00| 24.746666|\n+-----------------------------+-------------------------------+\nTotal line number = 1\nIt costs 0.017s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h4",{attrs:{id:"数据类型和填充方法之间的对应关系"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据类型和填充方法之间的对应关系"}},[s._v("#")]),s._v(" 数据类型和填充方法之间的对应关系")]),s._v(" "),a("p",[s._v("数据类型和支持的填充方法如表3-6所示。")]),s._v(" "),a("center",[s._v("**表3-6数据类型和支持的填充方法**\n"),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("数据类型")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("支持的填充方法")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("boolean")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("int32")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous, linear")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("int64")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous, linear")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("float")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous, linear")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("double")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous, linear")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("text")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous")])])])])]),s._v(" "),a("p",[s._v("如果未指定fill方法,则每种数据类型均具有其自己的默认fill方法和参数。 对应关系如表3-7所示。")]),s._v(" "),a("center",[s._v("**表3-7各种数据类型的默认填充方法和参数**\n"),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("数据类型")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("默认填充方法和参数")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("boolean")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous, 600000")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("int32")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("linear, 600000, 600000")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("int64")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("linear, 600000, 600000")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("float")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("linear, 600000, 600000")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("double")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("linear, 600000, 600000")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("text")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("previous, 600000")])])])])]),s._v(" "),a("blockquote",[a("p",[s._v("注意:应在Fill语句中至少指定一种填充方法。")])]),s._v(" "),a("h3",{attrs:{id:"对查询结果的行和列控制"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#对查询结果的行和列控制"}},[s._v("#")]),s._v(" 对查询结果的行和列控制")]),s._v(" "),a("p",[s._v("IoTDB提供 "),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("LIMIT/SLIMIT")]),s._v(" 子句和 "),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("OFFSET/SOFFSET")]),s._v(" 子句,以使用户可以更好地控制查询结果。使用LIMIT和SLIMIT子句可让用户控制查询结果的行数和列数,\n并且使用OFFSET和SOFSET子句允许用户设置结果显示的起始位置。")],1),s._v(" "),a("p",[s._v("请注意,按组查询不支持LIMIT和OFFSET。")]),s._v(" "),a("p",[s._v("本章主要介绍查询结果的行和列控制的相关示例。你还可以使用 "),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Client/Programming - JDBC.html"}},[s._v("Java JDBC")]),s._v(" 标准接口执行查询。")],1),s._v(" "),a("h4",{attrs:{id:"查询结果的行控制"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#查询结果的行控制"}},[s._v("#")]),s._v(" 查询结果的行控制")]),s._v(" "),a("p",[s._v("通过使用LIMIT和OFFSET子句,用户可以以与行相关的方式控制查询结果。 我们将通过以下示例演示如何使用LIMIT和OFFSET子句。")]),s._v(" "),a("ul",[a("li",[s._v("示例1:基本的LIMIT子句")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select status, temperature from root.ln.wf01.wt01 limit 10\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 选择的时间序列是“状态”和“温度”。 SQL语句要求返回查询结果的前10行。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+-----------------------------+------------------------+-----------------------------+\n|2017-11-01T00:00:00.000+08:00| true| 25.96|\n|2017-11-01T00:01:00.000+08:00| true| 24.36|\n|2017-11-01T00:02:00.000+08:00| false| 20.09|\n|2017-11-01T00:03:00.000+08:00| false| 20.18|\n|2017-11-01T00:04:00.000+08:00| false| 21.13|\n|2017-11-01T00:05:00.000+08:00| false| 22.72|\n|2017-11-01T00:06:00.000+08:00| false| 20.71|\n|2017-11-01T00:07:00.000+08:00| false| 21.45|\n|2017-11-01T00:08:00.000+08:00| false| 22.58|\n|2017-11-01T00:09:00.000+08:00| false| 20.98|\n+-----------------------------+------------------------+-----------------------------+\nTotal line number = 10\nIt costs 0.000s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("ul",[a("li",[s._v("示例2:带OFFSET的LIMIT子句")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select status, temperature from root.ln.wf01.wt01 limit 5 offset 3\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 选择的时间序列是“状态”和“温度”。 SQL语句要求返回查询结果的第3至7行(第一行编号为0行)。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+-----------------------------+------------------------+-----------------------------+\n|2017-11-01T00:03:00.000+08:00| false| 20.18|\n|2017-11-01T00:04:00.000+08:00| false| 21.13|\n|2017-11-01T00:05:00.000+08:00| false| 22.72|\n|2017-11-01T00:06:00.000+08:00| false| 20.71|\n|2017-11-01T00:07:00.000+08:00| false| 21.45|\n+-----------------------------+------------------------+-----------------------------+\nTotal line number = 5\nIt costs 0.342s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("ul",[a("li",[s._v("示例3:LIMIT子句与WHERE子句结合")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 选择的时间序列是“状态”和“温度”。 SQL语句要求返回时间“ 2017-11-01T00:05:00.000”和“ 2017-11-01T00:12:00.000”之间的状态和温度传感器值的第3至4行(第一行) 编号为第0行)。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+-----------------------------+------------------------+-----------------------------+\n|2017-11-01T00:03:00.000+08:00| false| 20.18|\n|2017-11-01T00:04:00.000+08:00| false| 21.13|\n|2017-11-01T00:05:00.000+08:00| false| 22.72|\n|2017-11-01T00:06:00.000+08:00| false| 20.71|\n|2017-11-01T00:07:00.000+08:00| false| 21.45|\n+-----------------------------+------------------------+-----------------------------+\nTotal line number = 5\nIt costs 0.000s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("ul",[a("li",[s._v("示例4:LIMIT子句与GROUP BY子句组合")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("SQL语句子句要求返回查询结果的第3至7行(第一行编号为0行)。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-------------------------------+----------------------------------------+\n| Time|count(root.ln.wf01.wt01.status)|max_value(root.ln.wf01.wt01.temperature)|\n+-----------------------------+-------------------------------+----------------------------------------+\n|2017-11-04T00:00:00.000+08:00| 1440| 26.0|\n|2017-11-05T00:00:00.000+08:00| 1440| 26.0|\n|2017-11-06T00:00:00.000+08:00| 1440| 25.99|\n|2017-11-07T00:00:00.000+08:00| 1380| 26.0|\n+-----------------------------+-------------------------------+----------------------------------------+\nTotal line number = 4\nIt costs 0.016s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("值得注意的是,由于当前的FILL子句只能在某个时间点填充时间序列的缺失值,也就是说,FILL子句的执行结果恰好是一行,因此LIMIT和OFFSET不会是 与FILL子句结合使用,否则将提示错误。 例如,执行以下SQL语句:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select temperature from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float[previous, 1m]) limit 10\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("SQL语句将不会执行,并且相应的错误提示如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("Msg: 401: line 1:107 mismatched input 'limit' expecting {<EOF>, SLIMIT, SOFFSET, GROUP, DISABLE, ALIGN}\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h4",{attrs:{id:"查询结果的列控制"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#查询结果的列控制"}},[s._v("#")]),s._v(" 查询结果的列控制")]),s._v(" "),a("p",[s._v("通过使用LIMIT和OFFSET子句,用户可以以与列相关的方式控制查询结果。 我们将通过以下示例演示如何使用SLIMIT和OFFSET子句。")]),s._v(" "),a("ul",[a("li",[s._v("示例1:基本的SLIMIT子句")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 所选时间序列是该设备下的第一列,即电源状态。 SQL语句要求在“ 2017-11-01T00:05:00.000”和“ 2017-11-01T00:12:00.000”的时间点之间选择状态传感器值。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.temperature|\n+-----------------------------+-----------------------------+\n|2017-11-01T00:06:00.000+08:00| 20.71|\n|2017-11-01T00:07:00.000+08:00| 21.45|\n|2017-11-01T00:08:00.000+08:00| 22.58|\n|2017-11-01T00:09:00.000+08:00| 20.98|\n|2017-11-01T00:10:00.000+08:00| 25.52|\n|2017-11-01T00:11:00.000+08:00| 22.91|\n+-----------------------------+-----------------------------+\nTotal line number = 6\nIt costs 0.000s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("ul",[a("li",[s._v("示例2:带OFFSET的LIMIT子句")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 所选时间序列是该设备下的第二列,即温度。 SQL语句要求在“ 2017-11-01T00:05:00.000”和“ 2017-11-01T00:12:00.000”的时间点之间选择温度传感器值。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+\n| Time|root.ln.wf01.wt01.status|\n+-----------------------------+------------------------+\n|2017-11-01T00:06:00.000+08:00| false|\n|2017-11-01T00:07:00.000+08:00| false|\n|2017-11-01T00:08:00.000+08:00| false|\n|2017-11-01T00:09:00.000+08:00| false|\n|2017-11-01T00:10:00.000+08:00| true|\n|2017-11-01T00:11:00.000+08:00| false|\n+-----------------------------+------------------------+\nTotal line number = 6\nIt costs 0.003s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("ul",[a("li",[s._v("示例3:SLIMIT子句与GROUP BY子句结合")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------------------------+\n| Time|max_value(root.ln.wf01.wt01.status)|\n+-----------------------------+-----------------------------------+\n|2017-11-01T00:00:00.000+08:00| true|\n|2017-11-02T00:00:00.000+08:00| true|\n|2017-11-03T00:00:00.000+08:00| true|\n|2017-11-04T00:00:00.000+08:00| true|\n|2017-11-05T00:00:00.000+08:00| true|\n|2017-11-06T00:00:00.000+08:00| true|\n|2017-11-07T00:00:00.000+08:00| true|\n+-----------------------------+-----------------------------------+\nTotal line number = 7\nIt costs 0.000s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("ul",[a("li",[s._v("示例4:SLIMIT子句与FILL子句结合")])]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select * from root.sgcc.wf03.wt01 where time = 2017-11-01T16:37:50.000 fill(float[previous, 1m]) slimit 1 soffset 1\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 所选时间序列是该设备下的第二列,即温度。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+--------------------------+\n| Time|root.sgcc.wf03.wt01.status|\n+-----------------------------+--------------------------+\n|2017-11-01T16:35:00.000+08:00| true|\n+-----------------------------+--------------------------+\nTotal line number = 1\nIt costs 0.007s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h4",{attrs:{id:"控制查询结果的行和列"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#控制查询结果的行和列"}},[s._v("#")]),s._v(" 控制查询结果的行和列")]),s._v(" "),a("p",[s._v("除了对查询结果进行行或列控制之外,IoTDB还允许用户控制查询结果的行和列。 这是同时包含LIMIT子句和SLIMIT子句的完整示例。")]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select * from root.ln.wf01.wt01 limit 10 offset 100 slimit 2 soffset 0\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("意思是:")]),s._v(" "),a("p",[s._v("所选设备为ln组wf01工厂wt01设备; 所选时间序列是此设备下的第0列至第1列(第一列编号为第0列)。 SQL语句子句要求返回查询结果的第100至109行(第一行编号为0行)。")]),s._v(" "),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------------------+------------------------+\n| Time|root.ln.wf01.wt01.temperature|root.ln.wf01.wt01.status|\n+-----------------------------+-----------------------------+------------------------+\n|2017-11-01T01:40:00.000+08:00| 21.19| false|\n|2017-11-01T01:41:00.000+08:00| 22.79| false|\n|2017-11-01T01:42:00.000+08:00| 22.98| false|\n|2017-11-01T01:43:00.000+08:00| 21.52| false|\n|2017-11-01T01:44:00.000+08:00| 23.45| true|\n|2017-11-01T01:45:00.000+08:00| 24.06| true|\n|2017-11-01T01:46:00.000+08:00| 22.6| false|\n|2017-11-01T01:47:00.000+08:00| 23.78| true|\n|2017-11-01T01:48:00.000+08:00| 24.72| true|\n|2017-11-01T01:49:00.000+08:00| 24.68| true|\n+-----------------------------+-----------------------------+------------------------+\nTotal line number = 10\nIt costs 0.009s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("h3",{attrs:{id:"使用别名"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#使用别名"}},[s._v("#")]),s._v(" 使用别名")]),s._v(" "),a("p",[s._v("由于 IoTDB 独特的数据模型,在每个传感器前都附带有设备等诸多额外信息。有时,我们只针对某个具体设备查询,而这些前缀信息频繁显示造成了冗余,影响了结果集的显示与分析。这时我们可以使用 IoTDB 提供的 AS 函数,将查询中出现的时间序列给定一个别名。")]),s._v(" "),a("p",[s._v("例如:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select s1 as temperature, s2 as speed from root.ln.wf01.wt01;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("则结果集将显示为:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Time")]),s._v(" "),a("th",[s._v("temperature")]),s._v(" "),a("th",[s._v("speed")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("...")]),s._v(" "),a("td",[s._v("...")]),s._v(" "),a("td",[s._v("...")])])])]),s._v(" "),a("h4",{attrs:{id:"其他结果集格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#其他结果集格式"}},[s._v("#")]),s._v(" 其他结果集格式")]),s._v(" "),a("p",[s._v("此外,IoTDB支持两种其他结果集格式:“按设备对齐”和“禁用对齐”。")]),s._v(" "),a("p",[s._v("“按设备对齐”指示将deviceId视为一列。 因此,数据集中的列完全有限。")]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select s1,s2 from root.sg1.* ALIGN BY DEVICE\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("结果显示如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+-----------------+-----------+------+--------+\n| Time| Device|temperature|status|hardware|\n+-----------------------------+-----------------+-----------+------+--------+\n|2017-11-01T00:00:00.000+08:00|root.ln.wf01.wt01| 25.96| true| null|\n|2017-11-01T00:01:00.000+08:00|root.ln.wf01.wt01| 24.36| true| null|\n|1970-01-01T08:00:00.001+08:00|root.ln.wf02.wt02| null| true| v1|\n|1970-01-01T08:00:00.002+08:00|root.ln.wf02.wt02| null| false| v2|\n|2017-11-01T00:00:00.000+08:00|root.ln.wf02.wt02| null| true| v2|\n|2017-11-01T00:01:00.000+08:00|root.ln.wf02.wt02| null| true| v2|\n+-----------------------------+-----------------+-----------+------+--------+\nTotal line number = 6\nIt costs 0.012s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("“禁用对齐”指示结果集中每个时间序列都有3列。")]),s._v(" "),a("p",[s._v("SQL语句是:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("select * from root.sg1 where time > 10 disable align\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("结果显示如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+\n| Time|root.ln.wf02.wt02.hardware| Time|root.ln.wf02.wt02.status| Time|root.ln.wf01.wt01.temperature| Time|root.ln.wf01.wt01.status|\n+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+\n|1970-01-01T08:00:00.001+08:00| v1|1970-01-01T08:00:00.001+08:00| true|2017-11-01T00:00:00.000+08:00| 25.96|2017-11-01T00:00:00.000+08:00| true|\n|1970-01-01T08:00:00.002+08:00| v2|1970-01-01T08:00:00.002+08:00| false|2017-11-01T00:01:00.000+08:00| 24.36|2017-11-01T00:01:00.000+08:00| true|\n|2017-11-01T00:00:00.000+08:00| v2|2017-11-01T00:00:00.000+08:00| true| null| null| null| null|\n|2017-11-01T00:01:00.000+08:00| v2|2017-11-01T00:01:00.000+08:00| true| null| null| null| null|\n+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+\nTotal line number = 4\nIt costs 0.018s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("有关更多语法描述,更多语法请参照 "),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("SQL REFERENCE")]),s._v(".")],1),s._v(" "),a("h4",{attrs:{id:"错误处理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#错误处理"}},[s._v("#")]),s._v(" 错误处理")]),s._v(" "),a("p",[s._v("当LIMIT / SLIMIT的参数N / SN超过结果集的大小时,IoTDB将按预期返回所有结果。 例如,原始SQL语句的查询结果由六行组成,我们通过LIMIT子句选择前100行:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+-----------------------------+------------------------+-----------------------------+\n| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+-----------------------------+------------------------+-----------------------------+\n|2017-11-01T00:06:00.000+08:00| false| 20.71|\n|2017-11-01T00:07:00.000+08:00| false| 21.45|\n|2017-11-01T00:08:00.000+08:00| false| 22.58|\n|2017-11-01T00:09:00.000+08:00| false| 20.98|\n|2017-11-01T00:10:00.000+08:00| true| 25.52|\n|2017-11-01T00:11:00.000+08:00| false| 22.91|\n+-----------------------------+------------------------+-----------------------------+\nTotal line number = 6\nIt costs 0.005s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("当LIMIT / SLIMIT子句的参数N / SN超过允许的最大值(N / SN的类型为int32)时,系统将提示错误。 例如,执行以下SQL语句:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("SQL语句将不会执行,并且相应的错误提示如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("Msg: 303: check metadata error: Out of range. LIMIT <N>: N should be Int32.\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("当LIMIT / LIMIT子句的参数N / SN不是正整数时,系统将提示错误。 例如,执行以下SQL语句:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("SQL语句将不会执行,并且相应的错误提示如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("Msg: 401: line 1:129 mismatched input '.' expecting {<EOF>, SLIMIT, OFFSET, SOFFSET, GROUP, DISABLE, ALIGN}\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("当LIMIT子句的参数OFFSET超过结果集的大小时,IoTDB将返回空结果集。 例如,执行以下SQL语句:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("结果如下所示:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("+----+------------------------+-----------------------------+\n|Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|\n+----+------------------------+-----------------------------+\n+----+------------------------+-----------------------------+\nEmpty set.\nIt costs 0.005s\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("p",[s._v("当SLIMIT子句的参数SOFFSET不小于可用时间序列数时,系统将提示错误。 例如,执行以下SQL语句:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("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\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("SQL语句将不会执行,并且相应的错误提示如下:")]),s._v(" "),a("h3",{attrs:{id:"数据删除"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据删除"}},[s._v("#")]),s._v(" 数据删除")]),s._v(" "),a("p",[s._v("用户使用"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Operation Manual/SQL Reference.html"}},[s._v("DELETE语句")]),s._v("可以删除指定的时间序列中符合时间删除条件的数据。在删除数据时,用户可以选择需要删除的一个或多个时间序列、时间序列的前缀、时间序列带*路径对某一个时间区间内的数据进行删除。")],1),s._v(" "),a("p",[s._v("在JAVA编程环境中,您可以使用JDBC API单条或批量执行DELETE语句。")]),s._v(" "),a("h4",{attrs:{id:"单传感器时间序列值删除"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#单传感器时间序列值删除"}},[s._v("#")]),s._v(" 单传感器时间序列值删除")]),s._v(" "),a("p",[s._v("以测控ln集团为例,存在这样的使用场景:")]),s._v(" "),a("p",[s._v("wf02子站的wt02设备在2017-11-01 16:26:00之前的供电状态出现多段错误,且无法分析其正确数据,错误数据影响了与其他设备的关联分析。此时,需要将此时间段前的数据删除。进行此操作的SQL语句为:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.wt02.status where time<=2017-11-01T16:26:00;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("如果我们仅仅想要删除2017年内的在2017-11-01 16:26:00之前的数据,可以使用以下SQL:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.wt02.status where time>=2017-01-01T00:00:00 and time<=2017-11-01T16:26:00;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("IoTDB 支持删除一个时间序列任何一个时间范围内的所有时序点,用户可以使用以下SQL语句指定需要删除的时间范围:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.wt02.status where time < 10\ndelete from root.ln.wf02.wt02.status where time <= 10\ndelete from root.ln.wf02.wt02.status where time < 20 and time > 10\ndelete from root.ln.wf02.wt02.status where time <= 20 and time >= 10\ndelete from root.ln.wf02.wt02.status where time > 20\ndelete from root.ln.wf02.wt02.status where time >= 20\ndelete from root.ln.wf02.wt02.status where time = 20\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("需要注意,当前的删除语句不支持where子句后的时间范围为多个由OR连接成的时间区间。如下删除语句将会解析出错:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.wt02.status where time > 4 or time < 0\nMsg: 303: Check metadata error: For delete statement, where clause can only contain atomic\nexpressions like : time > XXX, time <= XXX, or two atomic expressions connected by 'AND'\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[s._v("如果delete语句中未指定where子句,则会删除时间序列中的所有数据。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.status\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h4",{attrs:{id:"多传感器时间序列值删除"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#多传感器时间序列值删除"}},[s._v("#")]),s._v(" 多传感器时间序列值删除")]),s._v(" "),a("p",[s._v("当ln集团wf02子站的wt02设备在2017-11-01 16:26:00之前的供电状态和设备硬件版本都需要删除,此时可以使用含义更广的"),a("RouterLink",{attrs:{to:"/zh/UserGuide/Master/Concept/Data Model and Terminology.html"}},[s._v("前缀路径或带"),a("code",[s._v("*")]),s._v("路径")]),s._v("进行删除操作,进行此操作的SQL语句为:")],1),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.wt02 where time <= 2017-11-01T16:26:00;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("或")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("delete from root.ln.wf02.wt02.* where time <= 2017-11-01T16:26:00;\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("需要注意的是,当删除的路径不存在时,IoTDB会提示路径不存在,无法删除数据,如下所示。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IoTDB> delete from root.ln.wf03.wt02.status where time < now()\nMsg: TimeSeries does not exist and its data cannot be deleted\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("h2",{attrs:{id:"删除时间分区-实验性功能"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#删除时间分区-实验性功能"}},[s._v("#")]),s._v(" 删除时间分区 (实验性功能)")]),s._v(" "),a("p",[s._v("您可以通过如下语句来删除某一个存储组下的指定时间分区:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("DELETE PARTITION root.ln 0,1,2\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("上例中的0,1,2为待删除时间分区的id,您可以通过查看IoTDB的数据文件夹找到它,或者可以通过计算"),a("code",[s._v("timestamp / partitionInterval")]),s._v("(向下取整),\n手动地将一个时间戳转换为对应的id,其中的"),a("code",[s._v("partitionInterval")]),s._v("可以在IoTDB的配置文件中找到(如果您使用的版本支持时间分区)。")]),s._v(" "),a("p",[s._v("请注意该功能目前只是实验性的,如果您不是开发者,使用时请务必谨慎。")])],1)}),[],!1,null,null,null);t.default=n.exports}}]);