This is an automated email from the ASF dual-hosted git repository. qiaojialin pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/iotdb-docs.git
The following commit(s) were added to refs/heads/main by this push: new 979c7fa fixing bad urls and the SQL Manual statement formatting (#167) 979c7fa is described below commit 979c7fa53c116596230e69422f5a55f7f24d3abf Author: wanghui42 <105700158+wanghu...@users.noreply.github.com> AuthorDate: Wed Jan 31 13:23:10 2024 +0800 fixing bad urls and the SQL Manual statement formatting (#167) --- src/.vuepress/sidebar/V1.2.x/zh.ts | 3 +- src/.vuepress/sidebar/V1.3.x/en.ts | 1 - src/.vuepress/sidebar/V1.3.x/zh.ts | 4 +- src/.vuepress/sidebar_timecho/V1.2.x/zh.ts | 2 +- src/.vuepress/sidebar_timecho/V1.3.x/en.ts | 1 - src/.vuepress/sidebar_timecho/V1.3.x/zh.ts | 3 +- ...al-Requirement.md => Deployment-Preparation.md} | 3 + .../Master/Reference/Function-and-Expression.md | 345 +++++++++++ src/zh/UserGuide/Master/Reference/UDF-Libraries.md | 4 +- src/zh/UserGuide/Master/SQL-Manual/SQL-Manual.md | 679 +++++++++++---------- .../Master/User-Manual/IoTDB-View_timecho.md | 2 +- .../Master/User-Manual/Operate-Metadata.md | 4 +- .../Master/User-Manual/Operator-and-Expression.md | 13 +- ...al-Requirement.md => Deployment-Preparation.md} | 0 ...al-Requirement.md => Deployment-Preparation.md} | 5 + .../latest/Reference/Function-and-Expression.md | 345 +++++++++++ src/zh/UserGuide/latest/Reference/UDF-Libraries.md | 4 +- src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md | 661 ++++++++++---------- .../latest/User-Manual/IoTDB-View_timecho.md | 2 +- .../latest/User-Manual/Operate-Metadata.md | 4 +- .../latest/User-Manual/Operator-and-Expression.md | 13 +- 21 files changed, 1420 insertions(+), 678 deletions(-) diff --git a/src/.vuepress/sidebar/V1.2.x/zh.ts b/src/.vuepress/sidebar/V1.2.x/zh.ts index 2bd84e8..a101713 100644 --- a/src/.vuepress/sidebar/V1.2.x/zh.ts +++ b/src/.vuepress/sidebar/V1.2.x/zh.ts @@ -66,9 +66,8 @@ export const zhSidebar = { prefix: 'Deployment-and-Maintenance/', // children: 'structure', children: [ - { text: '环境要求', link: 'Environmental-Requirement' }, + { text: '部署准备', link: 'Deployment-Preparation' }, { text: '资源推荐', link: 'Deployment-Recommendation' }, - { text: '安装包获取', link: 'Get-Installation-Package' }, { text: '部署指导', link: 'Deployment-Guide' }, { text: 'docker部署', link: 'Docker-Install' }, ], diff --git a/src/.vuepress/sidebar/V1.3.x/en.ts b/src/.vuepress/sidebar/V1.3.x/en.ts index 1c4a41f..b68201a 100644 --- a/src/.vuepress/sidebar/V1.3.x/en.ts +++ b/src/.vuepress/sidebar/V1.3.x/en.ts @@ -122,7 +122,6 @@ export const enSidebar = { { text: 'Kafka', link: 'Programming-Kafka' }, { text: 'REST API V1 (Not Recommend)', link: 'RestServiceV1' }, { text: 'REST API V2', link: 'RestServiceV2' }, - { text: 'TsFile API', link: 'Programming-TsFile-API' }, ], }, { diff --git a/src/.vuepress/sidebar/V1.3.x/zh.ts b/src/.vuepress/sidebar/V1.3.x/zh.ts index fdc7adf..57c071c 100644 --- a/src/.vuepress/sidebar/V1.3.x/zh.ts +++ b/src/.vuepress/sidebar/V1.3.x/zh.ts @@ -66,9 +66,8 @@ export const zhSidebar = { prefix: 'Deployment-and-Maintenance/', // children: 'structure', children: [ - { text: '环境要求', link: 'Environmental-Requirement' }, + { text: '部署准备', link: 'Deployment-Preparation' }, { text: '资源推荐', link: 'Deployment-Recommendation' }, - { text: '安装包获取', link: 'Get-Installation-Package' }, { text: '部署指导', link: 'Deployment-Guide' }, { text: 'docker部署', link: 'Docker-Install' }, ], @@ -122,7 +121,6 @@ export const zhSidebar = { { text: 'Kafka', link: 'Programming-Kafka' }, { text: 'REST API V1', link: 'RestServiceV1' }, { text: 'REST API V2', link: 'RestServiceV2' }, - { text: 'TsFile API', link: 'Programming-TsFile-API' }, ], }, { diff --git a/src/.vuepress/sidebar_timecho/V1.2.x/zh.ts b/src/.vuepress/sidebar_timecho/V1.2.x/zh.ts index e2cd181..0d3d3e2 100644 --- a/src/.vuepress/sidebar_timecho/V1.2.x/zh.ts +++ b/src/.vuepress/sidebar_timecho/V1.2.x/zh.ts @@ -66,7 +66,7 @@ export const zhSidebar = { prefix: 'Deployment-and-Maintenance/', // children: 'structure', children: [ - { text: '环境要求', link: 'Environmental-Requirement' }, + { text: '部署准备', link: 'Deployment-Preparation' }, { text: '资源推荐', link: 'Deployment-Recommendation' }, { text: '部署指导', link: 'Deployment-Guide_timecho' }, { text: 'docker部署', link: 'Docker-Install' }, diff --git a/src/.vuepress/sidebar_timecho/V1.3.x/en.ts b/src/.vuepress/sidebar_timecho/V1.3.x/en.ts index 1533169..1f2d937 100644 --- a/src/.vuepress/sidebar_timecho/V1.3.x/en.ts +++ b/src/.vuepress/sidebar_timecho/V1.3.x/en.ts @@ -127,7 +127,6 @@ export const enSidebar = { { text: 'Kafka', link: 'Programming-Kafka' }, { text: 'REST API V1 (Not Recommend)', link: 'RestServiceV1' }, { text: 'REST API V2', link: 'RestServiceV2' }, - { text: 'TsFile API', link: 'Programming-TsFile-API' }, ], }, { diff --git a/src/.vuepress/sidebar_timecho/V1.3.x/zh.ts b/src/.vuepress/sidebar_timecho/V1.3.x/zh.ts index 17add1d..df4e412 100644 --- a/src/.vuepress/sidebar_timecho/V1.3.x/zh.ts +++ b/src/.vuepress/sidebar_timecho/V1.3.x/zh.ts @@ -66,7 +66,7 @@ export const zhSidebar = { prefix: 'Deployment-and-Maintenance/', // children: 'structure', children: [ - { text: '环境要求', link: 'Environmental-Requirement' }, + { text: '部署准备', link: 'Deployment-Preparation' }, { text: '资源推荐', link: 'Deployment-Recommendation' }, { text: '部署指导', link: 'Deployment-Guide_timecho' }, { text: 'docker部署', link: 'Docker-Install' }, @@ -127,7 +127,6 @@ export const zhSidebar = { { text: 'Kafka', link: 'Programming-Kafka' }, { text: 'REST API V1', link: 'RestServiceV1' }, { text: 'REST API V2', link: 'RestServiceV2' }, - { text: 'TsFile API', link: 'Programming-TsFile-API' }, ], }, { diff --git a/src/zh/UserGuide/Master/Deployment-and-Maintenance/Environmental-Requirement.md b/src/zh/UserGuide/Master/Deployment-and-Maintenance/Deployment-Preparation.md similarity index 95% rename from src/zh/UserGuide/Master/Deployment-and-Maintenance/Environmental-Requirement.md rename to src/zh/UserGuide/Master/Deployment-and-Maintenance/Deployment-Preparation.md index 60b6fce..f320342 100644 --- a/src/zh/UserGuide/Master/Deployment-and-Maintenance/Environmental-Requirement.md +++ b/src/zh/UserGuide/Master/Deployment-and-Maintenance/Deployment-Preparation.md @@ -34,3 +34,6 @@ > **# Linux** <br>`sudo sysctl -w net.core.somaxconn=65535` <br>**# FreeBSD 或 > Darwin** <br>`sudo sysctl -w kern.ipc.somaxconn=65535` +## 安装包获取 + +企业版安装包可经由商务获取。 \ No newline at end of file diff --git a/src/zh/UserGuide/Master/Reference/Function-and-Expression.md b/src/zh/UserGuide/Master/Reference/Function-and-Expression.md index aa4f4ec..6b126e5 100644 --- a/src/zh/UserGuide/Master/Reference/Function-and-Expression.md +++ b/src/zh/UserGuide/Master/Reference/Function-and-Expression.md @@ -2651,3 +2651,348 @@ Total line number = 11 It costs 0.118s ``` +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> + +## 条件表达式 + +### CASE + +CASE表达式是一种条件表达式,可用于根据特定条件返回不同的值,功能类似于其它语言中的if-else。 +CASE表达式由以下部分组成: +- CASE关键字:表示开始CASE表达式。 +- WHEN-THEN子句:可能存在多个,用于定义条件与给出结果。此子句又分为WHEN和THEN两个部分,WHEN部分表示条件,THEN部分表示结果表达式。如果WHEN条件为真,则返回对应的THEN结果。 +- ELSE子句:如果没有任何WHEN-THEN子句的条件为真,则返回ELSE子句中的结果。可以不存在ELSE子句。 +- END关键字:表示结束CASE表达式。 + +CASE表达式是一种标量运算,可以配合任何其它的标量运算或聚合函数使用。 + +下文把所有THEN部分和ELSE子句并称为结果子句。 + +#### 语法示例 + +CASE表达式支持两种格式。 + +语法示例如下: +- 格式1: +```sql + CASE + WHEN condition1 THEN expression1 + [WHEN condition2 THEN expression2] ... + [ELSE expression_end] + END +``` + 从上至下检查WHEN子句中的condition。 + + condition为真时返回对应THEN子句中的expression,condition为假时继续检查下一个WHEN子句中的condition。 +- 格式2: +```sql + CASE caseValue + WHEN whenValue1 THEN expression1 + [WHEN whenValue2 THEN expression2] ... + [ELSE expression_end] + END +``` + + 从上至下检查WHEN子句中的whenValue是否与caseValue相等。 + + 满足caseValue=whenValue时返回对应THEN子句中的expression,不满足时继续检查下一个WHEN子句中的whenValue。 + + 格式2会被iotdb转换成等效的格式1,例如以上sql语句会转换成: +```sql + CASE + WHEN caseValue=whenValue1 THEN expression1 + [WHEN caseValue=whenValue1 THEN expression1] ... + [ELSE expression_end] + END +``` + +如果格式1中的condition均不为真,或格式2中均不满足caseVaule=whenValue,则返回ELSE子句中的expression_end;不存在ELSE子句则返回null。 + +#### 注意事项 + +- 格式1中,所有WHEN子句必须返回BOOLEAN类型。 +- 格式2中,所有WHEN子句必须能够与CASE子句进行判等。 +- 一个CASE表达式中所有结果子句的返回值类型需要满足一定的条件: + - BOOLEAN类型不能与其它类型共存,存在其它类型会报错。 + - TEXT类型不能与其它类型共存,存在其它类型会报错。 + - 其它四种数值类型可以共存,最终结果会为DOUBLE类型,转换过程可能会存在精度损失。 +- CASE表达式没有实现惰性计算,即所有子句都会被计算。 +- CASE表达式不支持与UDF混用。 +- CASE表达式内部不能存在聚合函数,但CASE表达式的结果可以提供给聚合函数。 +- 使用CLI时,由于CASE表达式字符串较长,推荐用as为表达式提供别名。 + +#### 使用示例 + +##### 示例1 + +CASE表达式可对数据进行直观地分析,例如: + +- 某种化学产品的制备需要温度和压力都处于特定范围之内 +- 在制备过程中传感器会侦测温度和压力,在iotdb中形成T(temperature)和P(pressure)两个时间序列 + +这种应用场景下,CASE表达式可以指出哪些时间的参数是合适的,哪些时间的参数不合适,以及为什么不合适。 + +数据: +```sql +IoTDB> select * from root.test1 ++-----------------------------+------------+------------+ +| Time|root.test1.P|root.test1.T| ++-----------------------------+------------+------------+ +|2023-03-29T11:25:54.724+08:00| 1000000.0| 1025.0| +|2023-03-29T11:26:13.445+08:00| 1000094.0| 1040.0| +|2023-03-29T11:27:36.988+08:00| 1000095.0| 1041.0| +|2023-03-29T11:27:56.446+08:00| 1000095.0| 1059.0| +|2023-03-29T11:28:20.838+08:00| 1200000.0| 1040.0| ++-----------------------------+------------+------------+ +``` + +SQL语句: +```sql +select T, P, case +when 1000<T and T<1050 and 1000000<P and P<1100000 then "good!" +when T<=1000 or T>=1050 then "bad temperature" +when P<=1000000 or P>=1100000 then "bad pressure" +end as `result` +from root.test1 +``` + + +输出: +``` ++-----------------------------+------------+------------+---------------+ +| Time|root.test1.T|root.test1.P| result| ++-----------------------------+------------+------------+---------------+ +|2023-03-29T11:25:54.724+08:00| 1025.0| 1000000.0| bad pressure| +|2023-03-29T11:26:13.445+08:00| 1040.0| 1000094.0| good!| +|2023-03-29T11:27:36.988+08:00| 1041.0| 1000095.0| good!| +|2023-03-29T11:27:56.446+08:00| 1059.0| 1000095.0|bad temperature| +|2023-03-29T11:28:20.838+08:00| 1040.0| 1200000.0| bad pressure| ++-----------------------------+------------+------------+---------------+ +``` + + +##### 示例2 + +CASE表达式可实现结果的自由转换,例如将具有某种模式的字符串转换成另一种字符串。 + +数据: +```sql +IoTDB> select * from root.test2 ++-----------------------------+--------------+ +| Time|root.test2.str| ++-----------------------------+--------------+ +|2023-03-27T18:23:33.427+08:00| abccd| +|2023-03-27T18:23:39.389+08:00| abcdd| +|2023-03-27T18:23:43.463+08:00| abcdefg| ++-----------------------------+--------------+ +``` + +SQL语句: +```sql +select str, case +when str like "%cc%" then "has cc" +when str like "%dd%" then "has dd" +else "no cc and dd" end as `result` +from root.test2 +``` + +输出: +``` ++-----------------------------+--------------+------------+ +| Time|root.test2.str| result| ++-----------------------------+--------------+------------+ +|2023-03-27T18:23:33.427+08:00| abccd| has cc| +|2023-03-27T18:23:39.389+08:00| abcdd| has dd| +|2023-03-27T18:23:43.463+08:00| abcdefg|no cc and dd| ++-----------------------------+--------------+------------+ +``` + +##### 示例3:搭配聚合函数 + +###### 合法:聚合函数←CASE表达式 + +CASE表达式可作为聚合函数的参数。例如,与聚合函数COUNT搭配,可实现同时按多个条件进行数据统计。 + +数据: +```sql +IoTDB> select * from root.test3 ++-----------------------------+------------+ +| Time|root.test3.x| ++-----------------------------+------------+ +|2023-03-27T18:11:11.300+08:00| 0.0| +|2023-03-27T18:11:14.658+08:00| 1.0| +|2023-03-27T18:11:15.981+08:00| 2.0| +|2023-03-27T18:11:17.668+08:00| 3.0| +|2023-03-27T18:11:19.112+08:00| 4.0| +|2023-03-27T18:11:20.822+08:00| 5.0| +|2023-03-27T18:11:22.462+08:00| 6.0| +|2023-03-27T18:11:24.174+08:00| 7.0| +|2023-03-27T18:11:25.858+08:00| 8.0| +|2023-03-27T18:11:27.979+08:00| 9.0| ++-----------------------------+------------+ +``` + +SQL语句: + +```sql +select +count(case when x<=1 then 1 end) as `(-∞,1]`, +count(case when 1<x and x<=3 then 1 end) as `(1,3]`, +count(case when 3<x and x<=7 then 1 end) as `(3,7]`, +count(case when 7<x then 1 end) as `(7,+∞)` +from root.test3 +``` + +输出: +``` ++------+-----+-----+------+ +|(-∞,1]|(1,3]|(3,7]|(7,+∞)| ++------+-----+-----+------+ +| 2| 2| 4| 2| ++------+-----+-----+------+ +``` + +###### 非法:CASE表达式←聚合函数 + +不支持在CASE表达式内部使用聚合函数。 + +SQL语句: +```sql +select case when x<=1 then avg(x) else sum(x) end from root.test3 +``` + +输出: +``` +Msg: 701: Raw data and aggregation result hybrid calculation is not supported. +``` + +##### 示例4:格式2 + +一个使用格式2的简单例子。如果所有条件都为判等,则推荐使用格式2,以简化SQL语句。 + +数据: +```sql +IoTDB> select * from root.test4 ++-----------------------------+------------+ +| Time|root.test4.x| ++-----------------------------+------------+ +|1970-01-01T08:00:00.001+08:00| 1.0| +|1970-01-01T08:00:00.002+08:00| 2.0| +|1970-01-01T08:00:00.003+08:00| 3.0| +|1970-01-01T08:00:00.004+08:00| 4.0| ++-----------------------------+------------+ +``` + +SQL语句: +```sql +select x, case x when 1 then "one" when 2 then "two" else "other" end from root.test4 +``` + +输出: +``` ++-----------------------------+------------+-----------------------------------------------------------------------------------+ +| Time|root.test4.x|CASE WHEN root.test4.x = 1 THEN "one" WHEN root.test4.x = 2 THEN "two" ELSE "other"| ++-----------------------------+------------+-----------------------------------------------------------------------------------+ +|1970-01-01T08:00:00.001+08:00| 1.0| one| +|1970-01-01T08:00:00.002+08:00| 2.0| two| +|1970-01-01T08:00:00.003+08:00| 3.0| other| +|1970-01-01T08:00:00.004+08:00| 4.0| other| ++-----------------------------+------------+-----------------------------------------------------------------------------------+ +``` + +##### 示例5:结果子句类型 + +CASE表达式的结果子句的返回值需要满足一定的类型限制。 + +此示例中,继续使用示例4中的数据。 + +###### 非法:BOOLEAN与其它类型共存 + +SQL语句: +```sql +select x, case x when 1 then true when 2 then 2 end from root.test4 +``` + +输出: +``` +Msg: 701: CASE expression: BOOLEAN and other types cannot exist at same time +``` + +###### 合法:只存在BOOLEAN类型 + +SQL语句: +```sql +select x, case x when 1 then true when 2 then false end as `result` from root.test4 +``` + +输出: +``` ++-----------------------------+------------+------+ +| Time|root.test4.x|result| ++-----------------------------+------------+------+ +|1970-01-01T08:00:00.001+08:00| 1.0| true| +|1970-01-01T08:00:00.002+08:00| 2.0| false| +|1970-01-01T08:00:00.003+08:00| 3.0| null| +|1970-01-01T08:00:00.004+08:00| 4.0| null| ++-----------------------------+------------+------+ +``` + +###### 非法:TEXT与其它类型共存 + +SQL语句: +```sql +select x, case x when 1 then 1 when 2 then "str" end from root.test4 +``` + +输出: +``` +Msg: 701: CASE expression: TEXT and other types cannot exist at same time +``` + +###### 合法:只存在TEXT类型 + +见示例1。 + +###### 合法:数值类型共存 + +SQL语句: +```sql +select x, case x +when 1 then 1 +when 2 then 222222222222222 +when 3 then 3.3 +when 4 then 4.4444444444444 +end as `result` +from root.test4 +``` + +输出: +``` ++-----------------------------+------------+-------------------+ +| Time|root.test4.x| result| ++-----------------------------+------------+-------------------+ +|1970-01-01T08:00:00.001+08:00| 1.0| 1.0| +|1970-01-01T08:00:00.002+08:00| 2.0|2.22222222222222E14| +|1970-01-01T08:00:00.003+08:00| 3.0| 3.299999952316284| +|1970-01-01T08:00:00.004+08:00| 4.0| 4.44444465637207| ++-----------------------------+------------+-------------------+ +``` \ No newline at end of file diff --git a/src/zh/UserGuide/Master/Reference/UDF-Libraries.md b/src/zh/UserGuide/Master/Reference/UDF-Libraries.md index 6ec19b2..be45495 100644 --- a/src/zh/UserGuide/Master/Reference/UDF-Libraries.md +++ b/src/zh/UserGuide/Master/Reference/UDF-Libraries.md @@ -605,13 +605,13 @@ select Accuracy(t1,t2,t3,m1,m2,m3) from root.test #### 函数简介 -本函数用于计算时间序列的自相关函数值,即序列与自身之间的互相关函数,详情参见[XCorr](./Data-Matching.md#XCorr)函数文档。 +本函数用于计算时间序列的自相关函数值,即序列与自身之间的互相关函数。 **函数名:** ACF **输入序列:** 仅支持单个输入序列,类型为 INT32 / INT64 / FLOAT / DOUBLE。 -**输出序列:** 输出单个序列,类型为 DOUBLE。序列中共包含$2N-1$个数据点,每个值的具体含义参见[XCorr](./Data-Matching.md#XCorr)函数文档。 +**输出序列:** 输出单个序列,类型为 DOUBLE。序列中共包含$2N-1$个数据点。 **提示:** diff --git a/src/zh/UserGuide/Master/SQL-Manual/SQL-Manual.md b/src/zh/UserGuide/Master/SQL-Manual/SQL-Manual.md index f66d1c5..c46653f 100644 --- a/src/zh/UserGuide/Master/SQL-Manual/SQL-Manual.md +++ b/src/zh/UserGuide/Master/SQL-Manual/SQL-Manual.md @@ -202,32 +202,36 @@ show timeseries where TAGS(tag1)='v1' #### 查看路径的所有子路径 +```sql SHOW CHILD PATHS pathPattern - - 查询 root.ln 的下一层:show child paths root.ln - 查询形如 root.xx.xx.xx 的路径:show child paths root.*.* - +``` #### 查看路径的所有子节点 +```sql SHOW CHILD NODES pathPattern - 查询 root 的下一层:show child nodes root - 查询 root.ln 的下一层 :show child nodes root.ln - +``` #### 查看设备 +```sql IoTDB> show devices IoTDB> show devices root.ln.** - +``` ##### 查看设备及其 database 信息 +```sql IoTDB> show devices with database IoTDB> show devices root.ln.** with database - +``` #### 统计节点数 +```sql IoTDB > COUNT NODES root.** LEVEL=2 IoTDB > COUNT NODES root.ln.** LEVEL=2 @@ -235,15 +239,16 @@ IoTDB > COUNT NODES root.ln.** LEVEL=2 IoTDB > COUNT NODES root.ln.wf01.* LEVEL=3 IoTDB > COUNT NODES root.**.temperature LEVEL=3 - +``` #### 统计设备数量 +```sql IoTDB> show devices IoTDB> count devices IoTDB> count devices root.ln.** - +``` ### 4、设备模板管理 ![img](https://alioss.timecho.com/docs/img/%E6%A8%A1%E6%9D%BF.png) @@ -265,19 +270,19 @@ CREATE SCHEMA TEMPLATE <templateName> ALIGNED? '(' <measurementId> <attributeCla ``` 创建包含两个非对齐序列的元数据模板 - +```sql IoTDB> create schema template t1 (temperature FLOAT encoding=RLE, status BOOLEAN encoding=PLAIN compression=SNAPPY) - +``` 创建包含一组对齐序列的元数据模板 - +```sql IoTDB> create schema template t2 aligned (lat FLOAT encoding=Gorilla, lon FLOAT encoding=Gorilla) - +``` #### 挂载元数据模板 - +```sql IoTDB> set SCHEMA TEMPLATE t1 to root.sg1 - +``` #### 激活元数据模板 - +```sql IoTDB> create timeseries using SCHEMA TEMPLATE on root.sg1.d1 IoTDB> set SCHEMA TEMPLATE t1 to root.sg1.d1 @@ -287,113 +292,108 @@ IoTDB> set SCHEMA TEMPLATE t2 to root.sg1.d2 IoTDB> create timeseries using schema template on root.sg1.d1 IoTDB> create timeseries using schema template on root.sg1.d2 - +``` #### 查看元数据模板 - +```sql IoTDB> show schema templates - +``` - 查看某个元数据模板下的物理量 - +```sql IoTDB> show nodes in schema template t1 - +``` - 查看挂载了某个元数据模板的路径 - +```sql IoTDB> show paths set schema template t1 - +``` - 查看使用了某个元数据模板的路径(即模板在该路径上已激活,序列已创建) - +```sql IoTDB> show paths using schema template t1 - -IoTDB> show devices using schema template t1 - -- 查看使用了某个元数据模板的设备信息 - -IoTDB> show devices where template = 't1' - -- 查看没有使用某个元数据模板的设备信息 - -IoTDB> show devices where template != 't1' - -- 查看没有使用元数据模板的设备信息 - -IoTDB> show devices where template is null - -- 查看使用元数据模板的设备信息 - -IoTDB> show devices where template is not null - +``` #### 解除元数据模板 - +```sql IoTDB> delete timeseries of schema template t1 from root.sg1.d1 - +``` +```sql IoTDB> deactivate schema template t1 from root.sg1.d1 - +``` 批量处理 - +```sql IoTDB> delete timeseries of schema template t1 from root.sg1.*, root.sg2.* - +``` +```sql IoTDB> deactivate schema template t1 from root.sg1.*, root.sg2.* - +``` #### 卸载元数据模板 - +```sql IoTDB> unset schema template t1 from root.sg1.d1 - +``` #### 删除元数据模板 - +```sql IoTDB> drop schema template t1 - +``` ### 5、数据存活时间管理 #### 设置 TTL - +```sql IoTDB> set ttl to root.ln 3600000 - +``` +```sql IoTDB> set ttl to root.sgcc.** 3600000 - +``` +```sql IoTDB> set ttl to root.** 3600000 - +``` #### 取消 TTL - +```sql IoTDB> unset ttl to root.ln - +``` +```sql IoTDB> unset ttl to root.sgcc.** - +``` +```sql IoTDB> unset ttl to root.** +``` #### 显示 TTL - +```sql IoTDB> SHOW ALL TTL - +``` +```sql IoTDB> SHOW TTL ON StorageGroupNames - +``` ## 写入数据 ### 1、写入单列数据 - +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp,status) values(1,true) - +``` +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp,hardware) values(1, 'v1'),(2, 'v1') - +``` ### 2、写入多列数据 - +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, false, 'v2') - +``` +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, false, 'v3'),(4, true, 'v4') - +``` ### 3、使用服务器时间戳 - +```sql IoTDB > insert into root.ln.wf02.wt02(status, hardware) values (false, 'v2') - +``` ### 4、写入对齐时间序列数据 - +```sql IoTDB > create aligned timeseries root.sg1.d1(s1 INT32, s2 DOUBLE) - +``` +```sql IoTDB > insert into root.sg1.d1(timestamp, s1, s2) aligned values(1, 1, 1) - +``` +```sql IoTDB > insert into root.sg1.d1(timestamp, s1, s2) aligned values(2, 2, 2), (3, 3, 3) - +``` +```sql IoTDB > select * from root.sg1.d1 - +``` ### 5、加载 TsFile 文件数据 load '<path/dir>' [sglevel=int][verify=true/false][onSuccess=delete/none] @@ -421,93 +421,102 @@ load '<path/dir>' [sglevel=int][verify=true/false][onSuccess=delete/none] ## 删除数据 ### 1、删除单列数据 - +```sql delete from root.ln.wf02.wt02.status where time<=2017-11-01T16:26:00; - +``` +```sql delete from root.ln.wf02.wt02.status where time>=2017-01-01T00:00:00 and time<=2017-11-01T16:26:00; - +``` +```sql delete from root.ln.wf02.wt02.status where time < 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time <= 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time < 20 and time > 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time <= 20 and time >= 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time > 20 - +``` +```sql delete from root.ln.wf02.wt02.status where time >= 20 - +``` +```sql delete from root.ln.wf02.wt02.status where time = 20 - +``` 出错: - +```sql delete from root.ln.wf02.wt02.status where time > 4 or time < 0 Msg: 303: Check metadata error: For delete statement, where clause can only contain atomic expressions like : time > XXX, time <= XXX, or two atomic expressions connected by 'AND' +``` 删除时间序列中的所有数据: - +```sql delete from root.ln.wf02.wt02.status - +``` ### 2、删除多列数据 - +```sql delete from root.ln.wf02.wt02.* where time <= 2017-11-01T16:26:00; - +``` 声明式的编程方式: - +```sql IoTDB> delete from root.ln.wf03.wt02.status where time < now() Msg: The statement is executed successfully. - +``` ## 数据查询 ### 1、基础查询 #### 时间过滤查询 - +```sql select temperature from root.ln.wf01.wt01 where time < 2017-11-01T00:08:00.000 - +``` #### 根据一个时间区间选择多列数据 - +```sql select status, temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000; - +``` #### 按照多个时间区间选择同一设备的多列数据 - +```sql 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); - +``` #### 按照多个时间区间选择不同设备的多列数据 - +```sql 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); - +``` #### 根据时间降序返回结果集 - +```sql select * from root.ln.** where time > 1 order by time desc limit 10; - +``` ### 2、选择表达式 #### 使用别名 - +```sql select s1 as temperature, s2 as speed from root.ln.wf01.wt01; - +``` #### 运算符 #### 函数 不支持: - +```sql select s1, count(s1) from root.sg.d1; select sin(s1), count(s1) from root.sg.d1; select s1, count(s1) from root.sg.d1 group by ([10,100),10ms); - +``` ##### 时间序列查询嵌套表达式 示例 1: - +```sql select a, b, @@ -519,9 +528,9 @@ select a, -(a + b) * (sin(a + b) * sin(a + b) + cos(a + b) * cos(a + b)) + 1 from root.sg1; - +``` 示例 2: - +```sql select (a + b) * 2 + sin(a) from root.sg 示例 3: @@ -531,11 +540,11 @@ select (a + *) / 2 from root.sg1 示例 4: select (a + b) * 3 from root.sg, root.ln - +``` ##### 聚合查询嵌套表达式 示例 1: - +```sql select avg(temperature), sin(avg(temperature)), @@ -547,17 +556,17 @@ select avg(temperature), avg(temperature) + sum(hardware) from root.ln.wf01.wt01; - +``` 示例 2: - +```sql select avg(*), (avg(*) + 1) * 3 / 2 -1 from root.sg1 - +``` 示例 3: - +```sql select avg(temperature), sin(avg(temperature)), @@ -571,7 +580,7 @@ select avg(temperature), from root.ln.wf01.wt01 GROUP BY([10, 90), 10ms); - +``` #### 最新点查询 SQL 语法: @@ -581,211 +590,212 @@ select last <Path> [COMMA <Path>]* from < PrefixPath > [COMMA < PrefixPath >]* < ``` 查询 root.ln.wf01.wt01.status 的最新数据点 - +```sql IoTDB> select last status from root.ln.wf01.wt01 - +``` 查询 root.ln.wf01.wt01 下 status,temperature 时间戳大于等于 2017-11-07T23:50:00 的最新数据点 - +```sql IoTDB> select last status, temperature from root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00 - +``` 查询 root.ln.wf01.wt01 下所有序列的最新数据点,并按照序列名降序排列 - +```sql IoTDB> select last * from root.ln.wf01.wt01 order by timeseries desc; - +``` ### 3、查询过滤条件 #### 时间过滤条件 选择时间戳大于 2022-01-01T00:05:00.000 的数据: - +```sql select s1 from root.sg1.d1 where time > 2022-01-01T00:05:00.000; - +``` 选择时间戳等于 2022-01-01T00:05:00.000 的数据: - +```sql select s1 from root.sg1.d1 where time = 2022-01-01T00:05:00.000; - +``` 选择时间区间 [2017-11-01T00:05:00.000, 2017-11-01T00:12:00.000) 内的数据: - +```sql select s1 from root.sg1.d1 where time >= 2022-01-01T00:05:00.000 and time < 2017-11-01T00:12:00.000; - +``` #### 值过滤条件 选择值大于 36.5 的数据: - +```sql select temperature from root.sg1.d1 where temperature > 36.5; - +``` 选择值等于 true 的数据: - +```sql select status from root.sg1.d1 where status = true; - +``` 选择区间 [36.5,40] 内或之外的数据: - +```sql select temperature from root.sg1.d1 where temperature between 36.5 and 40; - +``` +```sql select temperature from root.sg1.d1 where temperature not between 36.5 and 40; - +``` 选择值在特定范围内的数据: - +```sql select code from root.sg1.d1 where code in ('200', '300', '400', '500'); - +``` 选择值在特定范围外的数据: - +```sql select code from root.sg1.d1 where code not in ('200', '300', '400', '500'); - +``` 选择值为空的数据: - +```sql select code from root.sg1.d1 where temperature is null; - +``` 选择值为非空的数据: - +```sql select code from root.sg1.d1 where temperature is not null; - +``` #### 模糊查询 查询 `root.sg.d1` 下 `value` 含有`'cc'`的数据 - +```sql IoTDB> select * from root.sg.d1 where value like '%cc%' - +``` 查询 `root.sg.d1` 下 `value` 中间为 `'b'`、前后为任意单个字符的数据 - +```sql IoTDB> select * from root.sg.device where value like '_b_' - -查询 root.sg.d1 下 value 值为26个英文字符组成的字符串 ``` +查询 root.sg.d1 下 value 值为26个英文字符组成的字符串 +```sql IoTDB> select * from root.sg.d1 where value regexp '^[A-Za-z]+$' ``` 查询 root.sg.d1 下 value 值为26个小写英文字符组成的字符串且时间大于100的 -``` +```sql IoTDB> select * from root.sg.d1 where value regexp '^[a-z]+$' and time > 100 ``` ### 4、分段分组聚合 #### 未指定滑动步长的时间区间分组聚合查询 - +```sql select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d); - +``` #### 指定滑动步长的时间区间分组聚合查询 - +```sql 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); - +``` 滑动步长可以小于聚合窗口 - +```sql select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-01 10:00:00), 4h, 2h); - +``` #### 按照自然月份的时间区间分组聚合查询 - +```sql 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); - +``` 每个时间间隔窗口内都有数据 - +```sql select count(status) from root.ln.wf01.wt01 group by([2017-10-31T00:00:00, 2019-11-07T23:00:00), 1mo, 2mo); - +``` #### 左开右闭区间 - +```sql select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d); - +``` #### 与分组聚合混合使用 统计降采样后的数据点个数 - +```sql select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d), level=1; - +``` 加上滑动 Step 的降采样后的结果也可以汇总 - +```sql select count(status) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-07 23:00:00), 3h, 1d), level=1; - +``` #### 路径层级分组聚合 统计不同 database 下 status 序列的数据点个数 - +```sql select count(status) from root.** group by level = 1 - +``` 统计不同设备下 status 序列的数据点个数 - +```sql select count(status) from root.** group by level = 3 - +``` 统计不同 database 下的不同设备中 status 序列的数据点个数 - +```sql select count(status) from root.** group by level = 1, 3 - +``` 查询所有序列下温度传感器 temperature 的最大值 - +```sql select max_value(temperature) from root.** group by level = 0 - +``` 查询某一层级下所有传感器拥有的总数据点数 - +```sql select count(*) from root.ln.** group by level = 2 - +``` #### 标签分组聚合 ##### 单标签聚合查询 - +```sql SELECT AVG(temperature) FROM root.factory1.** GROUP BY TAGS(city); - +``` ##### 多标签聚合查询 - +```sql SELECT avg(temperature) FROM root.factory1.** GROUP BY TAGS(city, workshop); - +``` ##### 基于时间区间的标签聚合查询 - +```sql SELECT AVG(temperature) FROM root.factory1.** GROUP BY ([1000, 10000), 5s), TAGS(city, workshop); - +``` #### 差值分段聚合 - +```sql group by variation(controlExpression[,delta][,ignoreNull=true/false]) - +``` ##### delta=0时的等值事件分段 - +```sql select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6) - +``` 指定ignoreNull为false - +```sql select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6, ignoreNull=false) - +``` ##### delta!=0时的差值事件分段 - +```sql select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6, 4) - +``` #### 条件分段聚合 - +```sql group by condition(predict,[keep>/>=/=/<=/<]threshold,[,ignoreNull=true/false]) - +``` 查询至少连续两行以上的charging_status=1的数据 - +```sql select max_time(charging_status),count(vehicle_status),last_value(soc) from root.** group by condition(charging_status=1,KEEP>=2,ignoreNull=true) - +``` 当设置`ignoreNull`为false时,遇到null值为将其视为一个不满足条件的行,得到结果原先的分组被含null的行拆分 - +```sql select max_time(charging_status),count(vehicle_status),last_value(soc) from root.** group by condition(charging_status=1,KEEP>=2,ignoreNull=false) - +``` #### 会话分段聚合 - +```sql group by session(timeInterval) - +``` 按照不同的时间单位设定时间间隔 - +```sql select __endTime,count(*) from root.** group by session(1d) - +``` 和`HAVING`、`ALIGN BY DEVICE`共同使用 - +```sql select __endTime,sum(hardware) from root.ln.wf02.wt01 group by session(50s) having sum(hardware)>0 align by device - +``` #### 点数分段聚合 - +```sql group by count(controlExpression, size[,ignoreNull=true/false]) - +``` select count(charging_stauts), first_value(soc) from root.sg group by count(charging_status,5) 当使用ignoreNull将null值也考虑进来 - +```sql select count(charging_stauts), first_value(soc) from root.sg group by count(charging_status,5,ignoreNull=false) - +``` ### 5、聚合结果过滤 不正确的: - +```sql select count(s1) from root.** group by ([1,3),1ms) having sum(s1) > s1 select count(s1) from root.** group by ([1,3),1ms) having s1 > 1 @@ -793,103 +803,103 @@ select count(s1) from root.** group by ([1,3),1ms) having s1 > 1 select count(s1) from root.** group by ([1,3),1ms), level=1 having sum(d1.s1) > 1 select count(d1.s1) from root.** group by ([1,3),1ms), level=1 having sum(s1) > 1 - +``` SQL 示例: - +```sql select count(s1) from root.** group by ([1,11),2ms), level=1 having count(s2) > 2; select count(s1), count(s2) from root.** group by ([1,11),2ms) having count(s2) > 1 align by device; - +``` ### 6、结果集补空值 - +```sql FILL '(' PREVIOUS | LINEAR | constant ')' - +``` #### `PREVIOUS` 填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(previous); - +``` #### `LINEAR` 填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(linear); - +``` #### 常量填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(2.0); - +``` 使用 `BOOLEAN` 类型的常量填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(true); - +``` ### 7、查询结果分页 #### 按行分页 基本的 `LIMIT` 子句 - +```sql select status, temperature from root.ln.wf01.wt01 limit 10 - +``` 带 `OFFSET` 的 `LIMIT` 子句 - +```sql select status, temperature from root.ln.wf01.wt01 limit 5 offset 3 - +``` `LIMIT` 子句与 `WHERE` 子句结合 - +```sql 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 5 offset 3 - +``` `LIMIT` 子句与 `GROUP BY` 子句组合 - +```sql 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 4 offset 3 - +``` #### 按列分页 基本的 `SLIMIT` 子句 - +```sql 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` 的 `SLIMIT` 子句 - +```sql 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 - +``` `SLIMIT` 子句与 `GROUP BY` 子句结合 - +```sql 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 - +``` `SLIMIT` 子句与 `LIMIT` 子句结合 - +```sql select * from root.ln.wf01.wt01 limit 10 offset 100 slimit 2 soffset 0 - +``` ### 8、排序 时间对齐模式下的排序 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 order by time desc; - +``` 设备对齐模式下的排序 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 order by device desc,time asc align by device; - +``` 在时间戳相等时按照设备名排序 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 order by time asc,device desc align by device; - +``` 没有显式指定时 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 align by device; - +``` 对聚合后的结果进行排序 - +```sql select count(*) from root.ln.** group by ((2017-11-01T00:00:00.000+08:00,2017-11-01T00:03:00.000+08:00],1m) order by device asc,time asc align by device - +``` ### 9、查询对齐模式 #### 按设备对齐 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 align by device; - +``` ### 10、查询写回(SELECT INTO) #### 整体描述 - +```sql selectIntoStatement : SELECT @@ -919,23 +929,23 @@ intoItem : [ALIGNED] intoDevicePath '(' intoMeasurementName [',' intoMeasurementName]* ')' ; - +``` 按时间对齐,将 `root.sg` database 下四条序列的查询结果写入到 `root.sg_copy` database 下指定的四条序列中 - +```sql IoTDB> select s1, s2 into root.sg_copy.d1(t1), root.sg_copy.d2(t1, t2), root.sg_copy.d1(t2) from root.sg.d1, root.sg.d2; - +``` 按时间对齐,将聚合查询的结果存储到指定序列中 - +```sql IoTDB> select count(s1 + s2), last_value(s2) into root.agg.count(s1_add_s2), root.agg.last_value(s2) from root.sg.d1 group by ([0, 100), 10ms); - +``` 按设备对齐 - +```sql IoTDB> select s1, s2 into root.sg_copy.d1(t1, t2), root.sg_copy.d2(t1, t2) from root.sg.d1, root.sg.d2 align by device; - +``` 按设备对齐,将表达式计算的结果存储到指定序列中 - +```sql IoTDB> select s1 + s2 into root.expr.add(d1s1_d1s2), root.expr.add(d2s1_d2s2) from root.sg.d1, root.sg.d2 align by device; - +``` #### 使用变量占位符 ##### 按时间对齐(默认) @@ -1017,11 +1027,11 @@ select s1, s2 into root.sg_copy.d1(t1, t2), aligned root.sg_copy.d2(t1, t2) from ## 运算符 -更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md) +更多见文档[Operator-and-Expression](../Reference/Function-and-Expression.md#算数运算符和函数) ### 算数运算符 -更多见文档 [Arithmetic Operators and Functions](../Operators-Functions/Mathematical.md) +更多见文档 [Arithmetic Operators and Functions](../Reference/Function-and-Expression.md#算数运算符和函数) ```sql select s1, - s1, s2, + s2, s1 + s2, s1 - s2, s1 * s2, s1 / s2, s1 % s2 from root.sg.d1 @@ -1029,7 +1039,7 @@ select s1, - s1, s2, + s2, s1 + s2, s1 - s2, s1 * s2, s1 / s2, s1 % s2 from root ### 比较运算符 -更多见文档[Comparison Operators and Functions](../Operators-Functions/Comparison.md) +更多见文档[Comparison Operators and Functions](../Reference/Function-and-Expression.md#比较运算符和函数) ```sql # Basic comparison operators @@ -1060,7 +1070,7 @@ select a, a in (1, 2) from root.test; ### 逻辑运算符 -更多见文档[Logical Operators](../Operators-Functions/Logical.md) +更多见文档[Logical Operators](../Reference/Function-and-Expression.md#逻辑运算符) ```sql select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test; @@ -1068,11 +1078,11 @@ select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test; ## 内置函数 -更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md) +更多见文档[Operator-and-Expression](../Reference/Function-and-Expression.md#聚合函数) ### Aggregate Functions -更多见文档[Aggregate Functions](../Operators-Functions/Aggregation.md) +更多见文档[Aggregate Functions](../Reference/Function-and-Expression.md#聚合函数) ```sql select count(status) from root.ln.wf01.wt01; @@ -1085,7 +1095,7 @@ select time_duration(s1) from root.db.d1; ### 算数函数 -更多见文档[Arithmetic Operators and Functions](../Operators-Functions/Mathematical.md) +更多见文档[Arithmetic Operators and Functions](../Reference/Function-and-Expression.md#数学函数) ```sql select s1, sin(s1), cos(s1), tan(s1) from root.sg1.d1 limit 5 offset 1000; @@ -1094,7 +1104,7 @@ select s4,round(s4),round(s4,2),round(s4,-1) from root.sg1.d1; ### 比较函数 -更多见文档[Comparison Operators and Functions](../Operators-Functions/Comparison.md) +更多见文档[Comparison Operators and Functions](../Reference/Function-and-Expression.md#比较运算符和函数) ```sql select ts, on_off(ts, 'threshold'='2') from root.test; @@ -1103,7 +1113,7 @@ select ts, in_range(ts, 'lower'='2', 'upper'='3.1') from root.test; ### 字符串处理函数 -更多见文档[String Processing](../Operators-Functions/String.md) +更多见文档[String Processing](../Reference/Function-and-Expression.md#字符串处理) ```sql select s1, string_contains(s1, 's'='warn') from root.sg1.d4; @@ -1131,7 +1141,7 @@ select regexsplit(s1, "regex"=",", "index"="3") from root.test.d1 ### 数据类型转换函数 -更多见文档[Data Type Conversion Function](../Operators-Functions/Conversion.md) +更多见文档[Data Type Conversion Function](../Reference/Function-and-Expression.md#数据类型转换) ```sql SELECT cast(s1 as INT32) from root.sg @@ -1139,7 +1149,7 @@ SELECT cast(s1 as INT32) from root.sg ### 常序列生成函数 -更多见文档[Constant Timeseries Generating Functions](../Operators-Functions/Constant.md) +更多见文档[Constant Timeseries Generating Functions](../Reference/Function-and-Expression.md#常序列生成函数) ```sql select s1, s2, const(s1, 'value'='1024', 'type'='INT64'), pi(s2), e(s1, s2) from root.sg1.d1; @@ -1147,7 +1157,7 @@ select s1, s2, const(s1, 'value'='1024', 'type'='INT64'), pi(s2), e(s1, s2) from ### 选择函数 -更多见文档[Selector Functions](../Operators-Functions/Selection.md) +更多见文档[Selector Functions](../Reference/Function-and-Expression.md#选择函数) ```sql select s1, top_k(s1, 'k'='2'), bottom_k(s1, 'k'='2') from root.sg1.d2 where time > 2020-12-10T20:36:15.530+08:00; @@ -1155,7 +1165,7 @@ select s1, top_k(s1, 'k'='2'), bottom_k(s1, 'k'='2') from root.sg1.d2 where time ### 区间查询函数 -更多见文档[Continuous Interval Functions](../Operators-Functions/Continuous-Interval.md) +更多见文档[Continuous Interval Functions](../Reference/Function-and-Expression.md#区间查询函数) ```sql select s1, zero_count(s1), non_zero_count(s2), zero_duration(s3), non_zero_duration(s4) from root.sg.d2; @@ -1163,7 +1173,7 @@ select s1, zero_count(s1), non_zero_count(s2), zero_duration(s3), non_zero_durat ### 趋势计算函数 -更多见文档[Variation Trend Calculation Functions](../Operators-Functions/Variation-Trend.md) +更多见文档[Variation Trend Calculation Functions](../Reference/Function-and-Expression.md#趋势计算函数) ```sql select s1, time_difference(s1), difference(s1), non_negative_difference(s1), derivative(s1), non_negative_derivative(s1) from root.sg1.d1 limit 5 offset 1000; @@ -1174,7 +1184,11 @@ SELECT DIFF(s1, 'ignoreNull'='false'), DIFF(s2, 'ignoreNull'='false') from root. ### 采样函数 -更多见文档[Sample Functions](../Operators-Functions/Sample.md) +更多见文档[Sample Functions](../Reference/Function-and-Expression.md#采样函数)。 +### 时间序列处理函数 + +| 函数名 | 输入序列类型 | 参数 | 输出序列类型 | 功能描述 | +| ---) ```sql select equal_size_bucket_random_sample(temperature,'proportion'='0.1') as random_sample from root.ln.wf01.wt01; @@ -1188,7 +1202,7 @@ select M4(s1,'windowSize'='10') from root.vehicle.d1 ### 时间序列处理函数 -更多见文档[Time-Series](../Operators-Functions/Time-Series.md) +更多见文档[Time-Series](../Reference/Function-and-Expression.md#时间序列处理) ```sql select change_points(s1), change_points(s2), change_points(s3), change_points(s4), change_points(s5), change_points(s6) from root.testChangePoints.d1 @@ -1196,11 +1210,11 @@ select change_points(s1), change_points(s2), change_points(s3), change_points(s4 ## 数据质量函数库 -更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md) +更多见文档[Operator-and-Expression](../Reference/UDF-Libraries.md) ### 数据质量 -更多见文档[Data-Quality](../Operators-Functions/Data-Quality.md) +更多见文档[Data-Quality](../Reference/UDF-Libraries.md#数据质量) ```sql # Completeness @@ -1225,7 +1239,7 @@ select Accuracy(t1,t2,t3,m1,m2,m3) from root.test ### 数据画像 -更多见文档[Data-Profiling](../Operators-Functions/Data-Profiling.md) +更多见文档[Data-Profiling](../Reference/UDF-Libraries.md#数据画像) ```sql # ACF @@ -1305,7 +1319,7 @@ select zscore(s1) from root.test ### 异常检测 -更多见文档[Anomaly-Detection](../Operators-Functions/Anomaly-Detection.md) +更多见文档[Anomaly-Detection](../Reference/UDF-Libraries.md#异常检测) ```sql # IQR @@ -1340,7 +1354,7 @@ select MasterDetect(lo,la,m_lo,m_la,model,'output_type'='anomaly','p'='3','k'='3 ### 频域分析 -更多见文档[Frequency-Domain](../Operators-Functions/Frequency-Domain.md) +更多见文档[Frequency-Domain](../Reference/UDF-Libraries.md#频域分析) ```sql # Conv @@ -1369,7 +1383,7 @@ select lowpass(s1,'wpass'='0.45') from root.test.d1 ### 数据匹配 -更多见文档[Data-Matching](../Operators-Functions/Data-Matching.md) +更多见文档[Data-Matching](../Reference/UDF-Libraries.md#数据匹配) ```sql # Cov @@ -1390,7 +1404,7 @@ select xcorr(s1, s2) from root.test.d1 where time <= 2020-01-01 00:00:05 ### 数据修复 -更多见文档[Data-Repairing](../Operators-Functions/Data-Repairing.md) +更多见文档[Data-Repairing](../Reference/UDF-Libraries.md#数据修复) ```sql # TimestampRepair @@ -1415,7 +1429,7 @@ select seasonalrepair(s1,'method'='improved','period'=3) from root.test.d2 ### 序列发现 -更多见文档[Series-Discovery](../Operators-Functions/Series-Discovery.md) +更多见文档[Series-Discovery](../Reference/UDF-Libraries.md#序列发现) ```sql # ConsecutiveSequences @@ -1428,7 +1442,7 @@ select consecutivewindows(s1,s2,'length'='10m') from root.test.d1 ### 机器学习 -更多见文档[Machine-Learning](../Operators-Functions/Machine-Learning.md) +更多见文档[Machine-Learning](../Reference/UDF-Libraries.md#机器学习) ```sql # AR @@ -1443,7 +1457,7 @@ select rm(s0, s1,"tb"="3","vb"="2") from root.test.d0 ## Lambda 表达式 -更多见文档[Lambda](../Operators-Functions/Lambda.md) +更多见文档[Lambda](../Reference/Function-and-Expression.md#Lambda表达式) ```sql select jexl(temperature, 'expr'='x -> {x + x}') as jexl1, jexl(temperature, 'expr'='x -> {x * 3}') as jexl2, jexl(temperature, 'expr'='x -> {x * x}') as jexl3, jexl(temperature, 'expr'='x -> {multiply(x, 100)}') as jexl4, jexl(temperature, st, 'expr'='(x, y) -> {x + y}') as jexl5, jexl(temperature, st, str, 'expr'='(x, y, z) -> {x + y + z}') as jexl6 from root.ln.wf01.wt01;``` @@ -1451,7 +1465,7 @@ select jexl(temperature, 'expr'='x -> {x + x}') as jexl1, jexl(temperature, 'exp ## 条件表达式 -更多见文档[Conditional Expressions](../Operators-Functions/Conditional.md) +更多见文档[Conditional Expressions](../Reference/Function-and-Expression.md#条件表达式) ```sql select T, P, case @@ -1490,7 +1504,7 @@ from root.test4 ## 触发器 ### 使用 SQL 语句注册该触发器 - +```sql // Create Trigger createTrigger @@ -1546,9 +1560,9 @@ triggerAttribute : key=attributeKey operator_eq value=attributeValue ; - +``` #### SQL 语句示例 - +```sql CREATE STATELESS TRIGGER triggerTest BEFORE INSERT @@ -1566,11 +1580,11 @@ WITH ( "limit" = "100" ) - +``` ### 卸载触发器 #### 卸载触发器的 SQL 语法如下: - +```sql // Drop Trigger dropTrigger @@ -1578,15 +1592,15 @@ dropTrigger : DROP TRIGGER triggerName=identifier ; - +``` #### 示例语句 - +```sql DROP TRIGGER triggerTest1 - +``` ### 查询触发器 - +```sql SHOW TRIGGERS - +``` ## 连续查询(Continuous Query, CQ) ### 语法 @@ -1613,7 +1627,7 @@ END ``` #### 配置连续查询执行的周期性间隔 - +```sql CREATE CONTINUOUS QUERY cq1 RESAMPLE EVERY 20s @@ -1633,9 +1647,9 @@ END \> SELECT temperature_max from root.ln.*.*; - +``` #### 配置连续查询的时间窗口大小 - +``` CREATE CONTINUOUS QUERY cq2 RESAMPLE RANGE 40s @@ -1653,11 +1667,10 @@ BEGIN END - \> SELECT temperature_max from root.ln.*.*; - +``` #### 同时配置连续查询执行的周期性间隔和时间窗口大小 - +```sql CREATE CONTINUOUS QUERY cq3 RESAMPLE EVERY 20s RANGE 40s @@ -1679,9 +1692,9 @@ END \> SELECT temperature_max from root.ln.*.*; - +``` #### 配置连续查询每次查询执行时间窗口的结束时间 - +```sql CREATE CONTINUOUS QUERY cq4 RESAMPLE EVERY 20s RANGE 40s, 20s @@ -1703,9 +1716,9 @@ END \> SELECT temperature_max from root.ln.*.*; - +``` #### 没有GROUP BY TIME子句的连续查询 - +```sql CREATE CONTINUOUS QUERY cq5 RESAMPLE EVERY 20s @@ -1725,31 +1738,32 @@ END \> SELECT temperature from root.precalculated_sg.*.* align by device; - +``` ### 连续查询的管理 #### 查询系统已有的连续查询 展示集群中所有的已注册的连续查询 - +```sql SHOW (CONTINUOUS QUERIES | CQS) - +``` +```sql SHOW CONTINUOUS QUERIES; - +``` #### 删除已有的连续查询 删除指定的名为cq_id的连续查询: -```Go +```sql DROP (CONTINUOUS QUERY | CQ) <cq_id> ``` - +```sql DROP CONTINUOUS QUERY s1_count_cq; - +``` #### 作为子查询的替代品 -\1. 创建一个连续查询 - +1. 创建一个连续查询 +```sql CREATE CQ s1_count_cq BEGIN @@ -1763,49 +1777,50 @@ BEGIN GROUP BY(30m) END - +``` 1. 查询连续查询的结果 - +```sql SELECT avg(count_s1) from root.sg_count.d; - +``` ## 用户自定义函数 ### UDFParameters - +```sql SELECT UDF(s1, s2, 'key1'='iotdb', 'key2'='123.45') FROM root.sg.d; - +``` ### UDF 注册 -```Go +```sql CREATE FUNCTION <UDF-NAME> AS <UDF-CLASS-FULL-PATHNAME> (USING URI URI-STRING)? ``` #### 不指定URI - +```sql CREATE FUNCTION example AS 'org.apache.iotdb.udf.UDTFExample' - +``` #### 指定URI - +```sql CREATE FUNCTION example AS 'org.apache.iotdb.udf.UDTFExample' USING URI 'http://jar/example.jar' - +``` ### UDF 卸载 -```Go +```sql DROP FUNCTION <UDF-NAME> ``` - +```sql DROP FUNCTION example - +``` ### UDF 查询 #### 带自定义输入参数的查询 - +```sql SELECT example(s1, 'key1'='value1', 'key2'='value2'), example(*, 'key3'='value3') FROM root.sg.d1; - +``` +```sql SELECT example(s1, s2, 'key1'='value1', 'key2'='value2') FROM root.sg.d1; - +``` #### 与其他查询的嵌套查询 - +```sql SELECT s1, s2, example(s1, s2) FROM root.sg.d1; SELECT *, example(*) FROM root.sg.d1 DISABLE ALIGN; @@ -1813,11 +1828,11 @@ SELECT *, example(*) FROM root.sg.d1 DISABLE ALIGN; SELECT s1 * example(* / s1 + s2) FROM root.sg.d1; SELECT s1, s2, s1 + example(s1, s2), s1 - example(s1 + example(s1, s2) / s2) FROM root.sg.d1; - +``` ### 查看所有注册的 UDF - +```sql SHOW FUNCTIONS - +``` ## 权限管理 ### 用户与角色相关 diff --git a/src/zh/UserGuide/Master/User-Manual/IoTDB-View_timecho.md b/src/zh/UserGuide/Master/User-Manual/IoTDB-View_timecho.md index 8ee4a0d..54eef71 100644 --- a/src/zh/UserGuide/Master/User-Manual/IoTDB-View_timecho.md +++ b/src/zh/UserGuide/Master/User-Manual/IoTDB-View_timecho.md @@ -308,7 +308,7 @@ AS SELECT temperature FROM root.db.* ``` -这里仿照了查询写回(`SELECT INTO`)对命名规则的约定,使用变量占位符来指定命名规则。可以参考:[查询写回(SELECT INTO)](https://iotdb.apache.org/zh/UserGuide/Master/Query-Data/Select-Into.html) +这里仿照了查询写回(`SELECT INTO`)对命名规则的约定,使用变量占位符来指定命名规则。可以参考:[查询写回(SELECT INTO)](../User-Manual/Query-Data.md#查询写回(INTO-子句)) 这里`root.db.*.temperature`指定了有哪些时间序列会被包含在视图中;`${2}`则指定了从时间序列中的哪个节点提取出名字来命名序列视图。 diff --git a/src/zh/UserGuide/Master/User-Manual/Operate-Metadata.md b/src/zh/UserGuide/Master/User-Manual/Operate-Metadata.md index f21109b..6444f46 100644 --- a/src/zh/UserGuide/Master/User-Manual/Operate-Metadata.md +++ b/src/zh/UserGuide/Master/User-Manual/Operate-Metadata.md @@ -46,7 +46,7 @@ Database 节点名只支持中英文字符、数字、下划线的组合,如 ### 查看数据库 -在 database 创建后,我们可以使用 [SHOW DATABASES](../Reference/SQL-Reference.md) 语句和 [SHOW DATABASES \<PathPattern>](../Reference/SQL-Reference.md) 来查看 database,SQL 语句如下所示: +在 database 创建后,我们可以使用 [SHOW DATABASES](../SQL-Manual/SQL-Manual.md#查看数据库) 语句和 [SHOW DATABASES \<PathPattern>](../SQL-Manual/SQL-Manual.md#查看数据库) 来查看 database,SQL 语句如下所示: ``` IoTDB> show databases @@ -552,7 +552,7 @@ IoTDB> create timeseries root.ln.wf02.wt02.status WITH DATATYPE=BOOLEAN, ENCODIN error: encoding TS_2DIFF does not support BOOLEAN ``` -详细的数据类型与编码方式的对应列表请参见 [编码方式](../Basic-Concept/Encoding.md)。 +详细的数据类型与编码方式的对应列表请参见 [编码方式](../Basic-Concept/Encoding-and-Compression.md)。 ### 创建对齐时间序列 diff --git a/src/zh/UserGuide/Master/User-Manual/Operator-and-Expression.md b/src/zh/UserGuide/Master/User-Manual/Operator-and-Expression.md index dd9866e..3ff9f86 100644 --- a/src/zh/UserGuide/Master/User-Manual/Operator-and-Expression.md +++ b/src/zh/UserGuide/Master/User-Manual/Operator-and-Expression.md @@ -226,6 +226,7 @@ OR, |, || | EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE | INT32 / INT64 / FLOAT / DOUBLE | `proportion`取值范围为`(0, 1]`,默认为`0.1`<br>`type`取值为`avg`或`stendis`或`cos`或`prenextdis`,默认为`avg`<br>`number`取值应大于0,默认`3`| INT32 / INT64 / FLOAT / DOUBLE | 返回符合采样比例和桶内采样个数的等分桶离群值采样 | | M4 | INT32 / INT64 / FLOAT / DOUBLE | 包含固定点数的窗口和滑动时间窗口使用不同的属性参数。包含固定点数的窗口使用属性`windowSize`和`slidingStep`。滑动时间窗口使用属性`timeInterval`、`slidingStep`、`displayWindowBegin`和`displayWindowEnd`。更多细节见下文。 | INT32 / INT64 / FLOAT / DOUBLE | 返回每个窗口内的第一个点(`first`)、最后一个点(`last`)、最小值点(`bottom`)、最大值点(`top`)。在一个窗口内的聚合点输出之前,M4会将它们按照时间戳递增排序并且去重。 | +详细说明及示例见文档 [采样函数](../Reference/Function-and-Expression.md#采样函数)。 ### 时间序列处理函数 | 函数名 | 输入序列类型 | 参数 | 输出序列类型 | 功能描述 | @@ -266,7 +267,7 @@ OR, |, || | ------ | ----------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------- | ---------------------------------------------- | | JEXL | INT32 / INT64 / FLOAT / DOUBLE / TEXT / BOOLEAN | `expr`是一个支持标准的一元或多元参数的lambda表达式,符合`x -> {...}`或`(x, y, z) -> {...}`的格式,例如`x -> {x * 2}`, `(x, y, z) -> {x + y * z}` | INT32 / INT64 / FLOAT / DOUBLE / TEXT / BOOLEAN | 返回将输入的时间序列通过lambda表达式变换的序列 | -详细说明及示例见文档 [Lambda 表达式](../Operators-Functions/Lambda.md) +详细说明及示例见文档 [Lambda 表达式](../Reference/Function-and-Expression.md#Lambda表达式) ## 条件表达式 @@ -274,7 +275,7 @@ OR, |, || |---------------------------|-----------| | `CASE` | 类似if else | -详细说明及示例见文档 [条件表达式](../Operators-Functions/Conditional.md) +详细说明及示例见文档 [条件表达式](../Reference/Function-and-Expression.md#条件表达式) ## SELECT 表达式 @@ -312,7 +313,7 @@ select s1 as temperature, s2 as speed from root.ln.wf01.wt01; #### 运算符 -IoTDB 中支持的运算符列表见文档 [运算符和函数](../Operators-Functions/Overview.md)。 +IoTDB 中支持的运算符列表见文档 [运算符和函数](../Reference/Function-and-Expression.md#算数运算符和函数)。 #### 函数 @@ -330,7 +331,7 @@ select sin(s1), count(s1) from root.sg.d1; select s1, count(s1) from root.sg.d1 group by ([10,100),10ms); ``` -IoTDB 支持的聚合函数见文档 [聚合函数](../Operators-Functions/Aggregation.md)。 +IoTDB 支持的聚合函数见文档 [聚合函数](../Reference/Function-and-Expression.md#聚合函数)。 ##### 时间序列生成函数 @@ -340,11 +341,11 @@ IoTDB 支持的聚合函数见文档 [聚合函数](../Operators-Functions/Aggre ###### 内置时间序列生成函数 -IoTDB 中支持的内置函数列表见文档 [运算符和函数](../Operators-Functions/Overview.md)。 +IoTDB 中支持的内置函数列表见文档 [运算符和函数](../Reference/Function-and-Expression.md#算数运算符)。 ###### 自定义时间序列生成函数 -IoTDB 支持通过用户自定义函数(点击查看: [用户自定义函数](../Operators-Functions/User-Defined-Function.md) )能力进行函数功能扩展。 +IoTDB 支持通过用户自定义函数(点击查看: [用户自定义函数](../Reference/UDF-Libraries.md) )能力进行函数功能扩展。 #### 嵌套表达式举例 diff --git a/src/zh/UserGuide/V1.2.x/Deployment-and-Maintenance/Environmental-Requirement.md b/src/zh/UserGuide/V1.2.x/Deployment-and-Maintenance/Deployment-Preparation.md similarity index 100% rename from src/zh/UserGuide/V1.2.x/Deployment-and-Maintenance/Environmental-Requirement.md rename to src/zh/UserGuide/V1.2.x/Deployment-and-Maintenance/Deployment-Preparation.md diff --git a/src/zh/UserGuide/latest/Deployment-and-Maintenance/Environmental-Requirement.md b/src/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Preparation.md similarity index 95% rename from src/zh/UserGuide/latest/Deployment-and-Maintenance/Environmental-Requirement.md rename to src/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Preparation.md index 60b6fce..c5dca58 100644 --- a/src/zh/UserGuide/latest/Deployment-and-Maintenance/Environmental-Requirement.md +++ b/src/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Preparation.md @@ -34,3 +34,8 @@ > **# Linux** <br>`sudo sysctl -w net.core.somaxconn=65535` <br>**# FreeBSD 或 > Darwin** <br>`sudo sysctl -w kern.ipc.somaxconn=65535` +## 安装包获取 + +企业版安装包可经由商务获取。 + + diff --git a/src/zh/UserGuide/latest/Reference/Function-and-Expression.md b/src/zh/UserGuide/latest/Reference/Function-and-Expression.md index aa4f4ec..6b126e5 100644 --- a/src/zh/UserGuide/latest/Reference/Function-and-Expression.md +++ b/src/zh/UserGuide/latest/Reference/Function-and-Expression.md @@ -2651,3 +2651,348 @@ Total line number = 11 It costs 0.118s ``` +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> + +## 条件表达式 + +### CASE + +CASE表达式是一种条件表达式,可用于根据特定条件返回不同的值,功能类似于其它语言中的if-else。 +CASE表达式由以下部分组成: +- CASE关键字:表示开始CASE表达式。 +- WHEN-THEN子句:可能存在多个,用于定义条件与给出结果。此子句又分为WHEN和THEN两个部分,WHEN部分表示条件,THEN部分表示结果表达式。如果WHEN条件为真,则返回对应的THEN结果。 +- ELSE子句:如果没有任何WHEN-THEN子句的条件为真,则返回ELSE子句中的结果。可以不存在ELSE子句。 +- END关键字:表示结束CASE表达式。 + +CASE表达式是一种标量运算,可以配合任何其它的标量运算或聚合函数使用。 + +下文把所有THEN部分和ELSE子句并称为结果子句。 + +#### 语法示例 + +CASE表达式支持两种格式。 + +语法示例如下: +- 格式1: +```sql + CASE + WHEN condition1 THEN expression1 + [WHEN condition2 THEN expression2] ... + [ELSE expression_end] + END +``` + 从上至下检查WHEN子句中的condition。 + + condition为真时返回对应THEN子句中的expression,condition为假时继续检查下一个WHEN子句中的condition。 +- 格式2: +```sql + CASE caseValue + WHEN whenValue1 THEN expression1 + [WHEN whenValue2 THEN expression2] ... + [ELSE expression_end] + END +``` + + 从上至下检查WHEN子句中的whenValue是否与caseValue相等。 + + 满足caseValue=whenValue时返回对应THEN子句中的expression,不满足时继续检查下一个WHEN子句中的whenValue。 + + 格式2会被iotdb转换成等效的格式1,例如以上sql语句会转换成: +```sql + CASE + WHEN caseValue=whenValue1 THEN expression1 + [WHEN caseValue=whenValue1 THEN expression1] ... + [ELSE expression_end] + END +``` + +如果格式1中的condition均不为真,或格式2中均不满足caseVaule=whenValue,则返回ELSE子句中的expression_end;不存在ELSE子句则返回null。 + +#### 注意事项 + +- 格式1中,所有WHEN子句必须返回BOOLEAN类型。 +- 格式2中,所有WHEN子句必须能够与CASE子句进行判等。 +- 一个CASE表达式中所有结果子句的返回值类型需要满足一定的条件: + - BOOLEAN类型不能与其它类型共存,存在其它类型会报错。 + - TEXT类型不能与其它类型共存,存在其它类型会报错。 + - 其它四种数值类型可以共存,最终结果会为DOUBLE类型,转换过程可能会存在精度损失。 +- CASE表达式没有实现惰性计算,即所有子句都会被计算。 +- CASE表达式不支持与UDF混用。 +- CASE表达式内部不能存在聚合函数,但CASE表达式的结果可以提供给聚合函数。 +- 使用CLI时,由于CASE表达式字符串较长,推荐用as为表达式提供别名。 + +#### 使用示例 + +##### 示例1 + +CASE表达式可对数据进行直观地分析,例如: + +- 某种化学产品的制备需要温度和压力都处于特定范围之内 +- 在制备过程中传感器会侦测温度和压力,在iotdb中形成T(temperature)和P(pressure)两个时间序列 + +这种应用场景下,CASE表达式可以指出哪些时间的参数是合适的,哪些时间的参数不合适,以及为什么不合适。 + +数据: +```sql +IoTDB> select * from root.test1 ++-----------------------------+------------+------------+ +| Time|root.test1.P|root.test1.T| ++-----------------------------+------------+------------+ +|2023-03-29T11:25:54.724+08:00| 1000000.0| 1025.0| +|2023-03-29T11:26:13.445+08:00| 1000094.0| 1040.0| +|2023-03-29T11:27:36.988+08:00| 1000095.0| 1041.0| +|2023-03-29T11:27:56.446+08:00| 1000095.0| 1059.0| +|2023-03-29T11:28:20.838+08:00| 1200000.0| 1040.0| ++-----------------------------+------------+------------+ +``` + +SQL语句: +```sql +select T, P, case +when 1000<T and T<1050 and 1000000<P and P<1100000 then "good!" +when T<=1000 or T>=1050 then "bad temperature" +when P<=1000000 or P>=1100000 then "bad pressure" +end as `result` +from root.test1 +``` + + +输出: +``` ++-----------------------------+------------+------------+---------------+ +| Time|root.test1.T|root.test1.P| result| ++-----------------------------+------------+------------+---------------+ +|2023-03-29T11:25:54.724+08:00| 1025.0| 1000000.0| bad pressure| +|2023-03-29T11:26:13.445+08:00| 1040.0| 1000094.0| good!| +|2023-03-29T11:27:36.988+08:00| 1041.0| 1000095.0| good!| +|2023-03-29T11:27:56.446+08:00| 1059.0| 1000095.0|bad temperature| +|2023-03-29T11:28:20.838+08:00| 1040.0| 1200000.0| bad pressure| ++-----------------------------+------------+------------+---------------+ +``` + + +##### 示例2 + +CASE表达式可实现结果的自由转换,例如将具有某种模式的字符串转换成另一种字符串。 + +数据: +```sql +IoTDB> select * from root.test2 ++-----------------------------+--------------+ +| Time|root.test2.str| ++-----------------------------+--------------+ +|2023-03-27T18:23:33.427+08:00| abccd| +|2023-03-27T18:23:39.389+08:00| abcdd| +|2023-03-27T18:23:43.463+08:00| abcdefg| ++-----------------------------+--------------+ +``` + +SQL语句: +```sql +select str, case +when str like "%cc%" then "has cc" +when str like "%dd%" then "has dd" +else "no cc and dd" end as `result` +from root.test2 +``` + +输出: +``` ++-----------------------------+--------------+------------+ +| Time|root.test2.str| result| ++-----------------------------+--------------+------------+ +|2023-03-27T18:23:33.427+08:00| abccd| has cc| +|2023-03-27T18:23:39.389+08:00| abcdd| has dd| +|2023-03-27T18:23:43.463+08:00| abcdefg|no cc and dd| ++-----------------------------+--------------+------------+ +``` + +##### 示例3:搭配聚合函数 + +###### 合法:聚合函数←CASE表达式 + +CASE表达式可作为聚合函数的参数。例如,与聚合函数COUNT搭配,可实现同时按多个条件进行数据统计。 + +数据: +```sql +IoTDB> select * from root.test3 ++-----------------------------+------------+ +| Time|root.test3.x| ++-----------------------------+------------+ +|2023-03-27T18:11:11.300+08:00| 0.0| +|2023-03-27T18:11:14.658+08:00| 1.0| +|2023-03-27T18:11:15.981+08:00| 2.0| +|2023-03-27T18:11:17.668+08:00| 3.0| +|2023-03-27T18:11:19.112+08:00| 4.0| +|2023-03-27T18:11:20.822+08:00| 5.0| +|2023-03-27T18:11:22.462+08:00| 6.0| +|2023-03-27T18:11:24.174+08:00| 7.0| +|2023-03-27T18:11:25.858+08:00| 8.0| +|2023-03-27T18:11:27.979+08:00| 9.0| ++-----------------------------+------------+ +``` + +SQL语句: + +```sql +select +count(case when x<=1 then 1 end) as `(-∞,1]`, +count(case when 1<x and x<=3 then 1 end) as `(1,3]`, +count(case when 3<x and x<=7 then 1 end) as `(3,7]`, +count(case when 7<x then 1 end) as `(7,+∞)` +from root.test3 +``` + +输出: +``` ++------+-----+-----+------+ +|(-∞,1]|(1,3]|(3,7]|(7,+∞)| ++------+-----+-----+------+ +| 2| 2| 4| 2| ++------+-----+-----+------+ +``` + +###### 非法:CASE表达式←聚合函数 + +不支持在CASE表达式内部使用聚合函数。 + +SQL语句: +```sql +select case when x<=1 then avg(x) else sum(x) end from root.test3 +``` + +输出: +``` +Msg: 701: Raw data and aggregation result hybrid calculation is not supported. +``` + +##### 示例4:格式2 + +一个使用格式2的简单例子。如果所有条件都为判等,则推荐使用格式2,以简化SQL语句。 + +数据: +```sql +IoTDB> select * from root.test4 ++-----------------------------+------------+ +| Time|root.test4.x| ++-----------------------------+------------+ +|1970-01-01T08:00:00.001+08:00| 1.0| +|1970-01-01T08:00:00.002+08:00| 2.0| +|1970-01-01T08:00:00.003+08:00| 3.0| +|1970-01-01T08:00:00.004+08:00| 4.0| ++-----------------------------+------------+ +``` + +SQL语句: +```sql +select x, case x when 1 then "one" when 2 then "two" else "other" end from root.test4 +``` + +输出: +``` ++-----------------------------+------------+-----------------------------------------------------------------------------------+ +| Time|root.test4.x|CASE WHEN root.test4.x = 1 THEN "one" WHEN root.test4.x = 2 THEN "two" ELSE "other"| ++-----------------------------+------------+-----------------------------------------------------------------------------------+ +|1970-01-01T08:00:00.001+08:00| 1.0| one| +|1970-01-01T08:00:00.002+08:00| 2.0| two| +|1970-01-01T08:00:00.003+08:00| 3.0| other| +|1970-01-01T08:00:00.004+08:00| 4.0| other| ++-----------------------------+------------+-----------------------------------------------------------------------------------+ +``` + +##### 示例5:结果子句类型 + +CASE表达式的结果子句的返回值需要满足一定的类型限制。 + +此示例中,继续使用示例4中的数据。 + +###### 非法:BOOLEAN与其它类型共存 + +SQL语句: +```sql +select x, case x when 1 then true when 2 then 2 end from root.test4 +``` + +输出: +``` +Msg: 701: CASE expression: BOOLEAN and other types cannot exist at same time +``` + +###### 合法:只存在BOOLEAN类型 + +SQL语句: +```sql +select x, case x when 1 then true when 2 then false end as `result` from root.test4 +``` + +输出: +``` ++-----------------------------+------------+------+ +| Time|root.test4.x|result| ++-----------------------------+------------+------+ +|1970-01-01T08:00:00.001+08:00| 1.0| true| +|1970-01-01T08:00:00.002+08:00| 2.0| false| +|1970-01-01T08:00:00.003+08:00| 3.0| null| +|1970-01-01T08:00:00.004+08:00| 4.0| null| ++-----------------------------+------------+------+ +``` + +###### 非法:TEXT与其它类型共存 + +SQL语句: +```sql +select x, case x when 1 then 1 when 2 then "str" end from root.test4 +``` + +输出: +``` +Msg: 701: CASE expression: TEXT and other types cannot exist at same time +``` + +###### 合法:只存在TEXT类型 + +见示例1。 + +###### 合法:数值类型共存 + +SQL语句: +```sql +select x, case x +when 1 then 1 +when 2 then 222222222222222 +when 3 then 3.3 +when 4 then 4.4444444444444 +end as `result` +from root.test4 +``` + +输出: +``` ++-----------------------------+------------+-------------------+ +| Time|root.test4.x| result| ++-----------------------------+------------+-------------------+ +|1970-01-01T08:00:00.001+08:00| 1.0| 1.0| +|1970-01-01T08:00:00.002+08:00| 2.0|2.22222222222222E14| +|1970-01-01T08:00:00.003+08:00| 3.0| 3.299999952316284| +|1970-01-01T08:00:00.004+08:00| 4.0| 4.44444465637207| ++-----------------------------+------------+-------------------+ +``` \ No newline at end of file diff --git a/src/zh/UserGuide/latest/Reference/UDF-Libraries.md b/src/zh/UserGuide/latest/Reference/UDF-Libraries.md index 6ec19b2..be45495 100644 --- a/src/zh/UserGuide/latest/Reference/UDF-Libraries.md +++ b/src/zh/UserGuide/latest/Reference/UDF-Libraries.md @@ -605,13 +605,13 @@ select Accuracy(t1,t2,t3,m1,m2,m3) from root.test #### 函数简介 -本函数用于计算时间序列的自相关函数值,即序列与自身之间的互相关函数,详情参见[XCorr](./Data-Matching.md#XCorr)函数文档。 +本函数用于计算时间序列的自相关函数值,即序列与自身之间的互相关函数。 **函数名:** ACF **输入序列:** 仅支持单个输入序列,类型为 INT32 / INT64 / FLOAT / DOUBLE。 -**输出序列:** 输出单个序列,类型为 DOUBLE。序列中共包含$2N-1$个数据点,每个值的具体含义参见[XCorr](./Data-Matching.md#XCorr)函数文档。 +**输出序列:** 输出单个序列,类型为 DOUBLE。序列中共包含$2N-1$个数据点。 **提示:** diff --git a/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md b/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md index 83ebfe1..c46653f 100644 --- a/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md +++ b/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md @@ -202,32 +202,36 @@ show timeseries where TAGS(tag1)='v1' #### 查看路径的所有子路径 +```sql SHOW CHILD PATHS pathPattern - - 查询 root.ln 的下一层:show child paths root.ln - 查询形如 root.xx.xx.xx 的路径:show child paths root.*.* - +``` #### 查看路径的所有子节点 +```sql SHOW CHILD NODES pathPattern - 查询 root 的下一层:show child nodes root - 查询 root.ln 的下一层 :show child nodes root.ln - +``` #### 查看设备 +```sql IoTDB> show devices IoTDB> show devices root.ln.** - +``` ##### 查看设备及其 database 信息 +```sql IoTDB> show devices with database IoTDB> show devices root.ln.** with database - +``` #### 统计节点数 +```sql IoTDB > COUNT NODES root.** LEVEL=2 IoTDB > COUNT NODES root.ln.** LEVEL=2 @@ -235,15 +239,16 @@ IoTDB > COUNT NODES root.ln.** LEVEL=2 IoTDB > COUNT NODES root.ln.wf01.* LEVEL=3 IoTDB > COUNT NODES root.**.temperature LEVEL=3 - +``` #### 统计设备数量 +```sql IoTDB> show devices IoTDB> count devices IoTDB> count devices root.ln.** - +``` ### 4、设备模板管理 ![img](https://alioss.timecho.com/docs/img/%E6%A8%A1%E6%9D%BF.png) @@ -265,19 +270,19 @@ CREATE SCHEMA TEMPLATE <templateName> ALIGNED? '(' <measurementId> <attributeCla ``` 创建包含两个非对齐序列的元数据模板 - +```sql IoTDB> create schema template t1 (temperature FLOAT encoding=RLE, status BOOLEAN encoding=PLAIN compression=SNAPPY) - +``` 创建包含一组对齐序列的元数据模板 - +```sql IoTDB> create schema template t2 aligned (lat FLOAT encoding=Gorilla, lon FLOAT encoding=Gorilla) - +``` #### 挂载元数据模板 - +```sql IoTDB> set SCHEMA TEMPLATE t1 to root.sg1 - +``` #### 激活元数据模板 - +```sql IoTDB> create timeseries using SCHEMA TEMPLATE on root.sg1.d1 IoTDB> set SCHEMA TEMPLATE t1 to root.sg1.d1 @@ -287,95 +292,108 @@ IoTDB> set SCHEMA TEMPLATE t2 to root.sg1.d2 IoTDB> create timeseries using schema template on root.sg1.d1 IoTDB> create timeseries using schema template on root.sg1.d2 - +``` #### 查看元数据模板 - +```sql IoTDB> show schema templates - +``` - 查看某个元数据模板下的物理量 - +```sql IoTDB> show nodes in schema template t1 - +``` - 查看挂载了某个元数据模板的路径 - +```sql IoTDB> show paths set schema template t1 - +``` - 查看使用了某个元数据模板的路径(即模板在该路径上已激活,序列已创建) - +```sql IoTDB> show paths using schema template t1 - +``` #### 解除元数据模板 - +```sql IoTDB> delete timeseries of schema template t1 from root.sg1.d1 - +``` +```sql IoTDB> deactivate schema template t1 from root.sg1.d1 - +``` 批量处理 - +```sql IoTDB> delete timeseries of schema template t1 from root.sg1.*, root.sg2.* - +``` +```sql IoTDB> deactivate schema template t1 from root.sg1.*, root.sg2.* - +``` #### 卸载元数据模板 - +```sql IoTDB> unset schema template t1 from root.sg1.d1 - +``` #### 删除元数据模板 - +```sql IoTDB> drop schema template t1 - +``` ### 5、数据存活时间管理 #### 设置 TTL - +```sql IoTDB> set ttl to root.ln 3600000 - +``` +```sql IoTDB> set ttl to root.sgcc.** 3600000 - +``` +```sql IoTDB> set ttl to root.** 3600000 - +``` #### 取消 TTL - +```sql IoTDB> unset ttl to root.ln - +``` +```sql IoTDB> unset ttl to root.sgcc.** - +``` +```sql IoTDB> unset ttl to root.** +``` #### 显示 TTL - +```sql IoTDB> SHOW ALL TTL - +``` +```sql IoTDB> SHOW TTL ON StorageGroupNames - +``` ## 写入数据 ### 1、写入单列数据 - +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp,status) values(1,true) - +``` +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp,hardware) values(1, 'v1'),(2, 'v1') - +``` ### 2、写入多列数据 - +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, false, 'v2') - +``` +```sql IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, false, 'v3'),(4, true, 'v4') - +``` ### 3、使用服务器时间戳 - +```sql IoTDB > insert into root.ln.wf02.wt02(status, hardware) values (false, 'v2') - +``` ### 4、写入对齐时间序列数据 - +```sql IoTDB > create aligned timeseries root.sg1.d1(s1 INT32, s2 DOUBLE) - +``` +```sql IoTDB > insert into root.sg1.d1(timestamp, s1, s2) aligned values(1, 1, 1) - +``` +```sql IoTDB > insert into root.sg1.d1(timestamp, s1, s2) aligned values(2, 2, 2), (3, 3, 3) - +``` +```sql IoTDB > select * from root.sg1.d1 - +``` ### 5、加载 TsFile 文件数据 load '<path/dir>' [sglevel=int][verify=true/false][onSuccess=delete/none] @@ -403,93 +421,102 @@ load '<path/dir>' [sglevel=int][verify=true/false][onSuccess=delete/none] ## 删除数据 ### 1、删除单列数据 - +```sql delete from root.ln.wf02.wt02.status where time<=2017-11-01T16:26:00; - +``` +```sql delete from root.ln.wf02.wt02.status where time>=2017-01-01T00:00:00 and time<=2017-11-01T16:26:00; - +``` +```sql delete from root.ln.wf02.wt02.status where time < 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time <= 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time < 20 and time > 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time <= 20 and time >= 10 - +``` +```sql delete from root.ln.wf02.wt02.status where time > 20 - +``` +```sql delete from root.ln.wf02.wt02.status where time >= 20 - +``` +```sql delete from root.ln.wf02.wt02.status where time = 20 - +``` 出错: - +```sql delete from root.ln.wf02.wt02.status where time > 4 or time < 0 Msg: 303: Check metadata error: For delete statement, where clause can only contain atomic expressions like : time > XXX, time <= XXX, or two atomic expressions connected by 'AND' +``` 删除时间序列中的所有数据: - +```sql delete from root.ln.wf02.wt02.status - +``` ### 2、删除多列数据 - +```sql delete from root.ln.wf02.wt02.* where time <= 2017-11-01T16:26:00; - +``` 声明式的编程方式: - +```sql IoTDB> delete from root.ln.wf03.wt02.status where time < now() Msg: The statement is executed successfully. - +``` ## 数据查询 ### 1、基础查询 #### 时间过滤查询 - +```sql select temperature from root.ln.wf01.wt01 where time < 2017-11-01T00:08:00.000 - +``` #### 根据一个时间区间选择多列数据 - +```sql select status, temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000; - +``` #### 按照多个时间区间选择同一设备的多列数据 - +```sql 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); - +``` #### 按照多个时间区间选择不同设备的多列数据 - +```sql 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); - +``` #### 根据时间降序返回结果集 - +```sql select * from root.ln.** where time > 1 order by time desc limit 10; - +``` ### 2、选择表达式 #### 使用别名 - +```sql select s1 as temperature, s2 as speed from root.ln.wf01.wt01; - +``` #### 运算符 #### 函数 不支持: - +```sql select s1, count(s1) from root.sg.d1; select sin(s1), count(s1) from root.sg.d1; select s1, count(s1) from root.sg.d1 group by ([10,100),10ms); - +``` ##### 时间序列查询嵌套表达式 示例 1: - +```sql select a, b, @@ -501,9 +528,9 @@ select a, -(a + b) * (sin(a + b) * sin(a + b) + cos(a + b) * cos(a + b)) + 1 from root.sg1; - +``` 示例 2: - +```sql select (a + b) * 2 + sin(a) from root.sg 示例 3: @@ -513,11 +540,11 @@ select (a + *) / 2 from root.sg1 示例 4: select (a + b) * 3 from root.sg, root.ln - +``` ##### 聚合查询嵌套表达式 示例 1: - +```sql select avg(temperature), sin(avg(temperature)), @@ -529,17 +556,17 @@ select avg(temperature), avg(temperature) + sum(hardware) from root.ln.wf01.wt01; - +``` 示例 2: - +```sql select avg(*), (avg(*) + 1) * 3 / 2 -1 from root.sg1 - +``` 示例 3: - +```sql select avg(temperature), sin(avg(temperature)), @@ -553,7 +580,7 @@ select avg(temperature), from root.ln.wf01.wt01 GROUP BY([10, 90), 10ms); - +``` #### 最新点查询 SQL 语法: @@ -563,211 +590,212 @@ select last <Path> [COMMA <Path>]* from < PrefixPath > [COMMA < PrefixPath >]* < ``` 查询 root.ln.wf01.wt01.status 的最新数据点 - +```sql IoTDB> select last status from root.ln.wf01.wt01 - +``` 查询 root.ln.wf01.wt01 下 status,temperature 时间戳大于等于 2017-11-07T23:50:00 的最新数据点 - +```sql IoTDB> select last status, temperature from root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00 - +``` 查询 root.ln.wf01.wt01 下所有序列的最新数据点,并按照序列名降序排列 - +```sql IoTDB> select last * from root.ln.wf01.wt01 order by timeseries desc; - +``` ### 3、查询过滤条件 #### 时间过滤条件 选择时间戳大于 2022-01-01T00:05:00.000 的数据: - +```sql select s1 from root.sg1.d1 where time > 2022-01-01T00:05:00.000; - +``` 选择时间戳等于 2022-01-01T00:05:00.000 的数据: - +```sql select s1 from root.sg1.d1 where time = 2022-01-01T00:05:00.000; - +``` 选择时间区间 [2017-11-01T00:05:00.000, 2017-11-01T00:12:00.000) 内的数据: - +```sql select s1 from root.sg1.d1 where time >= 2022-01-01T00:05:00.000 and time < 2017-11-01T00:12:00.000; - +``` #### 值过滤条件 选择值大于 36.5 的数据: - +```sql select temperature from root.sg1.d1 where temperature > 36.5; - +``` 选择值等于 true 的数据: - +```sql select status from root.sg1.d1 where status = true; - +``` 选择区间 [36.5,40] 内或之外的数据: - +```sql select temperature from root.sg1.d1 where temperature between 36.5 and 40; - +``` +```sql select temperature from root.sg1.d1 where temperature not between 36.5 and 40; - +``` 选择值在特定范围内的数据: - +```sql select code from root.sg1.d1 where code in ('200', '300', '400', '500'); - +``` 选择值在特定范围外的数据: - +```sql select code from root.sg1.d1 where code not in ('200', '300', '400', '500'); - +``` 选择值为空的数据: - +```sql select code from root.sg1.d1 where temperature is null; - +``` 选择值为非空的数据: - +```sql select code from root.sg1.d1 where temperature is not null; - +``` #### 模糊查询 查询 `root.sg.d1` 下 `value` 含有`'cc'`的数据 - +```sql IoTDB> select * from root.sg.d1 where value like '%cc%' - +``` 查询 `root.sg.d1` 下 `value` 中间为 `'b'`、前后为任意单个字符的数据 - +```sql IoTDB> select * from root.sg.device where value like '_b_' - -查询 root.sg.d1 下 value 值为26个英文字符组成的字符串 ``` +查询 root.sg.d1 下 value 值为26个英文字符组成的字符串 +```sql IoTDB> select * from root.sg.d1 where value regexp '^[A-Za-z]+$' ``` 查询 root.sg.d1 下 value 值为26个小写英文字符组成的字符串且时间大于100的 -``` +```sql IoTDB> select * from root.sg.d1 where value regexp '^[a-z]+$' and time > 100 ``` ### 4、分段分组聚合 #### 未指定滑动步长的时间区间分组聚合查询 - +```sql select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d); - +``` #### 指定滑动步长的时间区间分组聚合查询 - +```sql 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); - +``` 滑动步长可以小于聚合窗口 - +```sql select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-01 10:00:00), 4h, 2h); - +``` #### 按照自然月份的时间区间分组聚合查询 - +```sql 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); - +``` 每个时间间隔窗口内都有数据 - +```sql select count(status) from root.ln.wf01.wt01 group by([2017-10-31T00:00:00, 2019-11-07T23:00:00), 1mo, 2mo); - +``` #### 左开右闭区间 - +```sql select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d); - +``` #### 与分组聚合混合使用 统计降采样后的数据点个数 - +```sql select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d), level=1; - +``` 加上滑动 Step 的降采样后的结果也可以汇总 - +```sql select count(status) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-07 23:00:00), 3h, 1d), level=1; - +``` #### 路径层级分组聚合 统计不同 database 下 status 序列的数据点个数 - +```sql select count(status) from root.** group by level = 1 - +``` 统计不同设备下 status 序列的数据点个数 - +```sql select count(status) from root.** group by level = 3 - +``` 统计不同 database 下的不同设备中 status 序列的数据点个数 - +```sql select count(status) from root.** group by level = 1, 3 - +``` 查询所有序列下温度传感器 temperature 的最大值 - +```sql select max_value(temperature) from root.** group by level = 0 - +``` 查询某一层级下所有传感器拥有的总数据点数 - +```sql select count(*) from root.ln.** group by level = 2 - +``` #### 标签分组聚合 ##### 单标签聚合查询 - +```sql SELECT AVG(temperature) FROM root.factory1.** GROUP BY TAGS(city); - +``` ##### 多标签聚合查询 - +```sql SELECT avg(temperature) FROM root.factory1.** GROUP BY TAGS(city, workshop); - +``` ##### 基于时间区间的标签聚合查询 - +```sql SELECT AVG(temperature) FROM root.factory1.** GROUP BY ([1000, 10000), 5s), TAGS(city, workshop); - +``` #### 差值分段聚合 - +```sql group by variation(controlExpression[,delta][,ignoreNull=true/false]) - +``` ##### delta=0时的等值事件分段 - +```sql select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6) - +``` 指定ignoreNull为false - +```sql select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6, ignoreNull=false) - +``` ##### delta!=0时的差值事件分段 - +```sql select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6, 4) - +``` #### 条件分段聚合 - +```sql group by condition(predict,[keep>/>=/=/<=/<]threshold,[,ignoreNull=true/false]) - +``` 查询至少连续两行以上的charging_status=1的数据 - +```sql select max_time(charging_status),count(vehicle_status),last_value(soc) from root.** group by condition(charging_status=1,KEEP>=2,ignoreNull=true) - +``` 当设置`ignoreNull`为false时,遇到null值为将其视为一个不满足条件的行,得到结果原先的分组被含null的行拆分 - +```sql select max_time(charging_status),count(vehicle_status),last_value(soc) from root.** group by condition(charging_status=1,KEEP>=2,ignoreNull=false) - +``` #### 会话分段聚合 - +```sql group by session(timeInterval) - +``` 按照不同的时间单位设定时间间隔 - +```sql select __endTime,count(*) from root.** group by session(1d) - +``` 和`HAVING`、`ALIGN BY DEVICE`共同使用 - +```sql select __endTime,sum(hardware) from root.ln.wf02.wt01 group by session(50s) having sum(hardware)>0 align by device - +``` #### 点数分段聚合 - +```sql group by count(controlExpression, size[,ignoreNull=true/false]) - +``` select count(charging_stauts), first_value(soc) from root.sg group by count(charging_status,5) 当使用ignoreNull将null值也考虑进来 - +```sql select count(charging_stauts), first_value(soc) from root.sg group by count(charging_status,5,ignoreNull=false) - +``` ### 5、聚合结果过滤 不正确的: - +```sql select count(s1) from root.** group by ([1,3),1ms) having sum(s1) > s1 select count(s1) from root.** group by ([1,3),1ms) having s1 > 1 @@ -775,103 +803,103 @@ select count(s1) from root.** group by ([1,3),1ms) having s1 > 1 select count(s1) from root.** group by ([1,3),1ms), level=1 having sum(d1.s1) > 1 select count(d1.s1) from root.** group by ([1,3),1ms), level=1 having sum(s1) > 1 - +``` SQL 示例: - +```sql select count(s1) from root.** group by ([1,11),2ms), level=1 having count(s2) > 2; select count(s1), count(s2) from root.** group by ([1,11),2ms) having count(s2) > 1 align by device; - +``` ### 6、结果集补空值 - +```sql FILL '(' PREVIOUS | LINEAR | constant ')' - +``` #### `PREVIOUS` 填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(previous); - +``` #### `LINEAR` 填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(linear); - +``` #### 常量填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(2.0); - +``` 使用 `BOOLEAN` 类型的常量填充 - +```sql select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(true); - +``` ### 7、查询结果分页 #### 按行分页 基本的 `LIMIT` 子句 - +```sql select status, temperature from root.ln.wf01.wt01 limit 10 - +``` 带 `OFFSET` 的 `LIMIT` 子句 - +```sql select status, temperature from root.ln.wf01.wt01 limit 5 offset 3 - +``` `LIMIT` 子句与 `WHERE` 子句结合 - +```sql 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 5 offset 3 - +``` `LIMIT` 子句与 `GROUP BY` 子句组合 - +```sql 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 4 offset 3 - +``` #### 按列分页 基本的 `SLIMIT` 子句 - +```sql 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` 的 `SLIMIT` 子句 - +```sql 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 - +``` `SLIMIT` 子句与 `GROUP BY` 子句结合 - +```sql 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 - +``` `SLIMIT` 子句与 `LIMIT` 子句结合 - +```sql select * from root.ln.wf01.wt01 limit 10 offset 100 slimit 2 soffset 0 - +``` ### 8、排序 时间对齐模式下的排序 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 order by time desc; - +``` 设备对齐模式下的排序 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 order by device desc,time asc align by device; - +``` 在时间戳相等时按照设备名排序 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 order by time asc,device desc align by device; - +``` 没有显式指定时 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 align by device; - +``` 对聚合后的结果进行排序 - +```sql select count(*) from root.ln.** group by ((2017-11-01T00:00:00.000+08:00,2017-11-01T00:03:00.000+08:00],1m) order by device asc,time asc align by device - +``` ### 9、查询对齐模式 #### 按设备对齐 - +```sql select * from root.ln.** where time <= 2017-11-01T00:01:00 align by device; - +``` ### 10、查询写回(SELECT INTO) #### 整体描述 - +```sql selectIntoStatement : SELECT @@ -901,23 +929,23 @@ intoItem : [ALIGNED] intoDevicePath '(' intoMeasurementName [',' intoMeasurementName]* ')' ; - +``` 按时间对齐,将 `root.sg` database 下四条序列的查询结果写入到 `root.sg_copy` database 下指定的四条序列中 - +```sql IoTDB> select s1, s2 into root.sg_copy.d1(t1), root.sg_copy.d2(t1, t2), root.sg_copy.d1(t2) from root.sg.d1, root.sg.d2; - +``` 按时间对齐,将聚合查询的结果存储到指定序列中 - +```sql IoTDB> select count(s1 + s2), last_value(s2) into root.agg.count(s1_add_s2), root.agg.last_value(s2) from root.sg.d1 group by ([0, 100), 10ms); - +``` 按设备对齐 - +```sql IoTDB> select s1, s2 into root.sg_copy.d1(t1, t2), root.sg_copy.d2(t1, t2) from root.sg.d1, root.sg.d2 align by device; - +``` 按设备对齐,将表达式计算的结果存储到指定序列中 - +```sql IoTDB> select s1 + s2 into root.expr.add(d1s1_d1s2), root.expr.add(d2s1_d2s2) from root.sg.d1, root.sg.d2 align by device; - +``` #### 使用变量占位符 ##### 按时间对齐(默认) @@ -999,11 +1027,11 @@ select s1, s2 into root.sg_copy.d1(t1, t2), aligned root.sg_copy.d2(t1, t2) from ## 运算符 -更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md) +更多见文档[Operator-and-Expression](../Reference/Function-and-Expression.md#算数运算符和函数) ### 算数运算符 -更多见文档 [Arithmetic Operators and Functions](../Operators-Functions/Mathematical.md) +更多见文档 [Arithmetic Operators and Functions](../Reference/Function-and-Expression.md#算数运算符和函数) ```sql select s1, - s1, s2, + s2, s1 + s2, s1 - s2, s1 * s2, s1 / s2, s1 % s2 from root.sg.d1 @@ -1011,7 +1039,7 @@ select s1, - s1, s2, + s2, s1 + s2, s1 - s2, s1 * s2, s1 / s2, s1 % s2 from root ### 比较运算符 -更多见文档[Comparison Operators and Functions](../Operators-Functions/Comparison.md) +更多见文档[Comparison Operators and Functions](../Reference/Function-and-Expression.md#比较运算符和函数) ```sql # Basic comparison operators @@ -1042,7 +1070,7 @@ select a, a in (1, 2) from root.test; ### 逻辑运算符 -更多见文档[Logical Operators](../Operators-Functions/Logical.md) +更多见文档[Logical Operators](../Reference/Function-and-Expression.md#逻辑运算符) ```sql select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test; @@ -1050,11 +1078,11 @@ select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test; ## 内置函数 -更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md) +更多见文档[Operator-and-Expression](../Reference/Function-and-Expression.md#聚合函数) ### Aggregate Functions -更多见文档[Aggregate Functions](../Operators-Functions/Aggregation.md) +更多见文档[Aggregate Functions](../Reference/Function-and-Expression.md#聚合函数) ```sql select count(status) from root.ln.wf01.wt01; @@ -1067,7 +1095,7 @@ select time_duration(s1) from root.db.d1; ### 算数函数 -更多见文档[Arithmetic Operators and Functions](../Operators-Functions/Mathematical.md) +更多见文档[Arithmetic Operators and Functions](../Reference/Function-and-Expression.md#数学函数) ```sql select s1, sin(s1), cos(s1), tan(s1) from root.sg1.d1 limit 5 offset 1000; @@ -1076,7 +1104,7 @@ select s4,round(s4),round(s4,2),round(s4,-1) from root.sg1.d1; ### 比较函数 -更多见文档[Comparison Operators and Functions](../Operators-Functions/Comparison.md) +更多见文档[Comparison Operators and Functions](../Reference/Function-and-Expression.md#比较运算符和函数) ```sql select ts, on_off(ts, 'threshold'='2') from root.test; @@ -1085,7 +1113,7 @@ select ts, in_range(ts, 'lower'='2', 'upper'='3.1') from root.test; ### 字符串处理函数 -更多见文档[String Processing](../Operators-Functions/String.md) +更多见文档[String Processing](../Reference/Function-and-Expression.md#字符串处理) ```sql select s1, string_contains(s1, 's'='warn') from root.sg1.d4; @@ -1113,7 +1141,7 @@ select regexsplit(s1, "regex"=",", "index"="3") from root.test.d1 ### 数据类型转换函数 -更多见文档[Data Type Conversion Function](../Operators-Functions/Conversion.md) +更多见文档[Data Type Conversion Function](../Reference/Function-and-Expression.md#数据类型转换) ```sql SELECT cast(s1 as INT32) from root.sg @@ -1121,7 +1149,7 @@ SELECT cast(s1 as INT32) from root.sg ### 常序列生成函数 -更多见文档[Constant Timeseries Generating Functions](../Operators-Functions/Constant.md) +更多见文档[Constant Timeseries Generating Functions](../Reference/Function-and-Expression.md#常序列生成函数) ```sql select s1, s2, const(s1, 'value'='1024', 'type'='INT64'), pi(s2), e(s1, s2) from root.sg1.d1; @@ -1129,7 +1157,7 @@ select s1, s2, const(s1, 'value'='1024', 'type'='INT64'), pi(s2), e(s1, s2) from ### 选择函数 -更多见文档[Selector Functions](../Operators-Functions/Selection.md) +更多见文档[Selector Functions](../Reference/Function-and-Expression.md#选择函数) ```sql select s1, top_k(s1, 'k'='2'), bottom_k(s1, 'k'='2') from root.sg1.d2 where time > 2020-12-10T20:36:15.530+08:00; @@ -1137,7 +1165,7 @@ select s1, top_k(s1, 'k'='2'), bottom_k(s1, 'k'='2') from root.sg1.d2 where time ### 区间查询函数 -更多见文档[Continuous Interval Functions](../Operators-Functions/Continuous-Interval.md) +更多见文档[Continuous Interval Functions](../Reference/Function-and-Expression.md#区间查询函数) ```sql select s1, zero_count(s1), non_zero_count(s2), zero_duration(s3), non_zero_duration(s4) from root.sg.d2; @@ -1145,7 +1173,7 @@ select s1, zero_count(s1), non_zero_count(s2), zero_duration(s3), non_zero_durat ### 趋势计算函数 -更多见文档[Variation Trend Calculation Functions](../Operators-Functions/Variation-Trend.md) +更多见文档[Variation Trend Calculation Functions](../Reference/Function-and-Expression.md#趋势计算函数) ```sql select s1, time_difference(s1), difference(s1), non_negative_difference(s1), derivative(s1), non_negative_derivative(s1) from root.sg1.d1 limit 5 offset 1000; @@ -1156,7 +1184,11 @@ SELECT DIFF(s1, 'ignoreNull'='false'), DIFF(s2, 'ignoreNull'='false') from root. ### 采样函数 -更多见文档[Sample Functions](../Operators-Functions/Sample.md) +更多见文档[Sample Functions](../Reference/Function-and-Expression.md#采样函数)。 +### 时间序列处理函数 + +| 函数名 | 输入序列类型 | 参数 | 输出序列类型 | 功能描述 | +| ---) ```sql select equal_size_bucket_random_sample(temperature,'proportion'='0.1') as random_sample from root.ln.wf01.wt01; @@ -1170,7 +1202,7 @@ select M4(s1,'windowSize'='10') from root.vehicle.d1 ### 时间序列处理函数 -更多见文档[Time-Series](../Operators-Functions/Time-Series.md) +更多见文档[Time-Series](../Reference/Function-and-Expression.md#时间序列处理) ```sql select change_points(s1), change_points(s2), change_points(s3), change_points(s4), change_points(s5), change_points(s6) from root.testChangePoints.d1 @@ -1178,11 +1210,11 @@ select change_points(s1), change_points(s2), change_points(s3), change_points(s4 ## 数据质量函数库 -更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md) +更多见文档[Operator-and-Expression](../Reference/UDF-Libraries.md) ### 数据质量 -更多见文档[Data-Quality](../Operators-Functions/Data-Quality.md) +更多见文档[Data-Quality](../Reference/UDF-Libraries.md#数据质量) ```sql # Completeness @@ -1207,7 +1239,7 @@ select Accuracy(t1,t2,t3,m1,m2,m3) from root.test ### 数据画像 -更多见文档[Data-Profiling](../Operators-Functions/Data-Profiling.md) +更多见文档[Data-Profiling](../Reference/UDF-Libraries.md#数据画像) ```sql # ACF @@ -1287,7 +1319,7 @@ select zscore(s1) from root.test ### 异常检测 -更多见文档[Anomaly-Detection](../Operators-Functions/Anomaly-Detection.md) +更多见文档[Anomaly-Detection](../Reference/UDF-Libraries.md#异常检测) ```sql # IQR @@ -1322,7 +1354,7 @@ select MasterDetect(lo,la,m_lo,m_la,model,'output_type'='anomaly','p'='3','k'='3 ### 频域分析 -更多见文档[Frequency-Domain](../Operators-Functions/Frequency-Domain.md) +更多见文档[Frequency-Domain](../Reference/UDF-Libraries.md#频域分析) ```sql # Conv @@ -1351,7 +1383,7 @@ select lowpass(s1,'wpass'='0.45') from root.test.d1 ### 数据匹配 -更多见文档[Data-Matching](../Operators-Functions/Data-Matching.md) +更多见文档[Data-Matching](../Reference/UDF-Libraries.md#数据匹配) ```sql # Cov @@ -1372,7 +1404,7 @@ select xcorr(s1, s2) from root.test.d1 where time <= 2020-01-01 00:00:05 ### 数据修复 -更多见文档[Data-Repairing](../Operators-Functions/Data-Repairing.md) +更多见文档[Data-Repairing](../Reference/UDF-Libraries.md#数据修复) ```sql # TimestampRepair @@ -1397,7 +1429,7 @@ select seasonalrepair(s1,'method'='improved','period'=3) from root.test.d2 ### 序列发现 -更多见文档[Series-Discovery](../Operators-Functions/Series-Discovery.md) +更多见文档[Series-Discovery](../Reference/UDF-Libraries.md#序列发现) ```sql # ConsecutiveSequences @@ -1410,7 +1442,7 @@ select consecutivewindows(s1,s2,'length'='10m') from root.test.d1 ### 机器学习 -更多见文档[Machine-Learning](../Operators-Functions/Machine-Learning.md) +更多见文档[Machine-Learning](../Reference/UDF-Libraries.md#机器学习) ```sql # AR @@ -1425,7 +1457,7 @@ select rm(s0, s1,"tb"="3","vb"="2") from root.test.d0 ## Lambda 表达式 -更多见文档[Lambda](../Operators-Functions/Lambda.md) +更多见文档[Lambda](../Reference/Function-and-Expression.md#Lambda表达式) ```sql select jexl(temperature, 'expr'='x -> {x + x}') as jexl1, jexl(temperature, 'expr'='x -> {x * 3}') as jexl2, jexl(temperature, 'expr'='x -> {x * x}') as jexl3, jexl(temperature, 'expr'='x -> {multiply(x, 100)}') as jexl4, jexl(temperature, st, 'expr'='(x, y) -> {x + y}') as jexl5, jexl(temperature, st, str, 'expr'='(x, y, z) -> {x + y + z}') as jexl6 from root.ln.wf01.wt01;``` @@ -1433,7 +1465,7 @@ select jexl(temperature, 'expr'='x -> {x + x}') as jexl1, jexl(temperature, 'exp ## 条件表达式 -更多见文档[Conditional Expressions](../Operators-Functions/Conditional.md) +更多见文档[Conditional Expressions](../Reference/Function-and-Expression.md#条件表达式) ```sql select T, P, case @@ -1472,7 +1504,7 @@ from root.test4 ## 触发器 ### 使用 SQL 语句注册该触发器 - +```sql // Create Trigger createTrigger @@ -1528,9 +1560,9 @@ triggerAttribute : key=attributeKey operator_eq value=attributeValue ; - +``` #### SQL 语句示例 - +```sql CREATE STATELESS TRIGGER triggerTest BEFORE INSERT @@ -1548,11 +1580,11 @@ WITH ( "limit" = "100" ) - +``` ### 卸载触发器 #### 卸载触发器的 SQL 语法如下: - +```sql // Drop Trigger dropTrigger @@ -1560,15 +1592,15 @@ dropTrigger : DROP TRIGGER triggerName=identifier ; - +``` #### 示例语句 - +```sql DROP TRIGGER triggerTest1 - +``` ### 查询触发器 - +```sql SHOW TRIGGERS - +``` ## 连续查询(Continuous Query, CQ) ### 语法 @@ -1595,7 +1627,7 @@ END ``` #### 配置连续查询执行的周期性间隔 - +```sql CREATE CONTINUOUS QUERY cq1 RESAMPLE EVERY 20s @@ -1615,9 +1647,9 @@ END \> SELECT temperature_max from root.ln.*.*; - +``` #### 配置连续查询的时间窗口大小 - +``` CREATE CONTINUOUS QUERY cq2 RESAMPLE RANGE 40s @@ -1635,11 +1667,10 @@ BEGIN END - \> SELECT temperature_max from root.ln.*.*; - +``` #### 同时配置连续查询执行的周期性间隔和时间窗口大小 - +```sql CREATE CONTINUOUS QUERY cq3 RESAMPLE EVERY 20s RANGE 40s @@ -1661,9 +1692,9 @@ END \> SELECT temperature_max from root.ln.*.*; - +``` #### 配置连续查询每次查询执行时间窗口的结束时间 - +```sql CREATE CONTINUOUS QUERY cq4 RESAMPLE EVERY 20s RANGE 40s, 20s @@ -1685,9 +1716,9 @@ END \> SELECT temperature_max from root.ln.*.*; - +``` #### 没有GROUP BY TIME子句的连续查询 - +```sql CREATE CONTINUOUS QUERY cq5 RESAMPLE EVERY 20s @@ -1707,31 +1738,32 @@ END \> SELECT temperature from root.precalculated_sg.*.* align by device; - +``` ### 连续查询的管理 #### 查询系统已有的连续查询 展示集群中所有的已注册的连续查询 - +```sql SHOW (CONTINUOUS QUERIES | CQS) - +``` +```sql SHOW CONTINUOUS QUERIES; - +``` #### 删除已有的连续查询 删除指定的名为cq_id的连续查询: -```Go +```sql DROP (CONTINUOUS QUERY | CQ) <cq_id> ``` - +```sql DROP CONTINUOUS QUERY s1_count_cq; - +``` #### 作为子查询的替代品 -\1. 创建一个连续查询 - +1. 创建一个连续查询 +```sql CREATE CQ s1_count_cq BEGIN @@ -1745,49 +1777,50 @@ BEGIN GROUP BY(30m) END - +``` 1. 查询连续查询的结果 - +```sql SELECT avg(count_s1) from root.sg_count.d; - +``` ## 用户自定义函数 ### UDFParameters - +```sql SELECT UDF(s1, s2, 'key1'='iotdb', 'key2'='123.45') FROM root.sg.d; - +``` ### UDF 注册 -```Go +```sql CREATE FUNCTION <UDF-NAME> AS <UDF-CLASS-FULL-PATHNAME> (USING URI URI-STRING)? ``` #### 不指定URI - +```sql CREATE FUNCTION example AS 'org.apache.iotdb.udf.UDTFExample' - +``` #### 指定URI - +```sql CREATE FUNCTION example AS 'org.apache.iotdb.udf.UDTFExample' USING URI 'http://jar/example.jar' - +``` ### UDF 卸载 -```Go +```sql DROP FUNCTION <UDF-NAME> ``` - +```sql DROP FUNCTION example - +``` ### UDF 查询 #### 带自定义输入参数的查询 - +```sql SELECT example(s1, 'key1'='value1', 'key2'='value2'), example(*, 'key3'='value3') FROM root.sg.d1; - +``` +```sql SELECT example(s1, s2, 'key1'='value1', 'key2'='value2') FROM root.sg.d1; - +``` #### 与其他查询的嵌套查询 - +```sql SELECT s1, s2, example(s1, s2) FROM root.sg.d1; SELECT *, example(*) FROM root.sg.d1 DISABLE ALIGN; @@ -1795,11 +1828,11 @@ SELECT *, example(*) FROM root.sg.d1 DISABLE ALIGN; SELECT s1 * example(* / s1 + s2) FROM root.sg.d1; SELECT s1, s2, s1 + example(s1, s2), s1 - example(s1 + example(s1, s2) / s2) FROM root.sg.d1; - +``` ### 查看所有注册的 UDF - +```sql SHOW FUNCTIONS - +``` ## 权限管理 ### 用户与角色相关 diff --git a/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md b/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md index 8ee4a0d..54eef71 100644 --- a/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md +++ b/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md @@ -308,7 +308,7 @@ AS SELECT temperature FROM root.db.* ``` -这里仿照了查询写回(`SELECT INTO`)对命名规则的约定,使用变量占位符来指定命名规则。可以参考:[查询写回(SELECT INTO)](https://iotdb.apache.org/zh/UserGuide/Master/Query-Data/Select-Into.html) +这里仿照了查询写回(`SELECT INTO`)对命名规则的约定,使用变量占位符来指定命名规则。可以参考:[查询写回(SELECT INTO)](../User-Manual/Query-Data.md#查询写回(INTO-子句)) 这里`root.db.*.temperature`指定了有哪些时间序列会被包含在视图中;`${2}`则指定了从时间序列中的哪个节点提取出名字来命名序列视图。 diff --git a/src/zh/UserGuide/latest/User-Manual/Operate-Metadata.md b/src/zh/UserGuide/latest/User-Manual/Operate-Metadata.md index f21109b..6444f46 100644 --- a/src/zh/UserGuide/latest/User-Manual/Operate-Metadata.md +++ b/src/zh/UserGuide/latest/User-Manual/Operate-Metadata.md @@ -46,7 +46,7 @@ Database 节点名只支持中英文字符、数字、下划线的组合,如 ### 查看数据库 -在 database 创建后,我们可以使用 [SHOW DATABASES](../Reference/SQL-Reference.md) 语句和 [SHOW DATABASES \<PathPattern>](../Reference/SQL-Reference.md) 来查看 database,SQL 语句如下所示: +在 database 创建后,我们可以使用 [SHOW DATABASES](../SQL-Manual/SQL-Manual.md#查看数据库) 语句和 [SHOW DATABASES \<PathPattern>](../SQL-Manual/SQL-Manual.md#查看数据库) 来查看 database,SQL 语句如下所示: ``` IoTDB> show databases @@ -552,7 +552,7 @@ IoTDB> create timeseries root.ln.wf02.wt02.status WITH DATATYPE=BOOLEAN, ENCODIN error: encoding TS_2DIFF does not support BOOLEAN ``` -详细的数据类型与编码方式的对应列表请参见 [编码方式](../Basic-Concept/Encoding.md)。 +详细的数据类型与编码方式的对应列表请参见 [编码方式](../Basic-Concept/Encoding-and-Compression.md)。 ### 创建对齐时间序列 diff --git a/src/zh/UserGuide/latest/User-Manual/Operator-and-Expression.md b/src/zh/UserGuide/latest/User-Manual/Operator-and-Expression.md index dd9866e..3ff9f86 100644 --- a/src/zh/UserGuide/latest/User-Manual/Operator-and-Expression.md +++ b/src/zh/UserGuide/latest/User-Manual/Operator-and-Expression.md @@ -226,6 +226,7 @@ OR, |, || | EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE | INT32 / INT64 / FLOAT / DOUBLE | `proportion`取值范围为`(0, 1]`,默认为`0.1`<br>`type`取值为`avg`或`stendis`或`cos`或`prenextdis`,默认为`avg`<br>`number`取值应大于0,默认`3`| INT32 / INT64 / FLOAT / DOUBLE | 返回符合采样比例和桶内采样个数的等分桶离群值采样 | | M4 | INT32 / INT64 / FLOAT / DOUBLE | 包含固定点数的窗口和滑动时间窗口使用不同的属性参数。包含固定点数的窗口使用属性`windowSize`和`slidingStep`。滑动时间窗口使用属性`timeInterval`、`slidingStep`、`displayWindowBegin`和`displayWindowEnd`。更多细节见下文。 | INT32 / INT64 / FLOAT / DOUBLE | 返回每个窗口内的第一个点(`first`)、最后一个点(`last`)、最小值点(`bottom`)、最大值点(`top`)。在一个窗口内的聚合点输出之前,M4会将它们按照时间戳递增排序并且去重。 | +详细说明及示例见文档 [采样函数](../Reference/Function-and-Expression.md#采样函数)。 ### 时间序列处理函数 | 函数名 | 输入序列类型 | 参数 | 输出序列类型 | 功能描述 | @@ -266,7 +267,7 @@ OR, |, || | ------ | ----------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------- | ---------------------------------------------- | | JEXL | INT32 / INT64 / FLOAT / DOUBLE / TEXT / BOOLEAN | `expr`是一个支持标准的一元或多元参数的lambda表达式,符合`x -> {...}`或`(x, y, z) -> {...}`的格式,例如`x -> {x * 2}`, `(x, y, z) -> {x + y * z}` | INT32 / INT64 / FLOAT / DOUBLE / TEXT / BOOLEAN | 返回将输入的时间序列通过lambda表达式变换的序列 | -详细说明及示例见文档 [Lambda 表达式](../Operators-Functions/Lambda.md) +详细说明及示例见文档 [Lambda 表达式](../Reference/Function-and-Expression.md#Lambda表达式) ## 条件表达式 @@ -274,7 +275,7 @@ OR, |, || |---------------------------|-----------| | `CASE` | 类似if else | -详细说明及示例见文档 [条件表达式](../Operators-Functions/Conditional.md) +详细说明及示例见文档 [条件表达式](../Reference/Function-and-Expression.md#条件表达式) ## SELECT 表达式 @@ -312,7 +313,7 @@ select s1 as temperature, s2 as speed from root.ln.wf01.wt01; #### 运算符 -IoTDB 中支持的运算符列表见文档 [运算符和函数](../Operators-Functions/Overview.md)。 +IoTDB 中支持的运算符列表见文档 [运算符和函数](../Reference/Function-and-Expression.md#算数运算符和函数)。 #### 函数 @@ -330,7 +331,7 @@ select sin(s1), count(s1) from root.sg.d1; select s1, count(s1) from root.sg.d1 group by ([10,100),10ms); ``` -IoTDB 支持的聚合函数见文档 [聚合函数](../Operators-Functions/Aggregation.md)。 +IoTDB 支持的聚合函数见文档 [聚合函数](../Reference/Function-and-Expression.md#聚合函数)。 ##### 时间序列生成函数 @@ -340,11 +341,11 @@ IoTDB 支持的聚合函数见文档 [聚合函数](../Operators-Functions/Aggre ###### 内置时间序列生成函数 -IoTDB 中支持的内置函数列表见文档 [运算符和函数](../Operators-Functions/Overview.md)。 +IoTDB 中支持的内置函数列表见文档 [运算符和函数](../Reference/Function-and-Expression.md#算数运算符)。 ###### 自定义时间序列生成函数 -IoTDB 支持通过用户自定义函数(点击查看: [用户自定义函数](../Operators-Functions/User-Defined-Function.md) )能力进行函数功能扩展。 +IoTDB 支持通过用户自定义函数(点击查看: [用户自定义函数](../Reference/UDF-Libraries.md) )能力进行函数功能扩展。 #### 嵌套表达式举例