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 2024/01/17 08:27:19 UTC
(iotdb-docs) branch main updated: change workbench (#151)
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iotdb-docs.git
The following commit(s) were added to refs/heads/main by this push:
new f32e1b6 change workbench (#151)
f32e1b6 is described below
commit f32e1b6f6f86e842747d33b7eb716ad339fd8acd
Author: CritasWang <cr...@outlook.com>
AuthorDate: Wed Jan 17 16:27:14 2024 +0800
change workbench (#151)
---
src/.vuepress/sidebar/V1.2.x/en.ts | 3 +-
src/.vuepress/sidebar/V1.2.x/zh.ts | 3 +-
src/.vuepress/sidebar/V1.3.x/en.ts | 1 -
src/.vuepress/sidebar/V1.3.x/zh.ts | 1 -
src/.vuepress/sidebar_timecho/V1.2.x/en.ts | 6 +-
src/.vuepress/sidebar_timecho/V1.3.x/en.ts | 4 +-
src/zh/UserGuide/Master/Tools-System/Workbench.md | 365 ----
.../Master/Tools-System/Workbench_timecho.md | 59 +
src/zh/UserGuide/V1.2.x/Tools-System/Workbench.md | 365 ----
.../V1.2.x/Tools-System/Workbench_timecho.md | 59 +
src/zh/UserGuide/V1.3.x/SQL-Manual/SQL-Manual.md | 1933 --------------------
.../V1.3.x/User-Manual/IoTDB-View_timecho.md | 550 ------
src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md | 324 +---
src/zh/UserGuide/latest/Tools-System/Workbench.md | 365 ----
.../latest/Tools-System/Workbench_timecho.md | 59 +
.../latest/User-Manual/IoTDB-View_timecho.md | 4 +-
16 files changed, 258 insertions(+), 3843 deletions(-)
diff --git a/src/.vuepress/sidebar/V1.2.x/en.ts b/src/.vuepress/sidebar/V1.2.x/en.ts
index e8da576..e99b70a 100644
--- a/src/.vuepress/sidebar/V1.2.x/en.ts
+++ b/src/.vuepress/sidebar/V1.2.x/en.ts
@@ -98,7 +98,6 @@ export const enSidebar = {
// children: 'structure',
children: [
{ text: 'CLI', link: 'CLI' },
- { text: 'Workbench', link: 'Workbench' },
{ text: 'Monitor Tool', link: 'Monitor-Tool' },
{ text: 'Benchmark', link: 'Benchmark' },
{ text: 'Maintenance Tool', link: 'Maintenance-Tool' },
@@ -143,7 +142,7 @@ export const enSidebar = {
{ text: 'Flink TsFile Connector', link: 'Flink-TsFile' },
{ text: 'NiFi IoTDB Connector', link: 'NiFi-IoTDB' },
{ text: 'DBeaver-IoTDB', link: 'DBeaver' },
- { text: 'Telegraf-IoTDB Output Plugin', link: 'Telegraf-IoTDB'},
+ { text: 'Telegraf-IoTDB Output Plugin', link: 'Telegraf-IoTDB' },
],
},
{
diff --git a/src/.vuepress/sidebar/V1.2.x/zh.ts b/src/.vuepress/sidebar/V1.2.x/zh.ts
index c7ef86a..2bd84e8 100644
--- a/src/.vuepress/sidebar/V1.2.x/zh.ts
+++ b/src/.vuepress/sidebar/V1.2.x/zh.ts
@@ -98,7 +98,6 @@ export const zhSidebar = {
// children: 'structure',
children: [
{ text: '命令行工具', link: 'CLI' },
-// { text: '控制台工具', link: 'Workbench' },
{ text: '监控工具', link: 'Monitor-Tool' },
{ text: '测试工具', link: 'Benchmark' },
{ text: '运维工具', link: 'Maintenance-Tool' },
@@ -143,7 +142,7 @@ export const zhSidebar = {
{ text: 'Flink-TsFile-Connector', link: 'Flink-TsFile' },
{ text: 'NiFi-IoTDB-Connector', link: 'NiFi-IoTDB' },
{ text: 'DBeaver-IoTDB 集成方案', link: 'DBeaver' },
- { text: 'Telegraf-IoTDB Output 插件', link: 'Telegraf-IoTDB'},
+ { text: 'Telegraf-IoTDB Output 插件', link: 'Telegraf-IoTDB' },
],
},
{
diff --git a/src/.vuepress/sidebar/V1.3.x/en.ts b/src/.vuepress/sidebar/V1.3.x/en.ts
index 4922d9c..1c4a41f 100644
--- a/src/.vuepress/sidebar/V1.3.x/en.ts
+++ b/src/.vuepress/sidebar/V1.3.x/en.ts
@@ -98,7 +98,6 @@ export const enSidebar = {
// children: 'structure',
children: [
{ text: 'CLI', link: 'CLI' },
- { text: 'Workbench', link: 'Workbench' },
{ text: 'Monitor Tool', link: 'Monitor-Tool' },
{ text: 'Benchmark', link: 'Benchmark' },
{ text: 'Maintenance Tool', link: 'Maintenance-Tool' },
diff --git a/src/.vuepress/sidebar/V1.3.x/zh.ts b/src/.vuepress/sidebar/V1.3.x/zh.ts
index 2a9ef1d..89667b3 100644
--- a/src/.vuepress/sidebar/V1.3.x/zh.ts
+++ b/src/.vuepress/sidebar/V1.3.x/zh.ts
@@ -98,7 +98,6 @@ export const zhSidebar = {
// children: 'structure',
children: [
{ text: '命令行工具', link: 'CLI' },
- { text: '控制台工具', link: 'Workbench' },
{ text: '监控工具', link: 'Monitor-Tool' },
{ text: '测试工具', link: 'Benchmark' },
{ text: '运维工具', link: 'Maintenance-Tool' },
diff --git a/src/.vuepress/sidebar_timecho/V1.2.x/en.ts b/src/.vuepress/sidebar_timecho/V1.2.x/en.ts
index 115d5c4..b8f82a0 100644
--- a/src/.vuepress/sidebar_timecho/V1.2.x/en.ts
+++ b/src/.vuepress/sidebar_timecho/V1.2.x/en.ts
@@ -101,7 +101,7 @@ export const enSidebar = {
// children: 'structure',
children: [
{ text: 'CLI', link: 'CLI' },
- { text: 'Workbench', link: 'Workbench' },
+ // { text: 'Workbench', link: 'Workbench' },
{ text: 'Monitor Tool', link: 'Monitor-Tool' },
{ text: 'Benchmark', link: 'Benchmark' },
{ text: 'Maintenance Tool', link: 'Maintenance-Tool_timecho' },
@@ -142,11 +142,11 @@ export const enSidebar = {
{ text: 'Spark IoTDB Connector', link: 'Spark-IoTDB' },
{ text: 'Hive TsFile Connector', link: 'Hive-TsFile' },
{ text: 'Flink IoTDB Connector', link: 'Flink-IoTDB' },
-// { text: 'Flink SQL IoTDB Connector', link: 'Flink-SQL-IoTDB' },
+ // { text: 'Flink SQL IoTDB Connector', link: 'Flink-SQL-IoTDB' },
{ text: 'Flink TsFile Connector', link: 'Flink-TsFile' },
{ text: 'NiFi IoTDB Connector', link: 'NiFi-IoTDB' },
{ text: 'DBeaver-IoTDB', link: 'DBeaver' },
- { text: 'Telegraf-IoTDB Output Plugin', link: 'Telegraf-IoTDB'},
+ { text: 'Telegraf-IoTDB Output Plugin', link: 'Telegraf-IoTDB' },
],
},
{
diff --git a/src/.vuepress/sidebar_timecho/V1.3.x/en.ts b/src/.vuepress/sidebar_timecho/V1.3.x/en.ts
index 8a246d0..f8b3d4c 100644
--- a/src/.vuepress/sidebar_timecho/V1.3.x/en.ts
+++ b/src/.vuepress/sidebar_timecho/V1.3.x/en.ts
@@ -102,7 +102,7 @@ export const enSidebar = {
// children: 'structure',
children: [
{ text: 'CLI', link: 'CLI' },
- { text: 'Workbench', link: 'Workbench' },
+ // { text: 'Workbench', link: 'Workbench' },
{ text: 'Monitor Tool', link: 'Monitor-Tool' },
{ text: 'Benchmark', link: 'Benchmark' },
{ text: 'Maintenance Tool', link: 'Maintenance-Tool_timecho' },
@@ -143,7 +143,7 @@ export const enSidebar = {
{ text: 'Spark IoTDB Connector', link: 'Spark-IoTDB' },
{ text: 'Hive TsFile Connector', link: 'Hive-TsFile' },
{ text: 'Flink IoTDB Connector', link: 'Flink-IoTDB' },
-// { text: 'Flink SQL IoTDB Connector', link: 'Flink-SQL-IoTDB' },
+ // { text: 'Flink SQL IoTDB Connector', link: 'Flink-SQL-IoTDB' },
{ text: 'Flink TsFile Connector', link: 'Flink-TsFile' },
{ text: 'NiFi IoTDB Connector', link: 'NiFi-IoTDB' },
{ text: 'DBeaver-IoTDB', link: 'DBeaver' },
diff --git a/src/zh/UserGuide/Master/Tools-System/Workbench.md b/src/zh/UserGuide/Master/Tools-System/Workbench.md
deleted file mode 100644
index 59dfc7d..0000000
--- a/src/zh/UserGuide/Master/Tools-System/Workbench.md
+++ /dev/null
@@ -1,365 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-# 控制台工具Workbench
-
-Workbench是一个可创建多个连接的图形化数据库管理工具,用于管理IoTDB,提供元数据的可视化与管理、数据的增删改查以及权限控制等功能。Workbench不仅满足专业开发人员的所有需求,同时简洁友好的界面设计对初学者来说也易于上手。
-
-## 安装
-
-如果你在安装过程中遇到任何问题,你可以参考文档或向软件供应商或技术支持团队寻求帮助。
-
-环境要求:JDK1.8.0_162及以上。
-
-1. 下载并解压软件。第一步是从官方网站或一个可信赖的来源下载软件,下载地址为https://www.timecho.com/product 。
-2. 启动后端服务。输入指令:
-```
-java -jar workbench.jar
-```
-或:
-```
-nohup java -jar workbench.jar >/dev/null 2>&1 &
-```
-默认端口为 9090;
-
-1. 访问web界面。默认地址为`IP:9090`。
-
-## 登录
-
-默认用户名为root,密码为123456。用户名必须由字母、数字、下划线组成,不能以数字和下划线开始,须大于等于4个字符,密码必须大于等于6位。点击"**文A**"可切换语言,有中文、英文可选。
-
-
-
-## 用户界面
-
-**主界面**
-
-主界面由操作栏、导航栏、工具栏和几个窗格组成。
-
-
-
-1、连接操作栏
-
-可以新建数据库的连接或者数据库的查询。
-
-2、对象窗格
-
-对象窗格显示已连接的数据库实例,采用树状结构设计,点击出现子节点可以方便地处理数据库和它们管理的对象,展示的最低层级是设备。
-
-
-
-3、导航栏
-
-导航栏可选择"**数据库管理**"、"**监控管理**"、"**操作日志**"、"**数据看板**"。
-
-4、状态栏
-
-状态栏显示当前选项下的状态信息,当选中"**数据库管理**"时,状态栏显示数据库的在线情况、IP、端口、服务器状态及其存储组、设备、物理量的数量信息。
-
-
-
-当选\"**监控管理**\"时,状态栏显示数据库的在线情况、IP、端口、服务器状态、数据库版本、激活信息及到期时间。z注:"**数据库版本**"处的图标表示企业版或开源版,Workbench部分功能在开源版上无法使用。
-
-
-
-5、操作列
-
-操作列可以选择任意选项进行操作。
-
-6、信息窗格
-
-信息窗格显示对象的详细信息。
-
-## 连接
-
-首先用连接窗口创建一个或多个连接。点击"**数据连接**"创建新建连接。
-
-
-
-在弹出的连接窗口输入需要填写的信息,其中数据连接名称必须大于等于3个字符。然后点击"**连接测试**",显示"**连接测试通过**"则表示正确连接,点击确定即可新建连接。
-
-
-
-若要修改连接情况,则可在状态栏右侧点"**编辑**"选项即可修改数据库连接信息。
-
-
-
-## 服务器安全性
-
-**白名单**
-
-企业版IoTDB可以通过添加白名单列表来设置允许访问IoTDB的IP。使用开源版IoTDB连接Workbench无法使用该功能。
-
-从导航栏选择"**数据库管理**"-\>"**白名单**"可查看已添加的白名单IP列表。
-
-
-
-点击"**白名单**"可新增白名单IP,点击"**编辑**"/"**删除**"可修改白名单列表的IP信息。
-
-**权限管理**
-
-Workbench提供强大的工具以管理服务器用户帐号和数据库对象的权限。在操作列中点击
-"**数据库用户管理**"或 "**数据库角色管理**"来打开用户或角色的对象列表。
-
-
-
-**新增用户**。选择"**数据库用户管理**"-\>"**用户账号+**"可新增用户,按要求填写用户名和密码即可,可以为用户添加角色信息。
-
-
-
-**添加权限**。权限可分为数据管理权限(如对数据进行增删改查)以及权限管理权限(用户、角色的创建与删除,权限的赋予与撤销等)。选择"**数据库用户管理**"-\>"**数据管理权限**"-\>"**添加权限**"可为用户添加数据管理权限。在已添加的权限处可以选择"**编辑**"或"**删除**"以修改权限信息。
-
-
-
-弹出的界面可以选择权限作用的粒度以及具体权限内容。注意只有勾选【查询数据】权限和【查看用户】权限,其他权限才能在Workbench中生效查看。
-
-
-
-选择"**数据库用户管理**"-\>"**权限管理权限**"勾选信息窗格中具体的权限信息,点击"保存"可为用户添加权限管理权限。
-
-
-
-**权限预览**。选择"**数据库用户管理**"-\>"**数据权限预览**"可预览该用户名下所有的数据权限。注:该功能仅支持企业版。
-
-## 数据迁移
-
-导入导出工具可将CSV格式的文件批量导入或导出IoTDB。
-
-**批量导入**
-
-批量导入功能仅在企业版中支持。在对象窗格中选择要操作的数据库,选择到设备节点,则右侧信息窗格将出现"**设备结构"**信息,点击"**导入物理量**",下载模板填写物理量信息,再上传该CSV文件即可批量导入物理量。注:当前版本不支持导入对齐物理量。
-
-
-
-选择"**数据预览**"-\>"**批量导入**"则可将符合模板要求的CSV文件数据导入,当前支持导入对齐时间序列。
-
-
-
-**批量导出**
-
-批量导出功能仅在企业版中支持。在对象窗格中选择要操作的数据库,进入设备节点,选择"**设备结构**"-\>"**导出物理量**"即可批量导出该实体下的物理量元数据。搜索框内可输入名称/别名、标签名称、标签值进行过滤。
-
-
-
-选择"**数据预览**"-\>"**导出数据**"则可批量导出该实体下的数据。搜索框内可按时间范围、时间间隔和物理量进行过滤。
-
-
-
-## 数据预览
-
-Workbench提供多层次的数据预览工具。
-
-**数据模型**
-
-在对象窗格中选择要预览的数据连接,点击操作列的"**数据模型**"即可预览数据模型,root被定义为LEVEL=0,Workbench中默认显示到LEVEL=1,点击"**查看更多**"可查看更多层级的数据模型信息。"**查看更多**"功能仅在企业版中支持。
-
-
-
-**存储组信息**
-
-点击操作列的"**存储组信息**"即可预览该数据连接的所有存储组信息,点击"**详情**"可查看该存储组下的实体详情,继续点击实体详情可查看物理量详情。点击"**编辑**"可编辑该存储组的TTL信息。
-
-
-
-## 查询
-
-Workbench提供强大的查询工具,可直接编辑查询文本,保存查询,用于简化查询行任务。
-
-**新建查询**
-
-点击"**连接操作栏**"的"**查询**",选择要进行操作的数据连接,即可进入查询编辑器。
-
-
-
-在查询编辑器界面可输入SQL语句,提示框会提示符合条件的关键字。右侧可按要求选择函数或数据进行计算。
-
-{width="5.90625in" height="3.125in"}
-
-输入SQL语句后,点击右上角可选择操作,分别是"保存"、"运行"、"暂停"和"删除"。运行结果显示10行每页,默认限制返回结果100行,也可选择取消限制全部展示。
-
-
-
-**查看查询**
-
-已保存的连接可在对象窗格中该数据连接下的"**查询**"下查看。
-
-
-
-## 集群管理
-
-**拓扑管理**
-
-Workbench提供对集群拓扑图的查看。选择"**数据库管理**"-\>"**节点管理**"\>"**拓扑管理**"可以查看拓扑图。"拓扑管理"功能仅在企业版中支持。
-
-
-
-拓扑图显示节点IP、节点类型及端口。
-
-
-
-**节点管理**
-
-Workbench提供对集群节点的管理。选择"**数据库管理**"-\>"**节点管理**"可以查看节点状态。可按节点ID或节点类型进行查询。
-
-
-
-**分区管理**
-
-Workbench提供对集群分区的管理。选择"**数据库管理**"-\>"**分区管理**"可以查看分区状态。可按分区ID或分区类型进行查询。
-
-
-
-## 存储组管理
-
-**新增存储组**
-
-在对象窗格中选择要操作的数据库对象,点击"**新建存储组**"即可创建存储组,存储组名称为必填,存储组名称为必填,正常情况下只能输入字母、数字、下划线以及UNICODE
-中文字符如果包含特殊字符,请使用反引号。存活时间选填。
-
-
-
-**删除存储组**
-
-在对象窗格中选择要操作的存储组,在操作列中选择"**编辑**"可修改存储组存活时间,选择"**删除**"可删除存储组。
-
-
-
-## 设备及物理量管理
-
-**新建物理量**
-
-在对象窗格中选择要操作的存储组,点击"**新建设备**",按要求填写信息则可创建该存储组下的物理量。物理量名称名称为必填,正常情况下只能输入字母、数字、下划线以及UNICODE
-中文字符如果包含特殊字符,请使用反引号。
-
-
-
-**数据趋势预览**
-
-"数据趋势"功能仅在企业版中支持。在对象窗格中选定存储组,"**数据趋势**"显示该存储组下的物理量趋势图表,单击图表显示详细信息,可选定时间范围查询该区间内的数据,并显示最小值等数据
-
-
-
-**修改、删除物理量**
-
-在对象窗格中选择要操作的设备
-,点击右侧的"**编辑**"可修改该设备下的物理量信息(别名、标签和属性)。点击"**删除**"则可删除该设备。
-
-
-
-## 操作日志
-
-"操作日志"提供所有在Workbench上进行的操作记录,可按IP、用户、数据连接、关键词和时间范围进行筛选。
-
-
-
-## 监控管理
-
-Workbench提供"**监控管理**"提供来查看已选择的服务器监控属性。从导航栏选择"**监控管理**"并选择你想要的监控类型。可选"**监控指标**","**连接信息**","**审计日志**"。
-
-**监控指标**
-
-监控指标可供查看CPU指标、内存指标和存储指标的最新信息。
-
-
-
-**连接信息**
-
-连接信息可供查看连接到Workbench的用户和服务器信息。"连接信息"功能仅在企业版中支持。
-
-
-
-**审计日志**
-
-审计日志显示所有在IoTDB执行的操作,Workbench提供查询接口,可按时间段或用户名进行查询。"审计日志"功能仅在企业版中支持。
-
-
-
-## 数据看板
-
-数据看板可供创建数据库数据的直观表示,下图为挂载Grafana模板的仪表盘。
-
-
-
-**配置**
-
-**文件配置**
-
-在文件application-prod.properties中配置看板地址,找到配置项url.dashboard=https://grafana.com/,填写grafana
-URL。
-
-application-prod.properties源文件内容:
- ```plain Text
-# Designate the log configuration file
-logging.config=classpath:log4j2.xml
-
-# Set port and context path
-server.port=9090
-server.servlet.context-path=/api
-
-# The following data source configuration method will cause data loss after the project is repackaged.
-# To facilitate testing during development, refer to the application-prod.properties file for configuration during actual project deployment
-# sqlite
-spring.datasource.url=jdbc:sqlite:./iotdb.db
-spring.datasource.driver-class-name=org.sqlite.JDBC
-# mysql
-#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-#spring.datasource.url=jdbc:mysql://
-#spring.datasource.username=
-#spring.datasource.password=
-
-# Enable the multipart uploading function
-spring.servlet.multipart.enabled=true
-spring.servlet.multipart.file-size-threshold=2KB
-spring.servlet.multipart.max-file-size=200MB
-spring.servlet.multipart.max-request-size=215MB
-
-# All files generated during CSV import and export are stored in this folder
-file.temp-dir=./tempFile
-
-spring.messages.basename=messages
-
-# enable open audit in iotdb
-enableIotdbAudit = false
-# enable open audit in workbench:
-enableWorkbenchAudit = true
-# timechodb config server rpc port
-configServerPort=8867
-# dashboard url
-url.dashboard=https://grafana.com/
- ```
-
-**URL获取**
-
-登录Grafan面板,点击分享按钮,在弹出的窗口选择"**Link**",复制"**Link
-URL**"即可。
-
-
-
-## Q&A
-
-1. 如果遇到以下情况,请尝试退出"无痕模式"或者更换浏览器。
-
-
-
-2. 如果看不到监控信息,需要开启IoTDB的Metric。
-
-3. 双活配置发生变化时需建议重新建立连接。
diff --git a/src/zh/UserGuide/Master/Tools-System/Workbench_timecho.md b/src/zh/UserGuide/Master/Tools-System/Workbench_timecho.md
new file mode 100644
index 0000000..8e3ace5
--- /dev/null
+++ b/src/zh/UserGuide/Master/Tools-System/Workbench_timecho.md
@@ -0,0 +1,59 @@
+# 可视化控制台
+## 第1章 产品介绍
+IoTDB可视化控制台是在Apache IoTDB企业版时序数据库基础上针对工业场景的实时数据收集、存储与分析一体化的数据管理场景开发的扩展组件,旨在为用户提供高效、可靠的实时数据存储和查询解决方案。它具有体量轻、性能高、易使用的特点,完美对接 Hadoop 与 Spark 生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
+## 第2章 IoTDB兼容性说明
+| Workbench版本号 | 兼容IoTDB版本 |
+| --------------- | ------------------------ |
+| V1.2 | V1.2.0<br>V1.2.1<br>V1.2.2<br>V1.3.0 |
+
+
+## 第3章 使用说明
+3.1 登录
+Workbench程序启动后,您可以通过输入部署服务器的 IP 和工作端口进行访问。
+系统默认的用户名:root,密码:root,缺省密码请及时修改。输入正确的用户名和密码,点击登录按钮,成功登录系统。
+
+
+
+3.2 实例管理
+1) 能够满足对连接实例进行统一管理,支持创建、编辑和删除,实现您对于多实例管理的需求
+
+
+2) 能够对实例层级关系进行直观展示,支持对已保存实例进行关联关系管理、信息编辑和连接切换。
+
+
+3.3 首页
+您可以从首页直观查看集群基本信息及状态,可查看数据库实例中各节点的服务运行状态(如是否激活、是否运行、IP信息等)
+
+
+支持查看集群、ConfigNode、DataNode运行监控状态, 对数据库运行健康度进行监控,判断实例是否有潜在运行问题
+
+
+3.4 测点列表
+您可以通过界面直观查看、管理测点信息,支持直接查看实例中的所有测点,并查看测点的重要信息
+
+
+3.5 查询
+3.5.1 数据查询
+将对常用数据查询场景提供界面式查询,支持进行时间过滤、测点过滤的查询,支持进行降采样查询,支持对查询数据进行批量导出。
+
+
+3.5.2 统计查询
+将对常用数据统计场景提供界面式查询,支持进行时间过滤、测点过滤,一键完成最大值、最小值、平均值、总和的结果输出。
+
+
+3.5.3 SQL操作
+将提供您数据库SQL的界面式交互,支持添加多标签页、通过快捷操作快速查找测点及相应函数
+
+
+3.6 趋势
+趋势将为您提供一键可视化查看数据历史&实时数据整体趋势
+
+
+3.7 数据同步
+您可以在数据同步界面完成对同步任务的创建以及管理,支持直接查看任务运行状态、同步数据和目标地址
+
+
+3.8 权限管理
+您可在此模块中配置可以访问数据库的用户,以及该用户可以访问的数据范围,方便对数据库系统的访问进行范围划分。
+
+
diff --git a/src/zh/UserGuide/V1.2.x/Tools-System/Workbench.md b/src/zh/UserGuide/V1.2.x/Tools-System/Workbench.md
deleted file mode 100644
index 59dfc7d..0000000
--- a/src/zh/UserGuide/V1.2.x/Tools-System/Workbench.md
+++ /dev/null
@@ -1,365 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-# 控制台工具Workbench
-
-Workbench是一个可创建多个连接的图形化数据库管理工具,用于管理IoTDB,提供元数据的可视化与管理、数据的增删改查以及权限控制等功能。Workbench不仅满足专业开发人员的所有需求,同时简洁友好的界面设计对初学者来说也易于上手。
-
-## 安装
-
-如果你在安装过程中遇到任何问题,你可以参考文档或向软件供应商或技术支持团队寻求帮助。
-
-环境要求:JDK1.8.0_162及以上。
-
-1. 下载并解压软件。第一步是从官方网站或一个可信赖的来源下载软件,下载地址为https://www.timecho.com/product 。
-2. 启动后端服务。输入指令:
-```
-java -jar workbench.jar
-```
-或:
-```
-nohup java -jar workbench.jar >/dev/null 2>&1 &
-```
-默认端口为 9090;
-
-1. 访问web界面。默认地址为`IP:9090`。
-
-## 登录
-
-默认用户名为root,密码为123456。用户名必须由字母、数字、下划线组成,不能以数字和下划线开始,须大于等于4个字符,密码必须大于等于6位。点击"**文A**"可切换语言,有中文、英文可选。
-
-
-
-## 用户界面
-
-**主界面**
-
-主界面由操作栏、导航栏、工具栏和几个窗格组成。
-
-
-
-1、连接操作栏
-
-可以新建数据库的连接或者数据库的查询。
-
-2、对象窗格
-
-对象窗格显示已连接的数据库实例,采用树状结构设计,点击出现子节点可以方便地处理数据库和它们管理的对象,展示的最低层级是设备。
-
-
-
-3、导航栏
-
-导航栏可选择"**数据库管理**"、"**监控管理**"、"**操作日志**"、"**数据看板**"。
-
-4、状态栏
-
-状态栏显示当前选项下的状态信息,当选中"**数据库管理**"时,状态栏显示数据库的在线情况、IP、端口、服务器状态及其存储组、设备、物理量的数量信息。
-
-
-
-当选\"**监控管理**\"时,状态栏显示数据库的在线情况、IP、端口、服务器状态、数据库版本、激活信息及到期时间。z注:"**数据库版本**"处的图标表示企业版或开源版,Workbench部分功能在开源版上无法使用。
-
-
-
-5、操作列
-
-操作列可以选择任意选项进行操作。
-
-6、信息窗格
-
-信息窗格显示对象的详细信息。
-
-## 连接
-
-首先用连接窗口创建一个或多个连接。点击"**数据连接**"创建新建连接。
-
-
-
-在弹出的连接窗口输入需要填写的信息,其中数据连接名称必须大于等于3个字符。然后点击"**连接测试**",显示"**连接测试通过**"则表示正确连接,点击确定即可新建连接。
-
-
-
-若要修改连接情况,则可在状态栏右侧点"**编辑**"选项即可修改数据库连接信息。
-
-
-
-## 服务器安全性
-
-**白名单**
-
-企业版IoTDB可以通过添加白名单列表来设置允许访问IoTDB的IP。使用开源版IoTDB连接Workbench无法使用该功能。
-
-从导航栏选择"**数据库管理**"-\>"**白名单**"可查看已添加的白名单IP列表。
-
-
-
-点击"**白名单**"可新增白名单IP,点击"**编辑**"/"**删除**"可修改白名单列表的IP信息。
-
-**权限管理**
-
-Workbench提供强大的工具以管理服务器用户帐号和数据库对象的权限。在操作列中点击
-"**数据库用户管理**"或 "**数据库角色管理**"来打开用户或角色的对象列表。
-
-
-
-**新增用户**。选择"**数据库用户管理**"-\>"**用户账号+**"可新增用户,按要求填写用户名和密码即可,可以为用户添加角色信息。
-
-
-
-**添加权限**。权限可分为数据管理权限(如对数据进行增删改查)以及权限管理权限(用户、角色的创建与删除,权限的赋予与撤销等)。选择"**数据库用户管理**"-\>"**数据管理权限**"-\>"**添加权限**"可为用户添加数据管理权限。在已添加的权限处可以选择"**编辑**"或"**删除**"以修改权限信息。
-
-
-
-弹出的界面可以选择权限作用的粒度以及具体权限内容。注意只有勾选【查询数据】权限和【查看用户】权限,其他权限才能在Workbench中生效查看。
-
-
-
-选择"**数据库用户管理**"-\>"**权限管理权限**"勾选信息窗格中具体的权限信息,点击"保存"可为用户添加权限管理权限。
-
-
-
-**权限预览**。选择"**数据库用户管理**"-\>"**数据权限预览**"可预览该用户名下所有的数据权限。注:该功能仅支持企业版。
-
-## 数据迁移
-
-导入导出工具可将CSV格式的文件批量导入或导出IoTDB。
-
-**批量导入**
-
-批量导入功能仅在企业版中支持。在对象窗格中选择要操作的数据库,选择到设备节点,则右侧信息窗格将出现"**设备结构"**信息,点击"**导入物理量**",下载模板填写物理量信息,再上传该CSV文件即可批量导入物理量。注:当前版本不支持导入对齐物理量。
-
-
-
-选择"**数据预览**"-\>"**批量导入**"则可将符合模板要求的CSV文件数据导入,当前支持导入对齐时间序列。
-
-
-
-**批量导出**
-
-批量导出功能仅在企业版中支持。在对象窗格中选择要操作的数据库,进入设备节点,选择"**设备结构**"-\>"**导出物理量**"即可批量导出该实体下的物理量元数据。搜索框内可输入名称/别名、标签名称、标签值进行过滤。
-
-
-
-选择"**数据预览**"-\>"**导出数据**"则可批量导出该实体下的数据。搜索框内可按时间范围、时间间隔和物理量进行过滤。
-
-
-
-## 数据预览
-
-Workbench提供多层次的数据预览工具。
-
-**数据模型**
-
-在对象窗格中选择要预览的数据连接,点击操作列的"**数据模型**"即可预览数据模型,root被定义为LEVEL=0,Workbench中默认显示到LEVEL=1,点击"**查看更多**"可查看更多层级的数据模型信息。"**查看更多**"功能仅在企业版中支持。
-
-
-
-**存储组信息**
-
-点击操作列的"**存储组信息**"即可预览该数据连接的所有存储组信息,点击"**详情**"可查看该存储组下的实体详情,继续点击实体详情可查看物理量详情。点击"**编辑**"可编辑该存储组的TTL信息。
-
-
-
-## 查询
-
-Workbench提供强大的查询工具,可直接编辑查询文本,保存查询,用于简化查询行任务。
-
-**新建查询**
-
-点击"**连接操作栏**"的"**查询**",选择要进行操作的数据连接,即可进入查询编辑器。
-
-
-
-在查询编辑器界面可输入SQL语句,提示框会提示符合条件的关键字。右侧可按要求选择函数或数据进行计算。
-
-{width="5.90625in" height="3.125in"}
-
-输入SQL语句后,点击右上角可选择操作,分别是"保存"、"运行"、"暂停"和"删除"。运行结果显示10行每页,默认限制返回结果100行,也可选择取消限制全部展示。
-
-
-
-**查看查询**
-
-已保存的连接可在对象窗格中该数据连接下的"**查询**"下查看。
-
-
-
-## 集群管理
-
-**拓扑管理**
-
-Workbench提供对集群拓扑图的查看。选择"**数据库管理**"-\>"**节点管理**"\>"**拓扑管理**"可以查看拓扑图。"拓扑管理"功能仅在企业版中支持。
-
-
-
-拓扑图显示节点IP、节点类型及端口。
-
-
-
-**节点管理**
-
-Workbench提供对集群节点的管理。选择"**数据库管理**"-\>"**节点管理**"可以查看节点状态。可按节点ID或节点类型进行查询。
-
-
-
-**分区管理**
-
-Workbench提供对集群分区的管理。选择"**数据库管理**"-\>"**分区管理**"可以查看分区状态。可按分区ID或分区类型进行查询。
-
-
-
-## 存储组管理
-
-**新增存储组**
-
-在对象窗格中选择要操作的数据库对象,点击"**新建存储组**"即可创建存储组,存储组名称为必填,存储组名称为必填,正常情况下只能输入字母、数字、下划线以及UNICODE
-中文字符如果包含特殊字符,请使用反引号。存活时间选填。
-
-
-
-**删除存储组**
-
-在对象窗格中选择要操作的存储组,在操作列中选择"**编辑**"可修改存储组存活时间,选择"**删除**"可删除存储组。
-
-
-
-## 设备及物理量管理
-
-**新建物理量**
-
-在对象窗格中选择要操作的存储组,点击"**新建设备**",按要求填写信息则可创建该存储组下的物理量。物理量名称名称为必填,正常情况下只能输入字母、数字、下划线以及UNICODE
-中文字符如果包含特殊字符,请使用反引号。
-
-
-
-**数据趋势预览**
-
-"数据趋势"功能仅在企业版中支持。在对象窗格中选定存储组,"**数据趋势**"显示该存储组下的物理量趋势图表,单击图表显示详细信息,可选定时间范围查询该区间内的数据,并显示最小值等数据
-
-
-
-**修改、删除物理量**
-
-在对象窗格中选择要操作的设备
-,点击右侧的"**编辑**"可修改该设备下的物理量信息(别名、标签和属性)。点击"**删除**"则可删除该设备。
-
-
-
-## 操作日志
-
-"操作日志"提供所有在Workbench上进行的操作记录,可按IP、用户、数据连接、关键词和时间范围进行筛选。
-
-
-
-## 监控管理
-
-Workbench提供"**监控管理**"提供来查看已选择的服务器监控属性。从导航栏选择"**监控管理**"并选择你想要的监控类型。可选"**监控指标**","**连接信息**","**审计日志**"。
-
-**监控指标**
-
-监控指标可供查看CPU指标、内存指标和存储指标的最新信息。
-
-
-
-**连接信息**
-
-连接信息可供查看连接到Workbench的用户和服务器信息。"连接信息"功能仅在企业版中支持。
-
-
-
-**审计日志**
-
-审计日志显示所有在IoTDB执行的操作,Workbench提供查询接口,可按时间段或用户名进行查询。"审计日志"功能仅在企业版中支持。
-
-
-
-## 数据看板
-
-数据看板可供创建数据库数据的直观表示,下图为挂载Grafana模板的仪表盘。
-
-
-
-**配置**
-
-**文件配置**
-
-在文件application-prod.properties中配置看板地址,找到配置项url.dashboard=https://grafana.com/,填写grafana
-URL。
-
-application-prod.properties源文件内容:
- ```plain Text
-# Designate the log configuration file
-logging.config=classpath:log4j2.xml
-
-# Set port and context path
-server.port=9090
-server.servlet.context-path=/api
-
-# The following data source configuration method will cause data loss after the project is repackaged.
-# To facilitate testing during development, refer to the application-prod.properties file for configuration during actual project deployment
-# sqlite
-spring.datasource.url=jdbc:sqlite:./iotdb.db
-spring.datasource.driver-class-name=org.sqlite.JDBC
-# mysql
-#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-#spring.datasource.url=jdbc:mysql://
-#spring.datasource.username=
-#spring.datasource.password=
-
-# Enable the multipart uploading function
-spring.servlet.multipart.enabled=true
-spring.servlet.multipart.file-size-threshold=2KB
-spring.servlet.multipart.max-file-size=200MB
-spring.servlet.multipart.max-request-size=215MB
-
-# All files generated during CSV import and export are stored in this folder
-file.temp-dir=./tempFile
-
-spring.messages.basename=messages
-
-# enable open audit in iotdb
-enableIotdbAudit = false
-# enable open audit in workbench:
-enableWorkbenchAudit = true
-# timechodb config server rpc port
-configServerPort=8867
-# dashboard url
-url.dashboard=https://grafana.com/
- ```
-
-**URL获取**
-
-登录Grafan面板,点击分享按钮,在弹出的窗口选择"**Link**",复制"**Link
-URL**"即可。
-
-
-
-## Q&A
-
-1. 如果遇到以下情况,请尝试退出"无痕模式"或者更换浏览器。
-
-
-
-2. 如果看不到监控信息,需要开启IoTDB的Metric。
-
-3. 双活配置发生变化时需建议重新建立连接。
diff --git a/src/zh/UserGuide/V1.2.x/Tools-System/Workbench_timecho.md b/src/zh/UserGuide/V1.2.x/Tools-System/Workbench_timecho.md
new file mode 100644
index 0000000..8e3ace5
--- /dev/null
+++ b/src/zh/UserGuide/V1.2.x/Tools-System/Workbench_timecho.md
@@ -0,0 +1,59 @@
+# 可视化控制台
+## 第1章 产品介绍
+IoTDB可视化控制台是在Apache IoTDB企业版时序数据库基础上针对工业场景的实时数据收集、存储与分析一体化的数据管理场景开发的扩展组件,旨在为用户提供高效、可靠的实时数据存储和查询解决方案。它具有体量轻、性能高、易使用的特点,完美对接 Hadoop 与 Spark 生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
+## 第2章 IoTDB兼容性说明
+| Workbench版本号 | 兼容IoTDB版本 |
+| --------------- | ------------------------ |
+| V1.2 | V1.2.0<br>V1.2.1<br>V1.2.2<br>V1.3.0 |
+
+
+## 第3章 使用说明
+3.1 登录
+Workbench程序启动后,您可以通过输入部署服务器的 IP 和工作端口进行访问。
+系统默认的用户名:root,密码:root,缺省密码请及时修改。输入正确的用户名和密码,点击登录按钮,成功登录系统。
+
+
+
+3.2 实例管理
+1) 能够满足对连接实例进行统一管理,支持创建、编辑和删除,实现您对于多实例管理的需求
+
+
+2) 能够对实例层级关系进行直观展示,支持对已保存实例进行关联关系管理、信息编辑和连接切换。
+
+
+3.3 首页
+您可以从首页直观查看集群基本信息及状态,可查看数据库实例中各节点的服务运行状态(如是否激活、是否运行、IP信息等)
+
+
+支持查看集群、ConfigNode、DataNode运行监控状态, 对数据库运行健康度进行监控,判断实例是否有潜在运行问题
+
+
+3.4 测点列表
+您可以通过界面直观查看、管理测点信息,支持直接查看实例中的所有测点,并查看测点的重要信息
+
+
+3.5 查询
+3.5.1 数据查询
+将对常用数据查询场景提供界面式查询,支持进行时间过滤、测点过滤的查询,支持进行降采样查询,支持对查询数据进行批量导出。
+
+
+3.5.2 统计查询
+将对常用数据统计场景提供界面式查询,支持进行时间过滤、测点过滤,一键完成最大值、最小值、平均值、总和的结果输出。
+
+
+3.5.3 SQL操作
+将提供您数据库SQL的界面式交互,支持添加多标签页、通过快捷操作快速查找测点及相应函数
+
+
+3.6 趋势
+趋势将为您提供一键可视化查看数据历史&实时数据整体趋势
+
+
+3.7 数据同步
+您可以在数据同步界面完成对同步任务的创建以及管理,支持直接查看任务运行状态、同步数据和目标地址
+
+
+3.8 权限管理
+您可在此模块中配置可以访问数据库的用户,以及该用户可以访问的数据范围,方便对数据库系统的访问进行范围划分。
+
+
diff --git a/src/zh/UserGuide/V1.3.x/SQL-Manual/SQL-Manual.md b/src/zh/UserGuide/V1.3.x/SQL-Manual/SQL-Manual.md
deleted file mode 100644
index 83ebfe1..0000000
--- a/src/zh/UserGuide/V1.3.x/SQL-Manual/SQL-Manual.md
+++ /dev/null
@@ -1,1933 +0,0 @@
-# SQL手册
-
-## 元数据操作
-
-### 1、数据库管理
-
-#### 创建数据库
-
-```sql
-CREATE DATABASE root.ln
-
-CREATE DATABASE root.ln.wf01
-> Msg: 300: root.ln has already been created as database.
-```
-
-#### 查看数据库
-
-```sql
-show databases
-show databases root.*
-show databases root.**
-```
-
-#### 删除数据库
-
-```sql
-DELETE DATABASE root.ln
-DELETE DATABASE root.sgcc
-DELETE DATABASE root.**
-```
-
-#### 统计数据库数量
-
-```sql
-count databases
-count databases root.*
-count databases root.sgcc.*
-count databases root.sgcc
-```
-
-### 2、时间序列管理
-
-#### 创建时间序列
-
-```sql
-create timeseries root.ln.wf01.wt01.status with datatype=BOOLEAN,encoding=PLAIN
-create timeseries root.ln.wf01.wt01.temperature with datatype=FLOAT,encoding=RLE
-create timeseries root.ln.wf02.wt02.hardware with datatype=TEXT,encoding=PLAIN
-create timeseries root.ln.wf02.wt02.status with datatype=BOOLEAN,encoding=PLAIN
-create timeseries root.sgcc.wf03.wt01.status with datatype=BOOLEAN,encoding=PLAIN
-create timeseries root.sgcc.wf03.wt01.temperature with datatype=FLOAT,encoding=RLE
-```
-
-- 简化版
-
-```sql
-create timeseries root.ln.wf01.wt01.status BOOLEAN encoding=PLAIN
-create timeseries root.ln.wf01.wt01.temperature FLOAT encoding=RLE
-create timeseries root.ln.wf02.wt02.hardware TEXT encoding=PLAIN
-create timeseries root.ln.wf02.wt02.status BOOLEAN encoding=PLAIN
-create timeseries root.sgcc.wf03.wt01.status BOOLEAN encoding=PLAIN
-create timeseries root.sgcc.wf03.wt01.temperature FLOAT encoding=RLE
-```
-
-- 错误提示
-
-```sql
-create timeseries root.ln.wf02.wt02.status WITH DATATYPE=BOOLEAN, ENCODING=TS_2DIFF
-> error: encoding TS_2DIFF does not support BOOLEAN
-```
-
-#### 创建对齐时间序列
-
-```sql
-CREATE ALIGNED TIMESERIES root.ln.wf01.GPS(latitude FLOAT encoding=PLAIN compressor=SNAPPY, longitude FLOAT encoding=PLAIN compressor=SNAPPY)
-```
-
-#### 删除时间序列
-
-```sql
-delete timeseries root.ln.wf01.wt01.status
-delete timeseries root.ln.wf01.wt01.temperature, root.ln.wf02.wt02.hardware
-delete timeseries root.ln.wf02.*
-drop timeseries root.ln.wf02.*
-```
-
-#### 查看时间序列
-
-```sql
-SHOW TIMESERIES
-SHOW TIMESERIES <Path>
-show timeseries root.**
-show timeseries root.ln.**
-show timeseries root.ln.** limit 10 offset 10
-show timeseries root.ln.** where timeseries contains 'wf01.wt'
-show timeseries root.ln.** where dataType=FLOAT
-SHOW LATEST TIMESERIES
-```
-
-#### 统计时间序列数量
-
-```sql
-COUNT TIMESERIES root.**
-COUNT TIMESERIES root.ln.**
-COUNT TIMESERIES root.ln.*.*.status
-COUNT TIMESERIES root.ln.wf01.wt01.status
-COUNT TIMESERIES root.** WHERE TIMESERIES contains 'sgcc'
-COUNT TIMESERIES root.** WHERE DATATYPE = INT64
-COUNT TIMESERIES root.** WHERE TAGS(unit) contains 'c'
-COUNT TIMESERIES root.** WHERE TAGS(unit) = 'c'
-COUNT TIMESERIES root.** WHERE TIMESERIES contains 'sgcc' group by level = 1
-COUNT TIMESERIES root.** GROUP BY LEVEL=1
-COUNT TIMESERIES root.ln.** GROUP BY LEVEL=2
-COUNT TIMESERIES root.ln.wf01.* GROUP BY LEVEL=2
-```
-
-#### 标签点管理
-
-```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)
-```
-
-- 重命名标签或属性
-
-```sql
-ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1
-```
-
-- 重新设置标签或属性的值
-
-```sql
-ALTER timeseries root.turbine.d1.s1 SET newTag1=newV1, attr1=newV1
-```
-
-- 删除已经存在的标签或属性
-
-```sql
-ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2
-```
-
-- 添加新的标签
-
-```sql
-ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4
-```
-
-- 添加新的属性
-
-```sql
-ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4
-```
-
-- 更新插入别名,标签和属性
-
-```sql
-ALTER timeseries root.turbine.d1.s1 UPSERT ALIAS=newAlias TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4)
-```
-
-- 使用标签作为过滤条件查询时间序列
-
-```sql
-SHOW TIMESERIES (<`PathPattern`>)? timeseriesWhereClause
-```
-
-返回给定路径的下的所有满足条件的时间序列信息:
-
-```sql
-ALTER timeseries root.ln.wf02.wt02.hardware ADD TAGS unit=c
-ALTER timeseries root.ln.wf02.wt02.status ADD TAGS description=test1
-show timeseries root.ln.** where TAGS(unit)='c'
-show timeseries root.ln.** where TAGS(description) contains 'test1'
-```
-
-- 使用标签作为过滤条件统计时间序列数量
-
-```sql
-COUNT TIMESERIES (<`PathPattern`>)? timeseriesWhereClause
-COUNT TIMESERIES (<`PathPattern`>)? timeseriesWhereClause GROUP BY LEVEL=<INTEGER>
-```
-
-返回给定路径的下的所有满足条件的时间序列的数量:
-
-```sql
-count timeseries
-count timeseries root.** where TAGS(unit)='c'
-count timeseries root.** where TAGS(unit)='c' group by level = 2
-```
-
-创建对齐时间序列:
-
-```sql
-create aligned timeseries root.sg1.d1(s1 INT32 tags(tag1=v1, tag2=v2) attributes(attr1=v1, attr2=v2), s2 DOUBLE tags(tag3=v3, tag4=v4) attributes(attr3=v3, attr4=v4))
-```
-
-支持查询:
-
-```sql
-show timeseries where TAGS(tag1)='v1'
-```
-
-### 3、时间序列路径管理
-
-#### 查看路径的所有子路径
-
-SHOW CHILD PATHS pathPattern
-
-- 查询 root.ln 的下一层:show child paths root.ln
-- 查询形如 root.xx.xx.xx 的路径:show child paths root.*.*
-
-#### 查看路径的所有子节点
-
-SHOW CHILD NODES pathPattern
-
-- 查询 root 的下一层:show child nodes root
-- 查询 root.ln 的下一层 :show child nodes root.ln
-
-#### 查看设备
-
-IoTDB> show devices
-
-IoTDB> show devices root.ln.**
-
-##### 查看设备及其 database 信息
-
-IoTDB> show devices with database
-
-IoTDB> show devices root.ln.** with database
-
-#### 统计节点数
-
-IoTDB > COUNT NODES root.** LEVEL=2
-
-IoTDB > COUNT NODES root.ln.** LEVEL=2
-
-IoTDB > COUNT NODES root.ln.wf01.* LEVEL=3
-
-IoTDB > COUNT NODES root.**.temperature LEVEL=3
-
-#### 统计设备数量
-
-IoTDB> show devices
-
-IoTDB> count devices
-
-IoTDB> count devices root.ln.**
-
-### 4、设备模板管理
-
-
-
-
-
-Create template(s1 int, s2 float) on root.sg
-
-Create device root.sg.d1
-
-
-
-
-
-#### 创建元数据模板
-
-```Go
-CREATE SCHEMA TEMPLATE <templateName> ALIGNED? '(' <measurementId> <attributeClauses> [',' <measurementId> <attributeClauses>]+ ')'
-```
-
-创建包含两个非对齐序列的元数据模板
-
-IoTDB> create schema template t1 (temperature FLOAT encoding=RLE, status BOOLEAN encoding=PLAIN compression=SNAPPY)
-
-创建包含一组对齐序列的元数据模板
-
-IoTDB> create schema template t2 aligned (lat FLOAT encoding=Gorilla, lon FLOAT encoding=Gorilla)
-
-#### 挂载元数据模板
-
-IoTDB> set SCHEMA TEMPLATE t1 to root.sg1
-
-#### 激活元数据模板
-
-IoTDB> create timeseries using SCHEMA TEMPLATE on root.sg1.d1
-
-IoTDB> set SCHEMA TEMPLATE t1 to root.sg1.d1
-
-IoTDB> set SCHEMA TEMPLATE t2 to root.sg1.d2
-
-IoTDB> create timeseries using schema template on root.sg1.d1
-
-IoTDB> create timeseries using schema template on root.sg1.d2
-
-#### 查看元数据模板
-
-IoTDB> show schema templates
-
-- 查看某个元数据模板下的物理量
-
-IoTDB> show nodes in schema template t1
-
-- 查看挂载了某个元数据模板的路径
-
-IoTDB> show paths set schema template t1
-
-- 查看使用了某个元数据模板的路径(即模板在该路径上已激活,序列已创建)
-
-IoTDB> show paths using schema template t1
-
-#### 解除元数据模板
-
-IoTDB> delete timeseries of schema template t1 from root.sg1.d1
-
-IoTDB> deactivate schema template t1 from root.sg1.d1
-
-批量处理
-
-IoTDB> delete timeseries of schema template t1 from root.sg1.*, root.sg2.*
-
-IoTDB> deactivate schema template t1 from root.sg1.*, root.sg2.*
-
-#### 卸载元数据模板
-
-IoTDB> unset schema template t1 from root.sg1.d1
-
-#### 删除元数据模板
-
-IoTDB> drop schema template t1
-
-### 5、数据存活时间管理
-
-#### 设置 TTL
-
-IoTDB> set ttl to root.ln 3600000
-
-IoTDB> set ttl to root.sgcc.** 3600000
-
-IoTDB> set ttl to root.** 3600000
-
-#### 取消 TTL
-
-IoTDB> unset ttl to root.ln
-
-IoTDB> unset ttl to root.sgcc.**
-
-IoTDB> unset ttl to root.**
-
-#### 显示 TTL
-
-IoTDB> SHOW ALL TTL
-
-IoTDB> SHOW TTL ON StorageGroupNames
-
-## 写入数据
-
-### 1、写入单列数据
-
-IoTDB > insert into root.ln.wf02.wt02(timestamp,status) values(1,true)
-
-IoTDB > insert into root.ln.wf02.wt02(timestamp,hardware) values(1, 'v1'),(2, 'v1')
-
-### 2、写入多列数据
-
-IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, false, 'v2')
-
-IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, false, 'v3'),(4, true, 'v4')
-
-### 3、使用服务器时间戳
-
-IoTDB > insert into root.ln.wf02.wt02(status, hardware) values (false, 'v2')
-
-### 4、写入对齐时间序列数据
-
-IoTDB > create aligned timeseries root.sg1.d1(s1 INT32, s2 DOUBLE)
-
-IoTDB > insert into root.sg1.d1(timestamp, s1, s2) aligned values(1, 1, 1)
-
-IoTDB > insert into root.sg1.d1(timestamp, s1, s2) aligned values(2, 2, 2), (3, 3, 3)
-
-IoTDB > select * from root.sg1.d1
-
-### 5、加载 TsFile 文件数据
-
-load '<path/dir>' [sglevel=int][verify=true/false][onSuccess=delete/none]
-
-#### 通过指定文件路径(绝对路径)加载单 tsfile 文件
-
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile'`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' verify=true`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' verify=false`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' sglevel=1`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' onSuccess=delete`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' verify=true sglevel=1`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' verify=false sglevel=1`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' verify=true onSuccess=none`
-- `load '/Users/Desktop/data/1575028885956-101-0.tsfile' verify=false sglevel=1 onSuccess=delete`
-
-#### 通过指定文件夹路径(绝对路径)批量加载文件
-
-- `load '/Users/Desktop/data'`
-- `load '/Users/Desktop/data' verify=false`
-- `load '/Users/Desktop/data' verify=true`
-- `load '/Users/Desktop/data' verify=true sglevel=1`
-- `load '/Users/Desktop/data' verify=false sglevel=1 onSuccess=delete`
-
-## 删除数据
-
-### 1、删除单列数据
-
-delete from root.ln.wf02.wt02.status where time<=2017-11-01T16:26:00;
-
-delete from root.ln.wf02.wt02.status where time>=2017-01-01T00:00:00 and time<=2017-11-01T16:26:00;
-
-delete from root.ln.wf02.wt02.status where time < 10
-
-delete from root.ln.wf02.wt02.status where time <= 10
-
-delete from root.ln.wf02.wt02.status where time < 20 and time > 10
-
-delete from root.ln.wf02.wt02.status where time <= 20 and time >= 10
-
-delete from root.ln.wf02.wt02.status where time > 20
-
-delete from root.ln.wf02.wt02.status where time >= 20
-
-delete from root.ln.wf02.wt02.status where time = 20
-
-出错:
-
-delete from root.ln.wf02.wt02.status where time > 4 or time < 0
-
-Msg: 303: Check metadata error: For delete statement, where clause can only contain atomic
-
-expressions like : time > XXX, time <= XXX, or two atomic expressions connected by 'AND'
-
-删除时间序列中的所有数据:
-
-delete from root.ln.wf02.wt02.status
-
-### 2、删除多列数据
-
-delete from root.ln.wf02.wt02.* where time <= 2017-11-01T16:26:00;
-
-声明式的编程方式:
-
-IoTDB> delete from root.ln.wf03.wt02.status where time < now()
-
-Msg: The statement is executed successfully.
-
-## 数据查询
-
-### 1、基础查询
-
-#### 时间过滤查询
-
-select temperature from root.ln.wf01.wt01 where time < 2017-11-01T00:08:00.000
-
-#### 根据一个时间区间选择多列数据
-
-select status, temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000;
-
-#### 按照多个时间区间选择同一设备的多列数据
-
-select status, temperature from root.ln.wf01.wt01 where (time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000) or (time >= 2017-11-01T16:35:00.000 and time <= 2017-11-01T16:37:00.000);
-
-#### 按照多个时间区间选择不同设备的多列数据
-
-select wf01.wt01.status, wf02.wt02.hardware from root.ln where (time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000) or (time >= 2017-11-01T16:35:00.000 and time <= 2017-11-01T16:37:00.000);
-
-#### 根据时间降序返回结果集
-
-select * from root.ln.** where time > 1 order by time desc limit 10;
-
-### 2、选择表达式
-
-#### 使用别名
-
-select s1 as temperature, s2 as speed from root.ln.wf01.wt01;
-
-#### 运算符
-
-#### 函数
-
-不支持:
-
-select s1, count(s1) from root.sg.d1;
-
-select sin(s1), count(s1) from root.sg.d1;
-
-select s1, count(s1) from root.sg.d1 group by ([10,100),10ms);
-
-##### 时间序列查询嵌套表达式
-
-示例 1:
-
-select a,
-
- b,
-
- ((a + 1) * 2 - 1) % 2 + 1.5,
-
- sin(a + sin(a + sin(b))),
-
- -(a + b) * (sin(a + b) * sin(a + b) + cos(a + b) * cos(a + b)) + 1
-
-from root.sg1;
-
-示例 2:
-
-select (a + b) * 2 + sin(a) from root.sg
-
-示例 3:
-
-select (a + *) / 2 from root.sg1
-
-示例 4:
-
-select (a + b) * 3 from root.sg, root.ln
-
-##### 聚合查询嵌套表达式
-
-示例 1:
-
-select avg(temperature),
-
- sin(avg(temperature)),
-
- avg(temperature) + 1,
-
- -sum(hardware),
-
- avg(temperature) + sum(hardware)
-
-from root.ln.wf01.wt01;
-
-示例 2:
-
-select avg(*),
-
- (avg(*) + 1) * 3 / 2 -1
-
-from root.sg1
-
-示例 3:
-
-select avg(temperature),
-
- sin(avg(temperature)),
-
- avg(temperature) + 1,
-
- -sum(hardware),
-
- avg(temperature) + sum(hardware) as custom_sum
-
-from root.ln.wf01.wt01
-
-GROUP BY([10, 90), 10ms);
-
-#### 最新点查询
-
-SQL 语法:
-
-```Go
-select last <Path> [COMMA <Path>]* from < PrefixPath > [COMMA < PrefixPath >]* <whereClause> [ORDER BY TIMESERIES (DESC | ASC)?]
-```
-
-查询 root.ln.wf01.wt01.status 的最新数据点
-
-IoTDB> select last status from root.ln.wf01.wt01
-
-查询 root.ln.wf01.wt01 下 status,temperature 时间戳大于等于 2017-11-07T23:50:00 的最新数据点
-
-IoTDB> select last status, temperature from root.ln.wf01.wt01 where time >= 2017-11-07T23:50:00
-
- 查询 root.ln.wf01.wt01 下所有序列的最新数据点,并按照序列名降序排列
-
-IoTDB> select last * from root.ln.wf01.wt01 order by timeseries desc;
-
-### 3、查询过滤条件
-
-#### 时间过滤条件
-
-选择时间戳大于 2022-01-01T00:05:00.000 的数据:
-
-select s1 from root.sg1.d1 where time > 2022-01-01T00:05:00.000;
-
-选择时间戳等于 2022-01-01T00:05:00.000 的数据:
-
-select s1 from root.sg1.d1 where time = 2022-01-01T00:05:00.000;
-
-选择时间区间 [2017-11-01T00:05:00.000, 2017-11-01T00:12:00.000) 内的数据:
-
-select s1 from root.sg1.d1 where time >= 2022-01-01T00:05:00.000 and time < 2017-11-01T00:12:00.000;
-
-#### 值过滤条件
-
-选择值大于 36.5 的数据:
-
-select temperature from root.sg1.d1 where temperature > 36.5;
-
-选择值等于 true 的数据:
-
-select status from root.sg1.d1 where status = true;
-
-选择区间 [36.5,40] 内或之外的数据:
-
-select temperature from root.sg1.d1 where temperature between 36.5 and 40;
-
-select temperature from root.sg1.d1 where temperature not between 36.5 and 40;
-
-选择值在特定范围内的数据:
-
-select code from root.sg1.d1 where code in ('200', '300', '400', '500');
-
-选择值在特定范围外的数据:
-
-select code from root.sg1.d1 where code not in ('200', '300', '400', '500');
-
-选择值为空的数据:
-
-select code from root.sg1.d1 where temperature is null;
-
-选择值为非空的数据:
-
-select code from root.sg1.d1 where temperature is not null;
-
-#### 模糊查询
-
-查询 `root.sg.d1` 下 `value` 含有`'cc'`的数据
-
-IoTDB> select * from root.sg.d1 where value like '%cc%'
-
-查询 `root.sg.d1` 下 `value` 中间为 `'b'`、前后为任意单个字符的数据
-
-IoTDB> select * from root.sg.device where value like '_b_'
-
-查询 root.sg.d1 下 value 值为26个英文字符组成的字符串
-```
-IoTDB> select * from root.sg.d1 where value regexp '^[A-Za-z]+$'
-```
-
-查询 root.sg.d1 下 value 值为26个小写英文字符组成的字符串且时间大于100的
-```
-IoTDB> select * from root.sg.d1 where value regexp '^[a-z]+$' and time > 100
-```
-
-### 4、分段分组聚合
-
-#### 未指定滑动步长的时间区间分组聚合查询
-
-select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d);
-
-#### 指定滑动步长的时间区间分组聚合查询
-
-select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-07 23:00:00), 3h, 1d);
-
-滑动步长可以小于聚合窗口
-
-select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-01 10:00:00), 4h, 2h);
-
-#### 按照自然月份的时间区间分组聚合查询
-
-select count(status) from root.ln.wf01.wt01 where time > 2017-11-01T01:00:00 group by([2017-11-01T00:00:00, 2019-11-07T23:00:00), 1mo, 2mo);
-
-每个时间间隔窗口内都有数据
-
-select count(status) from root.ln.wf01.wt01 group by([2017-10-31T00:00:00, 2019-11-07T23:00:00), 1mo, 2mo);
-
-#### 左开右闭区间
-
-select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d);
-
-#### 与分组聚合混合使用
-
-统计降采样后的数据点个数
-
-select count(status) from root.ln.wf01.wt01 group by ((2017-11-01T00:00:00, 2017-11-07T23:00:00],1d), level=1;
-
-加上滑动 Step 的降采样后的结果也可以汇总
-
-select count(status) from root.ln.wf01.wt01 group by ([2017-11-01 00:00:00, 2017-11-07 23:00:00), 3h, 1d), level=1;
-
-#### 路径层级分组聚合
-
-统计不同 database 下 status 序列的数据点个数
-
-select count(status) from root.** group by level = 1
-
- 统计不同设备下 status 序列的数据点个数
-
-select count(status) from root.** group by level = 3
-
-统计不同 database 下的不同设备中 status 序列的数据点个数
-
-select count(status) from root.** group by level = 1, 3
-
-查询所有序列下温度传感器 temperature 的最大值
-
-select max_value(temperature) from root.** group by level = 0
-
-查询某一层级下所有传感器拥有的总数据点数
-
-select count(*) from root.ln.** group by level = 2
-
-#### 标签分组聚合
-
-##### 单标签聚合查询
-
-SELECT AVG(temperature) FROM root.factory1.** GROUP BY TAGS(city);
-
-##### 多标签聚合查询
-
-SELECT avg(temperature) FROM root.factory1.** GROUP BY TAGS(city, workshop);
-
-##### 基于时间区间的标签聚合查询
-
-SELECT AVG(temperature) FROM root.factory1.** GROUP BY ([1000, 10000), 5s), TAGS(city, workshop);
-
-#### 差值分段聚合
-
-group by variation(controlExpression[,delta][,ignoreNull=true/false])
-
-##### delta=0时的等值事件分段
-
-select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6)
-
-指定ignoreNull为false
-
-select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6, ignoreNull=false)
-
-##### delta!=0时的差值事件分段
-
-select __endTime, avg(s1), count(s2), sum(s3) from root.sg.d group by variation(s6, 4)
-
-#### 条件分段聚合
-
-group by condition(predict,[keep>/>=/=/<=/<]threshold,[,ignoreNull=true/false])
-
-查询至少连续两行以上的charging_status=1的数据
-
-select max_time(charging_status),count(vehicle_status),last_value(soc) from root.** group by condition(charging_status=1,KEEP>=2,ignoreNull=true)
-
-当设置`ignoreNull`为false时,遇到null值为将其视为一个不满足条件的行,得到结果原先的分组被含null的行拆分
-
-select max_time(charging_status),count(vehicle_status),last_value(soc) from root.** group by condition(charging_status=1,KEEP>=2,ignoreNull=false)
-
-#### 会话分段聚合
-
-group by session(timeInterval)
-
-按照不同的时间单位设定时间间隔
-
-select __endTime,count(*) from root.** group by session(1d)
-
-和`HAVING`、`ALIGN BY DEVICE`共同使用
-
-select __endTime,sum(hardware) from root.ln.wf02.wt01 group by session(50s) having sum(hardware)>0 align by device
-
-#### 点数分段聚合
-
-group by count(controlExpression, size[,ignoreNull=true/false])
-
-select count(charging_stauts), first_value(soc) from root.sg group by count(charging_status,5)
-
-当使用ignoreNull将null值也考虑进来
-
-select count(charging_stauts), first_value(soc) from root.sg group by count(charging_status,5,ignoreNull=false)
-
-### 5、聚合结果过滤
-
-不正确的:
-
-select count(s1) from root.** group by ([1,3),1ms) having sum(s1) > s1
-
-select count(s1) from root.** group by ([1,3),1ms) having s1 > 1
-
-select count(s1) from root.** group by ([1,3),1ms), level=1 having sum(d1.s1) > 1
-
-select count(d1.s1) from root.** group by ([1,3),1ms), level=1 having sum(s1) > 1
-
-SQL 示例:
-
- select count(s1) from root.** group by ([1,11),2ms), level=1 having count(s2) > 2;
-
- select count(s1), count(s2) from root.** group by ([1,11),2ms) having count(s2) > 1 align by device;
-
-### 6、结果集补空值
-
-FILL '(' PREVIOUS | LINEAR | constant ')'
-
-#### `PREVIOUS` 填充
-
-select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(previous);
-
-#### `LINEAR` 填充
-
-select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(linear);
-
-#### 常量填充
-
-select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(2.0);
-
-使用 `BOOLEAN` 类型的常量填充
-
-select temperature, status from root.sgcc.wf03.wt01 where time >= 2017-11-01T16:37:00.000 and time <= 2017-11-01T16:40:00.000 fill(true);
-
-### 7、查询结果分页
-
-#### 按行分页
-
- 基本的 `LIMIT` 子句
-
-select status, temperature from root.ln.wf01.wt01 limit 10
-
-带 `OFFSET` 的 `LIMIT` 子句
-
-select status, temperature from root.ln.wf01.wt01 limit 5 offset 3
-
-`LIMIT` 子句与 `WHERE` 子句结合
-
-select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time< 2017-11-01T00:12:00.000 limit 5 offset 3
-
- `LIMIT` 子句与 `GROUP BY` 子句组合
-
-select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d) limit 4 offset 3
-
-#### 按列分页
-
- 基本的 `SLIMIT` 子句
-
-select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1
-
-带 `SOFFSET` 的 `SLIMIT` 子句
-
-select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1 soffset 1
-
-`SLIMIT` 子句与 `GROUP BY` 子句结合
-
-select max_value(*) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d) slimit 1 soffset 1
-
-`SLIMIT` 子句与 `LIMIT` 子句结合
-
-select * from root.ln.wf01.wt01 limit 10 offset 100 slimit 2 soffset 0
-
-### 8、排序
-
-时间对齐模式下的排序
-
-select * from root.ln.** where time <= 2017-11-01T00:01:00 order by time desc;
-
-设备对齐模式下的排序
-
-select * from root.ln.** where time <= 2017-11-01T00:01:00 order by device desc,time asc align by device;
-
-在时间戳相等时按照设备名排序
-
-select * from root.ln.** where time <= 2017-11-01T00:01:00 order by time asc,device desc align by device;
-
-没有显式指定时
-
-select * from root.ln.** where time <= 2017-11-01T00:01:00 align by device;
-
-对聚合后的结果进行排序
-
-select count(*) from root.ln.** group by ((2017-11-01T00:00:00.000+08:00,2017-11-01T00:03:00.000+08:00],1m) order by device asc,time asc align by device
-
-### 9、查询对齐模式
-
-#### 按设备对齐
-
-select * from root.ln.** where time <= 2017-11-01T00:01:00 align by device;
-
-### 10、查询写回(SELECT INTO)
-
-#### 整体描述
-
-selectIntoStatement
-
- : SELECT
-
- resultColumn [, resultColumn] ...
-
- INTO intoItem [, intoItem] ...
-
- FROM prefixPath [, prefixPath] ...
-
- [WHERE whereCondition]
-
- [GROUP BY groupByTimeClause, groupByLevelClause]
-
- [FILL {PREVIOUS | LINEAR | constant}]
-
- [LIMIT rowLimit OFFSET rowOffset]
-
- [ALIGN BY DEVICE]
-
- ;
-
-
-
-intoItem
-
- : [ALIGNED] intoDevicePath '(' intoMeasurementName [',' intoMeasurementName]* ')'
-
- ;
-
-按时间对齐,将 `root.sg` database 下四条序列的查询结果写入到 `root.sg_copy` database 下指定的四条序列中
-
-IoTDB> select s1, s2 into root.sg_copy.d1(t1), root.sg_copy.d2(t1, t2), root.sg_copy.d1(t2) from root.sg.d1, root.sg.d2;
-
-按时间对齐,将聚合查询的结果存储到指定序列中
-
-IoTDB> select count(s1 + s2), last_value(s2) into root.agg.count(s1_add_s2), root.agg.last_value(s2) from root.sg.d1 group by ([0, 100), 10ms);
-
-按设备对齐
-
-IoTDB> select s1, s2 into root.sg_copy.d1(t1, t2), root.sg_copy.d2(t1, t2) from root.sg.d1, root.sg.d2 align by device;
-
-按设备对齐,将表达式计算的结果存储到指定序列中
-
-IoTDB> select s1 + s2 into root.expr.add(d1s1_d1s2), root.expr.add(d2s1_d2s2) from root.sg.d1, root.sg.d2 align by device;
-
-#### 使用变量占位符
-
-##### 按时间对齐(默认)
-
-###### (1)目标设备不使用变量占位符 & 目标物理量列表使用变量占位符
-```
-
-select s1, s2
-
-into root.sg_copy.d1(::), root.sg_copy.d2(s1), root.sg_copy.d1(${3}), root.sg_copy.d2(::)
-
-from root.sg.d1, root.sg.d2;
-```
-
-该语句等价于:
-```
-
-select s1, s2
-
-into root.sg_copy.d1(s1), root.sg_copy.d2(s1), root.sg_copy.d1(s2), root.sg_copy.d2(s2)
-
-from root.sg.d1, root.sg.d2;
-```
-
-###### (2)目标设备使用变量占位符 & 目标物理量列表不使用变量占位符
-
-```
-select d1.s1, d1.s2, d2.s3, d3.s4
-
-into ::(s1_1, s2_2), root.sg.d2_2(s3_3), root.${2}_copy.::(s4)
-
-from root.sg;
-```
-
-###### (3)目标设备使用变量占位符 & 目标物理量列表使用变量占位符
-
-```
-select * into root.sg_bk.::(::) from root.sg.**;
-```
-
-##### 按设备对齐(使用 `ALIGN BY DEVICE`)
-
-###### (1)目标设备不使用变量占位符 & 目标物理量列表使用变量占位符
-```
-
-select s1, s2, s3, s4
-
-into root.backup_sg.d1(s1, s2, s3, s4), root.backup_sg.d2(::), root.sg.d3(backup_${4})
-
-from root.sg.d1, root.sg.d2, root.sg.d3
-
-align by device;
-```
-
-###### (2)目标设备使用变量占位符 & 目标物理量列表不使用变量占位符
-```
-
-select avg(s1), sum(s2) + sum(s3), count(s4)
-
-into root.agg_${2}.::(avg_s1, sum_s2_add_s3, count_s4)
-
-from root.**
-
-align by device;
-```
-
-###### (3)目标设备使用变量占位符 & 目标物理量列表使用变量占位符
-```
-
-select * into ::(backup_${4}) from root.sg.** align by device;
-```
-
-#### 指定目标序列为对齐序列
-```
-
-select s1, s2 into root.sg_copy.d1(t1, t2), aligned root.sg_copy.d2(t1, t2) from root.sg.d1, root.sg.d2 align by device;
-```
-
-
-## 运算符
-
-更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md)
-
-### 算数运算符
-
-更多见文档 [Arithmetic Operators and Functions](../Operators-Functions/Mathematical.md)
-
-```sql
-select s1, - s1, s2, + s2, s1 + s2, s1 - s2, s1 * s2, s1 / s2, s1 % s2 from root.sg.d1
-```
-
-### 比较运算符
-
-更多见文档[Comparison Operators and Functions](../Operators-Functions/Comparison.md)
-
-```sql
-# Basic comparison operators
-select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test;
-
-# `BETWEEN ... AND ...` operator
-select temperature from root.sg1.d1 where temperature between 36.5 and 40;
-select temperature from root.sg1.d1 where temperature not between 36.5 and 40;
-
-# Fuzzy matching operator: Use `Like` for fuzzy matching
-select * from root.sg.d1 where value like '%cc%'
-select * from root.sg.device where value like '_b_'
-
-# Fuzzy matching operator: Use `Regexp` for fuzzy matching
-select * from root.sg.d1 where value regexp '^[A-Za-z]+$'
-select * from root.sg.d1 where value regexp '^[a-z]+$' and time > 100
-select b, b like '1%', b regexp '[0-2]' from root.test;
-
-# `IS NULL` operator
-select code from root.sg1.d1 where temperature is null;
-select code from root.sg1.d1 where temperature is not null;
-
-# `IN` operator
-select code from root.sg1.d1 where code in ('200', '300', '400', '500');
-select code from root.sg1.d1 where code not in ('200', '300', '400', '500');
-select a, a in (1, 2) from root.test;
-```
-
-### 逻辑运算符
-
-更多见文档[Logical Operators](../Operators-Functions/Logical.md)
-
-```sql
-select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test;
-```
-
-## 内置函数
-
-更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md)
-
-### Aggregate Functions
-
-更多见文档[Aggregate Functions](../Operators-Functions/Aggregation.md)
-
-```sql
-select count(status) from root.ln.wf01.wt01;
-
-select count_if(s1=0 & s2=0, 3), count_if(s1=1 & s2=0, 3) from root.db.d1;
-select count_if(s1=0 & s2=0, 3, 'ignoreNull'='false'), count_if(s1=1 & s2=0, 3, 'ignoreNull'='false') from root.db.d1;
-
-select time_duration(s1) from root.db.d1;
-```
-
-### 算数函数
-
-更多见文档[Arithmetic Operators and Functions](../Operators-Functions/Mathematical.md)
-
-```sql
-select s1, sin(s1), cos(s1), tan(s1) from root.sg1.d1 limit 5 offset 1000;
-select s4,round(s4),round(s4,2),round(s4,-1) from root.sg1.d1;
-```
-
-### 比较函数
-
-更多见文档[Comparison Operators and Functions](../Operators-Functions/Comparison.md)
-
-```sql
-select ts, on_off(ts, 'threshold'='2') from root.test;
-select ts, in_range(ts, 'lower'='2', 'upper'='3.1') from root.test;
-```
-
-### 字符串处理函数
-
-更多见文档[String Processing](../Operators-Functions/String.md)
-
-```sql
-select s1, string_contains(s1, 's'='warn') from root.sg1.d4;
-select s1, string_matches(s1, 'regex'='[^\\s]+37229') from root.sg1.d4;
-select s1, length(s1) from root.sg1.d1
-select s1, locate(s1, "target"="1") from root.sg1.d1
-select s1, locate(s1, "target"="1", "reverse"="true") from root.sg1.d1
-select s1, startswith(s1, "target"="1") from root.sg1.d1
-select s1, endswith(s1, "target"="1") from root.sg1.d1
-select s1, s2, concat(s1, s2, "target1"="IoT", "target2"="DB") from root.sg1.d1
-select s1, s2, concat(s1, s2, "target1"="IoT", "target2"="DB", "series_behind"="true") from root.sg1.d1
-select s1, substring(s1 from 1 for 2) from root.sg1.d1
-select s1, replace(s1, 'es', 'tt') from root.sg1.d1
-select s1, upper(s1) from root.sg1.d1
-select s1, lower(s1) from root.sg1.d1
-select s3, trim(s3) from root.sg1.d1
-select s1, s2, strcmp(s1, s2) from root.sg1.d1
-select strreplace(s1, "target"=",", "replace"="/", "limit"="2") from root.test.d1
-select strreplace(s1, "target"=",", "replace"="/", "limit"="1", "offset"="1", "reverse"="true") from root.test.d1
-select regexmatch(s1, "regex"="\d+\.\d+\.\d+\.\d+", "group"="0") from root.test.d1
-select regexreplace(s1, "regex"="192\.168\.0\.(\d+)", "replace"="cluster-$1", "limit"="1") from root.test.d1
-select regexsplit(s1, "regex"=",", "index"="-1") from root.test.d1
-select regexsplit(s1, "regex"=",", "index"="3") from root.test.d1
-```
-
-### 数据类型转换函数
-
-更多见文档[Data Type Conversion Function](../Operators-Functions/Conversion.md)
-
-```sql
-SELECT cast(s1 as INT32) from root.sg
-```
-
-### 常序列生成函数
-
-更多见文档[Constant Timeseries Generating Functions](../Operators-Functions/Constant.md)
-
-```sql
-select s1, s2, const(s1, 'value'='1024', 'type'='INT64'), pi(s2), e(s1, s2) from root.sg1.d1;
-```
-
-### 选择函数
-
-更多见文档[Selector Functions](../Operators-Functions/Selection.md)
-
-```sql
-select s1, top_k(s1, 'k'='2'), bottom_k(s1, 'k'='2') from root.sg1.d2 where time > 2020-12-10T20:36:15.530+08:00;
-```
-
-### 区间查询函数
-
-更多见文档[Continuous Interval Functions](../Operators-Functions/Continuous-Interval.md)
-
-```sql
-select s1, zero_count(s1), non_zero_count(s2), zero_duration(s3), non_zero_duration(s4) from root.sg.d2;
-```
-
-### 趋势计算函数
-
-更多见文档[Variation Trend Calculation Functions](../Operators-Functions/Variation-Trend.md)
-
-```sql
-select s1, time_difference(s1), difference(s1), non_negative_difference(s1), derivative(s1), non_negative_derivative(s1) from root.sg1.d1 limit 5 offset 1000;
-
-SELECT DIFF(s1), DIFF(s2) from root.test;
-SELECT DIFF(s1, 'ignoreNull'='false'), DIFF(s2, 'ignoreNull'='false') from root.test;
-```
-
-### 采样函数
-
-更多见文档[Sample Functions](../Operators-Functions/Sample.md)
-
-```sql
-select equal_size_bucket_random_sample(temperature,'proportion'='0.1') as random_sample from root.ln.wf01.wt01;
-select equal_size_bucket_agg_sample(temperature, 'type'='avg','proportion'='0.1') as agg_avg, equal_size_bucket_agg_sample(temperature, 'type'='max','proportion'='0.1') as agg_max, equal_size_bucket_agg_sample(temperature,'type'='min','proportion'='0.1') as agg_min, equal_size_bucket_agg_sample(temperature, 'type'='sum','proportion'='0.1') as agg_sum, equal_size_bucket_agg_sample(temperature, 'type'='extreme','proportion'='0.1') as agg_extreme, equal_size_bucket_agg_sample(temperature, ' [...]
-select equal_size_bucket_m4_sample(temperature, 'proportion'='0.1') as M4_sample from root.ln.wf01.wt01;
-select equal_size_bucket_outlier_sample(temperature, 'proportion'='0.1', 'type'='avg', 'number'='2') as outlier_avg_sample, equal_size_bucket_outlier_sample(temperature, 'proportion'='0.1', 'type'='stendis', 'number'='2') as outlier_stendis_sample, equal_size_bucket_outlier_sample(temperature, 'proportion'='0.1', 'type'='cos', 'number'='2') as outlier_cos_sample, equal_size_bucket_outlier_sample(temperature, 'proportion'='0.1', 'type'='prenextdis', 'number'='2') as outlier_prenextdis_sam [...]
-
-select M4(s1,'timeInterval'='25','displayWindowBegin'='0','displayWindowEnd'='100') from root.vehicle.d1
-select M4(s1,'windowSize'='10') from root.vehicle.d1
-```
-
-### 时间序列处理函数
-
-更多见文档[Time-Series](../Operators-Functions/Time-Series.md)
-
-```sql
-select change_points(s1), change_points(s2), change_points(s3), change_points(s4), change_points(s5), change_points(s6) from root.testChangePoints.d1
-```
-
-## 数据质量函数库
-
-更多见文档[Operator-and-Expression](../User-Manual/Operator-and-Expression.md)
-
-### 数据质量
-
-更多见文档[Data-Quality](../Operators-Functions/Data-Quality.md)
-
-```sql
-# Completeness
-select completeness(s1) from root.test.d1 where time <= 2020-01-01 00:00:30
-select completeness(s1,"window"="15") from root.test.d1 where time <= 2020-01-01 00:01:00
-
-# Consistency
-select consistency(s1) from root.test.d1 where time <= 2020-01-01 00:00:30
-select consistency(s1,"window"="15") from root.test.d1 where time <= 2020-01-01 00:01:00
-
-# Timeliness
-select timeliness(s1) from root.test.d1 where time <= 2020-01-01 00:00:30
-select timeliness(s1,"window"="15") from root.test.d1 where time <= 2020-01-01 00:01:00
-
-# Validity
-select Validity(s1) from root.test.d1 where time <= 2020-01-01 00:00:30
-select Validity(s1,"window"="15") from root.test.d1 where time <= 2020-01-01 00:01:00
-
-# Accuracy
-select Accuracy(t1,t2,t3,m1,m2,m3) from root.test
-```
-
-### 数据画像
-
-更多见文档[Data-Profiling](../Operators-Functions/Data-Profiling.md)
-
-```sql
-# ACF
-select acf(s1) from root.test.d1 where time <= 2020-01-01 00:00:05
-
-# Distinct
-select distinct(s2) from root.test.d2
-
-# Histogram
-select histogram(s1,"min"="1","max"="20","count"="10") from root.test.d1
-
-# Integral
-select integral(s1) from root.test.d1 where time <= 2020-01-01 00:00:10
-select integral(s1, "unit"="1m") from root.test.d1 where time <= 2020-01-01 00:00:10
-
-# IntegralAvg
-select integralavg(s1) from root.test.d1 where time <= 2020-01-01 00:00:10
-
-# Mad
-select mad(s0) from root.test
-select mad(s0, "error"="0.01") from root.test
-
-# Median
-select median(s0, "error"="0.01") from root.test
-
-# MinMax
-select minmax(s1) from root.test
-
-# Mode
-select mode(s2) from root.test.d2
-
-# MvAvg
-select mvavg(s1, "window"="3") from root.test
-
-# PACF
-select pacf(s1, "lag"="5") from root.test
-
-# Percentile
-select percentile(s0, "rank"="0.2", "error"="0.01") from root.test
-
-# Quantile
-select quantile(s0, "rank"="0.2", "K"="800") from root.test
-
-# Period
-select period(s1) from root.test.d3
-
-# QLB
-select QLB(s1) from root.test.d1
-
-# Resample
-select resample(s1,'every'='5m','interp'='linear') from root.test.d1
-select resample(s1,'every'='30m','aggr'='first') from root.test.d1
-select resample(s1,'every'='30m','start'='2021-03-06 15:00:00') from root.test.d1
-
-# Sample
-select sample(s1,'method'='reservoir','k'='5') from root.test.d1
-select sample(s1,'method'='isometric','k'='5') from root.test.d1
-
-# Segment
-select segment(s1, "error"="0.1") from root.test
-
-# Skew
-select skew(s1) from root.test.d1
-
-# Spline
-select spline(s1, "points"="151") from root.test
-
-# Spread
-select spread(s1) from root.test.d1 where time <= 2020-01-01 00:00:30
-
-# Stddev
-select stddev(s1) from root.test.d1
-
-# ZScore
-select zscore(s1) from root.test
-```
-
-### 异常检测
-
-更多见文档[Anomaly-Detection](../Operators-Functions/Anomaly-Detection.md)
-
-```sql
-# IQR
-select iqr(s1) from root.test
-
-# KSigma
-select ksigma(s1,"k"="1.0") from root.test.d1 where time <= 2020-01-01 00:00:30
-
-# LOF
-select lof(s1,s2) from root.test.d1 where time<1000
-select lof(s1, "method"="series") from root.test.d1 where time<1000
-
-# MissDetect
-select missdetect(s2,'minlen'='10') from root.test.d2
-
-# Range
-select range(s1,"lower_bound"="101.0","upper_bound"="125.0") from root.test.d1 where time <= 2020-01-01 00:00:30
-
-# TwoSidedFilter
-select TwoSidedFilter(s0, 'len'='5', 'threshold'='0.3') from root.test
-
-# Outlier
-select outlier(s1,"r"="5.0","k"="4","w"="10","s"="5") from root.test
-
-# MasterTrain
-select MasterTrain(lo,la,m_lo,m_la,'p'='3','eta'='1.0') from root.test
-
-# MasterDetect
-select MasterDetect(lo,la,m_lo,m_la,model,'output_type'='repair','p'='3','k'='3','eta'='1.0') from root.test
-select MasterDetect(lo,la,m_lo,m_la,model,'output_type'='anomaly','p'='3','k'='3','eta'='1.0') from root.test
-```
-
-### 频域分析
-
-更多见文档[Frequency-Domain](../Operators-Functions/Frequency-Domain.md)
-
-```sql
-# Conv
-select conv(s1,s2) from root.test.d2
-
-# Deconv
-select deconv(s3,s2) from root.test.d2
-select deconv(s3,s2,'result'='remainder') from root.test.d2
-
-# DWT
-select dwt(s1,"method"="haar") from root.test.d1
-
-# FFT
-select fft(s1) from root.test.d1
-select fft(s1, 'result'='real', 'compress'='0.99'), fft(s1, 'result'='imag','compress'='0.99') from root.test.d1
-
-# HighPass
-select highpass(s1,'wpass'='0.45') from root.test.d1
-
-# IFFT
-select ifft(re, im, 'interval'='1m', 'start'='2021-01-01 00:00:00') from root.test.d1
-
-# LowPass
-select lowpass(s1,'wpass'='0.45') from root.test.d1
-```
-
-### 数据匹配
-
-更多见文档[Data-Matching](../Operators-Functions/Data-Matching.md)
-
-```sql
-# Cov
-select cov(s1,s2) from root.test.d2
-
-# DTW
-select dtw(s1,s2) from root.test.d2
-
-# Pearson
-select pearson(s1,s2) from root.test.d2
-
-# PtnSym
-select ptnsym(s4, 'window'='5', 'threshold'='0') from root.test.d1
-
-# XCorr
-select xcorr(s1, s2) from root.test.d1 where time <= 2020-01-01 00:00:05
-```
-
-### 数据修复
-
-更多见文档[Data-Repairing](../Operators-Functions/Data-Repairing.md)
-
-```sql
-# TimestampRepair
-select timestamprepair(s1,'interval'='10000') from root.test.d2
-select timestamprepair(s1) from root.test.d2
-
-# ValueFill
-select valuefill(s1) from root.test.d2
-select valuefill(s1,"method"="previous") from root.test.d2
-
-# ValueRepair
-select valuerepair(s1) from root.test.d2
-select valuerepair(s1,'method'='LsGreedy') from root.test.d2
-
-# MasterRepair
-select MasterRepair(t1,t2,t3,m1,m2,m3) from root.test
-
-# SeasonalRepair
-select seasonalrepair(s1,'period'=3,'k'=2) from root.test.d2
-select seasonalrepair(s1,'method'='improved','period'=3) from root.test.d2
-```
-
-### 序列发现
-
-更多见文档[Series-Discovery](../Operators-Functions/Series-Discovery.md)
-
-```sql
-# ConsecutiveSequences
-select consecutivesequences(s1,s2,'gap'='5m') from root.test.d1
-select consecutivesequences(s1,s2) from root.test.d1
-
-# ConsecutiveWindows
-select consecutivewindows(s1,s2,'length'='10m') from root.test.d1
-```
-
-### 机器学习
-
-更多见文档[Machine-Learning](../Operators-Functions/Machine-Learning.md)
-
-```sql
-# AR
-select ar(s0,"p"="2") from root.test.d0
-
-# Representation
-select representation(s0,"tb"="3","vb"="2") from root.test.d0
-
-# RM
-select rm(s0, s1,"tb"="3","vb"="2") from root.test.d0
-```
-
-## Lambda 表达式
-
-更多见文档[Lambda](../Operators-Functions/Lambda.md)
-
-```sql
-select jexl(temperature, 'expr'='x -> {x + x}') as jexl1, jexl(temperature, 'expr'='x -> {x * 3}') as jexl2, jexl(temperature, 'expr'='x -> {x * x}') as jexl3, jexl(temperature, 'expr'='x -> {multiply(x, 100)}') as jexl4, jexl(temperature, st, 'expr'='(x, y) -> {x + y}') as jexl5, jexl(temperature, st, str, 'expr'='(x, y, z) -> {x + y + z}') as jexl6 from root.ln.wf01.wt01;```
-```
-
-## 条件表达式
-
-更多见文档[Conditional Expressions](../Operators-Functions/Conditional.md)
-
-```sql
-select T, P, case
-when 1000<T and T<1050 and 1000000<P and P<1100000 then "good!"
-when T<=1000 or T>=1050 then "bad temperature"
-when P<=1000000 or P>=1100000 then "bad pressure"
-end as `result`
-from root.test1
-
-select str, case
-when str like "%cc%" then "has cc"
-when str like "%dd%" then "has dd"
-else "no cc and dd" end as `result`
-from root.test2
-
-select
-count(case when x<=1 then 1 end) as `(-∞,1]`,
-count(case when 1<x and x<=3 then 1 end) as `(1,3]`,
-count(case when 3<x and x<=7 then 1 end) as `(3,7]`,
-count(case when 7<x then 1 end) as `(7,+∞)`
-from root.test3
-
-select x, case x when 1 then "one" when 2 then "two" else "other" end from root.test4
-
-select x, case x when 1 then true when 2 then false end as `result` from root.test4
-
-select x, case x
-when 1 then 1
-when 2 then 222222222222222
-when 3 then 3.3
-when 4 then 4.4444444444444
-end as `result`
-from root.test4
-```
-
-## 触发器
-
-### 使用 SQL 语句注册该触发器
-
-// Create Trigger
-
-createTrigger
-
- : CREATE triggerType TRIGGER triggerName=identifier triggerEventClause ON pathPattern AS className=STRING_LITERAL uriClause? triggerAttributeClause?
-
- ;
-
-
-
-triggerType
-
- : STATELESS | STATEFUL
-
- ;
-
-
-
-triggerEventClause
-
- : (BEFORE | AFTER) INSERT
-
- ;
-
-
-
-uriClause
-
- : USING URI uri
-
- ;
-
-
-
-uri
-
- : STRING_LITERAL
-
- ;
-
-
-
-triggerAttributeClause
-
- : WITH LR_BRACKET triggerAttribute (COMMA triggerAttribute)* RR_BRACKET
-
- ;
-
-
-
-triggerAttribute
-
- : key=attributeKey operator_eq value=attributeValue
-
- ;
-
-#### SQL 语句示例
-
-CREATE STATELESS TRIGGER triggerTest
-
-BEFORE INSERT
-
-ON root.sg.**
-
-AS 'org.apache.iotdb.trigger.ClusterAlertingExample'
-
-USING URI 'http://jar/ClusterAlertingExample.jar'
-
-WITH (
-
- "name" = "trigger",
-
- "limit" = "100"
-
-)
-
-### 卸载触发器
-
-#### 卸载触发器的 SQL 语法如下:
-
-// Drop Trigger
-
-dropTrigger
-
- : DROP TRIGGER triggerName=identifier
-
-;
-
-#### 示例语句
-
-DROP TRIGGER triggerTest1
-
-### 查询触发器
-
-SHOW TRIGGERS
-
-## 连续查询(Continuous Query, CQ)
-
-### 语法
-
-```Go
-CREATE (CONTINUOUS QUERY | CQ) <cq_id>
-[RESAMPLE
- [EVERY <every_interval>]
- [BOUNDARY <execution_boundary_time>]
- [RANGE <start_time_offset>[, end_time_offset]]
-]
-[TIMEOUT POLICY BLOCKED|DISCARD]
-BEGIN
- SELECT CLAUSE
- INTO CLAUSE
- FROM CLAUSE
- [WHERE CLAUSE]
- [GROUP BY(<group_by_interval>[, <sliding_step>]) [, level = <level>]]
- [HAVING CLAUSE]
- [FILL {PREVIOUS | LINEAR | constant}]
- [LIMIT rowLimit OFFSET rowOffset]
- [ALIGN BY DEVICE]
-END
-```
-
-#### 配置连续查询执行的周期性间隔
-
-CREATE CONTINUOUS QUERY cq1
-
-RESAMPLE EVERY 20s
-
-BEGIN
-
- SELECT max_value(temperature)
-
- INTO root.ln.wf02.wt02(temperature_max), root.ln.wf02.wt01(temperature_max), root.ln.wf01.wt02(temperature_max), root.ln.wf01.wt01(temperature_max)
-
- FROM root.ln.*.*
-
- GROUP BY(10s)
-
-END
-
-
-
-\> SELECT temperature_max from root.ln.*.*;
-
-#### 配置连续查询的时间窗口大小
-
-CREATE CONTINUOUS QUERY cq2
-
-RESAMPLE RANGE 40s
-
-BEGIN
-
- SELECT max_value(temperature)
-
- INTO root.ln.wf02.wt02(temperature_max), root.ln.wf02.wt01(temperature_max), root.ln.wf01.wt02(temperature_max), root.ln.wf01.wt01(temperature_max)
-
- FROM root.ln.*.*
-
- GROUP BY(10s)
-
-END
-
-
-
-\> SELECT temperature_max from root.ln.*.*;
-
-#### 同时配置连续查询执行的周期性间隔和时间窗口大小
-
-CREATE CONTINUOUS QUERY cq3
-
-RESAMPLE EVERY 20s RANGE 40s
-
-BEGIN
-
- SELECT max_value(temperature)
-
- INTO root.ln.wf02.wt02(temperature_max), root.ln.wf02.wt01(temperature_max), root.ln.wf01.wt02(temperature_max), root.ln.wf01.wt01(temperature_max)
-
- FROM root.ln.*.*
-
- GROUP BY(10s)
-
- FILL(100.0)
-
-END
-
-
-
-\> SELECT temperature_max from root.ln.*.*;
-
-#### 配置连续查询每次查询执行时间窗口的结束时间
-
-CREATE CONTINUOUS QUERY cq4
-
-RESAMPLE EVERY 20s RANGE 40s, 20s
-
-BEGIN
-
- SELECT max_value(temperature)
-
- INTO root.ln.wf02.wt02(temperature_max), root.ln.wf02.wt01(temperature_max), root.ln.wf01.wt02(temperature_max), root.ln.wf01.wt01(temperature_max)
-
- FROM root.ln.*.*
-
- GROUP BY(10s)
-
- FILL(100.0)
-
-END
-
-
-
-\> SELECT temperature_max from root.ln.*.*;
-
-#### 没有GROUP BY TIME子句的连续查询
-
-CREATE CONTINUOUS QUERY cq5
-
-RESAMPLE EVERY 20s
-
-BEGIN
-
- SELECT temperature + 1
-
- INTO root.precalculated_sg.::(temperature)
-
- FROM root.ln.*.*
-
- align by device
-
-END
-
-
-
-\> SELECT temperature from root.precalculated_sg.*.* align by device;
-
-### 连续查询的管理
-
-#### 查询系统已有的连续查询
-
-展示集群中所有的已注册的连续查询
-
-SHOW (CONTINUOUS QUERIES | CQS)
-
-SHOW CONTINUOUS QUERIES;
-
-#### 删除已有的连续查询
-
-删除指定的名为cq_id的连续查询:
-
-```Go
-DROP (CONTINUOUS QUERY | CQ) <cq_id>
-```
-
-DROP CONTINUOUS QUERY s1_count_cq;
-
-#### 作为子查询的替代品
-
-\1. 创建一个连续查询
-
-CREATE CQ s1_count_cq
-
-BEGIN
-
- SELECT count(s1)
-
- INTO root.sg_count.d.count_s1
-
- FROM root.sg.d
-
- GROUP BY(30m)
-
-END
-
-1. 查询连续查询的结果
-
-SELECT avg(count_s1) from root.sg_count.d;
-
-## 用户自定义函数
-
-### UDFParameters
-
-SELECT UDF(s1, s2, 'key1'='iotdb', 'key2'='123.45') FROM root.sg.d;
-
-### UDF 注册
-
-```Go
-CREATE FUNCTION <UDF-NAME> AS <UDF-CLASS-FULL-PATHNAME> (USING URI URI-STRING)?
-```
-
-#### 不指定URI
-
-CREATE FUNCTION example AS 'org.apache.iotdb.udf.UDTFExample'
-
-#### 指定URI
-
-CREATE FUNCTION example AS 'org.apache.iotdb.udf.UDTFExample' USING URI 'http://jar/example.jar'
-
-### UDF 卸载
-
-```Go
-DROP FUNCTION <UDF-NAME>
-```
-
-DROP FUNCTION example
-
-### UDF 查询
-
-#### 带自定义输入参数的查询
-
-SELECT example(s1, 'key1'='value1', 'key2'='value2'), example(*, 'key3'='value3') FROM root.sg.d1;
-
-SELECT example(s1, s2, 'key1'='value1', 'key2'='value2') FROM root.sg.d1;
-
-#### 与其他查询的嵌套查询
-
-SELECT s1, s2, example(s1, s2) FROM root.sg.d1;
-
-SELECT *, example(*) FROM root.sg.d1 DISABLE ALIGN;
-
-SELECT s1 * example(* / s1 + s2) FROM root.sg.d1;
-
-SELECT s1, s2, s1 + example(s1, s2), s1 - example(s1 + example(s1, s2) / s2) FROM root.sg.d1;
-
-### 查看所有注册的 UDF
-
-SHOW FUNCTIONS
-
-## 权限管理
-
-### 用户与角色相关
-
-- 创建用户(需 MANAGE_USER 权限)
-
-
-```SQL
-CREATE USER <userName> <password>
-eg: CREATE USER user1 'passwd'
-```
-
-- 删除用户 (需 MANEGE_USER 权限)
-
-
-```SQL
-DROP USER <userName>
-eg: DROP USER user1
-```
-
-- 创建角色 (需 MANAGE_ROLE 权限)
-
-```SQL
-CREATE ROLE <roleName>
-eg: CREATE ROLE role1
-```
-
-- 删除角色 (需 MANAGE_ROLE 权限)
-
-
-```SQL
-DROP ROLE <roleName>
-eg: DROP ROLE role1
-```
-
-- 赋予用户角色 (需 MANAGE_ROLE 权限)
-
-
-```SQL
-GRANT ROLE <ROLENAME> TO <USERNAME>
-eg: GRANT ROLE admin TO user1
-```
-
-- 移除用户角色 (需 MANAGE_ROLE 权限)
-
-
-```SQL
-REVOKE ROLE <ROLENAME> FROM <USER>
-eg: REVOKE ROLE admin FROM user1
-```
-
-- 列出所有用户 (需 MANEGE_USER 权限)
-
-```SQL
-LIST USER
-```
-
-- 列出所有角色 (需 MANAGE_ROLE 权限)
-
-```SQL
-LIST ROLE
-```
-
-- 列出指定角色下所有用户 (需 MANEGE_USER 权限)
-
-```SQL
-LIST USER OF ROLE <roleName>
-eg: LIST USER OF ROLE roleuser
-```
-
-- 列出指定用户下所有角色
-
-用户可以列出自己的角色,但列出其他用户的角色需要拥有 MANAGE_ROLE 权限。
-
-```SQL
-LIST ROLE OF USER <username>
-eg: LIST ROLE OF USER tempuser
-```
-
-- 列出用户所有权限
-
-用户可以列出自己的权限信息,但列出其他用户的权限需要拥有 MANAGE_USER 权限。
-
-```SQL
-LIST PRIVILEGES OF USER <username>;
-eg: LIST PRIVILEGES OF USER tempuser;
-
-```
-
-- 列出角色所有权限
-
-用户可以列出自己具有的角色的权限信息,列出其他角色的权限需要有 MANAGE_ROLE 权限。
-
-```SQL
-LIST PRIVILEGES OF ROLE <roleName>;
-eg: LIST PRIVILEGES OF ROLE actor;
-```
-
-- 更新密码
-
-用户可以更新自己的密码,但更新其他用户密码需要具备MANAGE_USER 权限。
-
-```SQL
-ALTER USER <username> SET PASSWORD <password>;
-eg: ALTER USER tempuser SET PASSWORD 'newpwd';
-```
-
-### 授权与取消授权
-
-用户使用授权语句对赋予其他用户权限,语法如下:
-
-```SQL
-GRANT <PRIVILEGES> ON <PATHS> TO ROLE/USER <NAME> [WITH GRANT OPTION];
-eg: GRANT READ ON root.** TO ROLE role1;
-eg: GRANT READ_DATA, WRITE_DATA ON root.t1.** TO USER user1;
-eg: GRANT READ_DATA, WRITE_DATA ON root.t1.**,root.t2.** TO USER user1;
-eg: GRANT MANAGE_ROLE ON root.** TO USER user1 WITH GRANT OPTION;
-eg: GRANT ALL ON root.** TO USER user1 WITH GRANT OPTION;
-```
-
-用户使用取消授权语句可以将其他的权限取消,语法如下:
-
-```SQL
-REVOKE <PRIVILEGES> ON <PATHS> FROM ROLE/USER <NAME>;
-eg: REVOKE READ ON root.** FROM ROLE role1;
-eg: REVOKE READ_DATA, WRITE_DATA ON root.t1.** FROM USER user1;
-eg: REVOKE READ_DATA, WRITE_DATA ON root.t1.**, root.t2.** FROM USER user1;
-eg: REVOKE MANAGE_ROLE ON root.** FROM USER user1;
-eg: REVOKE ALL ON ROOT.** FROM USER user1;
-```
-
diff --git a/src/zh/UserGuide/V1.3.x/User-Manual/IoTDB-View_timecho.md b/src/zh/UserGuide/V1.3.x/User-Manual/IoTDB-View_timecho.md
deleted file mode 100644
index 8ee4a0d..0000000
--- a/src/zh/UserGuide/V1.3.x/User-Manual/IoTDB-View_timecho.md
+++ /dev/null
@@ -1,550 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-# 视图
-
-## 一、 序列视图应用背景
-
-### 1.1 应用场景1 时间序列重命名(PI资产管理)
-
-实际应用中,采集数据的设备可能使用人类难以理解的标识号来命名,这给业务层带来了查询上的困难。
-
-而序列视图能够重新组织管理这些序列,在不改变原有序列内容、无需新建或拷贝序列的情况下,使用新的模型结构来访问他们。
-
-**例如**:一台云端设备使用自己的网卡MAC地址组成实体编号,存储数据时写入如下时间序列:`root.db.0800200A8C6D.xvjeifg`.
-
-对于用户来说,它是难以理解的。但此时,用户能够使用序列视图功能对它重命名,将它映射到一个序列视图中去,使用`root.view.device001.temperature`来访问采集到的数据。
-
-### 1.2 应用场景2 简化业务层查询逻辑
-
-有时用户有大量设备,管理着大量时间序列。在进行某项业务时,用户希望仅处理其中的部分序列,此时就可以通过序列视图功能挑选出关注重点,方便反复查询、写入。
-
-**例如**:用户管理一条产品流水线,各环节的设备有大量时间序列。温度检测员仅需要关注设备温度,就可以抽取温度相关的序列,组成序列视图。
-
-### 1.3 应用场景3 辅助权限管理
-
-生产过程中,不同业务负责的范围一般不同,出于安全考虑往往需要通过权限管理来限制业务员的访问范围。
-
-**例如**:安全管理部门现在仅需要监控某生产线上各设备的温度,但这些数据与其他机密数据存放在同一数据库。此时,就可以创建若干新的视图,视图中仅含有生产线上与温度有关的时间序列,接着,向安全员只赋予这些序列视图的权限,从而达到权限限制的目的。
-
-### 1.4 设计序列视图功能的动机
-
-结合上述两类使用场景,设计序列视图功能的动机,主要有:
-
-1. 时间序列重命名。
-2. 简化业务层查询逻辑。
-3. 辅助权限管理,通过视图向特定用户开放数据。
-
-## 二、序列视图概念
-
-### 2.1 术语概念
-
-约定:若无特殊说明,本文档所指定的视图均是**序列视图**,未来可能引入设备视图等新功能。
-
-### 2.2 序列视图
-
-序列视图是一种组织管理时间序列的方式。
-
-在传统关系型数据库中,数据都必须存放在一个表中,而在IoTDB等时序数据库中,序列才是存储单元。因此,IoTDB中序列视图的概念也是建立在序列上的。
-
-一个序列视图就是一条虚拟的时间序列,每条虚拟的时间序列都像是一条软链接或快捷方式,映射到某个视图外部的序列或者某种计算逻辑。换言之,一个虚拟序列要么映射到某个确定的外部序列,要么由多个外部序列运算得来。
-
-用户可以使用复杂的SQL查询创建视图,此时序列视图就像一条被存储的查询语句,当从视图中读取数据时,就把被存储的查询语句作为数据来源,放在FROM子句中。
-
-### 2.3 别名序列
-
-在序列视图中,有一类特殊的存在,他们满足如下所有条件:
-
-1. 数据来源为单一的时间序列
-2. 没有任何计算逻辑
-3. 没有任何筛选条件(例如无WHERE子句的限制)
-
-这样的序列视图,被称为**别名序列**,或别名序列视图。不完全满足上述所有条件的序列视图,就称为非别名序列视图。他们之间的区别是:只有别名序列支持写入功能。
-
-**所有序列视图包括别名序列目前均不支持触发器功能(Trigger)。**
-
-### 2.4 嵌套视图
-
-用户可能想从一个现有的序列视图中选出若干序列,组成一个新的序列视图,就称之为嵌套视图。
-
-**当前版本不支持嵌套视图功能**。
-
-### 2.5 IoTDB中对序列视图的一些约束
-
-#### 限制1 序列视图必须依赖于一个或者若干个时间序列
-
-一个序列视图有两种可能的存在形式:
-
-1. 它映射到一条时间序列
-2. 它由一条或若干条时间序列计算得来
-
-前种存在形式已在前文举例,易于理解;而此处的后一种存在形式,则是因为序列视图允许计算逻辑的存在。
-
-比如,用户在同一个锅炉安装了两个温度计,现在需要计算两个温度值的平均值作为测量结果。用户采集到的是如下两个序列:`root.db.d01.temperature01`、`root.db.d01.temperature02`。
-
-此时,用户可以使用两个序列求平均值,作为视图中的一条序列:`root.db.d01.avg_temperature`。
-
-该例子会3.1.2详细展开。
-
-#### 限制2 非别名序列视图是只读的
-
-不允许向非别名序列视图写入。
-
-只有别名序列视图是支持写入的。
-
-#### 限制3 不允许嵌套视图
-
-不能选定现有序列视图中的某些列来创建序列视图,无论是直接的还是间接的。
-
-本限制将在3.1.3给出示例。
-
-#### 限制4 序列视图与时间序列不能重名
-
-序列视图和时间序列都位于同一棵树下,所以他们不能重名。
-
-任何一条序列的名称(路径)都应该是唯一确定的。
-
-#### 限制5 序列视图与时间序列的时序数据共用,标签等元数据不共用
-
-序列视图是指向时间序列的映射,所以它们完全共用时序数据,由时间序列负责持久化存储。
-
-但是它们的tag、attributes等元数据不共用。
-
-这是因为进行业务查询时,面向视图的用户关心的是当前视图的结构,而如果使用group by tag等方式做查询,显然希望是得到视图下含有对应tag的分组效果,而非时间序列的tag的分组效果(用户甚至对那些时间序列毫无感知)。
-
-## 三、序列视图功能介绍
-
-### 3.1 创建视图
-
-创建一个序列视图与创建一条时间序列类似,区别在于需要通过AS关键字指定数据来源,即原始序列。
-
-#### 3.1.1. 创建视图的SQL
-
-用户可以选取一些序列创建一个视图:
-
-```SQL
-CREATE VIEW root.view.device.status
-AS
- SELECT s01
- FROM root.db.device
-```
-
-它表示用户从现有设备`root.db.device`中选出了`s01`这条序列,创建了序列视图`root.view.device.status`。
-
-序列视图可以与时间序列存在于同一实体下,例如:
-
-```SQL
-CREATE VIEW root.db.device.status
-AS
- SELECT s01
- FROM root.db.device
-```
-
-这样,`root.db.device`下就有了`s01`的一份虚拟拷贝,但是使用不同的名字`status`。
-
-可以发现,上述两个例子中的序列视图,都是别名序列,我们给用户提供一种针对该序列的更方便的创建方式:
-
-```SQL
-CREATE VIEW root.view.device.status
-AS
- root.db.device.s01
-```
-
-#### 3.1.2 创建含有计算逻辑的视图
-
-沿用2.2章节限制1中的例子:
-
-> 用户在同一个锅炉安装了两个温度计,现在需要计算两个温度值的平均值作为测量结果。用户采集到的是如下两个序列:`root.db.d01.temperature01`、`root.db.d01.temperature02`。
->
-> 此时,用户可以使用两个序列求平均值,作为视图中的一条序列:`root.view.device01.avg_temperature`。
-
-如果不使用视图,用户可以这样查询两个温度的平均值:
-
-```SQL
-SELECT (temperature01 + temperature02) / 2
-FROM root.db.d01
-```
-
-而如果使用序列视图,用户可以这样创建一个视图来简化将来的查询:
-
-```SQL
-CREATE VIEW root.db.d01.avg_temperature
-AS
- SELECT (temperature01 + temperature02) / 2
- FROM root.db.d01
-```
-
-然后用户可以这样查询:
-
-```SQL
-SELECT avg_temperature FROM root.db.d01
-```
-
-#### 3.1.3 不支持嵌套序列视图
-
-继续沿用3.1.2中的例子,现在用户想使用序列视图`root.db.d01.avg_temperature`创建一个新的视图,这是不允许的。我们目前不支持嵌套视图,无论它是否是别名序列,都不支持。
-
-比如下列SQL语句会报错:
-
-```SQL
-CREATE VIEW root.view.device.avg_temp_copy
-AS
- root.db.d01.avg_temperature -- 不支持。不允许嵌套视图
-```
-
-#### 3.1.4 一次创建多条序列视图
-
-一次只能指定一个序列视图对用户来说使用不方便,则可以一次指定多条序列,比如:
-
-```SQL
-CREATE VIEW root.db.device.status, root.db.device.sub.hardware
-AS
- SELECT s01, s02
- FROM root.db.device
-```
-
-此外,上述写法可以做简化:
-
-```SQL
-CREATE VIEW root.db.device(status, sub.hardware)
-AS
- SELECT s01, s02
- FROM root.db.device
-```
-
-上述两条语句都等价于如下写法:
-
-```SQL
-CREATE VIEW root.db.device.status
-AS
- SELECT s01
- FROM root.db.device;
-
-CREATE VIEW root.db.device.sub.hardware
-AS
- SELECT s02
- FROM root.db.device
-```
-
-也等价于如下写法
-
-```SQL
-CREATE VIEW root.db.device.status, root.db.device.sub.hardware
-AS
- root.db.device.s01, root.db.device.s02
-
--- 或者
-
-CREATE VIEW root.db.device(status, sub.hardware)
-AS
- root.db.device(s01, s02)
-```
-
-##### 所有序列间的映射关系为静态存储
-
-有时,SELECT子句中可能包含运行时才能确定的语句个数,比如如下的语句:
-
-```SQL
-SELECT s01, s02
-FROM root.db.d01, root.db.d02
-```
-
-上述语句能匹配到的序列数量是并不确定的,和系统状态有关。即便如此,用户也可以使用它创建视图。
-
-不过需要特别注意,所有序列间的映射关系为静态存储(创建时固定)!请看以下示例:
-
-当前数据库中仅含有`root.db.d01.s01`、`root.db.d02.s01`、`root.db.d02.s02`三条序列,接着创建视图:
-
-```SQL
-CREATE VIEW root.view.d(alpha, beta, gamma)
-AS
- SELECT s01, s02
- FROM root.db.d01, root.db.d02
-```
-
-时间序列之间映射关系如下:
-
-| 序号 | 时间序列 | 序列视图 |
-| ---- | ----------------- | ----------------- |
-| 1 | `root.db.d01.s01` | root.view.d.alpha |
-| 2 | `root.db.d02.s01` | root.view.d.beta |
-| 3 | `root.db.d02.s02` | root.view.d.gamma |
-
-此后,用户新增了序列`root.db.d01.s02`,则它不对应到任何视图;接着,用户删除`root.db.d01.s01`,则查询`root.view.d.alpha`会直接报错,它也不会对应到`root.db.d01.s02`。
-
-请时刻注意,序列间映射关系是静态地、固化地存储的。
-
-#### 3.1.5 批量创建序列视图
-
-现有若干个设备,每个设备都有一个温度数值,例如:
-
-1. root.db.d1.temperature
-2. root.db.d2.temperature
-3. ...
-
-这些设备下可能存储了很多其他序列(例如`root.db.d1.speed`),但目前可以创建一个视图,只包含这些设备的温度值,而不关系其他序列:
-
-```SQL
-CREATE VIEW root.db.view(${2}_temperature)
-AS
- SELECT temperature FROM root.db.*
-```
-
-这里仿照了查询写回(`SELECT INTO`)对命名规则的约定,使用变量占位符来指定命名规则。可以参考:[查询写回(SELECT INTO)](https://iotdb.apache.org/zh/UserGuide/Master/Query-Data/Select-Into.html)
-
-这里`root.db.*.temperature`指定了有哪些时间序列会被包含在视图中;`${2}`则指定了从时间序列中的哪个节点提取出名字来命名序列视图。
-
-此处,`${2}`指代的是`root.db.*.temperature`的层级2(从 0 开始),也就是`*`的匹配结果;`${2}_temperature`则是将匹配结果与`temperature`通过下划线拼接了起来,构成视图下各序列的节点名称。
-
-上述创建视图的语句,和下列写法是等价的:
-
-```SQL
-CREATE VIEW root.db.view(${2}_${3})
-AS
- SELECT temperature from root.db.*
-```
-
-最终视图中含有这些序列:
-
-1. root.db.view.d1_temperature
-2. root.db.view.d2_temperature
-3. ...
-
-使用通配符创建,只会存储创建时刻的静态映射关系。
-
-#### 3.1.6 创建视图时SELECT子句受到一定限制
-
-创建序列视图时,使用的SELECT子句受到一定限制。主要限制如下:
-
-1. 不能使用`WHERE`子句。
-2. 不能使用`GROUP BY`子句。
-3. 不能使用`MAX_VALUE`等聚合函数。
-
-简单来说,`AS`后只能使用`SELECT ... FROM ... `的结构,且该查询语句的结果必须能构成一条时间序列。
-
-### 3.2 视图数据查询
-
-对于可以支持的数据查询功能,在执行时序数据查询时,序列视图与时间序列可以无差别使用,行为完全一致。
-
-**目前序列视图不支持的查询类型如下:**
-
-1. **align by device 查询**
-2. **group by tags 查询**
-
-用户也可以在同一个SELECT语句中混合查询时间序列与序列视图,比如:
-
-```SQL
-SELECT temperature01, temperature02, avg_temperature
-FROM root.db.d01
-WHERE temperature01 < temperature02
-```
-
-但是,如果用户想要查询序列的元数据,例如tag、attributes等,则查询到的是序列视图的结果,而并非序列视图所引用的时间序列的结果。
-
-此外,对于别名序列,如果用户想要得到时间序列的tag、attributes等信息,则需要先查询视图列的映射,找到对应的时间序列,再向时间序列查询tag、attributes等信息。查询视图列的映射的方法将会在3.5部分说明。
-
-### 3.3 视图修改
-
-对视图的修改,例如改名、修改计算逻辑、删除等操作,都和创建新的视图类似,需要重新指定整个视图的全部列相关的描述。
-
-#### 3.3.1 修改视图数据来源
-
-```SQL
-ALTER VIEW root.view.device.status
-AS
- SELECT s01
- FROM root.ln.wf.d01
-```
-
-#### 3.3.2 修改视图的计算逻辑
-
-```SQL
-ALTER VIEW root.db.d01.avg_temperature
-AS
- SELECT (temperature01 + temperature02 + temperature03) / 3
- FROM root.db.d01
-```
-
-#### 3.3.3 标签点管理
-
-- 添加新的标签
-
-```SQL
-ALTER view root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4
-```
-
-- 添加新的属性
-
-```SQL
-ALTER view root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4
-```
-
-- 重命名标签或属性
-
-```SQL
-ALTER view root.turbine.d1.s1 RENAME tag1 TO newTag1
-```
-
-- 重新设置标签或属性的值
-
-```SQL
-ALTER view root.turbine.d1.s1 SET newTag1=newV1, attr1=newV1
-```
-
-- 删除已经存在的标签或属性
-
-```SQL
-ALTER view root.turbine.d1.s1 DROP tag1, tag2
-```
-
-- 更新插入别名,标签和属性
-
-> 如果该别名,标签或属性原来不存在,则插入,否则,用新值更新原来的旧值
-
-```SQL
-ALTER view root.turbine.d1.s1 UPSERT TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4)
-```
-
-#### 3.3.4 删除视图
-
-因为一个视图就是一条序列,因此可以像删除时间序列一样删除一个视图。
-
-扩充原有删除时间序列的方法,不新增`DELETE VIEW`的语句。
-
-```SQL
-DELETE VIEW root.view.device.avg_temperatue
-```
-
-### 3.4 视图同步
-
-序列视图的数据总是经由实时的查询获得,因此天然支持数据同步。
-
-#### 如果依赖的原序列被删除了
-
-当序列视图查询时(序列解析时),如果依赖的时间序列不存在,则**返回空结果集**。
-
-这和查询一个不存在的序列的反馈类似,但是有区别:如果依赖的时间序列无法解析,空结果集是包含表头的,以此来提醒用户该视图是存在问题的。
-
-此外,被依赖的时间序列删除时,不会去查找是否有依赖于该列的视图,用户不会收到任何警告。
-
-#### 不支持非别名序列的数据写入
-
-不支持向非别名序列的写入。
-
-详情请参考前文 2.1.6 限制2
-
-#### 序列的元数据不共用
-
-详情请参考前文2.1.6 限制5
-
-### 3.5 视图元数据查询
-
-视图元数据查询,特指查询视图本身的元数据(例如视图有多少列),以及数据库内视图的信息(例如有哪些视图)。
-
-#### 3.5.1 查看当前的视图列
-
-用户有两种查询方式:
-
-1. 使用`SHOW TIMESERIES`进行查询,该查询既包含时间序列,也包含序列视图。但是只能显示视图的部分属性
-2. 使用`SHOW VIEW`进行查询,该查询只包含序列视图。能完整显示序列视图的属性。
-
-举例:
-
-```Shell
-IoTDB> show timeseries;
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-| Timeseries|Alias|Database|DataType|Encoding|Compression|Tags|Attributes|Deadband|DeadbandParameters|ViewType|
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-|root.db.device.s01 | null| root.db| INT32| RLE| SNAPPY|null| null| null| null| BASE|
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-|root.db.view.status | null| root.db| INT32| RLE| SNAPPY|null| null| null| null| VIEW|
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-|root.db.d01.temp01 | null| root.db| FLOAT| RLE| SNAPPY|null| null| null| null| BASE|
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-|root.db.d01.temp02 | null| root.db| FLOAT| RLE| SNAPPY|null| null| null| null| BASE|
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-|root.db.d01.avg_temp| null| root.db| FLOAT| null| null|null| null| null| null| VIEW|
-+--------------------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
-Total line number = 5
-It costs 0.789s
-IoTDB>
-```
-
-最后一列`ViewType`中显示了该序列的类型,时间序列为BASE,序列视图是VIEW。
-
-此外,某些序列视图的属性会缺失,比如`root.db.d01.avg_temp`是由温度均值计算得来,所以`Encoding`和`Compression`属性都为空值。
-
-此外,`SHOW TIMESERIES`语句的查询结果主要分为两部分:
-
-1. 时序数据的信息,例如数据类型,压缩方式,编码等
-2. 其他元数据信息,例如tag,attribute,所属database等
-
-对于序列视图,展示的时序数据信息与其原始序列一致或者为空值(比如计算得到的平均温度有数据类型但是无压缩方式);展示的元数据信息则是视图的内容。
-
-如果要得知视图的更多信息,需要使用`SHOW ``VIEW`。`SHOW ``VIEW`中展示视图的数据来源等。
-
-```Shell
-IoTDB> show VIEW root.**;
-+--------------------+--------+--------+----+----------+--------+-----------------------------------------+
-| Timeseries|Database|DataType|Tags|Attributes|ViewType| SOURCE|
-+--------------------+--------+--------+----+----------+--------+-----------------------------------------+
-|root.db.view.status | root.db| INT32|null| null| VIEW| root.db.device.s01|
-+--------------------+--------+--------+----+----------+--------+-----------------------------------------+
-|root.db.d01.avg_temp| root.db| FLOAT|null| null| VIEW|(root.db.d01.temp01+root.db.d01.temp02)/2|
-+--------------------+--------+--------+----+----------+--------+-----------------------------------------+
-Total line number = 2
-It costs 0.789s
-IoTDB>
-```
-
-最后一列`SOURCE`显示了该序列视图的数据来源,列出了创建该序列的SQL语句。
-
-##### 关于数据类型
-
-上述两种查询都涉及视图的数据类型。视图的数据类型是根据定义视图的查询语句或别名序列的原始时间序列类型推断出来的。这个数据类型是根据当前系统的状态实时计算出来的,因此在不同时刻查询到的数据类型可能是改变的。
-
-## 四、FAQ
-
-#### Q1:我想让视图实现类型转换的功能。例如,原有一个int32类型的时间序列,和其他int64类型的序列被放在了同一个视图中。我现在希望通过视图查询到的数据,都能自动转换为int64类型。
-
-> Ans:这不是序列视图的职能范围。但是可以使用`CAST`进行转换,比如:
-
-```SQL
-CREATE VIEW root.db.device.int64_status
-AS
- SELECT CAST(s1, 'type'='INT64') from root.db.device
-```
-
-> 这样,查询`root.view.status`时,就会得到int64类型的结果。
->
-> 请特别注意,上述例子中,序列视图的数据是通过`CAST`转换得到的,因此`root.db.device.int64_status`并不是一条别名序列,也就**不支持写入**。
-
-#### Q2:是否支持默认命名?选择若干时间序列,创建视图;但是我不指定每条序列的名字,由数据库自动命名?
-
-> Ans:不支持。用户必须明确指定命名。
-
-#### Q3:在原有体系中,创建时间序列`root.db.device.s01`,可以发现自动创建了database`root.db`,自动创建了device`root.db.device`。接着删除时间序列`root.db.device.s01`,可以发现`root.db.device`被自动删除,`root.db`却还是保留的。对于创建视图,会沿用这一机制吗?出于什么考虑呢?
-
-> Ans:保持原有的行为不变,引入视图功能不会改变原有的这些逻辑。
-
-#### Q4:是否支持序列视图重命名?
-
-> A:当前版本不支持重命名,可以自行创建新名称的视图投入使用。
\ No newline at end of file
diff --git a/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md b/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md
index 8531b72..83ebfe1 100644
--- a/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md
+++ b/src/zh/UserGuide/latest/SQL-Manual/SQL-Manual.md
@@ -1802,312 +1802,132 @@ SHOW FUNCTIONS
## 权限管理
-### 1、创建用户
+### 用户与角色相关
-CREATE USER `ln_write_user` 'write_pwd'
+- 创建用户(需 MANAGE_USER 权限)
-CREATE USER `sgcc_write_user` 'write_pwd'
-### 2、展示用户
-
-LIST USER
-
-### 3、赋予用户权限
-
-INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)
-
-系统不允许用户进行此操作,会提示错误:
-
-IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)
-
-Msg: 602: No permissions for this operation, please add privilege INSERT_TIMESERIES.
-
-用root用户分别赋予他们向对应 database 数据的写入权限
-
-GRANT USER `ln_write_user` PRIVILEGES INSERT_TIMESERIES on root.ln.**
-
-GRANT USER `sgcc_write_user` PRIVILEGES INSERT_TIMESERIES on root.sgcc1.**, root.sgcc2.**
-
-GRANT USER `ln_write_user` PRIVILEGES CREATE_USER
-
-使用ln_write_user再尝试写入数据
-
-IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp, status) values(1509465600000, true)
-
-Msg: The statement is executed successfully.
-
-### 4、撤销用户权限
-
-用root用户撤销ln_write_user和sgcc_write_user的权限:
-
-REVOKE USER `ln_write_user` PRIVILEGES INSERT_TIMESERIES on root.ln.**
-
-REVOKE USER `sgcc_write_user` PRIVILEGES INSERT_TIMESERIES on root.sgcc1.**, root.sgcc2.**
-
-REVOKE USER `ln_write_user` PRIVILEGES CREATE_USER
-
-撤销权限后,ln_write_user就没有向root.ln.**写入数据的权限了
-
-INSERT INTO root.ln.wf01.wt01(timestamp, status) values(1509465600000, true)
-
-Msg: 602: No permissions for this operation, please add privilege INSERT_TIMESERIES.
-
-### 5、SQL 语句
-
-- 创建用户
-
-```Go
-CREATE USER <userName> <password>;
+```SQL
+CREATE USER <userName> <password>
+eg: CREATE USER user1 'passwd'
```
-Eg: IoTDB > CREATE USER `thulab` 'passwd';
+- 删除用户 (需 MANEGE_USER 权限)
-- 删除用户
-```Go
-DROP USER <userName>;
+```SQL
+DROP USER <userName>
+eg: DROP USER user1
```
-Eg: IoTDB > DROP USER `xiaoming`;
+- 创建角色 (需 MANAGE_ROLE 权限)
-- 创建角色
-
-```Go
-CREATE ROLE <roleName>;
+```SQL
+CREATE ROLE <roleName>
+eg: CREATE ROLE role1
```
-Eg: IoTDB > CREATE ROLE `admin`;
+- 删除角色 (需 MANAGE_ROLE 权限)
-- 删除角色
-```Go
-DROP USER <userName>;
+```SQL
+DROP ROLE <roleName>
+eg: DROP ROLE role1
```
-Eg: IoTDB > DROP USER `xiaoming`;
+- 赋予用户角色 (需 MANAGE_ROLE 权限)
-- 赋予用户权限
-```Go
-GRANT USER <userName> PRIVILEGES <privileges> ON <nodeNames>;
+```SQL
+GRANT ROLE <ROLENAME> TO <USERNAME>
+eg: GRANT ROLE admin TO user1
```
-Eg: IoTDB > GRANT USER `tempuser` PRIVILEGES INSERT_TIMESERIES, DELETE_TIMESERIES on root.ln.**, root.sgcc.**;
+- 移除用户角色 (需 MANAGE_ROLE 权限)
-Eg: IoTDB > GRANT USER `tempuser` PRIVILEGES CREATE_ROLE;
-- 赋予用户全部的权限
-
-```Go
-GRANT USER <userName> PRIVILEGES ALL;
+```SQL
+REVOKE ROLE <ROLENAME> FROM <USER>
+eg: REVOKE ROLE admin FROM user1
```
-Eg: IoTDB > GRANT USER `tempuser` PRIVILEGES ALL;
-
-- 赋予角色权限
-
-```Go
-GRANT ROLE <roleName> PRIVILEGES <privileges> ON <nodeNames>;
-```
-
-Eg: IoTDB > GRANT ROLE `temprole` PRIVILEGES INSERT_TIMESERIES, DELETE_TIMESERIES ON root.sgcc.**, root.ln.**;
-
-Eg: IoTDB > GRANT ROLE `temprole` PRIVILEGES CREATE_ROLE;
-
-- 赋予角色全部的权限
-
-```Go
-GRANT ROLE <roleName> PRIVILEGES ALL;
-```
-
-Eg: IoTDB > GRANT ROLE `temprole` PRIVILEGES ALL;
-
-- 赋予用户角色
-
-```Go
-GRANT <roleName> TO <userName>;
-```
-
-Eg: IoTDB > GRANT `temprole` TO tempuser;
-
-- 撤销用户权限
-
-```Go
-REVOKE USER <userName> PRIVILEGES <privileges> ON <nodeNames>;
-```
-
-Eg: IoTDB > REVOKE USER `tempuser` PRIVILEGES DELETE_TIMESERIES on root.ln.**;
-
-Eg: IoTDB > REVOKE USER `tempuser` PRIVILEGES CREATE_ROLE;
-
-- 移除用户所有权限
-
-```Go
-REVOKE USER <userName> PRIVILEGES ALL;
-```
-
-Eg: IoTDB > REVOKE USER `tempuser` PRIVILEGES ALL;
-
-- 撤销角色权限
-
-```Go
-REVOKE ROLE <roleName> PRIVILEGES <privileges> ON <nodeNames>;
-```
-
-Eg: IoTDB > REVOKE ROLE `temprole` PRIVILEGES DELETE_TIMESERIES ON root.ln.**;
-
-Eg: IoTDB > REVOKE ROLE `temprole` PRIVILEGES CREATE_ROLE;
-
-- 撤销角色全部的权限
-
-```Go
-REVOKE ROLE <roleName> PRIVILEGES ALL;
-```
-
-Eg: IoTDB > REVOKE ROLE `temprole` PRIVILEGES ALL;
-
-- 撤销用户角色
-
-```Go
-REVOKE <roleName> FROM <userName>;
-```
-
-Eg: IoTDB > REVOKE `temprole` FROM tempuser;
-
-- 列出所有用户
+- 列出所有用户 (需 MANEGE_USER 权限)
+```SQL
LIST USER
-
-Eg: IoTDB > LIST USER
-
-- 列出指定角色下所有用户
-
-```Go
-LIST USER OF ROLE <roleName>;
```
-Eg: IoTDB > LIST USER OF ROLE `roleuser`;
+- 列出所有角色 (需 MANAGE_ROLE 权限)
-- 列出所有角色
-
-```Go
-REVOKE <roleName> FROM <userName>;
+```SQL
+LIST ROLE
```
-Eg: IoTDB > REVOKE `temprole` FROM tempuser;
+- 列出指定角色下所有用户 (需 MANEGE_USER 权限)
-- 列出指定用户下所有角色
-
-```Go
-LIST USER OF ROLE <roleName>;
+```SQL
+LIST USER OF ROLE <roleName>
+eg: LIST USER OF ROLE roleuser
```
-Eg: IoTDB > LIST USER OF ROLE `roleuser`;
+- 列出指定用户下所有角色
-- 列出用户所有权限
+用户可以列出自己的角色,但列出其他用户的角色需要拥有 MANAGE_ROLE 权限。
-```Go
-LIST PRIVILEGES USER <username>;
+```SQL
+LIST ROLE OF USER <username>
+eg: LIST ROLE OF USER tempuser
```
-Eg: IoTDB > LIST PRIVILEGES USER `tempuser`;
+- 列出用户所有权限
-- 列出用户在具体路径上相关联的权限
+用户可以列出自己的权限信息,但列出其他用户的权限需要拥有 MANAGE_USER 权限。
-```Go
-LIST PRIVILEGES USER <username> ON <paths>;
+```SQL
+LIST PRIVILEGES OF USER <username>;
+eg: LIST PRIVILEGES OF USER tempuser;
+
```
-Eg: IoTDB> LIST PRIVILEGES USER `tempuser` ON root.ln.**, root.ln.wf01.**;
-
-IoTDB> LIST PRIVILEGES USER `tempuser` ON root.ln.wf01.wt01.**;
-
- 列出角色所有权限
-```Go
-LIST PRIVILEGES ROLE <roleName>;
-```
-
-Eg: IoTDB > LIST PRIVILEGES ROLE `actor`;
-
-- 列出角色在具体路径上相关联的权限
+用户可以列出自己具有的角色的权限信息,列出其他角色的权限需要有 MANAGE_ROLE 权限。
-```Go
-LIST PRIVILEGES ROLE <roleName> ON <paths>;
+```SQL
+LIST PRIVILEGES OF ROLE <roleName>;
+eg: LIST PRIVILEGES OF ROLE actor;
```
-Eg: IoTDB> LIST PRIVILEGES ROLE `temprole` ON root.ln.**, root.ln.wf01.wt01.**;
-
-IoTDB> LIST PRIVILEGES ROLE `temprole` ON root.ln.wf01.wt01.**;
-
- 更新密码
-```Go
+用户可以更新自己的密码,但更新其他用户密码需要具备MANAGE_USER 权限。
+
+```SQL
ALTER USER <username> SET PASSWORD <password>;
+eg: ALTER USER tempuser SET PASSWORD 'newpwd';
```
-Eg: IoTDB > ALTER USER `tempuser` SET PASSWORD 'newpwd';
-
-### 6、非root用户限制进行的操作
-
-#### TsFile管理
-
-- 加载TsFile
-
-Eg: IoTDB > load '/Users/Desktop/data/1575028885956-101-0.tsfile'
-
-- 删除TsFile文件
-
-Eg: IoTDB > remove '/Users/Desktop/data/data/root.vehicle/0/0/1575028885956-101-0.tsfile'
-
-- 卸载TsFile文件到指定目录
-
-Eg: IoTDB > unload '/Users/Desktop/data/data/root.vehicle/0/0/1575028885956-101-0.tsfile' '/data/data/tmp'
-
-#### 删除时间分区(实验性功能)
-
-- 删除时间分区(实验性功能)
-
-Eg: IoTDB > DELETE PARTITION root.ln 0,1,2
-
-#### 连续查询
-
-- 连续查询(CQ)
-
-Eg: IoTDB > CREATE CONTINUOUS QUERY cq1 BEGIN SELECT max_value(temperature) INTO temperature_max FROM root.ln.*.* GROUP BY time(10s) END
+### 授权与取消授权
-#### 运维命令
+用户使用授权语句对赋予其他用户权限,语法如下:
-- FLUSH
-
-Eg: IoTDB > flush
-
-- MERGE
-
-Eg: IoTDB > MERGE
-
-Eg: IoTDB > FULL MERGE
-
-- CLEAR CACHE
-
-Eg: IoTDB > CLEAR CACHE
-
-- SET SYSTEM TO READONLY / WRITABLE
-
-Eg: IoTDB > SET SYSTEM TO READONLY / WRITABLE
-
-
-- 查询终止
-
-Eg: IoTDB > KILL QUERY 1
-
-#### 水印工具
-
-- 为新用户施加水印
-
-Eg: IoTDB > grant watermark_embedding to Alice
+```SQL
+GRANT <PRIVILEGES> ON <PATHS> TO ROLE/USER <NAME> [WITH GRANT OPTION];
+eg: GRANT READ ON root.** TO ROLE role1;
+eg: GRANT READ_DATA, WRITE_DATA ON root.t1.** TO USER user1;
+eg: GRANT READ_DATA, WRITE_DATA ON root.t1.**,root.t2.** TO USER user1;
+eg: GRANT MANAGE_ROLE ON root.** TO USER user1 WITH GRANT OPTION;
+eg: GRANT ALL ON root.** TO USER user1 WITH GRANT OPTION;
+```
-- 撤销水印
+用户使用取消授权语句可以将其他的权限取消,语法如下:
-Eg: IoTDB > revoke watermark_embedding from Alice
+```SQL
+REVOKE <PRIVILEGES> ON <PATHS> FROM ROLE/USER <NAME>;
+eg: REVOKE READ ON root.** FROM ROLE role1;
+eg: REVOKE READ_DATA, WRITE_DATA ON root.t1.** FROM USER user1;
+eg: REVOKE READ_DATA, WRITE_DATA ON root.t1.**, root.t2.** FROM USER user1;
+eg: REVOKE MANAGE_ROLE ON root.** FROM USER user1;
+eg: REVOKE ALL ON ROOT.** FROM USER user1;
+```
diff --git a/src/zh/UserGuide/latest/Tools-System/Workbench.md b/src/zh/UserGuide/latest/Tools-System/Workbench.md
deleted file mode 100644
index 59dfc7d..0000000
--- a/src/zh/UserGuide/latest/Tools-System/Workbench.md
+++ /dev/null
@@ -1,365 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-# 控制台工具Workbench
-
-Workbench是一个可创建多个连接的图形化数据库管理工具,用于管理IoTDB,提供元数据的可视化与管理、数据的增删改查以及权限控制等功能。Workbench不仅满足专业开发人员的所有需求,同时简洁友好的界面设计对初学者来说也易于上手。
-
-## 安装
-
-如果你在安装过程中遇到任何问题,你可以参考文档或向软件供应商或技术支持团队寻求帮助。
-
-环境要求:JDK1.8.0_162及以上。
-
-1. 下载并解压软件。第一步是从官方网站或一个可信赖的来源下载软件,下载地址为https://www.timecho.com/product 。
-2. 启动后端服务。输入指令:
-```
-java -jar workbench.jar
-```
-或:
-```
-nohup java -jar workbench.jar >/dev/null 2>&1 &
-```
-默认端口为 9090;
-
-1. 访问web界面。默认地址为`IP:9090`。
-
-## 登录
-
-默认用户名为root,密码为123456。用户名必须由字母、数字、下划线组成,不能以数字和下划线开始,须大于等于4个字符,密码必须大于等于6位。点击"**文A**"可切换语言,有中文、英文可选。
-
-
-
-## 用户界面
-
-**主界面**
-
-主界面由操作栏、导航栏、工具栏和几个窗格组成。
-
-
-
-1、连接操作栏
-
-可以新建数据库的连接或者数据库的查询。
-
-2、对象窗格
-
-对象窗格显示已连接的数据库实例,采用树状结构设计,点击出现子节点可以方便地处理数据库和它们管理的对象,展示的最低层级是设备。
-
-
-
-3、导航栏
-
-导航栏可选择"**数据库管理**"、"**监控管理**"、"**操作日志**"、"**数据看板**"。
-
-4、状态栏
-
-状态栏显示当前选项下的状态信息,当选中"**数据库管理**"时,状态栏显示数据库的在线情况、IP、端口、服务器状态及其存储组、设备、物理量的数量信息。
-
-
-
-当选\"**监控管理**\"时,状态栏显示数据库的在线情况、IP、端口、服务器状态、数据库版本、激活信息及到期时间。z注:"**数据库版本**"处的图标表示企业版或开源版,Workbench部分功能在开源版上无法使用。
-
-
-
-5、操作列
-
-操作列可以选择任意选项进行操作。
-
-6、信息窗格
-
-信息窗格显示对象的详细信息。
-
-## 连接
-
-首先用连接窗口创建一个或多个连接。点击"**数据连接**"创建新建连接。
-
-
-
-在弹出的连接窗口输入需要填写的信息,其中数据连接名称必须大于等于3个字符。然后点击"**连接测试**",显示"**连接测试通过**"则表示正确连接,点击确定即可新建连接。
-
-
-
-若要修改连接情况,则可在状态栏右侧点"**编辑**"选项即可修改数据库连接信息。
-
-
-
-## 服务器安全性
-
-**白名单**
-
-企业版IoTDB可以通过添加白名单列表来设置允许访问IoTDB的IP。使用开源版IoTDB连接Workbench无法使用该功能。
-
-从导航栏选择"**数据库管理**"-\>"**白名单**"可查看已添加的白名单IP列表。
-
-
-
-点击"**白名单**"可新增白名单IP,点击"**编辑**"/"**删除**"可修改白名单列表的IP信息。
-
-**权限管理**
-
-Workbench提供强大的工具以管理服务器用户帐号和数据库对象的权限。在操作列中点击
-"**数据库用户管理**"或 "**数据库角色管理**"来打开用户或角色的对象列表。
-
-
-
-**新增用户**。选择"**数据库用户管理**"-\>"**用户账号+**"可新增用户,按要求填写用户名和密码即可,可以为用户添加角色信息。
-
-
-
-**添加权限**。权限可分为数据管理权限(如对数据进行增删改查)以及权限管理权限(用户、角色的创建与删除,权限的赋予与撤销等)。选择"**数据库用户管理**"-\>"**数据管理权限**"-\>"**添加权限**"可为用户添加数据管理权限。在已添加的权限处可以选择"**编辑**"或"**删除**"以修改权限信息。
-
-
-
-弹出的界面可以选择权限作用的粒度以及具体权限内容。注意只有勾选【查询数据】权限和【查看用户】权限,其他权限才能在Workbench中生效查看。
-
-
-
-选择"**数据库用户管理**"-\>"**权限管理权限**"勾选信息窗格中具体的权限信息,点击"保存"可为用户添加权限管理权限。
-
-
-
-**权限预览**。选择"**数据库用户管理**"-\>"**数据权限预览**"可预览该用户名下所有的数据权限。注:该功能仅支持企业版。
-
-## 数据迁移
-
-导入导出工具可将CSV格式的文件批量导入或导出IoTDB。
-
-**批量导入**
-
-批量导入功能仅在企业版中支持。在对象窗格中选择要操作的数据库,选择到设备节点,则右侧信息窗格将出现"**设备结构"**信息,点击"**导入物理量**",下载模板填写物理量信息,再上传该CSV文件即可批量导入物理量。注:当前版本不支持导入对齐物理量。
-
-
-
-选择"**数据预览**"-\>"**批量导入**"则可将符合模板要求的CSV文件数据导入,当前支持导入对齐时间序列。
-
-
-
-**批量导出**
-
-批量导出功能仅在企业版中支持。在对象窗格中选择要操作的数据库,进入设备节点,选择"**设备结构**"-\>"**导出物理量**"即可批量导出该实体下的物理量元数据。搜索框内可输入名称/别名、标签名称、标签值进行过滤。
-
-
-
-选择"**数据预览**"-\>"**导出数据**"则可批量导出该实体下的数据。搜索框内可按时间范围、时间间隔和物理量进行过滤。
-
-
-
-## 数据预览
-
-Workbench提供多层次的数据预览工具。
-
-**数据模型**
-
-在对象窗格中选择要预览的数据连接,点击操作列的"**数据模型**"即可预览数据模型,root被定义为LEVEL=0,Workbench中默认显示到LEVEL=1,点击"**查看更多**"可查看更多层级的数据模型信息。"**查看更多**"功能仅在企业版中支持。
-
-
-
-**存储组信息**
-
-点击操作列的"**存储组信息**"即可预览该数据连接的所有存储组信息,点击"**详情**"可查看该存储组下的实体详情,继续点击实体详情可查看物理量详情。点击"**编辑**"可编辑该存储组的TTL信息。
-
-
-
-## 查询
-
-Workbench提供强大的查询工具,可直接编辑查询文本,保存查询,用于简化查询行任务。
-
-**新建查询**
-
-点击"**连接操作栏**"的"**查询**",选择要进行操作的数据连接,即可进入查询编辑器。
-
-
-
-在查询编辑器界面可输入SQL语句,提示框会提示符合条件的关键字。右侧可按要求选择函数或数据进行计算。
-
-{width="5.90625in" height="3.125in"}
-
-输入SQL语句后,点击右上角可选择操作,分别是"保存"、"运行"、"暂停"和"删除"。运行结果显示10行每页,默认限制返回结果100行,也可选择取消限制全部展示。
-
-
-
-**查看查询**
-
-已保存的连接可在对象窗格中该数据连接下的"**查询**"下查看。
-
-
-
-## 集群管理
-
-**拓扑管理**
-
-Workbench提供对集群拓扑图的查看。选择"**数据库管理**"-\>"**节点管理**"\>"**拓扑管理**"可以查看拓扑图。"拓扑管理"功能仅在企业版中支持。
-
-
-
-拓扑图显示节点IP、节点类型及端口。
-
-
-
-**节点管理**
-
-Workbench提供对集群节点的管理。选择"**数据库管理**"-\>"**节点管理**"可以查看节点状态。可按节点ID或节点类型进行查询。
-
-
-
-**分区管理**
-
-Workbench提供对集群分区的管理。选择"**数据库管理**"-\>"**分区管理**"可以查看分区状态。可按分区ID或分区类型进行查询。
-
-
-
-## 存储组管理
-
-**新增存储组**
-
-在对象窗格中选择要操作的数据库对象,点击"**新建存储组**"即可创建存储组,存储组名称为必填,存储组名称为必填,正常情况下只能输入字母、数字、下划线以及UNICODE
-中文字符如果包含特殊字符,请使用反引号。存活时间选填。
-
-
-
-**删除存储组**
-
-在对象窗格中选择要操作的存储组,在操作列中选择"**编辑**"可修改存储组存活时间,选择"**删除**"可删除存储组。
-
-
-
-## 设备及物理量管理
-
-**新建物理量**
-
-在对象窗格中选择要操作的存储组,点击"**新建设备**",按要求填写信息则可创建该存储组下的物理量。物理量名称名称为必填,正常情况下只能输入字母、数字、下划线以及UNICODE
-中文字符如果包含特殊字符,请使用反引号。
-
-
-
-**数据趋势预览**
-
-"数据趋势"功能仅在企业版中支持。在对象窗格中选定存储组,"**数据趋势**"显示该存储组下的物理量趋势图表,单击图表显示详细信息,可选定时间范围查询该区间内的数据,并显示最小值等数据
-
-
-
-**修改、删除物理量**
-
-在对象窗格中选择要操作的设备
-,点击右侧的"**编辑**"可修改该设备下的物理量信息(别名、标签和属性)。点击"**删除**"则可删除该设备。
-
-
-
-## 操作日志
-
-"操作日志"提供所有在Workbench上进行的操作记录,可按IP、用户、数据连接、关键词和时间范围进行筛选。
-
-
-
-## 监控管理
-
-Workbench提供"**监控管理**"提供来查看已选择的服务器监控属性。从导航栏选择"**监控管理**"并选择你想要的监控类型。可选"**监控指标**","**连接信息**","**审计日志**"。
-
-**监控指标**
-
-监控指标可供查看CPU指标、内存指标和存储指标的最新信息。
-
-
-
-**连接信息**
-
-连接信息可供查看连接到Workbench的用户和服务器信息。"连接信息"功能仅在企业版中支持。
-
-
-
-**审计日志**
-
-审计日志显示所有在IoTDB执行的操作,Workbench提供查询接口,可按时间段或用户名进行查询。"审计日志"功能仅在企业版中支持。
-
-
-
-## 数据看板
-
-数据看板可供创建数据库数据的直观表示,下图为挂载Grafana模板的仪表盘。
-
-
-
-**配置**
-
-**文件配置**
-
-在文件application-prod.properties中配置看板地址,找到配置项url.dashboard=https://grafana.com/,填写grafana
-URL。
-
-application-prod.properties源文件内容:
- ```plain Text
-# Designate the log configuration file
-logging.config=classpath:log4j2.xml
-
-# Set port and context path
-server.port=9090
-server.servlet.context-path=/api
-
-# The following data source configuration method will cause data loss after the project is repackaged.
-# To facilitate testing during development, refer to the application-prod.properties file for configuration during actual project deployment
-# sqlite
-spring.datasource.url=jdbc:sqlite:./iotdb.db
-spring.datasource.driver-class-name=org.sqlite.JDBC
-# mysql
-#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-#spring.datasource.url=jdbc:mysql://
-#spring.datasource.username=
-#spring.datasource.password=
-
-# Enable the multipart uploading function
-spring.servlet.multipart.enabled=true
-spring.servlet.multipart.file-size-threshold=2KB
-spring.servlet.multipart.max-file-size=200MB
-spring.servlet.multipart.max-request-size=215MB
-
-# All files generated during CSV import and export are stored in this folder
-file.temp-dir=./tempFile
-
-spring.messages.basename=messages
-
-# enable open audit in iotdb
-enableIotdbAudit = false
-# enable open audit in workbench:
-enableWorkbenchAudit = true
-# timechodb config server rpc port
-configServerPort=8867
-# dashboard url
-url.dashboard=https://grafana.com/
- ```
-
-**URL获取**
-
-登录Grafan面板,点击分享按钮,在弹出的窗口选择"**Link**",复制"**Link
-URL**"即可。
-
-
-
-## Q&A
-
-1. 如果遇到以下情况,请尝试退出"无痕模式"或者更换浏览器。
-
-
-
-2. 如果看不到监控信息,需要开启IoTDB的Metric。
-
-3. 双活配置发生变化时需建议重新建立连接。
diff --git a/src/zh/UserGuide/latest/Tools-System/Workbench_timecho.md b/src/zh/UserGuide/latest/Tools-System/Workbench_timecho.md
new file mode 100644
index 0000000..8e3ace5
--- /dev/null
+++ b/src/zh/UserGuide/latest/Tools-System/Workbench_timecho.md
@@ -0,0 +1,59 @@
+# 可视化控制台
+## 第1章 产品介绍
+IoTDB可视化控制台是在Apache IoTDB企业版时序数据库基础上针对工业场景的实时数据收集、存储与分析一体化的数据管理场景开发的扩展组件,旨在为用户提供高效、可靠的实时数据存储和查询解决方案。它具有体量轻、性能高、易使用的特点,完美对接 Hadoop 与 Spark 生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
+## 第2章 IoTDB兼容性说明
+| Workbench版本号 | 兼容IoTDB版本 |
+| --------------- | ------------------------ |
+| V1.2 | V1.2.0<br>V1.2.1<br>V1.2.2<br>V1.3.0 |
+
+
+## 第3章 使用说明
+3.1 登录
+Workbench程序启动后,您可以通过输入部署服务器的 IP 和工作端口进行访问。
+系统默认的用户名:root,密码:root,缺省密码请及时修改。输入正确的用户名和密码,点击登录按钮,成功登录系统。
+
+
+
+3.2 实例管理
+1) 能够满足对连接实例进行统一管理,支持创建、编辑和删除,实现您对于多实例管理的需求
+
+
+2) 能够对实例层级关系进行直观展示,支持对已保存实例进行关联关系管理、信息编辑和连接切换。
+
+
+3.3 首页
+您可以从首页直观查看集群基本信息及状态,可查看数据库实例中各节点的服务运行状态(如是否激活、是否运行、IP信息等)
+
+
+支持查看集群、ConfigNode、DataNode运行监控状态, 对数据库运行健康度进行监控,判断实例是否有潜在运行问题
+
+
+3.4 测点列表
+您可以通过界面直观查看、管理测点信息,支持直接查看实例中的所有测点,并查看测点的重要信息
+
+
+3.5 查询
+3.5.1 数据查询
+将对常用数据查询场景提供界面式查询,支持进行时间过滤、测点过滤的查询,支持进行降采样查询,支持对查询数据进行批量导出。
+
+
+3.5.2 统计查询
+将对常用数据统计场景提供界面式查询,支持进行时间过滤、测点过滤,一键完成最大值、最小值、平均值、总和的结果输出。
+
+
+3.5.3 SQL操作
+将提供您数据库SQL的界面式交互,支持添加多标签页、通过快捷操作快速查找测点及相应函数
+
+
+3.6 趋势
+趋势将为您提供一键可视化查看数据历史&实时数据整体趋势
+
+
+3.7 数据同步
+您可以在数据同步界面完成对同步任务的创建以及管理,支持直接查看任务运行状态、同步数据和目标地址
+
+
+3.8 权限管理
+您可在此模块中配置可以访问数据库的用户,以及该用户可以访问的数据范围,方便对数据库系统的访问进行范围划分。
+
+
diff --git a/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md b/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md
index a74b4e9..8ee4a0d 100644
--- a/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md
+++ b/src/zh/UserGuide/latest/User-Manual/IoTDB-View_timecho.md
@@ -523,7 +523,7 @@ IoTDB>
## 四、FAQ
-####Q1:我想让视图实现类型转换的功能。例如,原有一个int32类型的时间序列,和其他int64类型的序列被放在了同一个视图中。我现在希望通过视图查询到的数据,都能自动转换为int64类型。
+#### Q1:我想让视图实现类型转换的功能。例如,原有一个int32类型的时间序列,和其他int64类型的序列被放在了同一个视图中。我现在希望通过视图查询到的数据,都能自动转换为int64类型。
> Ans:这不是序列视图的职能范围。但是可以使用`CAST`进行转换,比如:
@@ -537,7 +537,7 @@ AS
>
> 请特别注意,上述例子中,序列视图的数据是通过`CAST`转换得到的,因此`root.db.device.int64_status`并不是一条别名序列,也就**不支持写入**。
-####Q2:是否支持默认命名?选择若干时间序列,创建视图;但是我不指定每条序列的名字,由数据库自动命名?
+#### Q2:是否支持默认命名?选择若干时间序列,创建视图;但是我不指定每条序列的名字,由数据库自动命名?
> Ans:不支持。用户必须明确指定命名。