You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/03/03 14:59:55 UTC
[iotdb] 01/01: change doc organization
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch NewDoc
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 9600918962bf964354aad41a76e6b3d369839857
Author: HTHou <hh...@outlook.com>
AuthorDate: Wed Mar 3 22:59:13 2021 +0800
change doc organization
---
.../UserGuide/Architecture/Writing Data on HDFS.md | 10 +-
docs/zh/UserGuide/Client/Command Line Interface.md | 25 +-
docs/zh/UserGuide/Client/Programming - JDBC.md | 15 +-
docs/zh/UserGuide/Client/Programming - MQTT.md | 17 +-
.../UserGuide/Client/Programming - Native API.md | 196 +-----
.../Client/Programming - Other Languages.md | 287 +++++++-
.../UserGuide/Client/Programming - TsFile API.md | 32 +-
docs/zh/UserGuide/Client/Status Codes.md | 2 +-
docs/zh/UserGuide/Concept/Compression.md | 2 +-
docs/zh/UserGuide/Concept/Data Type.md | 5 +-
docs/zh/UserGuide/Concept/Encoding.md | 2 +-
docs/zh/UserGuide/Concept/SDT.md | 2 +-
docs/zh/UserGuide/Ecosystem Integration/Grafana.md | 44 +-
.../UserGuide/Ecosystem Integration/Hive TsFile.md | 39 +-
.../UserGuide/Ecosystem Integration/Spark IoTDB.md | 22 +-
.../Ecosystem Integration/Spark TsFile.md | 41 +-
.../Ecosystem Integration/Zeppelin-IoTDB.md | 30 +-
.../Get Started/Frequently asked questions.md | 15 +-
docs/zh/UserGuide/Get Started/QuickStart.md | 57 +-
.../UserGuide/Operation Manual/Administration.md | 4 +-
.../DDL Data Definition Language.md | 265 ++++----
.../DML Data Manipulation Language.md | 719 ++++++++++-----------
docs/zh/UserGuide/Operation Manual/Kill Query.md | 43 +-
.../Operation Manual/UDF User Defined Function.md | 29 +-
docs/zh/UserGuide/Overview/Architecture.md | 2 +-
docs/zh/UserGuide/Overview/Features.md | 3 +-
docs/zh/UserGuide/Overview/Scenario.md | 10 +-
docs/zh/UserGuide/Overview/What is IoTDB.md | 2 +-
docs/zh/UserGuide/Server/Cluster Setup.md | 16 +-
docs/zh/UserGuide/System Tools/CSV Tool.md | 15 +-
.../UserGuide/System Tools/Load External Tsfile.md | 24 +-
docs/zh/UserGuide/System Tools/MLogParser Tool.md | 4 +-
.../System Tools/Monitor and Log Tools.md | 22 +-
.../System Tools/Performance Tracing Tool.md | 4 +-
.../Query History Visualization Tool.md | 4 +-
docs/zh/UserGuide/System Tools/Sync Tool.md | 49 +-
docs/zh/UserGuide/System Tools/Watermark Tool.md | 28 +-
37 files changed, 1021 insertions(+), 1065 deletions(-)
diff --git a/docs/zh/UserGuide/Architecture/Writing Data on HDFS.md b/docs/zh/UserGuide/Architecture/Writing Data on HDFS.md
index 8fc3071..00d77cd 100644
--- a/docs/zh/UserGuide/Architecture/Writing Data on HDFS.md
+++ b/docs/zh/UserGuide/Architecture/Writing Data on HDFS.md
@@ -19,19 +19,19 @@
-->
-# 使用HDFS存储数据
+## HDFS集成
-## 存储共享架构
+### 存储共享架构
当前,TSFile(包括TSFile文件和相关的数据文件)支持存储在本地文件系统和Hadoop分布式文件系统(HDFS)。配置使用HDFS存储TSFile十分容易。
-### 系统架构
+#### 系统架构
当你配置使用HDFS存储TSFile之后,你的数据文件将会被分布式存储。系统架构如下:
<img style="width:100%; max-width:700px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/19167280/66922722-35180400-f05a-11e9-8ff0-7dd51716e4a8.png">
-### Config and usage
+#### Config and usage
如果你希望将TSFile存储在HDFS上,可以遵循以下步骤:
@@ -155,7 +155,7 @@
如果你想要恢复将TSFile存储到本地文件系统,只需编辑配置项`tsfile_storage_fs`为`LOCAL`。在这种情况下,如果你已经在HDFS上存储了一些数据文件,你需要将它们下载到本地,并移动到你所配置的数据文件文件夹(默认为`../server/target/iotdb-server-0.10.0/data/data`), 或者重新开始你的整个导入数据过程。
-### 常见问题
+#### 常见问题
1. 这个功能支持哪些Hadoop版本?
diff --git a/docs/zh/UserGuide/Client/Command Line Interface.md b/docs/zh/UserGuide/Client/Command Line Interface.md
index 6e29ad0..6d55dac 100644
--- a/docs/zh/UserGuide/Client/Command Line Interface.md
+++ b/docs/zh/UserGuide/Client/Command Line Interface.md
@@ -19,24 +19,13 @@
-->
-<!-- TOC -->
-# 命令行接口(CLI)
-
-## 概览
-
-- Cli / Shell工具
- - Cli / Shell安装
- - Cli / Shell运行方式
- - Cli / Shell运行参数
- - Cli / Shell的-e参数
-
-<!-- /TOC -->
+# SQL命令行终端(CLI)
IOTDB为用户提供cli/Shell工具用于启动客户端和服务端程序。下面介绍每个cli/Shell工具的运行方式和相关参数。
> \$IOTDB\_HOME表示IoTDB的安装目录所在路径。
-## Cli / Shell安装
+## 安装
在iotdb的根目录下执行
```
@@ -45,7 +34,9 @@ IOTDB为用户提供cli/Shell工具用于启动客户端和服务端程序。下
在生成完毕之后,IoTDB的cli工具位于文件夹"cli/target/iotdb-cli-{project.version}"中。
-## Cli / Shell运行方式
+## 运行
+
+### Cli / Shell运行方式
安装后的IoTDB中有一个默认用户:`root`,默认密码为`root`。用户可以使用该用户尝试运行IoTDB客户端以测试服务器是否正常启动。客户端启动脚本为$IOTDB_HOME/bin文件夹下的`start-cli`脚本。启动脚本时需要指定运行IP和RPC PORT。以下为服务器在本机启动,且用户未更改运行端口号的示例,默认端口为6667。若用户尝试连接远程服务器或更改了服务器运行的端口号,请在-h和-p项处使用服务器的IP和RPC PORT。</br>
用户也可以在启动脚本的最前方设置自己的环境变量,如JAVA_HOME等 (对于linux用户,脚本路径为:"/sbin/start-cli.sh"; 对于windows用户,脚本路径为:"/sbin/start-cli.bat")
@@ -76,7 +67,7 @@ IoTDB>
```
输入`quit`或`exit`可退出cli结束本次会话,cli输出`quit normally`表示退出成功。
-## Cli / Shell运行参数
+### Cli / Shell运行参数
|参数名|参数类型|是否为必需参数| 说明| 例子 |
|:---|:---|:---|:---|:---|
@@ -103,7 +94,7 @@ Windows系统启动命令如下:
Shell > sbin\start-cli.bat -h 10.129.187.21 -p 6667 -u root -pw root -disableISO8601 -maxPRC 10
```
-## 使用OpenID作为用户名认证登录
+### 使用OpenID作为用户名认证登录
若对应的IoTDB服务器开启了使用OpenID Connect (OIDC)作为权限认证服务,那么就不再需要使用用户名密码进行登录。
替而代之的是使用Token,以及空密码。
@@ -133,7 +124,7 @@ curl -X POST "https://{your-keycloack-server}/auth/realms/{your-realm}/protocol/
{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxMS1XbTBvelE1TzBtUUg4LVNKYXAyWmNONE1tdWNXd25RV0tZeFpKNG93In0.eyJleHAiOjE1OTAzOTgwNzEsImlhdCI6MTU5MDM5Nzc3MSwianRpIjoiNjA0ZmYxMDctN2NiNy00NTRmLWIwYmQtY2M2ZDQwMjFiNGU4IiwiaXNzIjoiaHR0cDovL2F1dGguZGVtby5wcmFnbWF0aWNpbmR1c3RyaWVzLmRlL2F1dGgvcmVhbG1zL0lvVERCIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImJhMzJlNDcxLWM3NzItNGIzMy04ZGE2LTZmZThhY2RhMDA3MyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImlvdGRiIiwic2Vzc2lvbl9zdGF0ZSI6IjA2MGQyODYyLTE0ZWQtNDJmZS1 [...]
```
-## Cli / Shell的-e参数
+### Cli / Shell的-e参数
当您想要通过脚本的方式通过Cli / Shell对IoTDB进行批量操作时,可以使用-e参数。通过使用该参数,您可以在不进入客户端输入模式的情况下操作IoTDB。
为了避免SQL语句和其他参数混淆,现在只支持-e参数作为最后的参数使用。
diff --git a/docs/zh/UserGuide/Client/Programming - JDBC.md b/docs/zh/UserGuide/Client/Programming - JDBC.md
index 14fc1f2..018f1e3 100644
--- a/docs/zh/UserGuide/Client/Programming - JDBC.md
+++ b/docs/zh/UserGuide/Client/Programming - JDBC.md
@@ -19,30 +19,30 @@
-->
-# 编程 - JDBC
+# 应用编程接口
-## 使用
+## JDBC
-## 依赖项
+### 依赖项
* JDK >= 1.8
* Maven >= 3.6
-## 只打包 JDBC 工程
+### 只打包 JDBC 工程
在根目录下执行下面的命令:
```
mvn clean package -pl jdbc -am -Dmaven.test.skip=true
```
-## 如何到本地 MAVEN 仓库
+### 如何到本地 MAVEN 仓库
在根目录下执行下面的命令:
```
mvn clean install -pl jdbc -am -Dmaven.test.skip=true
```
-## 如何在 MAVEN 中使用 IoTDB JDBC
+### 如何在 MAVEN 中使用 IoTDB JDBC
```
<dependencies>
@@ -54,8 +54,7 @@ mvn clean install -pl jdbc -am -Dmaven.test.skip=true
</dependencies>
```
-
-## 示例
+### 示例
本章提供了如何建立数据库连接、执行 SQL 和显示查询结果的示例。
diff --git a/docs/zh/UserGuide/Client/Programming - MQTT.md b/docs/zh/UserGuide/Client/Programming - MQTT.md
index 0226dd0..89d8259 100644
--- a/docs/zh/UserGuide/Client/Programming - MQTT.md
+++ b/docs/zh/UserGuide/Client/Programming - MQTT.md
@@ -18,7 +18,11 @@
under the License.
-->
-# MQTT协议
+# 通信服务协议
+
+## Thrift
+
+## MQTT协议
[MQTT](http://mqtt.org/)是机器对机器(M2M)/“物联网”连接协议。
@@ -32,7 +36,7 @@ IoTDB服务器包括内置的MQTT服务,该服务允许远程设备将消息
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/6711230/78357432-0c71cf80-75e4-11ea-98aa-c43a54d469ce.png">
-## 内置MQTT服务
+### 内置MQTT服务
内置的MQTT服务提供了通过MQTT直接连接到IoTDB的能力。 它侦听来自MQTT客户端的发布消息,然后立即将数据写入存储。
MQTT主题与IoTDB时间序列相对应。
消息有效载荷可以由Java SPI加载的`PayloadFormatter`格式化为事件,默认实现为`JSONPayloadFormatter`
@@ -58,7 +62,7 @@ MQTT主题与IoTDB时间序列相对应。
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/6711230/78357469-1bf11880-75e4-11ea-978f-a53996667a0d.png">
-## MQTT配置
+### MQTT配置
默认情况下,IoTDB MQTT服务从`${IOTDB_HOME}/${IOTDB_CONF}/iotdbengine.properties`加载配置。
配置如下:
@@ -72,7 +76,7 @@ MQTT主题与IoTDB时间序列相对应。
| mqtt_payload_formatter | mqtt消息有效负载格式化程序 | json |
| mqtt_max_message_size | mqtt消息最大长度(字节)| 1048576 |
-## 例子
+### 例子
以下是mqtt客户端将消息发送到IoTDB服务器的示例。
```java
@@ -99,3 +103,8 @@ MQTT主题与IoTDB时间序列相对应。
connection.disconnect();
}
```
+
+## Rest
+
+
+
diff --git a/docs/zh/UserGuide/Client/Programming - Native API.md b/docs/zh/UserGuide/Client/Programming - Native API.md
index 8ecb00e..fec8723 100644
--- a/docs/zh/UserGuide/Client/Programming - Native API.md
+++ b/docs/zh/UserGuide/Client/Programming - Native API.md
@@ -19,19 +19,19 @@
-->
-# 编程 - 原生接口
+## Java 原生接口
-## 依赖
+### 依赖
* JDK >= 1.8
* Maven >= 3.6
-## 安装到本地 maven 库
+### 安装到本地 maven 库
在根目录下运行:
> mvn clean install -pl session -am -Dmaven.test.skip=true
-## 在 maven 中使用原生接口
+### 在 maven 中使用原生接口
```
<dependencies>
@@ -43,7 +43,7 @@
</dependencies>
```
-## 原生接口使用示例
+### 原生接口使用示例
下面将给出Session对应的接口的简要介绍和对应参数:
@@ -173,7 +173,7 @@
void executeNonQueryStatement(String sql)
```
-## 测试客户端逻辑+网络传输代价的接口
+### 测试客户端逻辑+网络传输代价的接口
* 测试 testInsertRecords,不实际写入数据,只将数据传输到 server 即返回。
@@ -215,13 +215,13 @@
```
-## 示例代码
+### 示例代码
浏览上述接口的详细信息,请参阅代码 ```session/src/main/java/org/apache/iotdb/session/Session.java```
使用上述接口的示例代码在 ```example/session/src/main/java/org/apache/iotdb/SessionExample.java```
-## 针对原生接口的连接池
+### 针对原生接口的连接池
我们提供了一个针对原生接口的连接池(`SessionPool`),使用该接口时,你只需要指定连接池的大小,就可以在使用时从池中获取连接。
如果超过60s都没得到一个连接的话,那么会打印一条警告日志,但是程序仍将继续等待。
@@ -239,183 +239,3 @@
使用示例可以参见 ```session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java```
或 `example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java`
-
-## 0.9-0.10 版本IoTDB Session 接口更新
-
-从0.9到0.10版本的IoTDB session接口有了较大改变。一部分接口名称和参数类型发生了变化,另外新增了大量可用接口。所有session接口抛出的异常类型 *IoTDBSessionExeception* 更改为 *IoTDBConnectionException* 和 *StatementExecutionExeception* 。下面详细介绍具体接口的变化。
-
-### 接口名称更改
-
-#### insert()
-
-用于插入一行数据,需提供数据点的deviceId, time, 所有measurement和相应的value值。
-
-```
-void insert(String deviceId, long time, List<String> measurements, List<String> values)
-```
-
-
-该方法在0.10版本中方法名发生变化
-
-```
-void insertRecord(String deviceId, long time, List<String> measurements, List<String> values)
-```
-
-#### insertRowInBatch()
-
-用于插入多行数据,需提供各行数据的deviceId, time, 所有measurement名称和相应的value值。
-
-```
-void insertRowInBatch(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList,
- List<List<String>> valuesList)
-```
-
-
-该方法在0.10版本中方法名发生变化
-
-```
-void insertRecords(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList,
- List<List<String>> valuesList)
-```
-
-#### insertBatch()
-
-在0.9版本中用于以"RowBatch"结构为单位插入数据
-
-```
-void insertBatch(RowBatch rowBatch)
-```
-
-在0.10版本中"RowBatch"类型更改为"Tablet"类型,因此方法名也随之改变。
-
-```
-void insertTablet(Tablet tablet)
-```
-
-#### testInsertRow()
-
-用于测试插入一行接口的响应
-
-```
-void testInsertRow(String deviceId, long time, List<String> measurements, List<String> values)
-```
-
-在0.10版本中方法名改为testInsertRecord。
-
-```
-void testInsertRecord(String deviceId, long time, List<String> measurements, List<String> values)
-```
-
-#### testInsertRowInBatch()
-
-用于测试插入多行数据接口的响应
-
-```
-void testInsertRowInBatch(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList,
- List<List<String>> valuesList)
-```
-
-在0.10版本中方法名改为testInsertRecords
-
-```
-void testInsertRecords(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList,
- List<List<String>> valuesList)
-```
-
-#### testInsertBatch
-
-用于测试以RowBatch结构为单位插入数据的响应
-
-```
-void testInsertBatch(RowBatch rowBatch)
-```
-
-在0.10版本中RowBatch类型更改为Tabet类型,因此方法名也随之改变为testInsertTablet
-
-```
-void testInsertTablet(Tablet tablet)
-```
-
-
-
-### 新增接口
-
-```
-void open(boolean enableRPCCompression)
-```
-
-开启一个session,并指定是否启用RPC压缩。注意客户端开启PRC压缩的状态需与服务端保持一致。
-
-```
-void insertRecord(String deviceId, long time, List<String> measurements,
- List<TSDataType> types, List<Object> values)
-```
-
-插入一行数据,该方法和已有的insertRecord()方法不同在于需额外提供每个measurement的类型信息types,且参数values以原始类型的方式提供。写入速度相对于参数为String格式的insertRecord接口要快一些。
-
-```
-void insertRecords(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList,
- List<List<TSDataType>> typesList, List<List<Object>> valuesList)
-```
-
-插入多行数据,该方法和已有的insertRecords()方法不同在于需额外提供每个measurement的类型信息typesList,且参数valuesList以原始类型的方式提供。写入速度相对于参数为String格式的insertRecords接口要快一些。
-
-```
-void insertTablet(Tablet tablet, boolean sorted)
-```
-
-提供额外的sorted参数,表示tablet是否内部已排好序,如sorted为真则会省去排序的过程从而提升处理速度。
-
-```
-void insertTablets(Map<String, Tablet> tablets)
-```
-
-新增insertTablets接口用于写入多个tablet结构,tablets参数为Map<device名, tablet数据>
-
-```
-void insertTablets(Map<String, Tablet> tablets, boolean sorted)
-```
-
-带额外sorted参数的insertTablets接口
-
-```
-void testInsertRecord(String deviceId, long time, List<String> measurements, List<TSDataType> types,
- List<Object> values)
-void testInsertRecords(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList,
- List<List<TSDataType>> typesList, List<List<Object>> valuesList)
-void testInsertTablet(Tablet tablet, boolean sorted)
-void testInsertTablets(Map<String, Tablet> tablets)
-void testInsertTablets(Map<String, Tablet> tablets, boolean sorted)
-```
-
-以上接口均为新增的测试rpc响应的方法,用于测试新增的写入接口
-
-```
-void createTimeseries(String path, TSDataType dataType, TSEncoding encoding, CompressionType compressor,
- Map<String, String> props, Map<String, String> tags, Map<String, String> attributes,
- String measurementAlias)
-```
-
-在原来createTimeseries接口的基础上,创建时间序列可以额外指定时间序列的props, tags, attributes和measurementAlias。如果不需要指定以上额外参数可以将参数设为null。
-
-```
-void createMultiTimeseries(List<String> paths, List<TSDataType> dataTypes, List<TSEncoding> encodings,
- List<CompressionType> compressors, List<Map<String, String>> propsList,
- List<Map<String, String>> tagsList, List<Map<String, String>> attributesList,
- List<String> measurementAliasList)
-```
-
-一次性创建多个时间序列,同时也可以指定多个时间序列的props, tags, attributes和measurementAlias。
-
-```
-boolean checkTimeseriesExists(String path)
-```
-
-用于检测时间序列是否存在
-
-```
-public Session(String host, int rpcPort, String username, String password,
- boolean isEnableCacheLeader)
-```
-
-开启一个session,并指定是否启用leader缓存。注意此接口对于分布式写入能够提高性能,但对于单机版写入反而会给客户端增加较少的消耗。
\ No newline at end of file
diff --git a/docs/zh/UserGuide/Client/Programming - Other Languages.md b/docs/zh/UserGuide/Client/Programming - Other Languages.md
index dc1707f..21981ea 100644
--- a/docs/zh/UserGuide/Client/Programming - Other Languages.md
+++ b/docs/zh/UserGuide/Client/Programming - Other Languages.md
@@ -19,15 +19,14 @@
-->
-# 其他语言
-## Python API
+## Python 原生接口
-### 1. 介绍
+### 介绍
这是一个如何使用thrift rpc接口通过python连接到IoTDB的示例。 在Linux或Windows上情况会有所不同,我们将介绍如何分别在两个系统上进行操作。
-### 2. 先决条件
+### 依赖
首选python3.7或更高版本。
@@ -39,9 +38,9 @@
http://thrift.apache.org/docs/install/
```
-### 3. 如何获取Python库
+### 如何获取Python库
-#### 方案1: pip install
+ * 方案1: pip install
您可以在https://pypi.org/project/apache-iotdb/上找到Apache IoTDB Python客户端API软件包。
@@ -51,16 +50,286 @@ http://thrift.apache.org/docs/install/
pip install apache-iotdb
```
-#### 方案2: 使用我们提供的编译脚本
+ * 方案2: 使用我们提供的编译脚本
如果你在路径中添加了Thrift可执行文件,则可以运行`client-py/compile.sh`或
`client-py \ compile.bat`,或者你必须对其进行修改以将变量`THRIFT_EXE`设置为指向你的可执行文件。 这将在`target`文件夹下生成节俭源,你可以将其添加到你的`PYTHONPATH`,以便你可以在代码中使用该库。 请注意,脚本通过相对路径找到节俭的源文件,因此,如果将脚本移动到其他位置,它们将不再有效。
-#### 方案3:thrift的基本用法
+ * 方案3:thrift的基本用法
或者,如果您了解thrift的基本用法,则只能在以下位置下载Thrift源文件:
`thrift\src\main\thrift\rpc.thrift`,并且只需使用`thrift -gen py -out ./target/iotdb rpc.thrift`生成python库。
-### 4. 示例代码
+### 示例代码
我们在`client-py / src/ client_example.py`中提供了一个示例,说明如何使用Thrift库连接到IoTDB,请先仔细阅读,然后再编写自己的代码。
+
+
+## C++ 原生接口
+
+编译C++客户端之前首先需要本地编译Thrift库,compile-tools模块负责编译Thrift,之后再编译client-cpp。
+
+### Thrift编译依赖
+
+- Java 8+
+- Maven 3.5+
+- Flex
+- Bison 2.7+
+- Boost
+- OpenSSL 1.0+
+
+
+
+#### Mac
+
+- Bison
+
+Mac 环境下预安装了Bison 2.3版本,但该版本过低不能够用来编译Thrift。使用Bison 2.3版本是会报以下错误:
+
+ ```invalid directive: '%code'```
+
+使用下面brew 命令更新bison版本
+
+```
+brew install bison
+brew link bison --force
+```
+
+ 添加环境变量:
+
+```
+echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
+```
+
+
+
+- Boost
+
+确保安装较新的Boost版本:
+
+```
+brew install boost
+brew link boost
+```
+
+
+- OpenSSL
+
+确保openssl库已安装,默认的openssl头文件路径为"/usr/local/opt/openssl/include"
+如果在编译Thrift过程中出现找不到openssl的错误,尝试添加
+
+`-Dopenssl.include.dir=""`
+
+
+
+#### Linux
+
+Linux下需要确保g++已被安装。
+
+一条命令安装所有依赖库:
+
+Debian/Ubuntu:
+
+```
+sudo apt-get install gcc g++ bison flex libboost-all-dev
+```
+
+CentOS:
+
+```
+yum install gcc g++ bison flex boost-devel
+```
+
+
+
+#### Windows
+
+保证你的Windows系统已经搭建好了完整的C/C++的编译构建环境。可以是MSVC,MinGW等。
+
+如使用MS Visual Studio,在安装时需要勾选 Visual Studio C/C++ IDE and compiler(supporting CMake, Clang, MinGW)。
+
+
+
+- Flex 和 Bison
+
+Windows版的 Flex 和 Bison 可以从 SourceForge下载: https://sourceforge.net/projects/winflexbison/
+
+下载后需要将可执行文件重命名为flex.exe和bison.exe以保证编译时能够被找到,添加可执行文件的目录到PATH环境变量中。
+
+- Boost
+
+Boost官网下载新版本Boost: https://www.boost.org/users/download/
+
+依次执行bootstrap.bat 和 b2.exe,本地编译boost
+
+```
+bootstrap.bat
+.\b2.exe
+```
+
+为了帮助CMake本地安装好的Boost,在编译client-cpp的mvn命令中需添加:
+
+`-Dboost.include.dir=${your boost header folder} -Dboost.library.dir=${your boost lib (stage) folder}`
+
+#### CMake 生成器
+
+CMake需要根据不同编译平台使用不同的生成器。CMake支持的生成器列表如下(`cmake --help`的结果):
+
+
+```
+ Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
+ Use -A option to specify architecture.
+ Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
+ Optional [arch] can be "Win64" or "ARM".
+ Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
+ Optional [arch] can be "Win64" or "ARM".
+ Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
+ Optional [arch] can be "Win64" or "ARM".
+ Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
+ Optional [arch] can be "Win64" or "ARM".
+ Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.
+ Optional [arch] can be "Win64" or "IA64".
+ Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.
+ Optional [arch] can be "Win64" or "IA64".
+ Borland Makefiles = Generates Borland makefiles.
+* NMake Makefiles = Generates NMake makefiles.
+ NMake Makefiles JOM = Generates JOM makefiles.
+ MSYS Makefiles = Generates MSYS makefiles.
+ MinGW Makefiles = Generates a make file for use with
+ mingw32-make.
+ Unix Makefiles = Generates standard UNIX makefiles.
+ Green Hills MULTI = Generates Green Hills MULTI files
+ (experimental, work-in-progress).
+ Ninja = Generates build.ninja files.
+ Ninja Multi-Config = Generates build-<Config>.ninja files.
+ Watcom WMake = Generates Watcom WMake makefiles.
+ CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.
+ CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.
+ CodeBlocks - NMake Makefiles = Generates CodeBlocks project fi
+
+```
+
+编译client-cpp 时的mvn命令中添加 -Dcmake.generator="" 选项来指定使用的生成器名称。
+ `mvn package -Dcmake.generator="Visual Studio 15 2017 [arch]"`
+
+
+
+### 编译C++ 客户端
+
+
+
+Maven 命令中添加"-P client-cpp" 选项编译client-cpp模块。client-cpp需要依赖编译好的thrift,即compile-tools模块。
+
+
+#### 编译及测试:
+
+完整的C++客户端命令如下:
+
+`mvn integration-test -P client-cpp -pl client-cpp,server -am -Diotdb.test.skip=true -Dtsfile.test.skip=true -Djdbc.test.skip=true`
+
+注意在Windows下需提前安装好Boost,并添加以下Maven 编译选项:
+```
+-Dboost.include.dir=${your boost header folder} -Dboost.library.dir=${your boost lib (stage) folder}`
+```
+
+例如:
+
+```
+mvn integration-test -P client-cpp -pl client-cpp,server,example/client-cpp-example -am
+-D"iotdb.test.skip"=true -D"tsfile.test.skip"=true -D"jdbc.test.skip"=true
+-D"boost.include.dir"="D:\boost_1_75_0" -D"boost.library.dir"="D:\boost_1_75_0\stage\lib"
+```
+
+
+
+编译成功后,打包好的.zip文件将位于:"client-cpp/target/client-cpp-${project.version}-cpp-${os}.zip"
+
+解压后的目录结构如下图所示(Mac):
+
+```
+.
++-- client
+| +-- include
+| +-- Session.h
+| +-- TSIService.h
+| +-- rpc_types.h
+| +-- rpc_constants.h
+| +-- thrift
+| +-- thrift_headers...
+| +-- lib
+| +-- libiotdb_session.dylib
+```
+
+
+
+
+
+### FAQ
+
+#### Mac
+
+本地Maven编译Thrift时如出现以下链接的问题,可以尝试将xcode-commandline版本从12降低到11.5
+
+https://stackoverflow.com/questions/63592445/ld-unsupported-tapi-file-type-tapi-tbd-in-yaml-file/65518087#65518087
+
+#### Windows
+
+Maven编译Thrift时需要使用wget下载远端文件,可能出现以下报错:
+
+```
+Failed to delete cached file C:\Users\Administrator\.m2\repository\.cache\download-maven-plugin\index.ser
+```
+
+解决方法:
+
+- 尝试删除 ".m2\repository\\.cache\" 目录并重试。
+- 在添加 pom文件对应的 download-maven-plugin 中添加 "\<skipCache>true\</skipCache>"
+
+
+
+## Go 原生接口
+
+### 环境准备
+
+#### 操作系统
+
+ * Linux、Macos或其他类unix系统
+ * Windows+bash(WSL、cygwin、Git Bash)
+
+#### 命令行工具
+
+ * golang >= 1.13
+ * make >= 3.0
+ * curl >= 7.1.1
+ * thrift 0.13.x
+
+### 如何使用 (快速上手)
+
+使用go mod
+
+```sh
+export GO111MODULE=on
+export GOPROXY=https://goproxy.io
+
+mkdir session_example && cd session_example
+
+curl -o session_example.go -L https://github.com/apache/iotdb-client-go/raw/main/example/session_example.go
+
+go mod init session_example
+go run session_example.go
+```
+
+不使用go mod,采用GOPATH
+
+```sh
+# get thrift 0.13.0
+go get github.com/apache/thrift
+cd $GOPATH/src/github.com/apache/thrift
+git checkout 0.13.0
+
+mkdir -p $GOPATH/src/iotdb-client-go-example/session_example
+cd $GOPATH/src/iotdb-client-go-example/session_example
+curl -o session_example.go -L https://github.com/apache/iotdb-client-go/raw/main/example/session_example.go
+go run session_example.go
+```
+
diff --git a/docs/zh/UserGuide/Client/Programming - TsFile API.md b/docs/zh/UserGuide/Client/Programming - TsFile API.md
index 1a002f2..dcba0a9 100644
--- a/docs/zh/UserGuide/Client/Programming - TsFile API.md
+++ b/docs/zh/UserGuide/Client/Programming - TsFile API.md
@@ -19,11 +19,11 @@
-->
-# TsFile API
+## TsFile API
TsFile 是在 IoTDB 中使用的时间序列的文件格式。在这个章节中,我们将介绍这种文件格式的用法。
-## 安装 TsFile libaray
+### 安装 TsFile libaray
在您自己的项目中有两种方法使用 TsFile .
@@ -97,10 +97,10 @@ TsFile 是在 IoTDB 中使用的时间序列的文件格式。在这个章节中
</dependency>
```
-## TSFile 的使用
+### TsFile 的使用
本章节演示TsFile的详细用法。
-### 时序数据(Time-series Data)
+时序数据(Time-series Data)
一个时序是由4个序列组成,分别是 device, measurement, time, value。
* **measurement**: 时间序列描述的是一个物理或者形式的测量(measurement),比如:城市的温度,一些商品的销售数量或者是火车在不同时间的速度。
@@ -144,9 +144,8 @@ device_1, 1490860659000, m1, 10, m2, 12.12
```
-### 写入 TsFile
+#### 写入 TsFile
-#### 生成一个 TsFile 文件
TsFile可以通过以下三个步骤生成,完整的代码参见"写入 TsFile 示例"章节。
* 首先,构造一个`TsFileWriter`实例。
@@ -168,11 +167,13 @@ TsFile可以通过以下三个步骤生成,完整的代码参见"写入 TsFile
```
如果你想自己设置一些 TSFile 的配置,你可以使用`config`参数。比如:
+
```
TSFileConfig conf = new TSFileConfig();
conf.setTSFileStorageFs("HDFS");
TsFileWriter tsFileWriter = new TsFileWriter(file, schema, conf);
```
+
在上面的例子中,数据文件将存储在 HDFS 中,而不是本地文件系统中。如果你想在本地文件系统中存储数据文件,你可以使用`conf.setTSFileStorageFs("LOCAL")`,这也是默认的配置。
您还可以通过`config.setHdfsIp(...)`和`config.setHdfsPort(...)`来配置 HDFS 的 IP 和端口。默认的 IP是`localhost`,默认的`RPC`端口是`9000`.
@@ -297,9 +298,9 @@ mvn clean install -pl tsfile -am -DskipTests
在已关闭的TsFile 文件中写入新数据的详细例子可以在`/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileForceAppendWrite.java`中查看
-### 读取 TsFile 接口
+#### 读取 TsFile 接口
-#### 开始之前
+ * 开始之前
"时序数据"章节中的数据集在本章节做具体的介绍。下表中显示的集合包含一个名为"device\_1"的 deltaObject,包含了 3 个名为"sensor\_1","sensor\_2"和"sensor\_3"的测量(measurement)。
测量值被简化成一个简单的例子,每条数据只包含 4 条时间和值的对应数据。
@@ -318,7 +319,7 @@ mvn clean install -pl tsfile -am -DskipTests
</center>
-#### 路径的定义
+ * 路径的定义
路径是一个点(.)分隔的字符串,它唯一地标识 TsFile 中的时间序列,例如:"root.area_1.device_1.sensor_1"。
最后一部分"sensor_1"称为"measurementId",其余部分"root.area_1.device_1"称为deviceId。
@@ -342,12 +343,12 @@ paths.add(new Path("device_1.sensor_3"));
> **注意:** 在构造路径时,参数的格式应该是一个点(.)分隔的字符串,最后一部分是measurement,其余部分确认为deviceId。
-#### 定义 Filter
+ * 定义 Filter
-##### 使用条件过滤
+ * 使用条件过滤
在 TsFile 读取过程中使用 Filter 来选择满足一个或多个给定条件的数据。
-#### IExpression
+ * IExpression
`IExpression`是一个过滤器表达式接口,它将被传递给系统查询时调用。
我们创建一个或多个筛选器表达式,并且可以使用`Binary Filter Operators`将它们连接形成最终表达式。
@@ -388,7 +389,7 @@ paths.add(new Path("device_1.sensor_3"));
* BinaryExpression.or(Expression, Expression): 选择满足任意一个表达式值的数据。
-##### Filter Expression 示例
+Filter Expression 示例
* **TimeFilterExpression 示例**
@@ -420,6 +421,7 @@ paths.add(new Path("device_1.sensor_3"));
IExpression timeFilterExpr = BinaryExpression.or(new GlobalTimeExpression(TimeFilter.gtEq(15L)),
new GlobalTimeExpression(TimeFilter.lt(25L))); // series time >= 15 or series time < 25
```
+
#### 读取接口
首先,我们打开 TsFile 并从文件路径`path`中获取一个`ReadOnlyTsFile`实例。
@@ -458,7 +460,7 @@ ReadOnlyTsFile类有两个`query`方法来执行查询。
>
> 在一些分布式文件系统中(比如:HDFS), 文件被分成几个部分,这些部分被称为"Blocks"并存储在不同的节点中。在涉及的每个节点上并行执行查询可以提高效率。因此需要部分查询(Partial Query)。部分查询(Partial Query)仅支持查询 TsFile 中被```QueryConstant.PARTITION_START_OFFSET```和```QueryConstant.PARTITION_END_OFFSET```分割的部分。
-### QueryDataset 接口
+#### QueryDataset 接口
上面执行的查询将返回一个`QueryDataset`对象。
@@ -563,7 +565,7 @@ public class TsFileRead {
```
-## 修改 TsFile 配置项
+### 修改 TsFile 配置项
```
TSFileConfig config = TSFileDescriptor.getInstance().getConfig();
diff --git a/docs/zh/UserGuide/Client/Status Codes.md b/docs/zh/UserGuide/Client/Status Codes.md
index dbe552f..0fc2293 100644
--- a/docs/zh/UserGuide/Client/Status Codes.md
+++ b/docs/zh/UserGuide/Client/Status Codes.md
@@ -19,7 +19,7 @@
-->
-# Status Codes
+## 状态码
在最新版本中引入了**状态码**这一概念。例如,因为IoTDB需要在写入数据之前首先注册时间序列,一种可能的解决方案是:
diff --git a/docs/zh/UserGuide/Concept/Compression.md b/docs/zh/UserGuide/Concept/Compression.md
index 27bc24e..7ccde38 100644
--- a/docs/zh/UserGuide/Concept/Compression.md
+++ b/docs/zh/UserGuide/Concept/Compression.md
@@ -19,7 +19,7 @@
-->
-# 压缩方式
+## 压缩方式
当时间序列写入并按照指定的类型编码为二进制数据后,IoTDB会使用压缩技术对该数据进行压缩,进一步提升空间存储效率。虽然编码和压缩都旨在提升存储效率,但编码技术通常只适合特定的数据类型(如二阶差分编码只适合与INT32或者INT64编码,存储浮点数需要先将他们乘以10m以转换为整数),然后将它们转换为二进制流。压缩方式(SNAPPY)针对二进制流进行压缩,因此压缩方式的使用不再受数据类型的限制。
diff --git a/docs/zh/UserGuide/Concept/Data Type.md b/docs/zh/UserGuide/Concept/Data Type.md
index 7a95e95..4069120 100644
--- a/docs/zh/UserGuide/Concept/Data Type.md
+++ b/docs/zh/UserGuide/Concept/Data Type.md
@@ -19,9 +19,10 @@
-->
-# 数据类型
+## 数据类型
IoTDB支持:
+
* BOOLEAN(布尔值)
* INT32(整型)
* INT64(长整型)
@@ -31,7 +32,7 @@ IoTDB支持:
一共六种数据类型。
-其中**FLOAT**与**DOUBLE**类型的序列,如果编码方式采用[RLE](../Concept/Encoding.md)或[TS_2DIFF](../Concept/Encoding.md)可以指定MAX_POINT_NUMBER,该项为浮点数的小数点后位数,具体指定方式请参见本文[第5.4节](../Operation%20Manual/SQL%20Reference.md),若不指定则系统会根据配置文件`iotdb-engine.properties`文件中的[float_precision项](../Server/Config%20Manual.md)配置。
+其中**FLOAT**与**DOUBLE**类型的序列,如果编码方式采用[RLE](../Concept/Encoding.md)或[TS_2DIFF](../Concept/Encoding.md)可以指定MAX_POINT_NUMBER,该项为浮点数的小数点后位数,若不指定则系统会根据配置文件`iotdb-engine.properties`文件中的[float_precision项](../Server/Config%20Manual.md)配置。
当系统中用户输入的数据类型与该时间序列的数据类型不对应时,系统会提醒类型错误,如下所示,二阶差分编码不支持布尔类型:
diff --git a/docs/zh/UserGuide/Concept/Encoding.md b/docs/zh/UserGuide/Concept/Encoding.md
index 0b868ec..290c880 100644
--- a/docs/zh/UserGuide/Concept/Encoding.md
+++ b/docs/zh/UserGuide/Concept/Encoding.md
@@ -19,7 +19,7 @@
-->
-# 编码方式
+## 编码方式
为了提高数据的存储效率,需要在数据写入的过程中对数据进行编码,从而减少磁盘空间的使用量。在写数据以及读数据的过程中都能够减少I/O操作的数据量从而提高性能。IoTDB支持四种针对不同类型的数据的编码方法:
diff --git a/docs/zh/UserGuide/Concept/SDT.md b/docs/zh/UserGuide/Concept/SDT.md
index 529c312..340ee7c 100644
--- a/docs/zh/UserGuide/Concept/SDT.md
+++ b/docs/zh/UserGuide/Concept/SDT.md
@@ -19,7 +19,7 @@
-->
-# 旋转门压缩
+## 旋转门压缩
旋转门压缩(SDT)算法是一种有损压缩算法。SDT的计算复杂度较低,并使用线性趋势来表示大量数据。
diff --git a/docs/zh/UserGuide/Ecosystem Integration/Grafana.md b/docs/zh/UserGuide/Ecosystem Integration/Grafana.md
index c8dbfde..d0718e3 100644
--- a/docs/zh/UserGuide/Ecosystem Integration/Grafana.md
+++ b/docs/zh/UserGuide/Ecosystem Integration/Grafana.md
@@ -19,34 +19,21 @@
-->
-# IoTDB-Grafana
+# 系统集成
-## 概览
+## Grafana-IoTDB
-- IoTDB-Grafana
- - Grafana的安装与部署
- - 安装
- - simple-json-datasource数据源插件安装
- - 启动Grafana
- - IoTDB安装
- - IoTDB-Grafana连接器安装
- - 启动IoTDB-Grafana
- - 使用Grafana
- - 添加IoTDB数据源
- - 操作Grafana
-
-<!-- /TOC -->
Grafana是开源的指标量监测和可视化工具,可用于展示时序数据和应用程序运行分析。Grafana支持Graphite,InfluxDB等国际主流时序数据库作为数据源。在IoTDB项目中,我们开发了Grafana展现IoTDB中时序数据的连接器IoTDB-Grafana,为您提供使用Grafana展示IoTDB数据库中的时序数据的可视化方法。
-## Grafana的安装与部署
+### Grafana的安装与部署
-### 安装
+#### 安装
* Grafana组件下载地址:https://grafana.com/grafana/download
* 版本 >= 4.4.1
-### simple-json-datasource数据源插件安装
+#### simple-json-datasource数据源插件安装
* 插件名称: simple-json-datasource
* 下载地址: https://github.com/grafana/simple-json-datasource
@@ -60,7 +47,8 @@ Shell > git clone https://github.com/grafana/simple-json-datasource.git
```
然后重启Grafana服务器,在浏览器中登录Grafana,在“Add data source”页面中“Type”选项出现“SimpleJson”即为安装成功。
-### 启动Grafana
+#### 启动Grafana
+
进入Grafana的安装目录,使用以下命令启动Grafana:
* Windows系统:
```
@@ -76,23 +64,23 @@ Shell > grafana-server --config=/usr/local/etc/grafana/grafana.ini --homepath /u
```
更多安装详情,请点[这里](https://grafana.com/docs/grafana/latest/installation/)
-## IoTDB安装
+### IoTDB安装
参见[https://github.com/apache/iotdb](https://github.com/apache/iotdb)
-## IoTDB-Grafana连接器安装
+### Grafana-IoTDB连接器安装
```shell
git clone https://github.com/apache/iotdb.git
```
-### 启动IoTDB-Grafana
+### 启动Grafana-IoTDB
-#### 方案一(适合开发者)
+ * 方案一(适合开发者)
导入整个项目,maven依赖安装完后,直接运行`iotdb/grafana/rc/main/java/org/apache/iotdb/web/grafana`目录下`TsfileWebDemoApplication.java`,这个grafana连接器采用springboot开发
-#### 方案二(适合使用者)
+ * 方案二(适合使用者)
```shell
cd iotdb
@@ -111,7 +99,7 @@ java -jar iotdb-grafana-{version}.war
如果您需要配置属性,将`grafana/src/main/resources/application.properties`移动到war包同级目录下(`grafana/target`)
-## 使用Grafana
+### 使用Grafana
Grafana以网页的dashboard形式为您展示数据,在使用时请您打开浏览器,访问http://\<ip\>:\<port\>
@@ -119,7 +107,7 @@ Grafana以网页的dashboard形式为您展示数据,在使用时请您打开
注:IP为您的Grafana所在的服务器IP,Port为Grafana的运行端口(默认3000)。默认登录的用户名和密码都是“admin”。
-### 添加IoTDB数据源
+#### 添加IoTDB数据源
点击左上角的“Grafana”图标,选择`Data Source`选项,然后再点击`Add data source`。
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/13203019/51664777-2766ae00-1ff5-11e9-9d2f-7489f8ccbfc2.png">
@@ -127,13 +115,13 @@ Grafana以网页的dashboard形式为您展示数据,在使用时请您打开
在编辑数据源的时候,`Type`一栏选择`Simplejson`,`URL`一栏填写http://\<ip\>:\<port\>,IP为您的IoTDB-Grafana连接器所在的服务器IP,Port为运行端口(默认8888)。之后确保IoTDB已经启动,点击“Save & Test”,出现“Data Source is working”提示表示配置成功。
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/13203019/51664842-554bf280-1ff5-11e9-97d2-54eebe0b2ca1.png">
-### 操作Grafana
+#### 操作Grafana
进入Grafana可视化页面后,可以选择添加时间序列,如图 6.9。您也可以按照Grafana官方文档进行相应的操作,详情可参看Grafana官方文档:http://docs.grafana.org/guides/getting_started/。
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/13203019/51664878-6e54a380-1ff5-11e9-9718-4d0e24627fa8.png">
-## 配置grafana
+### 配置grafana
```
# IoTDB的IP和端口
diff --git a/docs/zh/UserGuide/Ecosystem Integration/Hive TsFile.md b/docs/zh/UserGuide/Ecosystem Integration/Hive TsFile.md
index 85f1df5..06ca98f 100644
--- a/docs/zh/UserGuide/Ecosystem Integration/Hive TsFile.md
+++ b/docs/zh/UserGuide/Ecosystem Integration/Hive TsFile.md
@@ -19,22 +19,10 @@
-->
-# TsFile的Hive连接器
+## Hive-TsFile
-## 概要
-- TsFile的Hive连接器使用手册
- - 什么是TsFile的Hive连接器
- - 系统环境要求
- - 数据类型对应关系
- - 为Hive添加依赖jar包
- - 创建Tsfile-backed的Hive表
- - 从Tsfile-backed的Hive表中查询
- - 选择查询语句示例
- - 聚合查询语句示例
- - 后续工作
-
-## 什么是TsFile的Hive连接器
+### 什么是TsFile的Hive连接器
TsFile的Hive连接器实现了对Hive读取外部Tsfile类型的文件格式的支持,
使用户能够通过Hive操作Tsfile。
@@ -45,7 +33,7 @@ TsFile的Hive连接器实现了对Hive读取外部Tsfile类型的文件格式的
* 使用HQL查询tsfile
* 到现在为止, 写操作在hive-connector中还没有被支持. 所以, HQL中的insert操作是不被允许的
-## 系统环境要求
+### 系统环境要求
|Hadoop Version |Hive Version | Java Version | TsFile |
|------------- |------------ | ------------ |------------ |
@@ -53,7 +41,7 @@ TsFile的Hive连接器实现了对Hive读取外部Tsfile类型的文件格式的
> 注意:关于如何下载和使用Tsfile, 请参考以下链接: <https://github.com/apache/iotdb/tree/master/tsfile>。
-## 数据类型对应关系
+### 数据类型对应关系
| TsFile 数据类型 | Hive 数据类型 |
| ---------------- | --------------- |
@@ -65,7 +53,7 @@ TsFile的Hive连接器实现了对Hive读取外部Tsfile类型的文件格式的
| TEXT | STRING |
-## 为Hive添加依赖jar包
+### 为Hive添加依赖jar包
为了在Hive中使用Tsfile的hive连接器,我们需要把hive连接器的jar导入进hive。
@@ -81,7 +69,7 @@ Added resources: [/Users/hive/iotdb/hive-connector/target/hive-connector-0.12.0-
```
-## 创建Tsfile-backed的Hive表
+### 创建Tsfile-backed的Hive表
为了创建一个Tsfile-backed的表,需要将`serde`指定为`org.apache.iotdb.hive.TsFileSerDe`,
将`inputformat`指定为`org.apache.iotdb.hive.TSFHiveInputFormat`,
@@ -126,7 +114,7 @@ Time taken: 0.053 seconds, Fetched: 2 row(s)
到目前为止, Tsfile-backed的表已经可以像hive中其他表一样被操作了。
-## 从Tsfile-backed的Hive表中查询
+### 从Tsfile-backed的Hive表中查询
在做任何查询之前,我们需要通过如下命令,在hive中设置`hive.input.format`:
@@ -139,7 +127,7 @@ hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
例如:
-### 选择查询语句示例
+#### 选择查询语句示例
```
hive> select * from only_sensor_1 limit 10;
@@ -157,7 +145,7 @@ OK
Time taken: 1.464 seconds, Fetched: 10 row(s)
```
-### 聚合查询语句示例
+#### 聚合查询语句示例
```
hive> select count(*) from only_sensor_1;
@@ -184,6 +172,11 @@ OK
Time taken: 11.334 seconds, Fetched: 1 row(s)
```
-## 后续工作
+### 后续工作
+
+我们现在仅支持查询操作,写操作的支持还在开发中...
+
+
+## Flink-TsFile
-我们现在仅支持查询操作,写操作的支持还在开发中...
\ No newline at end of file
+## Flink-IoTDB
diff --git a/docs/zh/UserGuide/Ecosystem Integration/Spark IoTDB.md b/docs/zh/UserGuide/Ecosystem Integration/Spark IoTDB.md
index 08433ae..ff182d1 100644
--- a/docs/zh/UserGuide/Ecosystem Integration/Spark IoTDB.md
+++ b/docs/zh/UserGuide/Ecosystem Integration/Spark IoTDB.md
@@ -19,9 +19,9 @@
-->
-# Spark IoTDB连接器
+## Spark-IoTDB
-## 版本
+### 版本
Spark和Java所需的版本如下:
@@ -29,11 +29,11 @@ Spark和Java所需的版本如下:
| ------------- | ------------- | ------------ | -------- |
| `2.4.3` | `2.11` | `1.8` | `0.10.0` |
-## 安装
+### 安装
mvn clean scala:compile compile install
-# 1. Maven依赖
+#### 1. Maven依赖
```
<dependency>
@@ -43,7 +43,7 @@ mvn clean scala:compile compile install
</dependency>
```
-# 2. Spark-shell用户指南
+#### 2. Spark-shell用户指南
```
spark-shell --jars spark-iotdb-connector-0.10.0.jar,iotdb-jdbc-0.10.0-jar-with-dependencies.jar
@@ -57,7 +57,7 @@ df.printSchema()
df.show()
```
-### 如果要对rdd进行分区,可以执行以下操作
+如果要对rdd进行分区,可以执行以下操作
```
spark-shell --jars spark-iotdb-connector-0.10.0.jar,iotdb-jdbc-0.10.0-jar-with-dependencies.jar
@@ -73,7 +73,7 @@ df.printSchema()
df.show()
```
-# 3. 模式推断
+#### 3. 模式推断
以下TsFile结构为例:TsFile模式中有三个度量:状态,温度和硬件。 这三种测量的基本信息如下:
@@ -124,9 +124,9 @@ TsFile中的现有数据如下:
| 5 | root.ln.wf02.wt01 | false | null | null |
| 6 | root.ln.wf02.wt02 | null | ccc | null |
-# 4. 在宽和窄表之间转换
+#### 4. 在宽和窄表之间转换
-## 从宽到窄
+ * 从宽到窄
```
import org.apache.iotdb.spark.db._
@@ -135,7 +135,7 @@ val wide_df = spark.read.format("org.apache.iotdb.spark.db").option("url", "jdbc
val narrow_df = Transformer.toNarrowForm(spark, wide_df)
```
-## 从窄到宽
+ * 从窄到宽
```
import org.apache.iotdb.spark.db._
@@ -143,7 +143,7 @@ import org.apache.iotdb.spark.db._
val wide_df = Transformer.toWideForm(spark, narrow_df)
```
-# 5. Java用户指南
+ * 5. Java用户指南
```
import org.apache.spark.sql.Dataset;
diff --git a/docs/zh/UserGuide/Ecosystem Integration/Spark TsFile.md b/docs/zh/UserGuide/Ecosystem Integration/Spark TsFile.md
index 04398e5..6a53c1f 100644
--- a/docs/zh/UserGuide/Ecosystem Integration/Spark TsFile.md
+++ b/docs/zh/UserGuide/Ecosystem Integration/Spark TsFile.md
@@ -19,9 +19,9 @@
-->
-# TsFile的Spark连接器
+## Spark-TsFile
-## 1. About TsFile-Spark-Connector
+### 1. About TsFile-Spark-Connector
TsFile-Spark-Connector对Tsfile类型的外部数据源实现Spark的支持。 这使用户可以通过Spark读取,写入和查询Tsfile。
@@ -31,7 +31,7 @@ TsFile-Spark-Connector对Tsfile类型的外部数据源实现Spark的支持。
- 将本地文件系统或hdfs中特定目录中的所有文件加载到Spark中
- 将数据从Spark写入TsFile
-## 2. System Requirements
+### 2. System Requirements
| Spark Version | Scala Version | Java Version | TsFile |
| ------------- | ------------- | ------------ | -------- |
@@ -39,9 +39,9 @@ TsFile-Spark-Connector对Tsfile类型的外部数据源实现Spark的支持。
> 注意:有关如何下载和使用TsFile的更多信息,请参见以下链接:https://github.com/apache/iotdb/tree/master/tsfile
-## 3. 快速开始
+### 3. 快速开始
-### 本地模式
+#### 本地模式
在本地模式下使用TsFile-Spark-Connector启动Spark:
@@ -53,7 +53,7 @@ TsFile-Spark-Connector对Tsfile类型的外部数据源实现Spark的支持。
- 多个jar包用逗号分隔,没有任何空格。
- 有关如何获取TsFile的信息,请参见https://github.com/apache/iotdb/tree/master/tsfile。
-### 分布式模式
+#### 分布式模式
在分布式模式下使用TsFile-Spark-Connector启动Spark(即,Spark集群通过spark-shell连接):
@@ -67,7 +67,7 @@ TsFile-Spark-Connector对Tsfile类型的外部数据源实现Spark的支持。
- 多个jar包用逗号分隔,没有任何空格。
- 有关如何获取TsFile的信息,请参见https://github.com/apache/iotdb/tree/master/tsfile。
-## 4. 数据类型对应
+### 4. 数据类型对应
| TsFile数据类型 | SparkSQL数据类型 |
| -------------- | ---------------- |
@@ -78,7 +78,7 @@ TsFile-Spark-Connector对Tsfile类型的外部数据源实现Spark的支持。
| DOUBLE | DoubleType |
| TEXT | StringType |
-## 5. 模式推断
+### 5. 模式推断
显示TsFile的方式取决于架构。 以以下TsFile结构为例:TsFile模式中有三个度量:状态,温度和硬件。 这三种测量的基本信息如下:
@@ -129,12 +129,11 @@ TsFile中的现有数据如下:
| 6 | root.ln.wf02.wt02 | null | ccc | null |
-
-## 6. Scala API
+### 6. Scala API
注意:请记住预先分配必要的读写权限。
-### 示例1:从本地文件系统读取
+ * 示例1:从本地文件系统读取
```scala
import org.apache.iotdb.spark.tsfile._
@@ -145,7 +144,7 @@ val narrow_df = spark.read.tsfile("test.tsfile", true)
narrow_df.show
```
-### 示例2:从hadoop文件系统读取
+ * 示例2:从hadoop文件系统读取
```scala
import org.apache.iotdb.spark.tsfile._
@@ -156,7 +155,7 @@ val narrow_df = spark.read.tsfile("hdfs://localhost:9000/test.tsfile", true)
narrow_df.show
```
-### 示例3:从特定目录读取
+ * 示例3:从特定目录读取
```scala
import org.apache.iotdb.spark.tsfile._
@@ -168,7 +167,7 @@ df.show
注2:具有相同名称的度量应具有相同的架构。
-### 示例4:广泛形式的查询
+ * 示例4:广泛形式的查询
```scala
import org.apache.iotdb.spark.tsfile._
@@ -186,7 +185,7 @@ val newDf = spark.sql("select count(*) from tsfile_table")
newDf.show
```
-### 示例5:缩小形式的查询
+ * 示例5:缩小形式的查询
```scala
import org.apache.iotdb.spark.tsfile._
@@ -204,7 +203,7 @@ val newDf = spark.sql("select count(*) from tsfile_table")
newDf.show
```
-### 例6:写宽格式
+ * 例6:写宽格式
```scala
// we only support wide_form table to write
@@ -218,7 +217,7 @@ val newDf = spark.read.tsfile("hdfs://localhost:9000/output")
newDf.show
```
-## 例6:写窄格式
+ * 例7:写窄格式
```scala
// we only support wide_form table to write
@@ -232,7 +231,7 @@ val newDf = spark.read.tsfile("hdfs://localhost:9000/output", true)
newDf.show
```
-## 附录A:模式推断的旧设计
+附录A:模式推断的旧设计
显示TsFile的方式与TsFile Schema有关。 以以下TsFile结构为例:TsFile架构中有三个度量:状态,温度和硬件。 这三个度量的基本信息如下:
@@ -263,7 +262,7 @@ newDf.show
有两种显示方法:
-#### 默认方式
+ * 默认方式
将创建两列来存储设备的完整路径:time(LongType)和delta_object(StringType)。
@@ -299,7 +298,7 @@ newDf.show
-#### 展开delta_object列
+ * 展开delta_object列
通过“。”将设备列展开为多个列,忽略根目录“root”。方便进行更丰富的聚合操作。如果用户想使用这种显示方式,需要在表创建语句中设置参数“delta\_object\_name”(参考本手册5.1节中的示例5),在本例中,将参数“delta\_object\_name”设置为“root.device.turbine”。路径层的数量必须是一对一的。此时,除了“根”层之外,为设备路径的每一层创建一列。列名是参数中的名称,值是设备相应层的名称。接下来,将为每个度量创建一个列来存储特定的数据。
@@ -339,6 +338,6 @@ TsFile-Spark-Connector可以通过SparkSQL在SparkSQL中以表的形式显示一
写入过程是将数据aframe写入一个或多个tsfile。默认情况下,需要包含两个列:time和delta_object。其余的列用作测量。如果用户希望将第二个表结构写回TsFile,可以设置“delta\_object\_name”参数(请参阅本手册5.1节的5.1节)。
-## 附录B:旧注
+附录B:旧注
注意:检查Spark根目录中的jar软件包,并将libthrift-0.9.2.jar和libfb303-0.9.2.jar分别替换为libthrift-0.9.1.jar和libfb303-0.9.1.jar。
\ No newline at end of file
diff --git a/docs/zh/UserGuide/Ecosystem Integration/Zeppelin-IoTDB.md b/docs/zh/UserGuide/Ecosystem Integration/Zeppelin-IoTDB.md
index 26ab800..cf6c51e 100644
--- a/docs/zh/UserGuide/Ecosystem Integration/Zeppelin-IoTDB.md
+++ b/docs/zh/UserGuide/Ecosystem Integration/Zeppelin-IoTDB.md
@@ -19,22 +19,10 @@
-->
-# Zeppelin-IoTDB 解释器
+## Zeppelin-IoTDB
-## 概要
-* Zeppelin简介
-* IoTDB Zeppelin 解释器
- * 系统环境要求
- * 编译解释器
- * 安装解释器
- * 启动Zeppelin和IoTDB
-* 使用Zeppelin-IoTDB解释器
-* 解释器配置项
-
-
-
-## 2. Zeppelin简介
+### Zeppelin简介
Apache Zeppelin 是一个基于网页的交互式数据分析系统。用户可以通过Zeppelin连接数据源并使用SQL、Scala等进行交互式操作。操作可以保存为文档(类似于Jupyter)。Zeppelin支持多种数据源,包括Spark、ElasticSearch、Cassandra和InfluxDB等等。现在,IoTDB已经支持使用Zeppelin进行操作。样例如下:
@@ -42,9 +30,9 @@ Apache Zeppelin 是一个基于网页的交互式数据分析系统。用户可
-## 3. Zeppelin-IoTDB解释器
+### Zeppelin-IoTDB解释器
-### 系统环境需求
+#### 系统环境需求
| IoTDB 版本 | Java 版本 | Zeppelin 版本 |
| :--------: | :-----------: | :-----------: |
@@ -59,7 +47,7 @@ Apache Zeppelin 是一个基于网页的交互式数据分析系统。用户可
假设 Zeppelin 安装在 `$Zeppelin_HOME`.
-### 3.2 编译解释器
+#### 编译解释器
运行如下命令编译IoTDB Zeppelin解释器。
@@ -76,7 +64,7 @@ $IoTDB_HOME/zeppelin-interpreter/target/zeppelin-{version}-SNAPSHOT-jar-with-dep
-### 3.3 安装解释器
+#### 安装解释器
当你编译好了解释器,在Zeppelin的解释器目录下创建一个新的文件夹`iotdb`,并将IoTDB解释器放入其中。
@@ -88,7 +76,7 @@ cp $IoTDB_HOME/zeppelin-interpreter/target/zeppelin-{version}-SNAPSHOT-jar-with-
-### 3.4 启动 Zeppelin 和 IoTDB
+#### 启动 Zeppelin 和 IoTDB
进入 `$Zeppelin_HOME` 并运行Zeppelin:
@@ -116,7 +104,7 @@ or
-## 4. 使用 Zeppelin-IoTDB解释器
+### 使用 Zeppelin-IoTDB解释器
当Zeppelin启动后,访问 [http://127.0.0.1:8080/](http://127.0.0.1:8080/)
@@ -170,7 +158,7 @@ WHERE time >= 1
-## 5. 解释器配置项
+### 解释器配置项
进入页面 [http://127.0.0.1:8080/#/interpreter](http://127.0.0.1:8080/#/interpreter) 并配置IoTDB的连接参数:
diff --git a/docs/zh/UserGuide/Get Started/Frequently asked questions.md b/docs/zh/UserGuide/Get Started/Frequently asked questions.md
index f7239e4..1f3158d 100644
--- a/docs/zh/UserGuide/Get Started/Frequently asked questions.md
+++ b/docs/zh/UserGuide/Get Started/Frequently asked questions.md
@@ -23,25 +23,12 @@
# 常见问题
-## 概览
-
-- 常见问题
- - 如何查询我的 IoTDB 版本?
- - 在哪里可以找到 IoTDB 的日志?
- - 在哪里可以找到 IoTDB 的数据文件?
- - 如何知道 IoTDB 中存储了多少时间序列?
- - 可以使用 Hadoop 和 Spark 读取 IoTDB 中的 TsFile 吗?
- - IoTDB 如何处理重复的数据点?
- - 我如何知道具体的 timeseries 的类型?
- - 如何更改 IoTDB 的客户端时间显示格式?
-
-<!-- /TOC -->
## 如何查询我的 IoTDB 版本?
有几种方法可以识别您使用的 IoTDB 版本:
-*启动 IoTDB 的命令行界面:
+* 启动 IoTDB 的命令行界面:
```
> ./start-cli.sh -p 6667 -pw root -u root -h localhost
diff --git a/docs/zh/UserGuide/Get Started/QuickStart.md b/docs/zh/UserGuide/Get Started/QuickStart.md
index 3ce1f47..3033eaa 100644
--- a/docs/zh/UserGuide/Get Started/QuickStart.md
+++ b/docs/zh/UserGuide/Get Started/QuickStart.md
@@ -21,25 +21,8 @@
<!-- TOC -->
-# 快速入门
-
-## 概览
-
-- 快速入门
-- 安装环境
-- IoTDB安装
- - 从源代码生成
- - 配置文件
-- IoTDB试用
- - 启动IoTDB
- - 操作IoTDB
- - 使用Cli工具
- - IoTDB的基本操作
- - 停止IoTDB
-- 单独打包服务器
-- 单独打包客户端
-
-<!-- /TOC -->
+# 快速上手
+
本文将介绍关于IoTDB使用的基本流程,如果需要更多信息,请浏览我们官网的[指引](../Overview/What%20is%20IoTDB.md).
@@ -49,30 +32,21 @@
设置最大文件打开数为65535。
-## IoTDB安装
+## 安装步骤
IoTDB支持多种安装途径。用户可以使用三种方式对IoTDB进行安装——下载二进制可运行程序、使用源码、使用docker镜像。
* 使用源码:您可以从代码仓库下载源码并编译,具体编译方法见下方。
-* 二进制可运行程序:请从Download页面下载最新的安装包,解压后即完成安装。
+* 二进制可运行程序:请从[下载](/Download/)页面下载最新的安装包,解压后即完成安装。
* 使用Docker镜像:dockerfile 文件位于 https://github.com/apache/iotdb/blob/master/docker/src/main
-### IoTDB下载
-
-您可以从这里下载程序:[下载](/Download/)
-
-### 配置文件
-
-配置文件在"conf"文件夹下,包括:
- * 环境配置模块 (`iotdb-env.bat`, `iotdb-env.sh`),
- * 系统配置模块 (`iotdb-engine.properties`)
- * 日志配置模块 (`logback.xml`).
+## 软件目录结构
-想要了解更多,请浏览[Chapter3: Server](../Server/Download.md)
-
+ * sbin
+ * conf
## IoTDB试用
@@ -102,9 +76,8 @@ Windows系统启动命令如下:
- 如果两个选项同时指定,那么*rpc_port*将会覆盖*conf_path*下面的配置。
-### 操作IoTDB
-#### 使用Cli工具
+### 使用Cli工具
IoTDB为用户提供多种与服务器交互的方式,在此我们介绍使用Cli工具进行写入、查询数据的基本步骤。
@@ -139,7 +112,7 @@ IoTDB> login successfully
IoTDB>
```
-#### IoTDB的基本操作
+### IoTDB的基本操作
在这里,我们首先介绍一下使用Cli工具创建时间序列、插入数据并查看数据的方法。
@@ -288,7 +261,7 @@ Windows系统停止命令如下:
> $sbin\stop-server.bat
```
-## 只建立客户端
+### 只建立客户端
在iotdb的根路径下:
@@ -297,3 +270,13 @@ Windows系统停止命令如下:
```
构建后,IoTDB客户端将位于文件夹“ cli / target / iotdb-cli- {project.version}”下。
+
+## 基础配置
+
+配置文件在"conf"文件夹下,包括:
+
+ * 环境配置模块 (`iotdb-env.bat`, `iotdb-env.sh`),
+ * 系统配置模块 (`iotdb-engine.properties`)
+ * 日志配置模块 (`logback.xml`).
+
+想要了解更多,请浏览[Server](../Server/Download.md)
diff --git a/docs/zh/UserGuide/Operation Manual/Administration.md b/docs/zh/UserGuide/Operation Manual/Administration.md
index 6585167..357a8cc 100644
--- a/docs/zh/UserGuide/Operation Manual/Administration.md
+++ b/docs/zh/UserGuide/Operation Manual/Administration.md
@@ -19,11 +19,11 @@
-->
-# 权限管理语句
+# 权限管理
IoTDB为用户提供了权限管理操作,从而为用户提供对于数据的权限管理功能,保障数据的安全。
-我们将通过以下几个具体的例子为您示范基本的用户权限操作,详细的SQL语句及使用方式详情请参见本文[第5.4节](../Concept/Data%20Model%20and%20Terminology.md)。同时,在JAVA编程环境中,您可以使用[JDBC API](../Client/Programming%20-%20JDBC.md)单条或批量执行权限管理类语句。
+我们将通过以下几个具体的例子为您示范基本的用户权限操作,详细的SQL语句及使用方式详情请参见本文[数据模型](../Concept/Data%20Model%20and%20Terminology.md)。同时,在JAVA编程环境中,您可以使用[JDBC API](../Client/Programming%20-%20JDBC.md)单条或批量执行权限管理类语句。
## 基本概念
diff --git a/docs/zh/UserGuide/Operation Manual/DDL Data Definition Language.md b/docs/zh/UserGuide/Operation Manual/DDL Data Definition Language.md
index 9cddac2..5c62988 100644
--- a/docs/zh/UserGuide/Operation Manual/DDL Data Definition Language.md
+++ b/docs/zh/UserGuide/Operation Manual/DDL Data Definition Language.md
@@ -19,9 +19,13 @@
-->
-# DDL (数据定义语言)
+# IoTDB-SQL 语言
-## 创建存储组
+## 数据定义语言(DDL)
+
+### 存储组管理
+
+#### 创建存储组
我们可以根据存储模型建立相应的存储组。创建存储组的SQL语句如下所示:
@@ -42,7 +46,7 @@ Msg: org.apache.iotdb.exception.MetadataException: org.apache.iotdb.exception.Me
还需注意,如果在Windows系统上部署,存储组名是大小写不敏感的。例如同时创建`root.ln` 和 `root.LN` 是不被允许的。
-## 查看存储组
+#### 查看存储组
在存储组创建后,我们可以使用[SHOW STORAGE GROUP](../Operation%20Manual/SQL%20Reference.md)语句和[SHOW STORAGE GROUP \<PrefixPath>](../Operation%20Manual/SQL%20Reference.md)来查看存储组,SQL语句如下所示:
@@ -64,7 +68,7 @@ Total line number = 2
It costs 0.060s
```
-## 删除存储组
+#### 删除存储组
用户可以使用`DELETE STORAGE GROUP <PrefixPath>`语句删除该前缀路径下所有的存储组。在删除的过程中,需要注意的是存储组的数据也会被删除。
@@ -74,8 +78,9 @@ IoTDB > DELETE STORAGE GROUP root.sgcc
// 删除所有数据,时间序列以及存储组
IoTDB > DELETE STORAGE GROUP root.*
```
+### 时间序列管理
-## 创建时间序列
+#### 创建时间序列
根据建立的数据模型,我们可以分别在两个存储组中创建相应的时间序列。创建时间序列的SQL语句如下所示:
@@ -96,54 +101,17 @@ error: encoding TS_2DIFF does not support BOOLEAN
详细的数据类型与编码方式的对应列表请参见[编码方式](../Concept/Encoding.md)。
+#### 删除时间序列
-### 标签点管理
-
-我们可以在创建时间序列的时候,为它添加别名和额外的标签和属性信息。
-所用到的扩展的创建时间序列的SQL语句如下所示:
-```
-create timeseries root.turbine.d1.s1(temprature) with datatype=FLOAT, encoding=RLE, compression=SNAPPY tags(tag1=v1, tag2=v2) attributes(attr1=v1, attr2=v2)
-```
-
-括号里的`temprature`是`s1`这个传感器的别名。
-我们可以在任何用到`s1`的地方,将其用`temprature`代替,这两者是等价的。
-
-> IoTDB 同时支持在查询语句中[使用AS函数](../Operation%20Manual/DML%20Data%20Manipulation%20Language.md)设置别名。二者的区别在于:AS 函数设置的别名用于替代整条时间序列名,且是临时的,不与时间序列绑定;而上文中的别名只作为传感器的别名,与其绑定且可与原传感器名等价使用。
-
-标签和属性的唯一差别在于,我们为标签信息在内存中维护了一个倒排索引,所以可以在`show timeseries`的条件语句中使用标签作为查询条件,你将会在下一节看到具体查询内容。
-
-> 注意:额外的标签和属性信息总的大小不能超过`tag_attribute_total_size`.
-
-## 标签点属性更新
-创建时间序列后,我们也可以对其原有的标签点属性进行更新,主要有以下五种更新方式:
+我们可以使用`DELETE TimeSeries <PrefixPath>`语句来删除我们之前创建的时间序列。SQL语句如下所示:
-* 重命名标签或属性
-```
-ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1
-```
-* 重新设置标签或属性的值
-```
-ALTER timeseries root.turbine.d1.s1 SET newTag1=newV1, attr1=newV1
-```
-* 删除已经存在的标签或属性
-```
-ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2
-```
-* 添加新的标签
-```
-ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4
-```
-* 添加新的属性
-```
-ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4
```
-* 更新插入别名,标签和属性
-> 如果该别名,标签或属性原来不存在,则插入,否则,用新值更新原来的旧值
-```
-ALTER timeseries root.turbine.d1.s1 UPSERT ALIAS=newAlias TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4)
+IoTDB> delete timeseries root.ln.wf01.wt01.status
+IoTDB> delete timeseries root.ln.wf01.wt01.temperature, root.ln.wf02.wt02.hardware
+IoTDB> delete timeseries root.ln.wf02.*
```
-## 查看时间序列
+#### 查看时间序列
* SHOW LATEST? TIMESERIES prefixPath? showWhereClause? limitClause?
@@ -238,8 +206,102 @@ It costs 0.004s
需要注意的是,当查询路径不存在时,系统会返回0条时间序列。
+#### 统计时间序列总数
+
+IoTDB支持使用`COUNT TIMESERIES<Path>`来统计一条路径中的时间序列个数。SQL语句如下所示:
+```
+IoTDB > COUNT TIMESERIES root
+IoTDB > COUNT TIMESERIES root.ln
+IoTDB > COUNT TIMESERIES root.ln.*.*.status
+IoTDB > COUNT TIMESERIES root.ln.wf01.wt01.status
+```
+
+除此之外,还可以通过定义`LEVEL`来统计指定层级下的时间序列个数。这条语句可以用来统计每一个设备下的传感器数量,语法为:`COUNT TIMESERIES <Path> GROUP BY LEVEL=<INTEGER>`。
+
+例如有如下时间序列(可以使用`show timeseries`展示所有时间序列):
+
+```
++-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+
+| timeseries| alias|storage group|dataType|encoding|compression| tags| attributes|
++-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+
+|root.sgcc.wf03.wt01.temperature| null| root.sgcc| FLOAT| RLE| SNAPPY| null| null|
+| root.sgcc.wf03.wt01.status| null| root.sgcc| BOOLEAN| PLAIN| SNAPPY| null| null|
+| root.turbine.d1.s1|newAlias| root.turbine| FLOAT| RLE| SNAPPY|{"newTag1":"newV1","tag4":"v4","tag3":"v3"}|{"attr2":"v2","attr1":"newV1","attr4":"v4","attr3":"v3"}|
+| root.ln.wf02.wt02.hardware| null| root.ln| TEXT| PLAIN| SNAPPY| {"unit":"c"}| null|
+| root.ln.wf02.wt02.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| {"description":"test1"}| null|
+| root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY| null| null|
+| root.ln.wf01.wt01.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| null| null|
++-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+
+Total line number = 7
+It costs 0.004s
+```
+
+那么Metadata Tree如下所示:
+
+<center><img style="width:100%; max-width:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/19167280/69792176-1718f400-1201-11ea-861a-1a83c07ca144.jpg"></center>
+
+可以看到,`root`被定义为`LEVEL=0`。那么当你输入如下语句时:
+
+```
+IoTDB > COUNT TIMESERIES root GROUP BY LEVEL=1
+IoTDB > COUNT TIMESERIES root.ln GROUP BY LEVEL=2
+IoTDB > COUNT TIMESERIES root.ln.wf01 GROUP BY LEVEL=2
+```
+
+你将得到以下结果:
+<center><img style="width:100%; max-width:800px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/19167280/69792071-cb664a80-1200-11ea-8386-02dd12046c4b.png"></center>
+
+> 注意:时间序列的路径只是过滤条件,与level的定义无关。
+
+#### 标签点管理
+
+我们可以在创建时间序列的时候,为它添加别名和额外的标签和属性信息。
+所用到的扩展的创建时间序列的SQL语句如下所示:
+```
+create timeseries root.turbine.d1.s1(temprature) with datatype=FLOAT, encoding=RLE, compression=SNAPPY tags(tag1=v1, tag2=v2) attributes(attr1=v1, attr2=v2)
+```
+
+括号里的`temprature`是`s1`这个传感器的别名。
+我们可以在任何用到`s1`的地方,将其用`temprature`代替,这两者是等价的。
+
+> IoTDB 同时支持在查询语句中[使用AS函数](../Operation%20Manual/DML%20Data%20Manipulation%20Language.md)设置别名。二者的区别在于:AS 函数设置的别名用于替代整条时间序列名,且是临时的,不与时间序列绑定;而上文中的别名只作为传感器的别名,与其绑定且可与原传感器名等价使用。
+
+标签和属性的唯一差别在于,我们为标签信息在内存中维护了一个倒排索引,所以可以在`show timeseries`的条件语句中使用标签作为查询条件,你将会在下一节看到具体查询内容。
+
+> 注意:额外的标签和属性信息总的大小不能超过`tag_attribute_total_size`.
+
+ * 标签点属性更新
+创建时间序列后,我们也可以对其原有的标签点属性进行更新,主要有以下五种更新方式:
+
+* 重命名标签或属性
+```
+ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1
+```
+* 重新设置标签或属性的值
+```
+ALTER timeseries root.turbine.d1.s1 SET newTag1=newV1, attr1=newV1
+```
+* 删除已经存在的标签或属性
+```
+ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2
+```
+* 添加新的标签
+```
+ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4
+```
+* 添加新的属性
+```
+ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4
+```
+* 更新插入别名,标签和属性
+> 如果该别名,标签或属性原来不存在,则插入,否则,用新值更新原来的旧值
+```
+ALTER timeseries root.turbine.d1.s1 UPSERT ALIAS=newAlias TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4)
+```
+
+### 节点管理
-## 查看子路径
+#### 查看子路径
```
SHOW CHILD PATHS prefixPath
@@ -271,7 +333,7 @@ SHOW CHILD PATHS prefixPath
+---------------+
```
-## 查看子节点
+#### 查看子节点
```
SHOW CHILD NODES prefixPath
@@ -302,54 +364,7 @@ SHOW CHILD NODES prefixPath
+------------+
```
-## 统计时间序列总数
-
-IoTDB支持使用`COUNT TIMESERIES<Path>`来统计一条路径中的时间序列个数。SQL语句如下所示:
-```
-IoTDB > COUNT TIMESERIES root
-IoTDB > COUNT TIMESERIES root.ln
-IoTDB > COUNT TIMESERIES root.ln.*.*.status
-IoTDB > COUNT TIMESERIES root.ln.wf01.wt01.status
-```
-
-除此之外,还可以通过定义`LEVEL`来统计指定层级下的时间序列个数。这条语句可以用来统计每一个设备下的传感器数量,语法为:`COUNT TIMESERIES <Path> GROUP BY LEVEL=<INTEGER>`。
-
-例如有如下时间序列(可以使用`show timeseries`展示所有时间序列):
-
-```
-+-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+
-| timeseries| alias|storage group|dataType|encoding|compression| tags| attributes|
-+-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+
-|root.sgcc.wf03.wt01.temperature| null| root.sgcc| FLOAT| RLE| SNAPPY| null| null|
-| root.sgcc.wf03.wt01.status| null| root.sgcc| BOOLEAN| PLAIN| SNAPPY| null| null|
-| root.turbine.d1.s1|newAlias| root.turbine| FLOAT| RLE| SNAPPY|{"newTag1":"newV1","tag4":"v4","tag3":"v3"}|{"attr2":"v2","attr1":"newV1","attr4":"v4","attr3":"v3"}|
-| root.ln.wf02.wt02.hardware| null| root.ln| TEXT| PLAIN| SNAPPY| {"unit":"c"}| null|
-| root.ln.wf02.wt02.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| {"description":"test1"}| null|
-| root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY| null| null|
-| root.ln.wf01.wt01.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| null| null|
-+-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+
-Total line number = 7
-It costs 0.004s
-```
-
-那么Metadata Tree如下所示:
-
-<center><img style="width:100%; max-width:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/19167280/69792176-1718f400-1201-11ea-861a-1a83c07ca144.jpg"></center>
-
-可以看到,`root`被定义为`LEVEL=0`。那么当你输入如下语句时:
-
-```
-IoTDB > COUNT TIMESERIES root GROUP BY LEVEL=1
-IoTDB > COUNT TIMESERIES root.ln GROUP BY LEVEL=2
-IoTDB > COUNT TIMESERIES root.ln.wf01 GROUP BY LEVEL=2
-```
-
-你将得到以下结果:
-<center><img style="width:100%; max-width:800px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/19167280/69792071-cb664a80-1200-11ea-8386-02dd12046c4b.png"></center>
-
-> 注意:时间序列的路径只是过滤条件,与level的定义无关。
-
-## 统计节点数
+#### 统计节点数
IoTDB支持使用`COUNT NODES <PrefixPath> LEVEL=<INTEGER>`来统计当前Metadata树下指定层级的节点个数,这条语句可以用来统计设备数。例如:
@@ -390,17 +405,8 @@ It costs 0.002s
> 注意:时间序列的路径只是过滤条件,与level的定义无关。
其中`PrefixPath`可以包含`*`,但是`*`及其后的所有节点将被忽略,仅在`*`前的前缀路径有效。
-## 删除时间序列
-我们可以使用`DELETE TimeSeries <PrefixPath>`语句来删除我们之前创建的时间序列。SQL语句如下所示:
-
-```
-IoTDB> delete timeseries root.ln.wf01.wt01.status
-IoTDB> delete timeseries root.ln.wf01.wt01.temperature, root.ln.wf02.wt02.hardware
-IoTDB> delete timeseries root.ln.wf02.*
-```
-
-## 查看设备
+#### 查看设备
* SHOW DEVICES prefixPath? (WITH STORAGE GROUP)? limitClause? #showDevices
@@ -476,13 +482,13 @@ Total line number = 2
It costs 0.001s
```
-# TTL
+### 数据存活时间(TTL)
IoTDB支持对存储组级别设置数据存活时间(TTL),这使得IoTDB可以定期、自动地删除一定时间之前的数据。合理使用TTL
可以帮助您控制IoTDB占用的总磁盘空间以避免出现磁盘写满等异常。并且,随着文件数量的增多,查询性能往往随之下降,
内存占用也会有所提高。及时地删除一些较老的文件有助于使查询性能维持在一个较高的水平和减少内存资源的占用。
-## 设置 TTL
+#### 设置 TTL
设置TTL的SQL语句如下所示:
```
@@ -490,7 +496,7 @@ IoTDB> set ttl to root.ln 3600000
```
这个例子表示在`root.ln`存储组中,只有最近一个小时的数据将会保存,旧数据会被移除或不可见。
-## 取消 TTL
+#### 取消 TTL
取消TTL的SQL语句如下所示:
@@ -500,7 +506,7 @@ IoTDB> unset ttl to root.ln
取消设置TTL后,存储组`root.ln`中所有的数据都会被保存。
-## 显示 TTL
+#### 显示 TTL
显示TTL的SQL语句如下所示:
@@ -513,39 +519,4 @@ SHOW ALL TTL这个例子会给出所有存储组的TTL。
SHOW TTL ON root.group1,root.group2,root.group3这个例子会显示指定的三个存储组的TTL。
注意: 没有设置TTL的存储组的TTL将显示为null。
-## FLUSH
-
-将指定存储组的内存缓存区Memory Table的数据持久化到磁盘上,并将数据文件封口。
-
-```
-IoTDB> FLUSH
-IoTDB> FLUSH root.ln
-IoTDB> FLUSH root.sg1,root.sg2
-```
-
-## MERGE
-
-合并顺序和乱序数据。当前IoTDB支持使用如下两种SQL手动触发数据文件的合并:
-
-* `MERGE` 仅重写重复的Chunk,整理速度快,但是最终磁盘会存在多余数据。
-* `FULL MERGE` 将需要合并的顺序和乱序文件的所有数据都重新写一份,整理速度慢,最终磁盘将不存在无用的数据。
-
-```
-IoTDB> MERGE
-IoTDB> FULL MERGE
-```
-
-## CLEAR CACHE
-
-手动清除chunk, chunk metadata和timeseries metadata的缓存,在内存资源紧张时,可以通过此命令,释放查询时缓存所占的内存空间。
-```
-IoTDB> CLEAR CACHE
-```
-
-## 为 SCHEMA 创建快照
-
-为了加快 IoTDB 重启速度,用户可以手动触发创建 schema 的快照,从而避免服务器从 mlog 文件中恢复。
-```
-IoTDB> CREATE SNAPSHOT FOR SCHEMA
-```
diff --git a/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md b/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
index 42b0e1d..710af66 100644
--- a/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
+++ b/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
@@ -19,15 +19,15 @@
-->
-# DML (数据操作语言)
+## 数据操作语言(DML)
-## 数据接入
+### 数据写入
IoTDB为用户提供多种插入实时数据的方式,例如在[Cli/Shell工具](../Client/Command%20Line%20Interface.md)中直接输入插入数据的INSERT语句,或使用Java API(标准[Java JDBC](../Client/Programming%20-%20JDBC.md)接口)单条或批量执行插入数据的INSERT语句。
本节主要为您介绍实时数据接入的INSERT语句在场景中的实际使用示例,有关INSERT SQL语句的详细语法请参见本文[INSERT语句](../Operation%20Manual/SQL%20Reference.md)节。
-### 使用INSERT语句
+#### 使用INSERT语句
使用INSERT语句可以向指定的已经创建的一条或多条时间序列中插入数据。对于每一条数据,均由一个时间戳类型的时间戳和一个数值或布尔值、字符串类型的传感器采集值组成。
@@ -69,13 +69,13 @@ Total line number = 2
It costs 0.170s
```
-## 数据查询
+### 数据查询
-### 时间切片查询
+#### 时间条件过滤查询
本节主要介绍时间切片查询的相关示例,主要使用的是[IoTDB SELECT语句](../Operation%20Manual/SQL%20Reference.md)。同时,您也可以使用[Java JDBC](../Client/Programming%20-%20JDBC.md)标准接口来执行相关的查询语句。
-#### 根据一个时间区间选择一列数据
+ * 根据一个时间区间选择一列数据
SQL语句为:
@@ -106,7 +106,7 @@ Total line number = 8
It costs 0.026s
```
-#### 根据一个时间区间选择多列数据
+ * 根据一个时间区间选择多列数据
SQL语句为:
@@ -135,7 +135,7 @@ Total line number = 6
It costs 0.018s
```
-#### 按照多个时间区间选择同一设备的多列数据
+ * 按照多个时间区间选择同一设备的多列数据
IoTDB支持在一次查询中指定多个时间区间条件,用户可以根据需求随意组合时间区间条件。例如,
@@ -170,7 +170,7 @@ It costs 0.018s
```
-#### 按照多个时间区间选择不同设备的多列数据
+ * 按照多个时间区间选择不同设备的多列数据
该系统支持在一次查询中选择任意列的数据,也就是说,被选择的列可以来源于不同的设备。例如,SQL语句为:
@@ -202,7 +202,10 @@ Total line number = 9
It costs 0.014s
```
-#### 根据时间降序返回
+
+#### 其他结果对齐方式
+
+ * 根据时间降序返回
IoTDB 在 0.11 版本开始支持 'order by time' 语句, 用于对结果按照时间进行降序展示。例如,SQL语句为:
```sql
select * from root.ln where time > 1 order by time desc limit 10;
@@ -230,9 +233,7 @@ It costs 0.016s
更多语法请参照 [SQL REFERENCE](../Operation%20Manual/SQL%20Reference.md).
-#### 其他结果返回形式
-
-IoTDB支持另外两种结果返回形式: 按设备时间对齐 'align by device' 和 时序不对齐 'disable align'.
+ * IoTDB支持另外两种结果返回形式: 按设备时间对齐 'align by device' 和 时序不对齐 'disable align'.
'align by device' 对齐方式下,设备ID会单独作为一列出现。在 select 子句中写了多少列,最终结果就会有该列数+2 (时间列和设备名字列)。SQL形如:
@@ -281,162 +282,13 @@ It costs 0.018s
更多语法请参照[SQL REFERENCE](../Operation%20Manual/SQL%20Reference.md)。
-### 时间序列生成函数查询
-
-时间序列生成函数可接受若干原始时间序列作为输入,产生一列时间序列输出。与聚合函数不同的是,时间序列生成函数的结果集带有时间戳列。
-
-所有的时间序列生成函数都可以接受 * 作为输入,都可以与原始查询混合进行。
-
-#### 数学函数
-
-目前IoTDB支持下列数学函数,这些数学函数的行为与这些函数在Java Math标准库中对应实现的行为一致。
-
-| 函数名 | 输入序列类型 | 输出序列类型 | Java标准库中的对应实现 |
-| ------- | ------------------------------ | ------------------------ | ------------------------------------------------------------ |
-| SIN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#sin(double) |
-| COS | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#cos(double) |
-| TAN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#tan(double) |
-| ASIN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#asin(double) |
-| ACOS | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#acos(double) |
-| ATAN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#atan(double) |
-| DEGREES | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#toDegrees(double) |
-| RADIANS | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#toRadians(double) |
-| ABS | INT32 / INT64 / FLOAT / DOUBLE | 与输入序列的实际类型一致 | Math#abs(int) / Math#abs(long) /Math#abs(float) /Math#abs(double) |
-| SIGN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#signum(double) |
-| CEIL | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#ceil(double) |
-| FLOOR | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#floor(double) |
-| ROUND | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#rint(double) |
-| EXP | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#exp(double) |
-| LN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#log(double) |
-| LOG10 | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#log10(double) |
-| SQRT | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#sqrt(double) |
-
-例如:
-
-``` sql
-select s1, sin(s1), cos(s1), tan(s1) from root.sg1.d1 limit 5 offset 1000;
-```
-
-结果:
-
-```
-+-----------------------------+-------------------+-------------------+--------------------+-------------------+
-| Time| root.sg1.d1.s1|sin(root.sg1.d1.s1)| cos(root.sg1.d1.s1)|tan(root.sg1.d1.s1)|
-+-----------------------------+-------------------+-------------------+--------------------+-------------------+
-|2020-12-10T17:11:49.037+08:00|7360723084922759782| 0.8133527237573284| 0.5817708713544664| 1.3980636773094157|
-|2020-12-10T17:11:49.038+08:00|4377791063319964531|-0.8938962705202537| 0.4482738644511651| -1.994085181866842|
-|2020-12-10T17:11:49.039+08:00|7972485567734642915| 0.9627757585308978|-0.27030138509681073|-3.5618602479083545|
-|2020-12-10T17:11:49.040+08:00|2508858212791964081|-0.6073417341629443| -0.7944406950452296| 0.7644897069734913|
-|2020-12-10T17:11:49.041+08:00|2817297431185141819|-0.8419358900502509| -0.5395775727782725| 1.5603611649667768|
-+-----------------------------+-------------------+-------------------+--------------------+-------------------+
-Total line number = 5
-It costs 0.008s
-```
-
-#### 字符串函数
-
-目前IoTDB支持下列字符串处理函数:
-
-| 函数名 | 输入序列类型 | 必要的属性参数 | 输出序列类型 | 功能描述 |
-| --------------- | ------------ | ----------------------------------- | ------------ | ----------------------------------------- |
-| STRING_CONTAINS | TEXT | `s`: 待搜寻的字符串 | BOOLEAN | 判断字符串中是否存在`s` |
-| STRING_MATCHES | TEXT | `regex`: Java标准库风格的正则表达式 | BOOLEAN | 判断字符串是否能够被正则表达式`regex`匹配 |
-
-例如:
-
-``` sql
-select s1, string_contains(s1, "s"="warn"), string_matches(s1, "regex"="[^\\s]+37229") from root.sg1.d4;
-```
-
-结果:
-
-```
-+-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+
-| Time|root.sg1.d4.s1|string_contains(root.sg1.d4.s1, "s"="warn")|string_matches(root.sg1.d4.s1, "regex"="[^\\s]+37229")|
-+-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+
-|1970-01-01T08:00:00.001+08:00| warn:-8721| true| false|
-|1970-01-01T08:00:00.002+08:00| error:-37229| false| true|
-|1970-01-01T08:00:00.003+08:00| warn:1731| true| false|
-+-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+
-Total line number = 3
-It costs 0.007s
-```
-
-#### 选择函数
-
-目前IoTDB支持如下选择函数:
-
-| 函数名 | 输入序列类型 | 必要的属性参数 | 输出序列类型 | 功能描述 |
-| -------- | ------------------------------------- | ---------------------------------------------- | ------------------------ | ------------------------------------------------------------ |
-| TOP_K | INT32 / INT64 / FLOAT / DOUBLE / TEXT | `k`: 最多选择的数据点数,必须大于0小于等于1000 | 与输入序列的实际类型一致 | 返回某时间序列中值最大的`k`个数据点。若多于`k`个数据点的值并列最大,则返回时间戳最小的数据点。 |
-| BOTTOM_K | INT32 / INT64 / FLOAT / DOUBLE / TEXT | `k`: 最多选择的数据点数,必须大于0小于等于1000 | 与输入序列的实际类型一致 | 返回某时间序列中值最小的`k`个数据点。若多于`k`个数据点的值并列最小,则返回时间戳最小的数据点。 |
-
-例如:
-
-``` 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;
-```
-
-结果:
-
-```
-+-----------------------------+--------------------+------------------------------+---------------------------------+
-| Time| root.sg1.d2.s1|top_k(root.sg1.d2.s1, "k"="2")|bottom_k(root.sg1.d2.s1, "k"="2")|
-+-----------------------------+--------------------+------------------------------+---------------------------------+
-|2020-12-10T20:36:15.531+08:00| 1531604122307244742| 1531604122307244742| null|
-|2020-12-10T20:36:15.532+08:00|-7426070874923281101| null| null|
-|2020-12-10T20:36:15.533+08:00|-7162825364312197604| -7162825364312197604| null|
-|2020-12-10T20:36:15.534+08:00|-8581625725655917595| null| -8581625725655917595|
-|2020-12-10T20:36:15.535+08:00|-7667364751255535391| null| -7667364751255535391|
-+-----------------------------+--------------------+------------------------------+---------------------------------+
-Total line number = 5
-It costs 0.006s
-```
-
-#### 趋势计算函数
-
-目前IoTDB支持如下趋势计算函数:
-
-| 函数名 | 输入序列类型 | 输出序列类型 | 功能描述 |
-| ----------------------- | ----------------------------------------------- | ------------------------ | ------------------------------------------------------------ |
-| TIME_DIFFERENCE | INT32 / INT64 / FLOAT / DOUBLE / BOOLEAN / TEXT | INT64 | 统计序列中某数据点的时间戳与前一数据点时间戳的差。范围内第一个数据点没有对应的结果输出。 |
-| DIFFERENCE | INT32 / INT64 / FLOAT / DOUBLE | 与输入序列的实际类型一致 | 统计序列中某数据点的值与前一数据点的值的差。范围内第一个数据点没有对应的结果输出。 |
-| NON_NEGATIVE_DIFFERENCE | INT32 / INT64 / FLOAT / DOUBLE | 与输入序列的实际类型一致 | 统计序列中某数据点的值与前一数据点的值的差的绝对值。范围内第一个数据点没有对应的结果输出。 |
-| DERIVATIVE | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | 统计序列中某数据点相对于前一数据点的变化率,数量上等同于 DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。 |
-| NON_NEGATIVE_DERIVATIVE | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | 统计序列中某数据点相对于前一数据点的变化率的绝对值,数量上等同于 NON_NEGATIVE_DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。 |
-
-例如:
-
-``` 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;
-```
-
-结果:
-
-```
-+-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
-| Time| root.sg1.d1.s1|time_difference(root.sg1.d1.s1)|difference(root.sg1.d1.s1)|non_negative_difference(root.sg1.d1.s1)|derivative(root.sg1.d1.s1)|non_negative_derivative(root.sg1.d1.s1)|
-+-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
-|2020-12-10T17:11:49.037+08:00|7360723084922759782| 1| -8431715764844238876| 8431715764844238876| -8.4317157648442388E18| 8.4317157648442388E18|
-|2020-12-10T17:11:49.038+08:00|4377791063319964531| 1| -2982932021602795251| 2982932021602795251| -2.982932021602795E18| 2.982932021602795E18|
-|2020-12-10T17:11:49.039+08:00|7972485567734642915| 1| 3594694504414678384| 3594694504414678384| 3.5946945044146785E18| 3.5946945044146785E18|
-|2020-12-10T17:11:49.040+08:00|2508858212791964081| 1| -5463627354942678834| 5463627354942678834| -5.463627354942679E18| 5.463627354942679E18|
-|2020-12-10T17:11:49.041+08:00|2817297431185141819| 1| 308439218393177738| 308439218393177738| 3.0843921839317773E17| 3.0843921839317773E17|
-+-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
-Total line number = 5
-It costs 0.014s
-```
-
-#### 自定义序列生成函数
-请参考 [UDF (用户定义函数)](../Operation%20Manual/UDF%20User%20Defined%20Function.md)。
-
-### 聚合查询
+#### 聚合函数
本章节主要介绍聚合查询的相关示例,
主要使用的是IoTDB SELECT语句的聚合查询函数。
-#### 统计总点数
+ * 统计总点数
```
@@ -455,69 +307,9 @@ It costs 0.016s
```
-#### 分层聚合查询
-
-在时间序列层级结构中,分层聚合查询用于对某一层级进行聚合查询。
-这里使用LEVEL来统计指定层级下的聚合范围,该语句约定root为第0层序列,若统计"root.ln"下所有序列则需指定level为1。
-
-例如:在"root.ln.wf01"下存在多个子序列:wt01,wt02,wt03等均有名为status的序列,
-如果需要统计这些子序列的status包含的点个数,使用以下查询:
-```
-select count(status) from root.ln.wf01.* group by level=2
-```
-运行结果为:
-
-```
-+----------------------------+
-|count(root.ln.wf01.*.status)|
-+----------------------------+
-| 10080|
-+----------------------------+
-Total line number = 1
-It costs 0.003s
-```
-
-
-假设此时添加两条序列,"root.ln.wf01.wt01.temperature" and "root.ln.wf02.wt01.temperature"。
-需要同时查询"root.ln.\*.\*.temperature"在第二层级的count聚合结果和sum聚合结果,可以使用下列查询语句:
-```
-select count(temperature), sum(temperature) from root.ln.*.* group by level=2
-```
-运行结果:
-
-```
-+---------------------------------+---------------------------------+-------------------------------+-------------------------------+
-|count(root.ln.wf02.*.temperature)|count(root.ln.wf01.*.temperature)|sum(root.ln.wf02.*.temperature)|sum(root.ln.wf01.*.temperature)|
-+---------------------------------+---------------------------------+-------------------------------+-------------------------------+
-| 8| 4| 228.0| 91.83000183105469|
-+---------------------------------+---------------------------------+-------------------------------+-------------------------------+
-Total line number = 1
-It costs 0.013s
-```
+#### 时间区间分组聚合
-若统计"root.ln.\*.\*"下第一层级的count聚合结果和sum聚合结果,则设置level=1即可:
-```
-select count(temperature), sum(temperature) from root.ln.*.* group by level=1
-```
-运行结果:
-
-```
-+------------------------------+----------------------------+
-|count(root.ln.*.*.temperature)|sum(root.ln.*.*.temperature)|
-+------------------------------+----------------------------+
-| 12| 319.8300018310547|
-+------------------------------+----------------------------+
-Total line number = 1
-It costs 0.013s
-```
-
-分层聚合查询也可被用于其他聚合函数,当前所支持的聚合函数为:count, sum, avg, last_value, first_value, min_time, max_time, min_value, max_value
-
-对于sum, avg, min_value, max_value四种聚合函数,需保证所有聚合的时间序列数据类型相同。其他聚合函数没有此限制。
-
-### 降频聚合查询
-
-本章节主要介绍降频聚合查询的相关示例,
+本章节主要介绍时间区间分组聚合查询的相关示例,
主要使用的是IoTDB SELECT语句的[GROUP BY子句](../Operation%20Manual/SQL%20Reference.md),
该子句是IoTDB中用于根据用户给定划分条件对结果集进行划分,并对已划分的结果集进行聚合计算的语句。
IoTDB支持根据时间间隔和自定义的滑动步长(默认值与时间间隔相同,自定义的值必须大于等于时间间隔)对结果集进行划分,默认结果按照时间升序排列。
@@ -538,7 +330,7 @@ GROUP BY语句为用户提供三类指定参数:
<center><img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/16079446/69109512-f808bc80-0ab2-11ea-9e4d-b2b2f58fb474.png">
**图 5.2 三类参数的实际含义**</center>
-#### 未指定滑动步长的降频聚合查询
+ * 未指定滑动步长的降频聚合查询
对应的SQL语句是:
@@ -573,7 +365,7 @@ Total line number = 7
It costs 0.024s
```
-#### 指定滑动步长的降频聚合查询
+ * 指定滑动步长的时间区间分组聚合查询
对应的SQL语句是:
@@ -613,7 +405,7 @@ Total line number = 7
It costs 0.006s
```
-#### 按照自然月份的降频聚合查询
+ * 按照自然月份的时间区间分组聚合查询
对应的SQL语句是:
@@ -703,7 +495,7 @@ select count(status) from root.ln.wf01.wt01 group by([2017-10-31T00:00:00, 2019-
+-----------------------------+-------------------------------+
```
-#### 左开右闭区间
+ * 左开右闭区间
每个区间的结果时间戳为区间右端点,对应的SQL语句是:
@@ -731,7 +523,67 @@ Total line number = 7
It costs 0.004s
```
-#### 降采样后按Level聚合查询
+#### 路径层级分组聚合
+
+在时间序列层级结构中,分层聚合查询用于对某一层级进行聚合查询。
+这里使用LEVEL来统计指定层级下的聚合范围,该语句约定root为第0层序列,若统计"root.ln"下所有序列则需指定level为1。
+
+例如:在"root.ln.wf01"下存在多个子序列:wt01,wt02,wt03等均有名为status的序列,
+如果需要统计这些子序列的status包含的点个数,使用以下查询:
+```
+select count(status) from root.ln.wf01.* group by level=2
+```
+运行结果为:
+
+```
++----------------------------+
+|count(root.ln.wf01.*.status)|
++----------------------------+
+| 10080|
++----------------------------+
+Total line number = 1
+It costs 0.003s
+```
+
+
+假设此时添加两条序列,"root.ln.wf01.wt01.temperature" and "root.ln.wf02.wt01.temperature"。
+需要同时查询"root.ln.\*.\*.temperature"在第二层级的count聚合结果和sum聚合结果,可以使用下列查询语句:
+```
+select count(temperature), sum(temperature) from root.ln.*.* group by level=2
+```
+运行结果:
+
+```
++---------------------------------+---------------------------------+-------------------------------+-------------------------------+
+|count(root.ln.wf02.*.temperature)|count(root.ln.wf01.*.temperature)|sum(root.ln.wf02.*.temperature)|sum(root.ln.wf01.*.temperature)|
++---------------------------------+---------------------------------+-------------------------------+-------------------------------+
+| 8| 4| 228.0| 91.83000183105469|
++---------------------------------+---------------------------------+-------------------------------+-------------------------------+
+Total line number = 1
+It costs 0.013s
+```
+
+若统计"root.ln.\*.\*"下第一层级的count聚合结果和sum聚合结果,则设置level=1即可:
+```
+select count(temperature), sum(temperature) from root.ln.*.* group by level=1
+```
+运行结果:
+
+```
++------------------------------+----------------------------+
+|count(root.ln.*.*.temperature)|sum(root.ln.*.*.temperature)|
++------------------------------+----------------------------+
+| 12| 319.8300018310547|
++------------------------------+----------------------------+
+Total line number = 1
+It costs 0.013s
+```
+
+分层聚合查询也可被用于其他聚合函数,当前所支持的聚合函数为:count, sum, avg, last_value, first_value, min_time, max_time, min_value, max_value
+
+对于sum, avg, min_value, max_value四种聚合函数,需保证所有聚合的时间序列数据类型相同。其他聚合函数没有此限制。
+
+#### 时间区间和路径层级分组聚合查询
除此之外,还可以通过定义LEVEL来统计指定层级下的数据点个数。
@@ -767,113 +619,22 @@ It costs 0.006s
select count(status) from root.ln.wf01.wt01 group by ([0,20),2ms,3ms), level=1;
```
-```
-+-----------------------------+-------------------------+
-| Time|COUNT(root.ln.*.*.status)|
-+-----------------------------+-------------------------+
-|2017-11-01T00:00:00.000+08:00| 180|
-|2017-11-02T00:00:00.000+08:00| 180|
-|2017-11-03T00:00:00.000+08:00| 180|
-|2017-11-04T00:00:00.000+08:00| 180|
-|2017-11-05T00:00:00.000+08:00| 180|
-|2017-11-06T00:00:00.000+08:00| 180|
-|2017-11-07T00:00:00.000+08:00| 180|
-+-----------------------------+-------------------------+
-Total line number = 7
-It costs 0.004s
-```
-
-
-#### 降频聚合查询补空值
-
-降频聚合出的各个时间段的结果,支持使用前值补空。
-
-不允许设置滑动步长,默认为聚合时间区间,实际为定长采样。现在只支持 last_value 聚合函数。
-
-目前不支持线性插值补空值。
-
-
-##### PREVIOUS 和 PREVIOUSUNTILLAST 的区别
-
-* PREVIOUS:只要空值前边有值,就会用其填充空值。
-* PREVIOUSUNTILLAST:不会填充此序列最新点后的空值
-
-首先我们检查一下root.ln.wf01.wt01.temperature在时间2017-11-07T23:50:00以后的值
-
-```
-IoTDB> SELECT temperature FROM root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00
-+-----------------------------+-----------------------------+
-| Time|root.ln.wf01.wt01.temperature|
-+-----------------------------+-----------------------------+
-|2017-11-07T23:50:00.000+08:00| 23.7|
-|2017-11-07T23:51:00.000+08:00| 22.24|
-|2017-11-07T23:52:00.000+08:00| 20.18|
-|2017-11-07T23:53:00.000+08:00| 24.58|
-|2017-11-07T23:54:00.000+08:00| 22.52|
-|2017-11-07T23:55:00.000+08:00| 25.9|
-|2017-11-07T23:56:00.000+08:00| 24.44|
-|2017-11-07T23:57:00.000+08:00| 24.39|
-|2017-11-07T23:58:00.000+08:00| 22.93|
-|2017-11-07T23:59:00.000+08:00| 21.07|
-+-----------------------------+-----------------------------+
-Total line number = 10
-It costs 0.002s
-```
-
-我们发现root.ln.wf01.wt01.temperature的最后时间和值是2017-11-07T23:59:00和21.07。
-
-SQL 示例:
-
-```
-SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([2017-11-07T23:50:00, 2017-11-08T00:01:00),1m) FILL (float[PREVIOUSUNTILLAST]);
-SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([2017-11-07T23:50:00, 2017-11-08T00:01:00),1m) FILL (float[PREVIOUS]);
-```
-
-结果:
-
-```
-+-----------------------------+-----------------------------------------+
-| Time|last_value(root.ln.wf01.wt01.temperature)|
-+-----------------------------+-----------------------------------------+
-|2017-11-07T23:50:00.000+08:00| 23.7|
-|2017-11-07T23:51:00.000+08:00| 22.24|
-|2017-11-07T23:52:00.000+08:00| 20.18|
-|2017-11-07T23:53:00.000+08:00| 24.58|
-|2017-11-07T23:54:00.000+08:00| 22.52|
-|2017-11-07T23:55:00.000+08:00| 25.9|
-|2017-11-07T23:56:00.000+08:00| 24.44|
-|2017-11-07T23:57:00.000+08:00| 24.39|
-|2017-11-07T23:58:00.000+08:00| 22.93|
-|2017-11-07T23:59:00.000+08:00| 21.07|
-|2017-11-08T00:00:00.000+08:00| null|
-+-----------------------------+-----------------------------------------+
-Total line number = 11
-It costs 0.005s
-
-+-----------------------------+-----------------------------------------+
-| Time|last_value(root.ln.wf01.wt01.temperature)|
-+-----------------------------+-----------------------------------------+
-|2017-11-07T23:50:00.000+08:00| 23.7|
-|2017-11-07T23:51:00.000+08:00| 22.24|
-|2017-11-07T23:52:00.000+08:00| 20.18|
-|2017-11-07T23:53:00.000+08:00| 24.58|
-|2017-11-07T23:54:00.000+08:00| 22.52|
-|2017-11-07T23:55:00.000+08:00| 25.9|
-|2017-11-07T23:56:00.000+08:00| 24.44|
-|2017-11-07T23:57:00.000+08:00| 24.39|
-|2017-11-07T23:58:00.000+08:00| 22.93|
-|2017-11-07T23:59:00.000+08:00| 21.07|
-|2017-11-08T00:00:00.000+08:00| 21.07|
-+-----------------------------+-----------------------------------------+
-Total line number = 11
-It costs 0.006s
-```
-
-解释:
-
-使用 PREVIOUSUNTILLAST 将不会填充2017-11-07T23:59:00以后的值。
-
-### 最新数据查询
+```
++-----------------------------+-------------------------+
+| Time|COUNT(root.ln.*.*.status)|
++-----------------------------+-------------------------+
+|2017-11-01T00:00:00.000+08:00| 180|
+|2017-11-02T00:00:00.000+08:00| 180|
+|2017-11-03T00:00:00.000+08:00| 180|
+|2017-11-04T00:00:00.000+08:00| 180|
+|2017-11-05T00:00:00.000+08:00| 180|
+|2017-11-06T00:00:00.000+08:00| 180|
+|2017-11-07T00:00:00.000+08:00| 180|
++-----------------------------+-------------------------+
+Total line number = 7
+It costs 0.004s
+```
+#### 最新点查询
SQL语法:
@@ -918,7 +679,8 @@ Total line number = 2
It costs 0.002s
```
-### 自动填充
+
+#### 空值填充
在IoTDB的实际使用中,当进行时间序列的查询操作时,可能会出现在某些时间点值为null的情况,这会妨碍用户进行进一步的分析。 为了更好地反映数据更改的程度,用户希望可以自动填充缺失值。 因此,IoTDB系统引入了自动填充功能。
@@ -926,7 +688,7 @@ It costs 0.002s
> 注意:在当前版本中,IoTDB为用户提供两种方法:Previous 和Linear。 Previous 方法用前一个值填充空白。 Linear方法通过线性拟合来填充空白。 并且填充功能只能在执行时间点查询时使用。
-#### 填充功能
+ * 填充功能
- Previous功能
@@ -1032,7 +794,7 @@ Total line number = 1
It costs 0.017s
```
-#### 数据类型和填充方法之间的对应关系
+数据类型和填充方法之间的对应关系
数据类型和支持的填充方法如表3-6所示。
@@ -1066,7 +828,95 @@ It costs 0.017s
> 注意:应在Fill语句中至少指定一种填充方法。
-### 对查询结果的行和列控制
+ * 时间区间分组聚合查询补空值
+
+时间区间分组聚合出的各个时间段的结果,支持使用前值补空。
+
+不允许设置滑动步长,默认为聚合时间区间,实际为定长采样。现在只支持 last_value 聚合函数。
+
+目前不支持线性插值补空值。
+
+PREVIOUS 和 PREVIOUSUNTILLAST 的区别
+
+* PREVIOUS:只要空值前边有值,就会用其填充空值。
+* PREVIOUSUNTILLAST:不会填充此序列最新点后的空值
+
+首先我们检查一下root.ln.wf01.wt01.temperature在时间2017-11-07T23:50:00以后的值
+
+```
+IoTDB> SELECT temperature FROM root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00
++-----------------------------+-----------------------------+
+| Time|root.ln.wf01.wt01.temperature|
++-----------------------------+-----------------------------+
+|2017-11-07T23:50:00.000+08:00| 23.7|
+|2017-11-07T23:51:00.000+08:00| 22.24|
+|2017-11-07T23:52:00.000+08:00| 20.18|
+|2017-11-07T23:53:00.000+08:00| 24.58|
+|2017-11-07T23:54:00.000+08:00| 22.52|
+|2017-11-07T23:55:00.000+08:00| 25.9|
+|2017-11-07T23:56:00.000+08:00| 24.44|
+|2017-11-07T23:57:00.000+08:00| 24.39|
+|2017-11-07T23:58:00.000+08:00| 22.93|
+|2017-11-07T23:59:00.000+08:00| 21.07|
++-----------------------------+-----------------------------+
+Total line number = 10
+It costs 0.002s
+```
+
+我们发现root.ln.wf01.wt01.temperature的最后时间和值是2017-11-07T23:59:00和21.07。
+
+SQL 示例:
+
+```
+SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([2017-11-07T23:50:00, 2017-11-08T00:01:00),1m) FILL (float[PREVIOUSUNTILLAST]);
+SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([2017-11-07T23:50:00, 2017-11-08T00:01:00),1m) FILL (float[PREVIOUS]);
+```
+
+结果:
+
+```
++-----------------------------+-----------------------------------------+
+| Time|last_value(root.ln.wf01.wt01.temperature)|
++-----------------------------+-----------------------------------------+
+|2017-11-07T23:50:00.000+08:00| 23.7|
+|2017-11-07T23:51:00.000+08:00| 22.24|
+|2017-11-07T23:52:00.000+08:00| 20.18|
+|2017-11-07T23:53:00.000+08:00| 24.58|
+|2017-11-07T23:54:00.000+08:00| 22.52|
+|2017-11-07T23:55:00.000+08:00| 25.9|
+|2017-11-07T23:56:00.000+08:00| 24.44|
+|2017-11-07T23:57:00.000+08:00| 24.39|
+|2017-11-07T23:58:00.000+08:00| 22.93|
+|2017-11-07T23:59:00.000+08:00| 21.07|
+|2017-11-08T00:00:00.000+08:00| null|
++-----------------------------+-----------------------------------------+
+Total line number = 11
+It costs 0.005s
+
++-----------------------------+-----------------------------------------+
+| Time|last_value(root.ln.wf01.wt01.temperature)|
++-----------------------------+-----------------------------------------+
+|2017-11-07T23:50:00.000+08:00| 23.7|
+|2017-11-07T23:51:00.000+08:00| 22.24|
+|2017-11-07T23:52:00.000+08:00| 20.18|
+|2017-11-07T23:53:00.000+08:00| 24.58|
+|2017-11-07T23:54:00.000+08:00| 22.52|
+|2017-11-07T23:55:00.000+08:00| 25.9|
+|2017-11-07T23:56:00.000+08:00| 24.44|
+|2017-11-07T23:57:00.000+08:00| 24.39|
+|2017-11-07T23:58:00.000+08:00| 22.93|
+|2017-11-07T23:59:00.000+08:00| 21.07|
+|2017-11-08T00:00:00.000+08:00| 21.07|
++-----------------------------+-----------------------------------------+
+Total line number = 11
+It costs 0.006s
+```
+
+解释:
+
+使用 PREVIOUSUNTILLAST 将不会填充2017-11-07T23:59:00以后的值。
+
+#### LIMIT & OFFSET
IoTDB提供 [LIMIT/SLIMIT](../Operation%20Manual/SQL%20Reference.md) 子句和 [OFFSET/SOFFSET](../Operation%20Manual/SQL%20Reference.md) 子句,以使用户可以更好地控制查询结果。使用LIMIT和SLIMIT子句可让用户控制查询结果的行数和列数,
并且使用OFFSET和SOFSET子句允许用户设置结果显示的起始位置。
@@ -1075,7 +925,7 @@ IoTDB提供 [LIMIT/SLIMIT](../Operation%20Manual/SQL%20Reference.md) 子句和 [
本章主要介绍查询结果的行和列控制的相关示例。你还可以使用 [Java JDBC](../Client/Programming%20-%20JDBC.md) 标准接口执行查询。
-#### 查询结果的行控制
+ * 查询结果的行控制
通过使用LIMIT和OFFSET子句,用户可以以与行相关的方式控制查询结果。 我们将通过以下示例演示如何使用LIMIT和OFFSET子句。
@@ -1208,7 +1058,7 @@ SQL语句将不会执行,并且相应的错误提示如下:
Msg: 401: line 1:107 mismatched input 'limit' expecting {<EOF>, SLIMIT, SOFFSET, GROUP, DISABLE, ALIGN}
```
-#### 查询结果的列控制
+ * 查询结果的列控制
通过使用LIMIT和OFFSET子句,用户可以以与列相关的方式控制查询结果。 我们将通过以下示例演示如何使用SLIMIT和OFFSET子句。
@@ -1322,7 +1172,7 @@ Total line number = 1
It costs 0.007s
```
-#### 控制查询结果的行和列
+ * 控制查询结果的行和列
除了对查询结果进行行或列控制之外,IoTDB还允许用户控制查询结果的行和列。 这是同时包含LIMIT子句和SLIMIT子句的完整示例。
@@ -1358,7 +1208,7 @@ Total line number = 10
It costs 0.009s
```
-### 使用别名
+#### 别名
由于 IoTDB 独特的数据模型,在每个传感器前都附带有设备等诸多额外信息。有时,我们只针对某个具体设备查询,而这些前缀信息频繁显示造成了冗余,影响了结果集的显示与分析。这时我们可以使用 IoTDB 提供的 AS 函数,将查询中出现的时间序列给定一个别名。
@@ -1374,59 +1224,156 @@ select s1 as temperature, s2 as speed from root.ln.wf01.wt01;
| ---- | ----------- | ----- |
| ... | ... | ... |
-#### 其他结果集格式
-此外,IoTDB支持两种其他结果集格式:“按设备对齐”和“禁用对齐”。
+#### 内置函数
-“按设备对齐”指示将deviceId视为一列。 因此,数据集中的列完全有限。
+时间序列生成函数可接受若干原始时间序列作为输入,产生一列时间序列输出。与聚合函数不同的是,时间序列生成函数的结果集带有时间戳列。
-SQL语句是:
+所有的时间序列生成函数都可以接受 * 作为输入,都可以与原始查询混合进行。
+
+ * 数学函数
+
+目前IoTDB支持下列数学函数,这些数学函数的行为与这些函数在Java Math标准库中对应实现的行为一致。
+
+| 函数名 | 输入序列类型 | 输出序列类型 | Java标准库中的对应实现 |
+| ------- | ------------------------------ | ------------------------ | ------------------------------------------------------------ |
+| SIN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#sin(double) |
+| COS | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#cos(double) |
+| TAN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#tan(double) |
+| ASIN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#asin(double) |
+| ACOS | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#acos(double) |
+| ATAN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#atan(double) |
+| DEGREES | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#toDegrees(double) |
+| RADIANS | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#toRadians(double) |
+| ABS | INT32 / INT64 / FLOAT / DOUBLE | 与输入序列的实际类型一致 | Math#abs(int) / Math#abs(long) /Math#abs(float) /Math#abs(double) |
+| SIGN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#signum(double) |
+| CEIL | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#ceil(double) |
+| FLOOR | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#floor(double) |
+| ROUND | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#rint(double) |
+| EXP | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#exp(double) |
+| LN | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#log(double) |
+| LOG10 | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#log10(double) |
+| SQRT | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | Math#sqrt(double) |
+
+例如:
+``` sql
+select s1, sin(s1), cos(s1), tan(s1) from root.sg1.d1 limit 5 offset 1000;
```
-select s1,s2 from root.sg1.* ALIGN BY DEVICE
+结果:
+
+```
++-----------------------------+-------------------+-------------------+--------------------+-------------------+
+| Time| root.sg1.d1.s1|sin(root.sg1.d1.s1)| cos(root.sg1.d1.s1)|tan(root.sg1.d1.s1)|
++-----------------------------+-------------------+-------------------+--------------------+-------------------+
+|2020-12-10T17:11:49.037+08:00|7360723084922759782| 0.8133527237573284| 0.5817708713544664| 1.3980636773094157|
+|2020-12-10T17:11:49.038+08:00|4377791063319964531|-0.8938962705202537| 0.4482738644511651| -1.994085181866842|
+|2020-12-10T17:11:49.039+08:00|7972485567734642915| 0.9627757585308978|-0.27030138509681073|-3.5618602479083545|
+|2020-12-10T17:11:49.040+08:00|2508858212791964081|-0.6073417341629443| -0.7944406950452296| 0.7644897069734913|
+|2020-12-10T17:11:49.041+08:00|2817297431185141819|-0.8419358900502509| -0.5395775727782725| 1.5603611649667768|
++-----------------------------+-------------------+-------------------+--------------------+-------------------+
+Total line number = 5
+It costs 0.008s
```
-结果显示如下:
+ * 字符串函数
+
+目前IoTDB支持下列字符串处理函数:
+
+| 函数名 | 输入序列类型 | 必要的属性参数 | 输出序列类型 | 功能描述 |
+| --------------- | ------------ | ----------------------------------- | ------------ | ----------------------------------------- |
+| STRING_CONTAINS | TEXT | `s`: 待搜寻的字符串 | BOOLEAN | 判断字符串中是否存在`s` |
+| STRING_MATCHES | TEXT | `regex`: Java标准库风格的正则表达式 | BOOLEAN | 判断字符串是否能够被正则表达式`regex`匹配 |
+
+例如:
+
+``` sql
+select s1, string_contains(s1, "s"="warn"), string_matches(s1, "regex"="[^\\s]+37229") from root.sg1.d4;
```
-+-----------------------------+-----------------+-----------+------+--------+
-| Time| Device|temperature|status|hardware|
-+-----------------------------+-----------------+-----------+------+--------+
-|2017-11-01T00:00:00.000+08:00|root.ln.wf01.wt01| 25.96| true| null|
-|2017-11-01T00:01:00.000+08:00|root.ln.wf01.wt01| 24.36| true| null|
-|1970-01-01T08:00:00.001+08:00|root.ln.wf02.wt02| null| true| v1|
-|1970-01-01T08:00:00.002+08:00|root.ln.wf02.wt02| null| false| v2|
-|2017-11-01T00:00:00.000+08:00|root.ln.wf02.wt02| null| true| v2|
-|2017-11-01T00:01:00.000+08:00|root.ln.wf02.wt02| null| true| v2|
-+-----------------------------+-----------------+-----------+------+--------+
-Total line number = 6
-It costs 0.012s
+
+结果:
+
+```
++-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+
+| Time|root.sg1.d4.s1|string_contains(root.sg1.d4.s1, "s"="warn")|string_matches(root.sg1.d4.s1, "regex"="[^\\s]+37229")|
++-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+
+|1970-01-01T08:00:00.001+08:00| warn:-8721| true| false|
+|1970-01-01T08:00:00.002+08:00| error:-37229| false| true|
+|1970-01-01T08:00:00.003+08:00| warn:1731| true| false|
++-----------------------------+--------------+-------------------------------------------+------------------------------------------------------+
+Total line number = 3
+It costs 0.007s
```
-“禁用对齐”指示结果集中每个时间序列都有3列。
+ * 选择函数
-SQL语句是:
+目前IoTDB支持如下选择函数:
- ```
- select * from root.sg1 where time > 10 disable align
- ```
+| 函数名 | 输入序列类型 | 必要的属性参数 | 输出序列类型 | 功能描述 |
+| -------- | ------------------------------------- | ---------------------------------------------- | ------------------------ | ------------------------------------------------------------ |
+| TOP_K | INT32 / INT64 / FLOAT / DOUBLE / TEXT | `k`: 最多选择的数据点数,必须大于0小于等于1000 | 与输入序列的实际类型一致 | 返回某时间序列中值最大的`k`个数据点。若多于`k`个数据点的值并列最大,则返回时间戳最小的数据点。 |
+| BOTTOM_K | INT32 / INT64 / FLOAT / DOUBLE / TEXT | `k`: 最多选择的数据点数,必须大于0小于等于1000 | 与输入序列的实际类型一致 | 返回某时间序列中值最小的`k`个数据点。若多于`k`个数据点的值并列最小,则返回时间戳最小的数据点。 |
-结果显示如下:
+例如:
+``` 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;
```
-+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+
-| Time|root.ln.wf02.wt02.hardware| Time|root.ln.wf02.wt02.status| Time|root.ln.wf01.wt01.temperature| Time|root.ln.wf01.wt01.status|
-+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+
-|1970-01-01T08:00:00.001+08:00| v1|1970-01-01T08:00:00.001+08:00| true|2017-11-01T00:00:00.000+08:00| 25.96|2017-11-01T00:00:00.000+08:00| true|
-|1970-01-01T08:00:00.002+08:00| v2|1970-01-01T08:00:00.002+08:00| false|2017-11-01T00:01:00.000+08:00| 24.36|2017-11-01T00:01:00.000+08:00| true|
-|2017-11-01T00:00:00.000+08:00| v2|2017-11-01T00:00:00.000+08:00| true| null| null| null| null|
-|2017-11-01T00:01:00.000+08:00| v2|2017-11-01T00:01:00.000+08:00| true| null| null| null| null|
-+-----------------------------+--------------------------+-----------------------------+------------------------+-----------------------------+-----------------------------+-----------------------------+------------------------+
-Total line number = 4
-It costs 0.018s
+
+结果:
+
+```
++-----------------------------+--------------------+------------------------------+---------------------------------+
+| Time| root.sg1.d2.s1|top_k(root.sg1.d2.s1, "k"="2")|bottom_k(root.sg1.d2.s1, "k"="2")|
++-----------------------------+--------------------+------------------------------+---------------------------------+
+|2020-12-10T20:36:15.531+08:00| 1531604122307244742| 1531604122307244742| null|
+|2020-12-10T20:36:15.532+08:00|-7426070874923281101| null| null|
+|2020-12-10T20:36:15.533+08:00|-7162825364312197604| -7162825364312197604| null|
+|2020-12-10T20:36:15.534+08:00|-8581625725655917595| null| -8581625725655917595|
+|2020-12-10T20:36:15.535+08:00|-7667364751255535391| null| -7667364751255535391|
++-----------------------------+--------------------+------------------------------+---------------------------------+
+Total line number = 5
+It costs 0.006s
+```
+
+ * 趋势计算函数
+
+目前IoTDB支持如下趋势计算函数:
+
+| 函数名 | 输入序列类型 | 输出序列类型 | 功能描述 |
+| ----------------------- | ----------------------------------------------- | ------------------------ | ------------------------------------------------------------ |
+| TIME_DIFFERENCE | INT32 / INT64 / FLOAT / DOUBLE / BOOLEAN / TEXT | INT64 | 统计序列中某数据点的时间戳与前一数据点时间戳的差。范围内第一个数据点没有对应的结果输出。 |
+| DIFFERENCE | INT32 / INT64 / FLOAT / DOUBLE | 与输入序列的实际类型一致 | 统计序列中某数据点的值与前一数据点的值的差。范围内第一个数据点没有对应的结果输出。 |
+| NON_NEGATIVE_DIFFERENCE | INT32 / INT64 / FLOAT / DOUBLE | 与输入序列的实际类型一致 | 统计序列中某数据点的值与前一数据点的值的差的绝对值。范围内第一个数据点没有对应的结果输出。 |
+| DERIVATIVE | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | 统计序列中某数据点相对于前一数据点的变化率,数量上等同于 DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。 |
+| NON_NEGATIVE_DERIVATIVE | INT32 / INT64 / FLOAT / DOUBLE | DOUBLE | 统计序列中某数据点相对于前一数据点的变化率的绝对值,数量上等同于 NON_NEGATIVE_DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。 |
+
+例如:
+
+``` 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;
+```
+
+结果:
+
+```
++-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
+| Time| root.sg1.d1.s1|time_difference(root.sg1.d1.s1)|difference(root.sg1.d1.s1)|non_negative_difference(root.sg1.d1.s1)|derivative(root.sg1.d1.s1)|non_negative_derivative(root.sg1.d1.s1)|
++-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
+|2020-12-10T17:11:49.037+08:00|7360723084922759782| 1| -8431715764844238876| 8431715764844238876| -8.4317157648442388E18| 8.4317157648442388E18|
+|2020-12-10T17:11:49.038+08:00|4377791063319964531| 1| -2982932021602795251| 2982932021602795251| -2.982932021602795E18| 2.982932021602795E18|
+|2020-12-10T17:11:49.039+08:00|7972485567734642915| 1| 3594694504414678384| 3594694504414678384| 3.5946945044146785E18| 3.5946945044146785E18|
+|2020-12-10T17:11:49.040+08:00|2508858212791964081| 1| -5463627354942678834| 5463627354942678834| -5.463627354942679E18| 5.463627354942679E18|
+|2020-12-10T17:11:49.041+08:00|2817297431185141819| 1| 308439218393177738| 308439218393177738| 3.0843921839317773E17| 3.0843921839317773E17|
++-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
+Total line number = 5
+It costs 0.014s
```
-有关更多语法描述,更多语法请参照 [SQL REFERENCE](../Operation%20Manual/SQL%20Reference.md).
+ * 自定义序列生成函数
+
+请参考 [UDF (用户定义函数)](../Operation%20Manual/UDF%20User%20Defined%20Function.md)。
#### 错误处理
@@ -1498,14 +1445,7 @@ Empty set.
It costs 0.005s
```
-当SLIMIT子句的参数SOFFSET不小于可用时间序列数时,系统将提示错误。 例如,执行以下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 2
-
-```
-SQL语句将不会执行,并且相应的错误提示如下:
### 数据删除
@@ -1572,7 +1512,7 @@ IoTDB> delete from root.ln.wf03.wt02.status where time < now()
Msg: TimeSeries does not exist and its data cannot be deleted
```
-## 删除时间分区 (实验性功能)
+#### 删除时间分区 (实验性功能)
您可以通过如下语句来删除某一个存储组下的指定时间分区:
```
@@ -1583,4 +1523,3 @@ DELETE PARTITION root.ln 0,1,2
手动地将一个时间戳转换为对应的id,其中的`partitionInterval`可以在IoTDB的配置文件中找到(如果您使用的版本支持时间分区)。
请注意该功能目前只是实验性的,如果您不是开发者,使用时请务必谨慎。
-
diff --git a/docs/zh/UserGuide/Operation Manual/Kill Query.md b/docs/zh/UserGuide/Operation Manual/Kill Query.md
index 8755f05..1e88744 100644
--- a/docs/zh/UserGuide/Operation Manual/Kill Query.md
+++ b/docs/zh/UserGuide/Operation Manual/Kill Query.md
@@ -18,14 +18,51 @@
under the License.
-->
+## 运维命令
-# 中止查询
+### FLUSH
+
+将指定存储组的内存缓存区Memory Table的数据持久化到磁盘上,并将数据文件封口。
+
+```
+IoTDB> FLUSH
+IoTDB> FLUSH root.ln
+IoTDB> FLUSH root.sg1,root.sg2
+```
+
+### MERGE
+
+合并顺序和乱序数据。当前IoTDB支持使用如下两种SQL手动触发数据文件的合并:
+
+* `MERGE` 仅重写重复的Chunk,整理速度快,但是最终磁盘会存在多余数据。
+* `FULL MERGE` 将需要合并的顺序和乱序文件的所有数据都重新写一份,整理速度慢,最终磁盘将不存在无用的数据。
+
+```
+IoTDB> MERGE
+IoTDB> FULL MERGE
+```
+
+### CLEAR CACHE
+
+手动清除chunk, chunk metadata和timeseries metadata的缓存,在内存资源紧张时,可以通过此命令,释放查询时缓存所占的内存空间。
+```
+IoTDB> CLEAR CACHE
+```
+
+### 为 SCHEMA 创建快照
+
+为了加快 IoTDB 重启速度,用户可以手动触发创建 schema 的快照,从而避免服务器从 mlog 文件中恢复。
+```
+IoTDB> CREATE SNAPSHOT FOR SCHEMA
+```
+
+### 中止查询
当使用 IoTDB 时,您可能会遇到以下情形:输入了一个查询,但是由于其包含的数据量过大或是其他原因,导致长时间无法返回结果,但是迫于生产环境无法中止该命令,只能被迫等待。
从 0.12 版本开始,IoTDB 对执行时间过长的查询给出了两种解决方案:查询超时和查询中止。
-## 查询超时
+#### 查询超时
对于执行时间过长的查询,IoTDB 将强行中断该查询,并抛出超时异常,如图所示:
@@ -42,7 +79,7 @@ E.g. session.executeQueryStatement(String sql, long timeout)
如果不配置超时时间参数或将超时时间设置为 0,将使用服务器端默认的超时时间.
-## 查询中止
+#### 查询中止
除了被动地等待查询超时外,IoTDB 还支持主动地中止查询,命令为:
diff --git a/docs/zh/UserGuide/Operation Manual/UDF User Defined Function.md b/docs/zh/UserGuide/Operation Manual/UDF User Defined Function.md
index b52dd2f..65f29f0 100644
--- a/docs/zh/UserGuide/Operation Manual/UDF User Defined Function.md
+++ b/docs/zh/UserGuide/Operation Manual/UDF User Defined Function.md
@@ -61,6 +61,7 @@ IoTDB 支持两种类型的 UDF 函数,如下表所示。
下表是所有可供用户实现的接口说明。
+
| 接口定义 | 描述 | 是否必须 |
| :----------------------------------------------------------- | :----------------------------------------------------------- | ------------------ |
| `void validate(UDFParameterValidator validator) throws Exception` | 在初始化方法`beforeStart`调用前执行,用于检测`UDFParameters`中用户输入的参数是否合法。 | 否 |
@@ -84,23 +85,23 @@ IoTDB 支持两种类型的 UDF 函数,如下表所示。
-### void validate(UDFParameterValidator validator) throws Exception
+ * void validate(UDFParameterValidator validator) throws Exception
-`validate`方法能够对用户输入的参数进行验证。
+ `validate`方法能够对用户输入的参数进行验证。
-您可以在该方法中限制输入序列的数量和类型,检查用户输入的属性或者进行自定义逻辑的验证。
+ 您可以在该方法中限制输入序列的数量和类型,检查用户输入的属性或者进行自定义逻辑的验证。
-`UDFParameterValidator`的使用方法请见Javadoc。
+ `UDFParameterValidator`的使用方法请见Javadoc。
-### void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) throws Exception
+ * void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) throws Exception
-`beforeStart`方法有两个作用:
+ `beforeStart`方法有两个作用:
-1. 帮助用户解析SQL语句中的UDF参数
-2. 配置UDF运行时必要的信息,即指定UDF访问原始数据时采取的策略和输出结果序列的类型
-3. 创建资源,比如建立外部链接,打开文件等。
+ 1. 帮助用户解析SQL语句中的UDF参数
+ 2. 配置UDF运行时必要的信息,即指定UDF访问原始数据时采取的策略和输出结果序列的类型
+ 3. 创建资源,比如建立外部链接,打开文件等。
@@ -158,7 +159,7 @@ void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) th
-##### setAccessStrategy
+ * setAccessStrategy
注意,您在此处设定的原始数据访问策略决定了框架会调用哪一种`transform`方法 ,请实现与原始数据访问策略对应的`transform`方法。当然,您也可以根据`UDFParameters`解析出来的属性参数,动态决定设定哪一种策略,因此,实现两种`transform`方法也是被允许的。
@@ -205,7 +206,7 @@ void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) th
-##### setOutputDataType
+ * setOutputDataType
注意,您在此处设定的输出结果序列的类型,决定了`transform`方法中`PointCollector`实际能够接收的数据类型。`setOutputDataType`中设定的输出类型和`PointCollector`实际能够接收的数据输出类型关系如下:
@@ -273,7 +274,7 @@ public class Adder implements UDTF {
-### void transform(RowWindow rowWindow, PointCollector collector) throws Exception
+ * void transform(RowWindow rowWindow, PointCollector collector) throws Exception
当您在`beforeStart`方法中指定UDF读取原始数据的策略为 `SlidingTimeWindowAccessStrategy`或者`SlidingSizeWindowAccessStrategy`时,您就需要实现该方法,在该方法中增加对原始数据处理的逻辑。
@@ -315,7 +316,7 @@ public class Counter implements UDTF {
-### void terminate(PointCollector collector) throws Exception
+ * void terminate(PointCollector collector) throws Exception
在一些场景下,UDF需要遍历完所有的原始数据后才能得到最后的输出结果。`terminate`接口为这类UDF提供了支持。
@@ -367,7 +368,7 @@ public class Max implements UDTF {
-### void beforeDestroy()
+ * void beforeDestroy()
UDTF的结束方法,您可以在此方法中进行一些资源释放等的操作。
diff --git a/docs/zh/UserGuide/Overview/Architecture.md b/docs/zh/UserGuide/Overview/Architecture.md
index e2e76a6..479113d 100644
--- a/docs/zh/UserGuide/Overview/Architecture.md
+++ b/docs/zh/UserGuide/Overview/Architecture.md
@@ -19,7 +19,7 @@
-->
-# 架构
+## 系统架构
IoTDB套件由若干个组件构成,共同形成“数据收集-数据写入-数据存储-数据查询-数据可视化-数据分析”等一系列功能。
diff --git a/docs/zh/UserGuide/Overview/Features.md b/docs/zh/UserGuide/Overview/Features.md
index 07e44a5..8ff9b7e 100644
--- a/docs/zh/UserGuide/Overview/Features.md
+++ b/docs/zh/UserGuide/Overview/Features.md
@@ -19,9 +19,10 @@
-->
-# 主要功能与特点
+## 主要功能特点
IoTDB具有以下特点:
+
* 灵活的部署方式
* 云端一键部署
* 终端解压即用
diff --git a/docs/zh/UserGuide/Overview/Scenario.md b/docs/zh/UserGuide/Overview/Scenario.md
index 4564d55..0b6b62a 100644
--- a/docs/zh/UserGuide/Overview/Scenario.md
+++ b/docs/zh/UserGuide/Overview/Scenario.md
@@ -19,9 +19,9 @@
-->
-# 应用场景
+## 应用场景
-## 场景1
+ * 场景1
某公司采用表面贴装技术(SMT)生产芯片:需要首先在芯片上的焊接点处印刷(即涂抹)锡膏,然后将元器件放置在锡膏上,进而通过加热熔化锡膏并冷却,使得元器件被焊接在芯片上。上述流程采用自动化生产线。为了确保产品质量合格,在印刷锡膏后,需要通过光学设备对锡膏印刷的质量进行评估:采用三维锡膏印刷检测(SPI)设备对每个焊接点上的锡膏的体积(v)、高度(h)、面积(a)、水平偏移(px)、竖直偏移(py)进行度量。
@@ -35,7 +35,7 @@
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/25913899/81768490-bf034f00-950d-11ea-9b56-fef3edca0958.png">
-## 场景2
+ * 场景2
某公司拥有多座风力发电机,公司在每个发电机上安装了上百种传感器,分别采集该发电机的工作状态、工作环境中的风速等信息。
@@ -49,7 +49,7 @@
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/13203019/51579064-8f849980-1efa-11e9-8cd6-a7339cd0540f.jpg">
-## 场景3
+ * 场景3
某工厂在厂区范围内拥有多种机械手设备,这些机械手设备的硬件配置有限,很难搭载复杂的应用程序。在每个机械手设备上工厂安装了很多种传感器,用以对机械手的工作状态、温度等信息进行监控。由于工厂的网络环境原因,在工厂内部的机械手均处于工厂内部局域网内,无法连接外部网络。同时,工厂中会有少量服务器能够直接连接外部公网。
@@ -63,7 +63,7 @@
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/25913899/81768477-b874d780-950d-11ea-80ca-8807b9bd0970.png">
-## 场景4
+ * 场景4
某汽车公司在其下属的汽车上均安装了传感器采集车辆的行驶状态等监控信息。这些汽车设备的硬件配置有限,很难搭载复杂的应用程序。安装传感器的汽车可以通过窄带物联网相互连接,也可以通过窄带物联网将数据发送至外部网络。
diff --git a/docs/zh/UserGuide/Overview/What is IoTDB.md b/docs/zh/UserGuide/Overview/What is IoTDB.md
index 6bc52b9..ab47957 100644
--- a/docs/zh/UserGuide/Overview/What is IoTDB.md
+++ b/docs/zh/UserGuide/Overview/What is IoTDB.md
@@ -19,6 +19,6 @@
-->
-# 什么是IoTDB
+# IoTDB简介
IoTDB是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点,完美对接Hadoop与Spark生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
\ No newline at end of file
diff --git a/docs/zh/UserGuide/Server/Cluster Setup.md b/docs/zh/UserGuide/Server/Cluster Setup.md
index f5678e2..775a4ae 100644
--- a/docs/zh/UserGuide/Server/Cluster Setup.md
+++ b/docs/zh/UserGuide/Server/Cluster Setup.md
@@ -19,13 +19,15 @@
-->
+## 集群搭建
__集群模式目前是测试版!请谨慎在生产环境中使用。__
-# 集群设置
安装环境请参考[安装环境](../Get%20Started/QuickStart.md)
-## 前提条件
+
+### 前提条件
如果您在使用Windows系统,请安装MinGW,WSL或者git bash。
-## 集群环境搭建
+
+### 集群环境搭建
您可以搭建伪分布式模式或是分布式模式的集群,伪分布式模式和分布式模式的主要区别是配置文件中`seed_nodes`的不同,配置项含义请参考[配置项](#配置项)。
启动其中一个节点的服务,需要执行如下命令:
@@ -45,7 +47,7 @@ or
目前支持的启动覆盖原有配置的配置项有:
`internal_meta_port、internal_data_port、cluster_rpc_port、seed_nodes`。当配置文件和配置项都被指定的时候,指定配置项的配置会覆盖配置文件中的配置。
-## 3节点2副本伪分布式搭建示例
+### 3节点2副本伪分布式搭建示例
```bash
# 第一步 (注意以下路径在 Windows MinGW 中并不适用)
> mvn clean package -pl cluster -am -Dmaven.test.skip=true
@@ -70,7 +72,7 @@ or
> nohup cluster\target\cluster-0.11.0-SNAPSHOT2\sbin\start-node.bat -internal_meta_port 9007 -internal_data_port 40014 -cluster_rpc_port 55562
```
-## 被覆盖的单机版选项
+### 被覆盖的单机版选项
iotdb-engines.properties配置文件中的部分内容会不再生效:
@@ -81,7 +83,7 @@ iotdb-engines.properties配置文件中的部分内容会不再生效:
* `is_sync_enable` 不再生效,并被视为 `false`.
-## 配置项
+### 配置项
为方便IoTDB Server的配置与管理,IoTDB Server为用户提供三种配置项,使得您可以在启动服务器或服务器运行时对其进行配置。
@@ -243,7 +245,7 @@ iotdb-engines.properties配置文件中的部分内容会不再生效:
|默认值|true|
|改后生效方式|重启服务器生效|
-## 开启GC日志
+### 开启GC日志
GC日志默认是关闭的。为了性能调优,用户可能会需要收集GC信息。
若要打开GC日志,则需要在启动IoTDB Server的时候加上`printgc`参数:
diff --git a/docs/zh/UserGuide/System Tools/CSV Tool.md b/docs/zh/UserGuide/System Tools/CSV Tool.md
index d61d294..fd1d987 100644
--- a/docs/zh/UserGuide/System Tools/CSV Tool.md
+++ b/docs/zh/UserGuide/System Tools/CSV Tool.md
@@ -19,13 +19,13 @@
-->
-# CSV 工具
+## 导入导出 CSV
Csv工具是您可以导入csv文件到IoTDB或从IoTDB导出csv文件。
-## 使用 import-csv.sh
+### 使用 import-csv.sh
-### 创建元数据(可选)
+#### 创建元数据(可选)
```
SET STORAGE GROUP TO root.fit.d1;
@@ -39,7 +39,7 @@ CREATE TIMESERIES root.fit.p.s1 WITH DATATYPE=INT32,ENCODING=RLE;
```
IoTDB具有类型推断的能力,因此在数据导入前创建元数据不是必须的。但我们仍然推荐在使用CSV导入工具导入数据前创建元数据,因为这可以避免不必要的类型转换错误。
-### 从 csv 文件导入数据的示例
+#### 从 csv 文件导入数据的示例
```
Time,root.fit.d1.s1,root.fit.d1.s2,root.fit.d2.s1,root.fit.d2.s3,root.fit.p.s1
@@ -54,7 +54,8 @@ Time,root.fit.d1.s1,root.fit.d1.s2,root.fit.d2.s1,root.fit.d2.s3,root.fit.p.s1
> 3. `'` : "字段中的`'`需要被替换成转义字符`\'`或者用`\"`将字段括起来。
> 4. 你可以输入时间格式像yyyy-MM-dd'T'HH:mm:ss, yyy-MM-dd HH:mm:ss, 或者yyyy-MM-dd'T'HH:mm:ss.SSSZ.
-### 运行 import shell
+#### 运行 import shell
+
```
# Unix/OS X
> tools/import-csv.sh -h <ip> -p <port> -u <username> -pw <password> -f <xxx.csv>
@@ -63,9 +64,9 @@ Time,root.fit.d1.s1,root.fit.d1.s2,root.fit.d2.s1,root.fit.d2.s3,root.fit.p.s1
> tools\import-csv.bat -h <ip> -p <port> -u <username> -pw <password> -f <xxx.csv>
```
-## 使用 export-csv.sh
+### 使用 export-csv.sh
-### 运行 export shell
+#### 运行 export shell
```
# Unix/OS X
diff --git a/docs/zh/UserGuide/System Tools/Load External Tsfile.md b/docs/zh/UserGuide/System Tools/Load External Tsfile.md
index ebcd89f..e530309 100644
--- a/docs/zh/UserGuide/System Tools/Load External Tsfile.md
+++ b/docs/zh/UserGuide/System Tools/Load External Tsfile.md
@@ -19,25 +19,17 @@
-->
-# 加载外部tsfile文件
+# 系统工具
-<!-- TOC -->
+## 加载 TsFile
-- [第6章: 系统工具](#第6章-系统工具)
-- [加载外部tsfile文件](#加载外部tsfile文件)
-- [介绍](#介绍)
-- [使用方式](#使用方式)
- - [加载tsfile文件](#加载tsfile文件)
- - [删除tsfile文件](#删除tsfile文件)
- - [移出tsfile文件至指定目录](#移出tsfile文件至指定目录)
-
-<!-- /TOC -->
-# 介绍
+### 介绍
加载外部tsfile文件工具允许用户向正在运行中的Apache IoTDB中加载、删除或移出tsfile文件。
-# 使用方式
+### 使用方式
用户通过Cli工具或JDBC向Apache IoTDB系统发送指定命令实现文件加载的功能。
-## 加载tsfile文件
+
+#### 加载tsfile文件
加载tsfile文件的指令为:`load "<path/dir>" [true/false] [storage group level]`
该指令有两种用法:
@@ -64,7 +56,7 @@
* load `"/Users/Desktop/data" true`
* load `"/Users/Desktop/data" true 1`
-## 删除tsfile文件
+#### 删除tsfile文件
删除tsfile文件的指令为:`remove "<path>"`
@@ -75,7 +67,7 @@
* `remove "root.vehicle/1575028885956-101-0.tsfile"`
* `remove "1575028885956-101-0.tsfile"`
-## 移出tsfile文件至指定目录
+#### 移出tsfile文件至指定目录
移出tsfile文件的指令为:`remove "<path>" "<dir>"`
diff --git a/docs/zh/UserGuide/System Tools/MLogParser Tool.md b/docs/zh/UserGuide/System Tools/MLogParser Tool.md
index 5f66eee..4720a1d 100644
--- a/docs/zh/UserGuide/System Tools/MLogParser Tool.md
+++ b/docs/zh/UserGuide/System Tools/MLogParser Tool.md
@@ -19,7 +19,7 @@
-->
-# 工具说明
+## Mlog解析工具
0.12.x版本之后,IoTDB将元数据文件编码成二进制。
@@ -27,7 +27,7 @@
该工具可以同时解析snapshot文件和mlog文件。
-# 使用方式
+### 使用方式
Linux/MacOS
> ./mLogParser.sh -f /your path/mlog.bin -o /your path/mlog.txt
diff --git a/docs/zh/UserGuide/System Tools/Monitor and Log Tools.md b/docs/zh/UserGuide/System Tools/Monitor and Log Tools.md
index fd9a3c9..4a12d7d 100644
--- a/docs/zh/UserGuide/System Tools/Monitor and Log Tools.md
+++ b/docs/zh/UserGuide/System Tools/Monitor and Log Tools.md
@@ -19,13 +19,13 @@
-->
-# 监控与日志工具
+## 监控工具
-## 系统监控
+### 系统监控
当前用户可以使用Java的JConsole工具对正在运行的IoTDB进程进行系统状态监控,或使用IoTDB为用户开放的接口查看数据统计量。
-### 系统状态监控
+#### 系统状态监控
进入Jconsole监控页面后,首先看到的是IoTDB各类运行情况的概览。在这里,您可以看到[堆内存信息、线程信息、类信息以及服务器的CPU使用情况](https://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html)。
@@ -38,7 +38,7 @@
Monitor下有几个属性,包括数据文件目录,写入数据统计信息以及某些系统参数的值。 通过双击与属性对应的值,它还可以显示该属性的折线图。有关Monitor属性的具体介绍,请参见以下部分。
-##### MBean监视器属性列表
+ * MBean监视器属性列表
- SystemDirectory
@@ -80,7 +80,7 @@ Monitor下有几个属性,包括数据文件目录,写入数据统计信息
用户可以选择开启或关闭数据统计监控功能(您可以设定配置文件中的`enable_stat_monitor`项,详细信息参见[第3.4节](../Server/Config%20Manual.md))。
-#### 统计数据存储
+### 统计数据存储
默认情况下,统计数据只储存在内存中,可以使用 Jconsole 进行访问。
@@ -147,15 +147,15 @@ flush
select last TOTAL_POINTS from root.stats."global"
```
-## 性能监控
+### 性能监控
-### 介绍
+#### 介绍
性能监控模块用来监控IOTDB每一个操作的耗时,以便用户更好的了解数据库的整体性能。此模块会统计每一种操作的平均耗时,以及耗时在一定时间区间内(1ms,4ms,16ms,64ms,256ms,1024ms,以上)的操作的比例。输出文件在log_measure.log中。输出样例如下:
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/13203019/60937461-14296f80-a303-11e9-9602-a7bed624bfb3.png">
-### 配置参数
+#### 配置参数
配置文件位置:conf/iotdb-engine.properties
@@ -168,7 +168,7 @@ select last TOTAL_POINTS from root.stats."global"
|performance_stat_memory_in_kb|20|性能监控模块使用的内存阈值,单位为KB|
</center>
-### 利用JMX MBean动态调节参数
+#### 利用JMX MBean动态调节参数
通过端口31999连接jconsole,并在上方菜单项中选择‘MBean’. 展开侧边框并选择 'org.apache.iotdb.db.cost.statistic'. 将会得到如下图所示结果:
@@ -204,9 +204,9 @@ select last TOTAL_POINTS from root.stats."global"
Measurement.INSTANCE.addOperationLatency(Operation, t0);
-## cache命中率统计
+### cache命中率统计
-### 概述
+#### 概述
为了提高查询性能,IOTDB对ChunkMetaData和TsFileMetaData进行了缓存。用户可以通过debug级别的日志以及MXBean两种方式来查看缓存的命中率,并根据缓存命中率以及系统内存来调节缓存所使用的内存大小。使用MXBean查看缓存命中率的方法为:
1. 通过端口31999连接jconsole,并在上方菜单项中选择‘MBean’.
diff --git a/docs/zh/UserGuide/System Tools/Performance Tracing Tool.md b/docs/zh/UserGuide/System Tools/Performance Tracing Tool.md
index 257960c..5c0ce31 100644
--- a/docs/zh/UserGuide/System Tools/Performance Tracing Tool.md
+++ b/docs/zh/UserGuide/System Tools/Performance Tracing Tool.md
@@ -18,7 +18,7 @@
under the License.
-->
-# 性能追踪工具
+## 查询性能追踪
IoTDB 支持使用 `TRACING` 语句来启用/禁用对查询语句的性能追踪,默认处于禁用状态。用户可以使用性能追踪工具来分析某些查询中存在的潜在性能问题。性能分析的日志文件默认存储在 `./data/tracing` 目录下。
@@ -43,7 +43,7 @@ IoTDB 支持使用 `TRACING` 语句来启用/禁用对查询语句的性能追
- Average size of chunks
- Total cost time
-## Example
+### 例子
例如执行 `select * from root`,则 tracing 日志文件的内容会包括以下内容:
diff --git a/docs/zh/UserGuide/System Tools/Query History Visualization Tool.md b/docs/zh/UserGuide/System Tools/Query History Visualization Tool.md
index d01c9c1..3c54cd5 100644
--- a/docs/zh/UserGuide/System Tools/Query History Visualization Tool.md
+++ b/docs/zh/UserGuide/System Tools/Query History Visualization Tool.md
@@ -19,7 +19,7 @@
-->
-# 查询历史可视化工具
+## 查询历史可视化工具
IoTDB查询历史可视化工具使用一个监控网页来提供查看查询历史和SQL语句执行时间的服务,同时也可以查看当前host的内存和CPU使用情况。
@@ -27,4 +27,4 @@ IoTDB查询历史可视化工具使用`8181`端口。在浏览器中输入`ip:81
<img style="width:100%; max-width:800px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/19167280/65688727-3038e380-e09e-11e9-8266-24ff0a1efa96.png">
-> 注意:目前,我们仅支持查看Windows和Linux系统的CPU使用率。如果你在使用其他操作系统,你将看到如下提示信息:"Can't get the cpu ratio, because this OS is not support".
\ No newline at end of file
+> 注意:目前,我们仅支持查看Windows和Linux系统的CPU使用率。如果你在使用其他操作系统,你将看到如下提示信息:"Can't get the cpu ratio, because this OS is not support".
diff --git a/docs/zh/UserGuide/System Tools/Sync Tool.md b/docs/zh/UserGuide/System Tools/Sync Tool.md
index 354d545..c6554ce 100644
--- a/docs/zh/UserGuide/System Tools/Sync Tool.md
+++ b/docs/zh/UserGuide/System Tools/Sync Tool.md
@@ -19,24 +19,12 @@
-->
-# 同步工具
-<!-- TOC -->
-
-- [第8章: 系统工具](#第8章-系统工具)
-- [同步工具](#同步工具)
-- [介绍](#介绍)
-- [应用场景](#应用场景)
-- [配置参数](#配置参数)
- - [同步工具接收端](#同步工具接收端)
- - [同步工具发送端](#同步工具发送端)
-- [使用方式](#使用方式)
- - [启动同步功能接收端](#启动同步功能接收端)
- - [关闭同步功能接收端](#关闭同步功能接收端)
- - [启动同步功能发送端](#启动同步功能发送端)
- - [关闭同步功能发送端](#关闭同步功能发送端)
-
-<!-- /TOC -->
-# 介绍
+# 端云协同
+
+## TsFile 同步工具
+
+### 介绍
+
同步工具是定期将本地磁盘中和新增的已持久化的tsfile文件上传至云端并加载到IoTDB的套件工具。
在同步工具的发送端,同步模块是一个独立的进程,独立于本地的IoTDB。通过独立的脚本进行启动和关闭(详见章节`使用方式`),同步的频率周期可由用户设置。
@@ -46,15 +34,19 @@
同步工具具有多对一的发送-接受模式,即一个同步接收端可以同时接受多个同步发送端传输的数据,一个同步发送端只能向一个同步接收端发送数据
> 注意:在使用同步工具前,同步工具的接收端和发送端需要单独配置。
-# 应用场景
+
+### 应用场景
+
以一个工厂应用为例,通常有多个分厂和多个总厂,每个分厂中使用一个IoTDB实例收集数据,然后将数据定时汇总到总厂中进行备份或者分析等,一个总厂可以接收来自多个分厂的数据,一个分厂也可以给多个总厂同步数据,在这种场景下每个IoTDB实例所管理的设备各不相同。
在sync模块中,每个分厂是发送端,总厂是接收端,发送端定时将数据同步给接收端,在上述应用场景下一个设备的数据只能由一个发送端来收集,因此多个发送端同步的数据之间必须是没有设备重叠的,否则不符合sync功能的应用场景。
当出现异常场景时,即两个或两个以上的发送端向同一个接收端同步相同设备(其存储组设为root.sg)的数据时,后被接收端收到的含有该设备数据的发送端的root.sg数据将会被拒绝接收。示例:发动端1向接收端同步存储组root.sg1和root.sg2, 发动端2向接收端同步存储组root.sg2和root.sg3,
均包括时间序列root.sg2.d0.s0, 若接收端先接收到发送端1的root.sg2.d0.s0的数据,那么接收端将拒绝发送端2的root.sg2同步的数据。
-# 配置参数
-## 同步工具接收端
+
+### 配置参数
+
+#### 同步工具接收端
同步工具接收端的参数配置位于IoTDB的配置文件iotdb-engine.properties中,其安装目录为$IOTDB_HOME/conf/iotdb-engine.properties。在该配置文件中,有四个参数和同步接收端有关,配置说明如下:
<table>
@@ -123,7 +115,7 @@
</tr>
</table>
-## 同步工具发送端
+#### 同步工具发送端
同步功能发送端的参数配置在一个单独的配置文件中,其安装目录为```$IOTDB_HOME/conf/iotdb-sync-client.properties```。在该配置文件中,有五个参数和同步发送端有关,配置说明如下:
<table>
<tr>
@@ -235,17 +227,20 @@
</tr>
</table>
-# 使用方式
-## 启动同步功能接收端
+### 使用方式
+
+#### 启动同步功能接收端
+
1. 配置接收端的参数,例如:
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/26211279/64172919-a32cb100-ce88-11e9-821c-33369bff6d34.png">
2. 启动IoTDB引擎,同步功能接收端会同时启动,启动时LOG日志会出现`IoTDB: start SYNC ServerService successfully`字样,表示同步接收端启动成功,如图所示:
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/26211279/59494513-df6ef780-8ebf-11e9-83e1-ee8ae64b76d0.png">
-## 关闭同步功能接收端
+#### 关闭同步功能接收端
+
关闭IoTDB,同步功能接收端会同时关闭。
-## 启动同步功能发送端
+#### 启动同步功能发送端
1. 配置发送端的参数, 如图所示:
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/26211279/64172668-15e95c80-ce88-11e9-9700-dff7daf06bb7.png">
2. 启动同步功能发送端
@@ -261,7 +256,7 @@ Windows系统启动命令如下:
```
<img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://user-images.githubusercontent.com/26211279/59494951-dc283b80-8ec0-11e9-9575-5d8578c08ceb.png">
-## 关闭同步功能发送端
+#### 关闭同步功能发送端
用户可以使用```$IOTDB_HOME/bin```文件夹下的脚本关闭同步功能的发送端。
Linux系统与MacOS系统停止命令如下:
diff --git a/docs/zh/UserGuide/System Tools/Watermark Tool.md b/docs/zh/UserGuide/System Tools/Watermark Tool.md
index 6502b6f..4b55076 100644
--- a/docs/zh/UserGuide/System Tools/Watermark Tool.md
+++ b/docs/zh/UserGuide/System Tools/Watermark Tool.md
@@ -1,6 +1,4 @@
<!--
-
-```
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
@@ -17,25 +15,15 @@ software distributed under the License is distributed on an
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-```
-->
-# 水印工具
-**目录**
-
-1. 水印嵌入
-
- 1.1 配置
-
- 1.2 使用示例
-
-2. 水印检测
+## 水印工具
这个工具提供了 1)IoTDB查询结果水印嵌入功能,2)可疑数据的水印检测功能。
-## 1. 水印嵌入
+### 1. 水印嵌入
-### 1.1 配置
+#### 1.1 配置
IoTDB默认关闭水印嵌入功能。为了使用这个功能,第一步要做的事情是修改配置文件`iotdb-engine.properties`中的以下各项:
@@ -57,9 +45,9 @@ IoTDB默认关闭水印嵌入功能。为了使用这个功能,第一步要做
- GroupBasedLSBMethod使用LSB嵌入。`embed_lsb_num`控制了允许嵌入水印的最低有效位的数量。`embed_lsb_num`越大,数值的可变化范围就越大。
- `watermark_secret_key`, `watermark_bit_string`和`watermark_method`都不应该被攻击者获得。您需要自己负责配置文件`iotdb-engine.properties`的安全管理。
-### 1.2 使用示例
+#### 1.2 使用示例
-#### 第一步:创建一个新用户Alice,授予读权限,然后查询
+ * 第一步:创建一个新用户Alice,授予读权限,然后查询
一个新创建的用户默认不使用水印。因此查询结果就是数据库中的原始数据。
@@ -110,7 +98,7 @@ select * from root
+-----------------------------------+------------------+
```
-#### 第二步:给Alice施加水印嵌入
+ * 第二步:给Alice施加水印嵌入
sql用法:`grant watermark_embedding to Alice`
@@ -165,7 +153,7 @@ select * from root
+-----------------------------------+------------------+
```
-#### 第三步:撤销Alice的水印嵌入
+ * 第三步:撤销Alice的水印嵌入
sql用法:`revoke watermark_embedding from Alice`
@@ -173,7 +161,7 @@ sql用法:`revoke watermark_embedding from Alice`
只有root用户有权限运行该指令。在root撤销Alice的水印嵌入之后,Alice的所有查询结果就又是数据库中的原始数据了。
-## 2. 水印检测
+### 2. 水印检测
`detect-watermark.sh` 和 `detect-watermark.bat` 是给不同平台提供的功能相同的工具脚本。