Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ IoTDB 查询语法提供以下子句:
- WHERE 子句:用于过滤数据,只选择满足特定条件的数据行。这个子句在逻辑上紧跟在 FROM 子句之后执行。详细语法见:[WHERE 子句](../SQL-Manual/Where-Clause.md)
- GROUP BY 子句:当需要对数据进行聚合时使用,指定了用于分组的列。详细语法见:[GROUP BY 子句](../SQL-Manual/GroupBy-Clause.md)
- HAVING 子句:在 GROUP BY 子句之后使用,用于对已经分组的数据进行过滤。与 WHERE 子句类似,但 HAVING 子句在分组后执行。详细语法见:[HAVING 子句](../SQL-Manual/Having-Clause.md)
- WINDOW FUNCTION:窗口函数,是一种基于与当前行相关的特定行集合(称为“窗口”)​ 对每一行进行计算的特殊函数。它将分组操作、排序与可定义的计算范围结合,在不折叠原始数据行的前提下实现复杂的跨行计算。详细语法见:[窗口函数](../SQL-Manual/Featured-Functions_timecho.md#_2-窗口函数)
- WINDOW FUNCTION:窗口函数,是一种基于与当前行相关的特定行集合(称为“窗口”)​ 对每一行进行计算的特殊函数。它将分组操作、排序与可定义的计算范围结合,在不折叠原始数据行的前提下实现复杂的跨行计算。详细语法见:[窗口函数](../SQL-Manual/Featured-Functions_timecho.md#_4-窗口函数)
- FILL 子句:用于处理查询结果中的空值,用户可以使用 FILL 子句来指定数据缺失时的填充模式(如前一个非空值或线性插值)来填充 null 值,以便于数据可视化和分析。 详细语法见:[FILL 子句](../SQL-Manual/Fill-Clause.md)
- ORDER BY 子句:对查询结果进行排序,可以指定升序(ASC)或降序(DESC),以及 NULL 值的处理方式(NULLS FIRST 或 NULLS LAST)。详细语法见:[ORDER BY 子句](../SQL-Manual/OrderBy-Clause.md)
- OFFSET 子句:用于指定查询结果的起始位置,即跳过前 OFFSET 行。与 LIMIT 子句配合使用。详细语法见:[LIMIT 和 OFFSET 子句](../SQL-Manual/Limit-Offset-Clause.md)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@

2. 数据写入&更新:在数据写入&更新方面,IoTDB 提供了多种方式来插入实时数据,基本的数据写入&更新操作请查看 [数据写入&更新](../Basic-Concept/Write-Updata-Data.md)

3. 数据查询:IoTDB 提供了丰富的数据查询功能,数据查询的基本介绍请查看 [数据查询](../Basic-Concept/Query-Data.md),其中包含了适用于识别时序数据中的特定模式、检测特定事件等业务场景的[行模式识别](../SQL-Manual/Row-Pattern-Recognition.md),以及常用于数据分析场景的[窗口函数](../SQL-Manual/Featured-Functions_timecho.md#_2-窗口函数)等特色函数
3. 数据查询:IoTDB 提供了丰富的数据查询功能,数据查询的基本介绍请查看 [数据查询](../Basic-Concept/Query-Data.md),其中包含了适用于识别时序数据中的特定模式、检测特定事件等业务场景的[行模式识别](../SQL-Manual/Row-Pattern-Recognition.md),以及常用于数据分析场景的[窗口函数](../SQL-Manual/Featured-Functions_timecho.md#_4-窗口函数)等特色函数

4. 数据删除:IoTDB 提供了两种删除方式,分别为SQL语句删除与过期自动删除(TTL)

Expand Down
106 changes: 52 additions & 54 deletions src/zh/UserGuide/Master/Table/SQL-Manual/Featured-Functions_apache.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,20 @@

# 特色函数

## 1. 时序特色函数
## 1. 降采样函数

### 1.1 降采样函数
### 1.1 `date_bin` 函数

#### 1.1.1 `date_bin` 函数

##### 功能描述:
#### 1.1.1 功能描述

`date_bin` 是一个标量函数,用于将时间戳规整到指定的时间区间起点,并结合 `GROUP BY` 子句实现降采样。

- 部分区间结果为空:只会对满足条件的数据进行时间戳规整,不会填充缺失的时间区间。
- 全部区间结果为空::满足条件的整个查询范围内没有数据时,降采样返回空结果集

##### 使用示例
#### 1.1.2 使用示例

###### 示例数据
##### 示例数据

在[示例数据页面](../Reference/Sample-Data.md)中,包含了用于构建表结构和插入数据的SQL语句,下载并在IoTDB CLI中执行这些语句,即可将数据导入IoTDB,您可以使用这些数据来测试和执行示例中的SQL语句,并获得相应的结果。

Expand Down Expand Up @@ -117,16 +115,16 @@ SELECT date_bin(1h, time) AS hour_time, avg(temperature) AS avg_temp
+-----------------------------+--------+
```

#### 1.1.2 `date_bin_gapfill` 函数
### 1.2 `date_bin_gapfill` 函数

##### 功能描述
#### 1.2.1 功能描述

`date_bin_gapfill` 是 `date_bin` 的扩展,能够填充缺失的时间区间,从而返回完整的时间序列。

- 部分区间结果为空:对满足条件的数据进行时间戳规整,并填充缺失的时间区间。
- 全部区间结果为空::整个查询范围内没有数据时,`date_bin_gapfill`会返回空结果集

##### 功能限制
#### 1.2.2 功能限制

- **`date_bin_gapfill`** **必须与** **`GROUP BY`** **子句搭配使用**,如果用在其他子句中,不会报错,但不会执行 gapfill 功能,效果与使用 `date_bin` 相同。
- **每个** **`GROUP BY`** **子句中只能使用一个** **`date_bin_gapfill`**。如果出现多个 `date_bin_gapfill`,会报错:multiple date_bin_gapfill calls not allowed
Expand All @@ -138,7 +136,7 @@ SELECT date_bin(1h, time) AS hour_time, avg(temperature) AS avg_temp
- **使用** **`date_bin_gapfill`** **时,如果出现其他时间过滤条件**,会报错。时间过滤条件与其他值过滤条件只能通过 `AND` 连接。
- **如果不能从 where 子句中推断出 startTime 和 endTime,则报错**:could not infer startTime or endTime from WHERE clause。

##### 使用示例
#### 1.2.3 使用示例

示例 1:填充缺失时间区间

Expand Down Expand Up @@ -215,19 +213,19 @@ GROUP BY 1, device_id;
+---------+---------+--------+
```

### 1.2 DIFF函数
## 2. DIFF函数

##### 功能概述
### 2.1 功能概述

`DIFF` 函数用于计算当前行与上一行的差值。对于第一行,由于没有前一行数据,因此永远返回 `NULL`。

##### 函数定义
### 2.2 函数定义

```
DIFF(numberic[, boolean]) -> Double
```

##### 参数说明
### 2.3 参数说明

- 第一个参数:数值类型

Expand All @@ -241,12 +239,12 @@ DIFF(numberic[, boolean]) -> Double
- **`true`**:忽略 `NULL` 值,向前找到第一个非 `NULL` 值进行差值计算。如果前面没有非 `NULL` 值,则返回 `NULL`。
- **`false`**:不忽略 `NULL` 值,如果前一行为 `NULL`,则差值结果为 `NULL`。

##### 注意事项
### 2.4 注意事项

- 在树模型中,第二个参数需要指定为 `'ignoreNull'='true'` 或 `'ignoreNull'='false'`,但在表模型中,只需指定为 `true` 或 `false`。
- 如果用户写成 `'ignoreNull'='true'` 或 `'ignoreNull'='false'`,表模型会将其视为对两个字符串常量进行等号比较,返回布尔值,但结果总是 `false`,等价于指定第二个参数为 `false`。

##### 使用示例
### 2.5 使用示例

示例 1:忽略 `NULL` 值

Expand Down Expand Up @@ -325,7 +323,7 @@ WHERE device_id = '100';
+-----------------------------+-----------+-----------+-----------+
```

### 1.3 时序分窗函数
## 3. 时序分窗函数

原始示例数据如下:

Expand All @@ -348,19 +346,19 @@ CREATE TABLE bid(time TIMESTAMP TIME, stock_id STRING TAG, price FLOAT FIELD);
INSERT INTO bid(time, stock_id, price) VALUES('2021-01-01T09:05:00','AAPL',100.0),('2021-01-01T09:06:00','TESL',200.0),('2021-01-01T09:07:00','AAPL',103.0),('2021-01-01T09:07:00','TESL',202.0),('2021-01-01T09:09:00','AAPL',102.0),('2021-01-01T09:15:00','TESL',195.0);
```

#### 1.3.1 HOP
### 3.1 HOP

##### 功能描述
#### 3.1.1 功能描述

HOP 函数用于按时间分段分窗分析,识别每一行数据所属的时间窗口。该函数通过指定固定窗口大小(size)和窗口滑动步长(SLIDE),将数据按时间戳分配到所有与其时间戳重叠的窗口中。若窗口之间存在重叠(步长 < 窗口大小),数据会自动复制到多个窗口。

##### 函数定义
#### 3.1.2 函数定义

```SQL
HOP(data, timecol, size, slide[, origin])
```

##### 参数说明
#### 3.1.3 参数说明

| 参数名 | 参数类型 | 参数属性 | 描述 |
| --------- | ---------- | --------------------------------- | -------------------- |
Expand All @@ -370,15 +368,15 @@ HOP(data, timecol, size, slide[, origin])
| SLIDE | 标量参数 | 长整数类型 | 窗口滑动步长 |
| ORIGIN | 标量参数 | 时间戳类型默认值:Unix 纪元时间 | 第一个窗口起始时间 |

##### 返回结果
#### 3.1.4 返回结果

HOP 函数的返回结果列包含:

* window\_start: 窗口开始时间(闭区间)
* window\_end: 窗口结束时间(开区间)
* 映射列:DATA 参数的所有输入列

##### 使用示例
#### 3.1.5 使用示例

```SQL
IoTDB> SELECT * FROM HOP(DATA => bid,TIMECOL => 'time',SLIDE => 5m,SIZE => 10m);
Expand Down Expand Up @@ -413,18 +411,18 @@ IoTDB> SELECT window_start, window_end, stock_id, avg(price) as avg FROM HOP(DAT
+-----------------------------+-----------------------------+--------+------------------+
```

#### 1.3.2 SESSION
### 3.2 SESSION

##### 功能描述
#### 3.2.1 功能描述

SESSION 函数用于按会话间隔对数据进行分窗。系统逐行检查与前一行的时间间隔,小于阈值(GAP)则归入当前窗口,超过则归入下一个窗口。

##### 函数定义
#### 3.2.2 函数定义

```SQL
SESSION(data [PARTITION BY(pkeys, ...)] [ORDER BY(okeys, ...)], timecol, gap)
```
##### 参数说明
#### 3.2.3 参数说明

| 参数名 | 参数类型 | 参数属性 | 描述 |
| --------- | ---------- | -------------------------- | ---------------------------------------- |
Expand All @@ -433,15 +431,15 @@ SESSION(data [PARTITION BY(pkeys, ...)] [ORDER BY(okeys, ...)], timecol, gap)
|
| GAP | 标量参数 | 长整数类型 | 会话间隔阈值 |

##### 返回结果
#### 3.2.4 返回结果

SESSION 函数的返回结果列包含:

* window\_start: 会话窗口内的第一条数据的时间
* window\_end: 会话窗口内的最后一条数据的时间
* 映射列:DATA 参数的所有输入列

##### 使用示例
#### 3.2.5 使用示例

```SQL
IoTDB> SELECT * FROM SESSION(DATA => bid PARTITION BY stock_id ORDER BY time,TIMECOL => 'time',GAP => 2m);
Expand All @@ -467,34 +465,34 @@ IoTDB> SELECT window_start, window_end, stock_id, avg(price) as avg FROM SESSION
+-----------------------------+-----------------------------+--------+------------------+
```

#### 1.3.3 VARIATION
### 3.3 VARIATION

##### 功能描述
#### 3.3.1 功能描述

VARIATION 函数用于按数据差值分窗,将第一条数据作为首个窗口的基准值,每个数据点会与基准值进行差值运算,如果差值小于给定的阈值(delta)则加入当前窗口;如果超过阈值,则分为下一个窗口,将该值作为下一个窗口的基准值。

##### 函数定义
#### 3.3.2 函数定义

```sql
VARIATION(data [PARTITION BY(pkeys, ...)] [ORDER BY(okeys, ...)], col, delta)
```

##### 参数说明
#### 3.3.3 参数说明

| 参数名 | 参数类型 | 参数属性 | 描述 |
| -------- | ---------- | -------------------------- | ---------------------------------------- |
| DATA | 表参数 | SET SEMANTICPASS THROUGH | 输入表通过 pkeys、okeys 指定分区和排序 |
| COL | 标量参数 | 字符串类型 | 标识对哪一列计算差值 |
| DELTA | 标量参数 | 浮点数类型 | 差值阈值 |

##### 返回结果
#### 3.3.4 返回结果

VARIATION 函数的返回结果列包含:

* window\_index: 窗口编号
* 映射列:DATA 参数的所有输入列

##### 使用示例
#### 3.3.5 使用示例

```sql
IoTDB> SELECT * FROM VARIATION(DATA => bid PARTITION BY stock_id ORDER BY time,COL => 'price',DELTA => 2.0);
Expand All @@ -521,33 +519,33 @@ IoTDB> SELECT first(time) as window_start, last(time) as window_end, stock_id, a
+-----------------------------+-----------------------------+--------+-----+
```

#### 1.3.4 CAPACITY
### 3.4 CAPACITY

##### 功能描述
#### 3.4.1 功能描述

CAPACITY 函数用于按数据点数(行数)分窗,每个窗口最多有 SIZE 行数据。

##### 函数定义
#### 3.4.2 函数定义

```sql
CAPACITY(data [PARTITION BY(pkeys, ...)] [ORDER BY(okeys, ...)], size)
```

##### 参数说明
#### 3.4.3 参数说明

| 参数名 | 参数类型 | 参数属性 | 描述 |
| -------- | ---------- | -------------------------- | ---------------------------------------- |
| DATA | 表参数 | SET SEMANTICPASS THROUGH | 输入表通过 pkeys、okeys 指定分区和排序 |
| SIZE | 标量参数 | 长整数类型 | 窗口大小 |

##### 返回结果
#### 3.4.4 返回结果

CAPACITY 函数的返回结果列包含:

* window\_index: 窗口编号
* 映射列:DATA 参数的所有输入列

##### 使用示例
#### 3.4.5 使用示例

```sql
IoTDB> SELECT * FROM CAPACITY(DATA => bid PARTITION BY stock_id ORDER BY time, SIZE => 2);
Expand All @@ -574,18 +572,18 @@ IoTDB> SELECT first(time) as start_time, last(time) as end_time, stock_id, avg(p
+-----------------------------+-----------------------------+--------+-----+
```

#### 1.3.5 TUMBLE
### 3.5 TUMBLE

##### 功能描述
#### 3.5.1 功能描述

TUMBLE 函数用于通过时间属性字段为每行数据分配一个窗口,滚动窗口的大小固定且不重复。

##### 函数定义
#### 3.5.2 函数定义

```sql
TUMBLE(data, timecol, size[, origin])
```
##### 参数说明
#### 3.5.3 参数说明

| 参数名 | 参数类型 | 参数属性 | 描述 |
| --------- | ---------- | --------------------------------- | -------------------- |
Expand All @@ -594,15 +592,15 @@ TUMBLE(data, timecol, size[, origin])
| SIZE | 标量参数 | 长整数类型 | 窗口大小,需为正数 |
| ORIGIN | 标量参数 | 时间戳类型默认值:Unix 纪元时间 | 第一个窗口起始时间 |

##### 返回结果
#### 3.5.4 返回结果

TUBMLE 函数的返回结果列包含:

* window\_start: 窗口开始时间(闭区间)
* window\_end: 窗口结束时间(开区间)
* 映射列:DATA 参数的所有输入列

##### 使用示例
#### 3.5.5 使用示例

```SQL
IoTDB> SELECT * FROM TUMBLE( DATA => bid, TIMECOL => 'time', SIZE => 10m);
Expand All @@ -628,19 +626,19 @@ IoTDB> SELECT window_start, window_end, stock_id, avg(price) as avg FROM TUMBLE(
+-----------------------------+-----------------------------+--------+------------------+
```

#### 1.3.6 CUMULATE
### 3.6 CUMULATE

##### 功能描述
#### 3.6.1 功能描述

Cumulate 函数用于从初始的窗口开始,创建相同窗口开始但窗口结束步长不同的窗口,直到达到最大的窗口大小。每个窗口包含其区间内的元素。例如:1小时步长,24小时大小的累计窗口,每天可以获得如下这些窗口:`[00:00, 01:00)`,`[00:00, 02:00)`,`[00:00, 03:00)`, …, `[00:00, 24:00)`

##### 函数定义
#### 3.6.2 函数定义

```sql
CUMULATE(data, timecol, size, step[, origin])
```

##### 参数说明
#### 3.6.3 参数说明

| 参数名 | 参数类型 | 参数属性 | 描述 |
| --------- | ---------- | --------------------------------- | -------------------------------------------- |
Expand All @@ -652,15 +650,15 @@ CUMULATE(data, timecol, size, step[, origin])

> 注意:size 如果不是 step 的整数倍,则会报错`Cumulative table function requires size must be an integral multiple of step`

##### 返回结果
#### 3.6.4 返回结果

CUMULATE函数的返回结果列包含:

* window\_start: 窗口开始时间(闭区间)
* window\_end: 窗口结束时间(开区间)
* 映射列:DATA 参数的所有输入列

##### 使用示例
#### 3.6.5 使用示例

```sql
IoTDB> SELECT * FROM CUMULATE(DATA => bid,TIMECOL => 'time',STEP => 2m,SIZE => 10m);
Expand Down
Loading