Merge pull request #30019 from taosdata/doc/contrib

docs: minor changes
This commit is contained in:
Simon Guan 2025-03-05 17:45:20 +08:00 committed by GitHub
commit ba50e36363
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
47 changed files with 1649 additions and 1660 deletions

View File

@ -16,7 +16,7 @@ Tableau 是一款知名的商业智能工具,它支持多种数据源,可方
## 配置数据源 ## 配置数据源
**第 1 步**在Windows操作系统的开始菜单中搜索并打开“ODBC数据源64位”管理工具并进行配置。详细参考[配置ODBC数据源](../../../reference/connector/odbc/#配置数据源)。 **第 1 步**,在 Windows 操作系统的开始菜单中搜索并打开“ODBC数据源64位”管理工具并进行配置。详细参考 [配置ODBC数据源](../../../reference/connector/odbc/#配置数据源)。
:::tip :::tip
需要注意的是,在为 Tableau 配置 ODBC 数据源时TDengine ODBC 数据源配置页面中的【数据库】配置项为必填项,需选择一个可成功连接的数据库。 需要注意的是,在为 Tableau 配置 ODBC 数据源时TDengine ODBC 数据源配置页面中的【数据库】配置项为必填项,需选择一个可成功连接的数据库。

View File

@ -10,7 +10,7 @@ DBeaver 是一款流行的跨平台数据库管理工具,方便开发者、数
使用 DBeaver 管理 TDengine 需要以下几方面的准备工作。 使用 DBeaver 管理 TDengine 需要以下几方面的准备工作。
- 安装 DBeaver。DBeaver 支持主流操作系统包括 Windows、macOS 和 Linux。请注意[下载](https://dbeaver.io/download/)正确平台和版本23.1.1+)的安装包。详细安装步骤请参考 [DBeaver 官方文档](https://github.com/dbeaver/dbeaver/wiki/Installation)。 - 安装 DBeaver。DBeaver 支持主流操作系统包括 Windows、macOS 和 Linux。请注意 [下载](https://dbeaver.io/download/) 正确平台和版本23.1.1+)的安装包。详细安装步骤请参考 [DBeaver 官方文档](https://github.com/dbeaver/dbeaver/wiki/Installation)。
- 如果使用独立部署的 TDengine 集群,请确认 TDengine 正常运行,并且 taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)。 - 如果使用独立部署的 TDengine 集群,请确认 TDengine 正常运行,并且 taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)。
## 使用 DBeaver 访问内部部署的 TDengine ## 使用 DBeaver 访问内部部署的 TDengine

View File

@ -12,24 +12,24 @@ taosd 命令行参数如下
- -a `<json file>`:指定一个 JSON 文件,其中包含服务启动时的各项配置参数,其格式形如 `{"fqdn":"td1"}`,关于配置参数的细节请参考下一节 - -a `<json file>`:指定一个 JSON 文件,其中包含服务启动时的各项配置参数,其格式形如 `{"fqdn":"td1"}`,关于配置参数的细节请参考下一节
- -c `<directory>`:指定配置文件所在目录 - -c `<directory>`:指定配置文件所在目录
- -s打印 SDB 信息 - -s打印 SDB 信息
- -C: 打印配置信息 - -C打印配置信息
- -e: 指定环境变量的字符串,例如:`-e 'TAOS_FQDN=td1'` - -e:指定环境变量的字符串,例如 `-e 'TAOS_FQDN=td1'`
- -E: 指定环境变量的文件路径,默认是 `./.env`.env 文件中的内容可以是 `TAOS_FQDN=td1` - -E指定环境变量的文件路径,默认是 `./.env`.env 文件中的内容可以是 `TAOS_FQDN=td1`
- -o: 指定日志输入方式,可选 `stdout`, `stderr`, `/dev/null`, `<directory>`,` <directory>/<filename>`, `<filename>` - -o:指定日志输入方式,可选 `stdout`、`stderr`、`/dev/null`、`<directory>`、` <directory>/<filename>`、`<filename>`
- -k: 获取机器码 - -k获取机器码
- -dm: 启用内存调度 - -dm启用内存调度
- -V: 打印版本信息 - -V打印版本信息
## 配置参数 ## 配置参数
:::note :::note
配置文件参数修改后,需要重启*taosd*服务,或客户端应用才能生效 配置文件参数修改后,通常需要重启 *taosd* 服务,或客户端应用才能生效
::: :::
### 连接相关 ### 连接相关
#### firstEp #### firstEp
- 说明taosd 启动时,主动连接的集群中首个 dnode 的 end point - 说明taosd 启动时,主动连接的集群中首个 dnode 的 endpoint
- 类型endpoint - 类型endpoint
- 默认值localhost:6030 - 默认值localhost:6030
- 动态修改:不支持 - 动态修改:不支持
@ -143,7 +143,7 @@ taosd 命令行参数如下
- 支持版本v3.3.4.0 版本之后取消 - 支持版本v3.3.4.0 版本之后取消
#### maxRetryWaitTime #### maxRetryWaitTime
- 说明:重连最大超时时间, 从重试时候开始计算 - 说明:重连最大超时时间从重试时候开始计算
- 类型:整数 - 类型:整数
- 单位:毫秒 - 单位:毫秒
- 默认值10000 - 默认值10000
@ -1327,7 +1327,7 @@ charset 的有效值是 UTF-8。
#### forceReadConfig #### forceReadConfig
- 说明:配置文件所在目录 - 说明:配置文件所在目录
- 类型整数0:使用持久化的配置参数1:使用配置文件中的配置参数; - 类型整数0使用持久化的配置参数1使用配置文件中的配置参数;
- 默认值0 - 默认值0
- 最小值0 - 最小值0
- 最大值1 - 最大值1
@ -1342,7 +1342,7 @@ charset 的有效值是 UTF-8。
#### assert #### assert
- 说明:断言控制开关 - 说明:断言控制开关
- 类型整数0:关闭1开启 - 类型整数0关闭1开启
- 默认值0 - 默认值0
- 最小值0 - 最小值0
- 最大值1 - 最大值1
@ -1420,7 +1420,7 @@ charset 的有效值是 UTF-8。
### 压缩参数 ### 压缩参数
#### fPrecision #### fPrecision
- 说明:设置 float 类型浮点数压缩精度, 小于此值的浮点数尾数部分将被截断 - 说明:设置 float 类型浮点数压缩精度小于此值的浮点数尾数部分将被截断
- 类型:浮点数 - 类型:浮点数
- 默认值0.00000001 - 默认值0.00000001
- 最小值0.00000001 - 最小值0.00000001
@ -1534,7 +1534,7 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| :------------- | :-------- | :------ | :--------------------------------------------- | | :------------- | :-------- | :------ | :--------------------------------------------- |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| tables\_num | DOUBLE | | vgroup 中 table 数量 | | tables\_num | DOUBLE | | vgroup 中 table 数量 |
| status | DOUBLE | | vgroup 状态, 取值范围 unsynced = 0, ready = 1 | | status | DOUBLE | | vgroup 状态,取值范围 0unsynced、1ready |
| vgroup\_id | VARCHAR | TAG | vgroup id | | vgroup\_id | VARCHAR | TAG | vgroup id |
| database\_name | VARCHAR | TAG | vgroup 所属的 database 名字 | | database\_name | VARCHAR | TAG | vgroup 所属的 database 名字 |
| cluster\_id | VARCHAR | TAG | cluster id | | cluster\_id | VARCHAR | TAG | cluster id |
@ -1563,10 +1563,10 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| io\_write\_disk | DOUBLE | | 磁盘 io 吞吐率,从 `/proc/<taosd_pid>/io` 中读取的 write_bytes。单位 byte/s | | io\_write\_disk | DOUBLE | | 磁盘 io 吞吐率,从 `/proc/<taosd_pid>/io` 中读取的 write_bytes。单位 byte/s |
| vnodes\_num | DOUBLE | | dnode 上 vnodes 数量 | | vnodes\_num | DOUBLE | | dnode 上 vnodes 数量 |
| masters | DOUBLE | | dnode 上 master node 数量 | | masters | DOUBLE | | dnode 上 master node 数量 |
| has\_mnode | DOUBLE | | dnode 是否包含 mnode取值范围 包含=1,不包含=0 | | has\_mnode | DOUBLE | | dnode 是否包含 mnode取值范围1包含、0不包含 |
| has\_qnode | DOUBLE | | dnode 是否包含 qnode取值范围 包含=1,不包含=0 | | has\_qnode | DOUBLE | | dnode 是否包含 qnode取值范围1包含、0不包含 |
| has\_snode | DOUBLE | | dnode 是否包含 snode取值范围 包含=1,不包含=0 | | has\_snode | DOUBLE | | dnode 是否包含 snode取值范围1包含、0不包含 |
| has\_bnode | DOUBLE | | dnode 是否包含 bnode取值范围 包含=1,不包含=0 | | has\_bnode | DOUBLE | | dnode 是否包含 bnode取值范围1包含、0不包含 |
| error\_log\_count | DOUBLE | | error 总数 | | error\_log\_count | DOUBLE | | error 总数 |
| info\_log\_count | DOUBLE | | info 总数 | | info\_log\_count | DOUBLE | | info 总数 |
| debug\_log\_count | DOUBLE | | debug 总数 | | debug\_log\_count | DOUBLE | | debug 总数 |
@ -1582,7 +1582,7 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| field | type | is\_tag | comment | | field | type | is\_tag | comment |
| :---------- | :-------- | :------ | :--------------------------------------- | | :---------- | :-------- | :------ | :--------------------------------------- |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| status | DOUBLE | | dnode 状态,取值范围 ready=1offline =0 | | status | DOUBLE | | dnode 状态,取值范围 1ready、0offline |
| dnode\_id | VARCHAR | TAG | dnode id | | dnode\_id | VARCHAR | TAG | dnode id |
| dnode\_ep | VARCHAR | TAG | dnode endpoint | | dnode\_ep | VARCHAR | TAG | dnode endpoint |
| cluster\_id | VARCHAR | TAG | cluster id | | cluster\_id | VARCHAR | TAG | cluster id |
@ -1625,7 +1625,7 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| field | type | is\_tag | comment | | field | type | is\_tag | comment |
| :---------- | :-------- | :------ | :------------------------------------------------------------------------------------------------------- | | :---------- | :-------- | :------ | :------------------------------------------------------------------------------------------------------- |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| role | DOUBLE | | mnode 角色, 取值范围 offline = 0,follower = 100,candidate = 101,leader = 102,error = 103,learner = 104 | | role | DOUBLE | | mnode 角色,取值范围 0offline、100follower、101candidate、102leader、103error、104、learne |
| mnode\_id | VARCHAR | TAG | master node id | | mnode\_id | VARCHAR | TAG | master node id |
| mnode\_ep | VARCHAR | TAG | master node endpoint | | mnode\_ep | VARCHAR | TAG | master node endpoint |
| cluster\_id | VARCHAR | TAG | cluster id | | cluster\_id | VARCHAR | TAG | cluster id |
@ -1637,7 +1637,7 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| field | type | is\_tag | comment | | field | type | is\_tag | comment |
| :------------- | :-------- | :------ | :------------------------------------------------------------------------------------------------------ | | :------------- | :-------- | :------ | :------------------------------------------------------------------------------------------------------ |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| vnode\_role | DOUBLE | | vnode 角色,取值范围 offline = 0,follower = 100,candidate = 101,leader = 102,error = 103,learner = 104 | | vnode\_role | DOUBLE | | vnode 角色,取值范围 0offline、100follower、101candidate、102leader、103error、104、learne |
| vgroup\_id | VARCHAR | TAG | dnode id | | vgroup\_id | VARCHAR | TAG | dnode id |
| dnode\_id | VARCHAR | TAG | dnode id | | dnode\_id | VARCHAR | TAG | dnode id |
| database\_name | VARCHAR | TAG | vgroup 所属的 database 名字 | | database\_name | VARCHAR | TAG | vgroup 所属的 database 名字 |
@ -1651,9 +1651,9 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| :---------- | :-------- | :------ | :--------------------------------------- | | :---------- | :-------- | :------ | :--------------------------------------- |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| count | DOUBLE | | sql 数量 | | count | DOUBLE | | sql 数量 |
| result | VARCHAR | TAG | sql的执行结果,取值范围 Success, Failed | | result | VARCHAR | TAG | sql 的执行结果,取值范围 Success、Failed |
| username | VARCHAR | TAG | 执行sql的user name | | username | VARCHAR | TAG | 执行 sql user name |
| sql\_type | VARCHAR | TAG | sql类型取值范围 inserted_rows | | sql\_type | VARCHAR | TAG | sql 类型,取值范围 inserted_rows |
| dnode\_id | VARCHAR | TAG | dnode id | | dnode\_id | VARCHAR | TAG | dnode id |
| dnode\_ep | VARCHAR | TAG | dnode endpoint | | dnode\_ep | VARCHAR | TAG | dnode endpoint |
| vgroup\_id | VARCHAR | TAG | dnode id | | vgroup\_id | VARCHAR | TAG | dnode id |
@ -1667,9 +1667,9 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| :---------- | :-------- | :------ | :---------------------------------------- | | :---------- | :-------- | :------ | :---------------------------------------- |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| count | DOUBLE | | sql 数量 | | count | DOUBLE | | sql 数量 |
| result | VARCHAR | TAG | sql的执行结果,取值范围 Success, Failed | | result | VARCHAR | TAG | sql 的执行结果,取值范围 Success、Failed |
| username | VARCHAR | TAG | 执行sql的user name | | username | VARCHAR | TAG | 执行 sql user name |
| sql\_type | VARCHAR | TAG | sql类型,取值范围 select, insertdelete | | sql\_type | VARCHAR | TAG | sql 类型,取值范围 select、insert、delete |
| cluster\_id | VARCHAR | TAG | cluster id | | cluster\_id | VARCHAR | TAG | cluster id |
### taos\_slow\_sql 表 ### taos\_slow\_sql 表
@ -1680,9 +1680,9 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| :---------- | :-------- | :------ | :---------------------------------------------------- | | :---------- | :-------- | :------ | :---------------------------------------------------- |
| \_ts | TIMESTAMP | | timestamp | | \_ts | TIMESTAMP | | timestamp |
| count | DOUBLE | | sql 数量 | | count | DOUBLE | | sql 数量 |
| result | VARCHAR | TAG | sql的执行结果,取值范围 Success, Failed | | result | VARCHAR | TAG | sql 的执行结果,取值范围 Success、Failed |
| username | VARCHAR | TAG | 执行sql的user name | | username | VARCHAR | TAG | 执行 sql user name |
| duration | VARCHAR | TAG | sql执行耗时取值范围 3-10s,10-100s,100-1000s,1000s- | | duration | VARCHAR | TAG | sql 执行耗时,取值范围 3-10s,10-100s,100-1000s,1000s- |
| cluster\_id | VARCHAR | TAG | cluster id | | cluster\_id | VARCHAR | TAG | cluster id |
### taos\_slow\_sql\_detail 表 ### taos\_slow\_sql\_detail 表
@ -1693,10 +1693,10 @@ taosd 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| :------------- | :-------- | :------ | :---------------------------------------------------- | | :------------- | :-------- | :------ | :---------------------------------------------------- |
| start\_ts | TIMESTAMP | | sql 开始执行的客户端时间单位ms主键 | | start\_ts | TIMESTAMP | | sql 开始执行的客户端时间单位ms主键 |
| request\_id | UINT64_T | | sql 请求的 request id为 hash 生产的随机值 | | request\_id | UINT64_T | | sql 请求的 request id为 hash 生产的随机值 |
| query\_time | INT32_T | | sql 执行耗时, 单位ms | | query\_time | INT32_T | | sql 执行耗时单位ms |
| code | INT32_T | | sql 执行返回码0表示成功 | | code | INT32_T | | sql 执行返回码0表示成功 |
| error\_info | VARCHAR | | sql 执行失败时,记录的错误信息 | | error\_info | VARCHAR | | sql 执行失败时,记录的错误信息 |
| type | INT8_T | | sql 语句的类型1-查询2-写入4-其他) | | type | INT8_T | | sql 语句的类型1查询2写入4其他) |
| rows\_num | INT64_T | | sql 执行结果的记录数目 | | rows\_num | INT64_T | | sql 执行结果的记录数目 |
| sql | VARCHAR | | sql 语句的字符串 | | sql | VARCHAR | | sql 语句的字符串 |
| process\_name | VARCHAR | | 进程名称 | | process\_name | VARCHAR | | 进程名称 |

View File

@ -45,7 +45,7 @@ taosAdapter 提供了以下功能:
### WebSocket 接口 ### WebSocket 接口
各语言连接器通过 taosAdapter 的 WebSocket 接口,能够实现 SQL 执行、无模式写入、参数绑定和数据订阅功能。参考[开发指南](../../../develop/connect/#websocket-连接)。 各语言连接器通过 taosAdapter 的 WebSocket 接口,能够实现 SQL 执行、无模式写入、参数绑定和数据订阅功能。参考 [开发指南](../../../develop/connect/#websocket-连接)。
### 兼容 InfluxDB v1 写接口 ### 兼容 InfluxDB v1 写接口
@ -109,7 +109,7 @@ Prometheus 使用的由 \*NIX 内核暴露的硬件和操作系统指标的输
## 安装 ## 安装
taosAdapter 是 TDengine 服务端软件 的一部分,如果您使用 TDengine server 您不需要任何额外的步骤来安装 taosAdapter。您可以从[涛思数据官方网站](https://docs.taosdata.com/releases/tdengine/)下载 TDengine server 安装包。如果需要将 taosAdapter 分离部署在 TDengine server 之外的服务器上,则应该在该服务器上安装完整的 TDengine 来安装 taosAdapter。如果您需要使用源代码编译生成 taosAdapter您可以参考[构建 taosAdapter](https://github.com/taosdata/taosadapter/blob/3.0/BUILD-CN.md)文档。 taosAdapter 是 TDengine 服务端软件 的一部分,如果您使用 TDengine server 您不需要任何额外的步骤来安装 taosAdapter。您可以从 [涛思数据官方网站](https://docs.taosdata.com/releases/tdengine/)下载 TDengine server 安装包。如果需要将 taosAdapter 分离部署在 TDengine server 之外的服务器上,则应该在该服务器上安装完整的 TDengine 来安装 taosAdapter。如果您需要使用源代码编译生成 taosAdapter您可以参考 [构建 taosAdapter](https://github.com/taosdata/taosadapter/blob/3.0/BUILD-CN.md)文档。
安装完成后使用命令 `systemctl start taosadapter` 可以启动 taosAdapter 服务。 安装完成后使用命令 `systemctl start taosadapter` 可以启动 taosAdapter 服务。

View File

@ -42,17 +42,17 @@ tmq+ws://root:taosdata@localhost:6030/db1?timeout=never
- taos使用查询接口从 TDengine 获取数据 - taos使用查询接口从 TDengine 获取数据
- tmq启用数据订阅从 TDengine 获取数据 - tmq启用数据订阅从 TDengine 获取数据
- local数据备份或恢复 - local数据备份或恢复
- pi: 启用 pi-connector从 pi 数据库中获取数据 - pi启用 pi-connector从 pi 数据库中获取数据
- opc启用 opc-connector 从 opc-server 中获取数据 - opc启用 opc-connector 从 opc-server 中获取数据
- mqtt: 启用 mqtt-connector 获取 mqtt-broker 中的数据 - mqtt启用 mqtt-connector 获取 mqtt-broker 中的数据
- kafka: 启用 Kafka 连接器从 Kafka Topics 中订阅消息写入 - kafka启用 Kafka 连接器从 Kafka Topics 中订阅消息写入
- influxdb: 启用 influxdb 连接器从 InfluxDB 获取数据 - influxdb 启用 influxdb 连接器从 InfluxDB 获取数据
- csv从 CSV 文件解析数据 - csv从 CSV 文件解析数据
2. +protocol 包含如下选项: 2. +protocol 包含如下选项:
- +ws: 当 driver 取值为 taos 或 tmq 时使用,表示使用 rest 获取数据。不使用 +ws 则表示使用原生连接获取数据,此时需要 taosx 所在的服务器安装 taosc。 - +ws当 driver 取值为 taos 或 tmq 时使用,表示使用 rest 获取数据。不使用 +ws 则表示使用原生连接获取数据,此时需要 taosx 所在的服务器安装 taosc。
- +ua: 当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-ua - +ua当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-ua
- +da: 当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-da - +da当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-da
3. host:port 表示数据源的地址和端口。 3. host:port 表示数据源的地址和端口。
4. object 表示具体的数据源可以是TDengine的数据库、超级表、表也可以是本地备份文件的路径也可以是对应数据源服务器中的数据库。 4. object 表示具体的数据源可以是TDengine的数据库、超级表、表也可以是本地备份文件的路径也可以是对应数据源服务器中的数据库。
@ -251,7 +251,7 @@ d4,2017-07-14T10:40:00.006+08:00,-2.740636,10,-0.893545,7,California.LosAngles
- `monitor.port``taosKeeper` 服务的端口,默认`6043`。 - `monitor.port``taosKeeper` 服务的端口,默认`6043`。
- `monitor.interval`:向 `taosKeeper` 发送指标的频率,默认为每 10 秒一次,只有 1 到 10 之间的值才有效。 - `monitor.interval`:向 `taosKeeper` 发送指标的频率,默认为每 10 秒一次,只有 1 到 10 之间的值才有效。
- `log.path`:日志文件存放的目录。 - `log.path`:日志文件存放的目录。
- `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。 - `log.level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。
- `log.compress`:日志文件滚动后的文件是否进行压缩。 - `log.compress`:日志文件滚动后的文件是否进行压缩。
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。 - `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。 - `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
@ -401,17 +401,17 @@ taosX 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| -------------------------- | ----------------------------------------------------------------------------- | | -------------------------- | ----------------------------------------------------------------------------- |
| sys_cpu_cores | 系统 CPU 核数 | | sys_cpu_cores | 系统 CPU 核数 |
| sys_total_memory | 系统总内存,单位:字节 | | sys_total_memory | 系统总内存,单位:字节 |
| sys_used_memory | 系统已用内存, 单位:字节 | | sys_used_memory | 系统已用内存单位:字节 |
| sys_available_memory | 系统可用内存, 单位:字节 | | sys_available_memory | 系统可用内存单位:字节 |
| process_uptime | taosX 运行时长,单位:秒 | | process_uptime | taosX 运行时长,单位:秒 |
| process_id | taosX 进程 ID | | process_id | taosX 进程 ID |
| running_tasks | taosX 当前执行任务数 | | running_tasks | taosX 当前执行任务数 |
| completed_tasks | taosX 进程在一个监控周期比如10s内完成的任务数 | | completed_tasks | taosX 进程在一个监控周期(比如 10s内完成的任务数 |
| failed_tasks | taosX 进程在一个监控周期比如10s内失败的任务数 | | failed_tasks | taosX 进程在一个监控周期(比如 10s内失败的任务数 |
| process_cpu_percent | taosX 进程占用 CPU 百分比, 单位 % | | process_cpu_percent | taosX 进程占用 CPU 百分比,单位 % |
| process_memory_percent | taosX 进程占用内存百分比, 单位 % | | process_memory_percent | taosX 进程占用内存百分比,单位 % |
| process_disk_read_bytes | taosX 进程在一个监控周期比如10s内从硬盘读取的字节数的平均值单位 bytes/s | | process_disk_read_bytes | taosX 进程在一个监控周期(比如 10s内从硬盘读取的字节数的平均值单位 bytes/s |
| process_disk_written_bytes | taosX 进程在一个监控周期比如10s内写到硬盘的字节数的平均值单位 bytres/s | | process_disk_written_bytes | taosX 进程在一个监控周期(比如 10s内写到硬盘的字节数的平均值单位 bytres/s |
### Agent ### Agent
@ -420,15 +420,15 @@ taosX 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| -------------------------- | ----------------------------------------------------------------------------- | | -------------------------- | ----------------------------------------------------------------------------- |
| sys_cpu_cores | 系统 CPU 核数 | | sys_cpu_cores | 系统 CPU 核数 |
| sys_total_memory | 系统总内存,单位:字节 | | sys_total_memory | 系统总内存,单位:字节 |
| sys_used_memory | 系统已用内存, 单位:字节 | | sys_used_memory | 系统已用内存单位:字节 |
| sys_available_memory | 系统可用内存, 单位:字节 | | sys_available_memory | 系统可用内存单位:字节 |
| process_uptime | agent 运行时长,单位:秒 | | process_uptime | agent 运行时长,单位:秒 |
| process_id | agent 进程 id | | process_id | agent 进程 id |
| process_cpu_percent | agent 进程占用 CPU 百分比 | | process_cpu_percent | agent 进程占用 CPU 百分比 |
| process_memory_percent | agent 进程占用内存百分比 | | process_memory_percent | agent 进程占用内存百分比 |
| process_uptime | 进程启动时间,单位秒 | | process_uptime | 进程启动时间,单位秒 |
| process_disk_read_bytes | agent 进程在一个监控周期比如10s内从硬盘读取的字节数的平均值单位 bytes/s | | process_disk_read_bytes | agent 进程在一个监控周期(比如 10s内从硬盘读取的字节数的平均值单位 bytes/s |
| process_disk_written_bytes | agent 进程在一个监控周期比如10s内写到硬盘的字节数的平均值单位 bytes/s | | process_disk_written_bytes | agent 进程在一个监控周期(比如 10s内写到硬盘的字节数的平均值单位 bytes/s |
### Connector ### Connector
@ -436,10 +436,10 @@ taosX 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| -------------------------- | --------------------------------------------------------------------------------- | | -------------------------- | --------------------------------------------------------------------------------- |
| process_id | connector 进程 id | | process_id | connector 进程 id |
| process_uptime | 进程启动时间,单位秒 | | process_uptime | 进程启动时间,单位秒 |
| process_cpu_percent | 进程占用 CPU 百分比, 单位 % | | process_cpu_percent | 进程占用 CPU 百分比,单位 % |
| process_memory_percent | 进程占用内存百分比, 单位 % | | process_memory_percent | 进程占用内存百分比,单位 % |
| process_disk_read_bytes | connector 进程在一个监控周期比如10s内从硬盘读取的字节数的平均值单位 bytes/s | | process_disk_read_bytes | connector 进程在一个监控周期(比如 10s内从硬盘读取的字节数的平均值单位 bytes/s |
| process_disk_written_bytes | connector 进程在一个监控周期比如10s内写到硬盘的字节数的平均值单位 bytes/s | | process_disk_written_bytes | connector 进程在一个监控周期(比如 10s内写到硬盘的字节数的平均值单位 bytes/s |
### taosX 通用数据源任务 ### taosX 通用数据源任务
@ -457,7 +457,7 @@ taosX 会将监控指标上报给 taosKeeper这些监控指标会被 taosKeep
| 字段 | 描述 | | 字段 | 描述 |
| --------------------- | -------------------------------------------------------------------- | | --------------------- | -------------------------------------------------------------------- |
| read_concurrency | 并发读取数据源的数据 worker 数, 也等于并发写入 TDengine 的 worker 数 | | read_concurrency | 并发读取数据源的数据 worker 数也等于并发写入 TDengine 的 worker 数 |
| total_stables | 需要迁移的超级表数据数量 | | total_stables | 需要迁移的超级表数据数量 |
| total_updated_tags | 累计更新 tag 数 | | total_updated_tags | 累计更新 tag 数 |
| total_created_tables | 累计创建子表数 | | total_created_tables | 累计创建子表数 |
@ -566,9 +566,9 @@ taosX Parser 插件是一个要求用 C/Rust 语言开发的 C ABI 兼容动态
**函数签名**parser_resp_t parser_new(char* ctx, uint32_t len); **函数签名**parser_resp_t parser_new(char* ctx, uint32_t len);
char* ctx: 用户自定义配置字符串。 char* ctx用户自定义配置字符串。
uint32_t len: 该字符串的二进制长度(不含 `\0`)。 uint32_t len该字符串的二进制长度(不含 `\0`)。
**返回值** **返回值**
@ -597,11 +597,11 @@ const char* parser_mutate(
); );
``` ```
`void* parser`: parser_new 生成的对象指针; `void* parser`parser_new 生成的对象指针;
`const uint8_t* in_ptr`:输入 Payload 的指针; `const uint8_t* in_ptr`:输入 Payload 的指针;
`uint32_t in_len`: 输入 Payload 的 bytes 长度(不含 `\0`; `uint32_t in_len`输入 Payload 的 bytes 长度(不含 `\0`;
`const void* uint8_t* out_ptr`:输出 JSON 字符串的指针(不含 \0。当 out_ptr 指向为空时,表示输出为空。 `const void* uint8_t* out_ptr`:输出 JSON 字符串的指针(不含 \0。当 out_ptr 指向为空时,表示输出为空。
@ -615,4 +615,4 @@ const char* parser_mutate(
**函数签名** void parser_free(void* parser); **函数签名** void parser_free(void* parser);
void* parser: parser_new 生成的对象指针。 void* parserparser_new 生成的对象指针。

View File

@ -7,14 +7,14 @@ sidebar_label: taosX-Agent
## 配置 ## 配置
`Agent` 默认的配置文件位于 `/etc/taos/agent.toml`, 包含以下配置项: `Agent` 默认的配置文件位于 `/etc/taos/agent.toml`包含以下配置项:
- `endpoint`: 必填,`taosX` 的 GRPC 服务地址。 - `endpoint`必填,`taosX` 的 GRPC 服务地址。
- `token`: 必填,在 `Explorer` 上创建 `Agent` 时,产生的 Token。 - `token`必填,在 `Explorer` 上创建 `Agent` 时,产生的 Token。
- `instanceId`:当前 taosx-agent 服务的实例 ID如果同一台机器上启动了多个 taosx-agent 实例,必须保证各个实例的实例 ID 互不相同。 - `instanceId`:当前 taosx-agent 服务的实例 ID如果同一台机器上启动了多个 taosx-agent 实例,必须保证各个实例的实例 ID 互不相同。
- `compression`: 非必填,可配置为 `true``false`, 默认为 `false`。配置为`true`, 则开启 `Agent``taosX` 通信数据压缩。 - `compression`非必填,可配置为 `true``false`, 默认为 `false`。配置为`true`, 则开启 `Agent``taosX` 通信数据压缩。
- `in_memory_cache_capacity`: 非必填,表示可在内存中缓存的最大消息批次数,可配置为大于 0 的整数。默认为 `64` - `in_memory_cache_capacity`非必填,表示可在内存中缓存的最大消息批次数,可配置为大于 0 的整数。默认为 `64`
- `log_level`: 非必填,日志级别,默认为 `info`, 同 `taosX` 一样,支持 `error``warn``info``debug``trace` 五级。已弃用,请使用 `log.level` 代替。 - `log_level`非必填,日志级别,默认为 `info`, 同 `taosX` 一样,支持 `error``warn``info``debug``trace` 五级。已弃用,请使用 `log.level` 代替。
- `log_keep_days`:非必填,日志保存天数,默认为 `30` 天。已弃用,请使用 `log.keepDays` 代替。 - `log_keep_days`:非必填,日志保存天数,默认为 `30` 天。已弃用,请使用 `log.keepDays` 代替。
- `log.path`:日志文件存放的目录。 - `log.path`:日志文件存放的目录。
- `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。 - `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。

View File

@ -13,7 +13,7 @@ taosKeeper 是 TDengine 3.0 版本监控指标的导出工具,通过简单的
taosKeeper 有两种安装方式: taosKeeper 有两种安装方式:
- 安装 TDengine 官方安装包的同时会自动安装 taosKeeper, 详情请参考[TDengine 安装](../../../get-started/)。 - 安装 TDengine 官方安装包的同时会自动安装 taosKeeper,详情请参考 [TDengine 安装](../../../get-started/)。
- 单独编译 taosKeeper 并安装,详情请参考 [taosKeeper](https://github.com/taosdata/taoskeeper) 仓库。 - 单独编译 taosKeeper 并安装,详情请参考 [taosKeeper](https://github.com/taosdata/taoskeeper) 仓库。
@ -64,7 +64,7 @@ Usage of taoskeeper v3.3.3.0:
### 配置文件 ### 配置文件
taosKeeper 支持用 `taoskeeper -c <keeper config file>` 命令来指定配置文件。 taosKeeper 支持用 `taoskeeper -c <keeper config file>` 命令来指定配置文件。
若不指定配置文件taosKeeper 会使用默认配置文件,其路径为: `/etc/taos/taoskeeper.toml` 若不指定配置文件taosKeeper 会使用默认配置文件,其路径为:`/etc/taos/taoskeeper.toml` 。
若既不指定 taosKeeper 配置文件,且 `/etc/taos/taoskeeper.toml` 也不存在,将使用默认配置。 若既不指定 taosKeeper 配置文件,且 `/etc/taos/taoskeeper.toml` 也不存在,将使用默认配置。
**下面是配置文件的示例:** **下面是配置文件的示例:**
@ -198,7 +198,7 @@ Active: inactive (dead)
:::info :::info
- `launchctl` 命令管理`com.tdengine.taoskeeper`需要管理员权限,务必在前面加 `sudo` 来增强安全性。 - `launchctl` 命令管理 `com.tdengine.taoskeeper` 需要管理员权限,务必在前面加 `sudo` 来增强安全性。
- `sudo launchctl list | grep taoskeeper` 指令返回的第一列是 `taoskeeper` 程序的 PID若为 `-` 则说明 taoskeeper 服务未运行。 - `sudo launchctl list | grep taoskeeper` 指令返回的第一列是 `taoskeeper` 程序的 PID若为 `-` 则说明 taoskeeper 服务未运行。
- 故障排查:如果服务异常请查看日志获取更多信息。日志文件默认放在 `/var/log/taos` 下。 - 故障排查:如果服务异常请查看日志获取更多信息。日志文件默认放在 `/var/log/taos` 下。
@ -314,7 +314,7 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### 监控信息支持的标签 ##### 监控信息支持的标签
- `cluster_id` 集群 id - `cluster_id`:集群 id
##### 相关指标及其含义 ##### 相关指标及其含义
@ -346,15 +346,15 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### 监控信息支持的标签 ##### 监控信息支持的标签
- `cluster_id` 集群 id - `cluster_id`:集群 id
- `dnode_ep` dnode 端点 - `dnode_ep`dnode 端点
- `dnode_id`dnode id - `dnode_id`dnode id
##### 相关指标及其含义 ##### 相关指标及其含义
| 指标名称 | 类型 | 含义 | | 指标名称 | 类型 | 含义 |
| ------------------------------ | ------- | ---------------------------------------------------------------------------------------- | | ------------------------------ | ------- | ---------------------------------------------------------------------------------------- |
| taos_d_info_status | gauge | dnode 状态,标签 value 表示状态 ready 表示正常, offline 表示下线, unknown 表示未知。 | | taos_d_info_status | gauge | dnode 状态,标签 value 表示状态、ready 表示正常、offline 表示下线、unknown 表示未知。 |
| taos_dnodes_info_cpu_cores | gauge | CPU 核心数 | | taos_dnodes_info_cpu_cores | gauge | CPU 核心数 |
| taos_dnodes_info_cpu_engine | gauge | 该 dnode 的进程所使用的 CPU 百分比(取值范围 0~100 | | taos_dnodes_info_cpu_engine | gauge | 该 dnode 的进程所使用的 CPU 百分比(取值范围 0~100 |
| taos_dnodes_info_cpu_system | gauge | 该 dnode 所在节点的系统使用的 CPU 百分比(取值范围 0~100 | | taos_dnodes_info_cpu_system | gauge | 该 dnode 所在节点的系统使用的 CPU 百分比(取值范围 0~100 |
@ -381,8 +381,8 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### 监控信息支持的标签 ##### 监控信息支持的标签
- `cluster_id` 集群 id - `cluster_id`:集群 id
- `dnode_ep` dnode 端点 - `dnode_ep`dnode 端点
- `dnode_id`dnode id - `dnode_id`dnode id
- `data_dir_name`:数据目录名 - `data_dir_name`:数据目录名
- `data_dir_level`:数据目录级别 - `data_dir_level`:数据目录级别
@ -399,8 +399,8 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### 监控信息支持的标签 ##### 监控信息支持的标签
- `cluster_id` 集群 id - `cluster_id`:集群 id
- `dnode_ep` dnode 端点 - `dnode_ep`dnode 端点
- `dnode_id`dnode id - `dnode_id`dnode id
- `log_dir_name`:日志目录名 - `log_dir_name`:日志目录名
@ -416,8 +416,8 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### 监控信息支持的标签 ##### 监控信息支持的标签
- `cluster_id` 集群 id - `cluster_id`:集群 id
- `dnode_ep` dnode 端点 - `dnode_ep`dnode 端点
- `dnode_id`dnode id - `dnode_id`dnode id
##### 相关指标及其含义 ##### 相关指标及其含义
@ -460,7 +460,7 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### 监控信息支持的标签 ##### 监控信息支持的标签
- `identify` 节点 endpoint - `identify`:节点 endpoint
##### 相关指标及其含义 ##### 相关指标及其含义
@ -474,64 +474,64 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
##### taos_m_info_role ##### taos_m_info_role
- **标签**: - **标签**:
- `cluster_id`: 集群 id - `cluster_id`集群 id
- `mnode_ep`: mnode 端点 - `mnode_ep`mnode 端点
- `mnode_id`: mnode id - `mnode_id`mnode id
- `value`: 角色值(该 mnode 的状态取值范围offline, follower, candidate, leader, error, learner - `value`:角色值(该 mnode 的状态取值范围offline、follower、candidate、leader、error、learner
- **类型**: gauge - **类型**gauge
- **含义**: mnode 角色 - **含义**mnode 角色
##### taos_taos_sql_req_count ##### taos_taos_sql_req_count
- **标签**: - **标签**:
- `cluster_id`: 集群 id - `cluster_id`集群 id
- `result`: 请求结果(取值范围: Success, Failed - `result`请求结果取值范围Success、Failed
- `sql_type`: SQL 类型取值范围select, insertinserted_rows, delete - `sql_type`SQL 类型取值范围select、insert、inserted_rows、delete
- `username`: 用户名 - `username`用户名
- **类型**: gauge - **类型**gauge
- **含义**: SQL 请求数量 - **含义**SQL 请求数量
##### taos_taosd_sql_req_count ##### taos_taosd_sql_req_count
- **标签**: - **标签**:
- `cluster_id`: 集群 id - `cluster_id`集群 id
- `dnode_ep`: dnode 端点 - `dnode_ep`dnode 端点
- `dnode_id`: dnode id - `dnode_id`dnode id
- `result`: 请求结果(取值范围: Success, Failed - `result`请求结果取值范围Success、Failed
- `sql_type`: SQL 类型取值范围select, insertinserted_rows, delete - `sql_type`SQL 类型取值范围select、insert、inserted_rows、delete
- `username`: 用户名 - `username`用户名
- `vgroup_id`: 虚拟组 id - `vgroup_id`虚拟组 id
- **类型**: gauge - **类型**gauge
- **含义**: SQL 请求数量 - **含义**SQL 请求数量
##### taos_taosd_vgroups_info_status ##### taos_taosd_vgroups_info_status
- **标签**: - **标签**:
- `cluster_id`: 集群 id - `cluster_id`集群 id
- `database_name`: 数据库名称 - `database_name`数据库名称
- `vgroup_id`: 虚拟组 id - `vgroup_id`虚拟组 id
- **类型**: gauge - **类型**gauge
- **含义**: 虚拟组状态。 0 为 unsynced表示没有 leader 选出1 为 ready。 - **含义**虚拟组状态。 0 为 unsynced表示没有 leader 选出1 为 ready。
##### taos_taosd_vgroups_info_tables_num ##### taos_taosd_vgroups_info_tables_num
- **标签**: - **标签**:
- `cluster_id`: 集群 id - `cluster_id`集群 id
- `database_name`: 数据库名称 - `database_name`数据库名称
- `vgroup_id`: 虚拟组 id - `vgroup_id`虚拟组 id
- **类型**: gauge - **类型**gauge
- **含义**: 虚拟组表数量 - **含义**虚拟组表数量
##### taos_taosd_vnodes_info_role ##### taos_taosd_vnodes_info_role
- **标签**: - **标签**:
- `cluster_id`: 集群 id - `cluster_id`集群 id
- `database_name`: 数据库名称 - `database_name`数据库名称
- `dnode_id`: dnode id - `dnode_id`dnode id
- `value`: 角色值取值范围offline, follower, candidate, leader, error, learner - `value`角色值取值范围offline、follower、candidate、leader、error、learner
- `vgroup_id`: 虚拟组 id - `vgroup_id`虚拟组 id
- **类型**: gauge - **类型**gauge
- **含义**: 虚拟节点角色 - **含义**虚拟节点角色
### 抽取配置 ### 抽取配置

View File

@ -128,7 +128,7 @@ cors = true
- `addr`taosExplorer 服务绑定的 IPv4 地址,默认为 `0.0.0.0`。如需修改,请配置为 `localhost` 之外的地址以对外提供服务。 - `addr`taosExplorer 服务绑定的 IPv4 地址,默认为 `0.0.0.0`。如需修改,请配置为 `localhost` 之外的地址以对外提供服务。
- `ipv6`taosExplorer 服务绑定的 IPv6 地址,默认不绑定 IPv6 地址。 - `ipv6`taosExplorer 服务绑定的 IPv6 地址,默认不绑定 IPv6 地址。
- `instanceId`:当前 explorer 服务的实例 ID如果同一台机器上启动了多个 explorer 实例,必须保证各个实例的实例 ID 互不相同。 - `instanceId`:当前 explorer 服务的实例 ID如果同一台机器上启动了多个 explorer 实例,必须保证各个实例的实例 ID 互不相同。
- `log_level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。此参数已弃用,请使用 `log.level` 代替。 - `log_level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。此参数已弃用,请使用 `log.level` 代替。
- `cluster`TDengine 集群的 taosAdapter 地址。 - `cluster`TDengine 集群的 taosAdapter 地址。
- `cluster_native`TDengine 集群的原生连接地址,默认关闭。 - `cluster_native`TDengine 集群的原生连接地址,默认关闭。
- `x_api`taosX 的 gRPC 地址。 - `x_api`taosX 的 gRPC 地址。
@ -137,7 +137,7 @@ cors = true
- `ssl.certificate`SSL 证书(如果同时设置了 certificate 与 certificate_key 两个参数,则启用 HTTPS 服务,否则不启用)。 - `ssl.certificate`SSL 证书(如果同时设置了 certificate 与 certificate_key 两个参数,则启用 HTTPS 服务,否则不启用)。
- `ssl.certificate_key`SSL 证书密钥。 - `ssl.certificate_key`SSL 证书密钥。
- `log.path`:日志文件存放的目录。 - `log.path`:日志文件存放的目录。
- `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。 - `log.level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。
- `log.compress`:日志文件滚动后的文件是否进行压缩。 - `log.compress`:日志文件滚动后的文件是否进行压缩。
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。 - `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。 - `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
@ -220,10 +220,10 @@ sc.exe stop taos-explorer # Windows
## 注册登录 ## 注册登录
安装好,打开浏览器,默认访问`http://ip:6060`来访问 taos-explorer 服务。如果还没有注册过,则首先进入注册界面。输入手机号获取验证码,输入正确的验证码后,即可注册成功。 安装好,打开浏览器,默认访问 `http://ip:6060` 来访问 taos-explorer 服务。如果还没有注册过,则首先进入注册界面。输入手机号获取验证码,输入正确的验证码后,即可注册成功。
登录时,请使用数据库用户名和密码登录。首次使用,默认的用户名为 `root`,密码为 `taosdata`。登录成功后即可进入`数据浏览器`页面,您可以使用查看数据库、 创建数据库、创建超级表/子表等管理功能。 登录时,请使用数据库用户名和密码登录。首次使用,默认的用户名为 `root`,密码为 `taosdata`。登录成功后即可进入`数据浏览器`页面,您可以使用查看数据库、 创建数据库、创建超级表/子表等管理功能。
其他功能页面,如`数据写入-数据源`等页面,为企业版特有功能,您可以点击查看和简单体验,并不能实际使用。 其他功能页面,如 `数据写入-数据源` 等页面,为企业版特有功能,您可以点击查看和简单体验,并不能实际使用。
如果由于网络原因无法完成注册环节,则需要在有外网的环境注册完毕,然后把注册好的 /etc/taos/explorer-register.cfg 替换到内网环境。 如果由于网络原因无法完成注册环节,则需要在有外网的环境注册完毕,然后把注册好的 `/etc/taos/explorer-register.cfg` 替换到内网环境。

View File

@ -37,23 +37,23 @@ taos> quit
### 基础参数 ### 基础参数
可通过配置命令行参数来改变 TDengine CLI 的行为。以下为常用的几个命令行参数: 可通过配置命令行参数来改变 TDengine CLI 的行为。以下为常用的几个命令行参数:
- -h HOST: 要连接的 TDengine 服务端所在服务器的 FQDN, 默认值: 127.0.0.1 - -h HOST要连接的 TDengine 服务端所在服务器的 FQDN, 默认值127.0.0.1。
- -P PORT: 指定服务端所用端口号默认值6030 - -P PORT指定服务端所用端口号默认值6030
- -u USER: 连接时使用的用户名默认值root - -u USER连接时使用的用户名默认值root
- -p PASSWORD: 连接服务端时使用的密码,特殊字符如 `! & ( ) < > ; |` 需使用字符 `\` 进行转义处理, 默认值taosdata - -p PASSWORD连接服务端时使用的密码,特殊字符如 `! & ( ) < > ; |` 需使用字符 `\` 进行转义处理, 默认值taosdata。
- -?, --help: 打印出所有命令行参数。 - -?, --help打印出所有命令行参数。
- -s COMMAND: 以非交互模式执行的 SQL 命令。 - -s COMMAND以非交互模式执行的 SQL 命令。
使用 `-s` 参数可进行非交互式执行 SQL执行完成后退出此模式适合在自动化脚本中使用。 使用 `-s` 参数可进行非交互式执行 SQL执行完成后退出此模式适合在自动化脚本中使用。
如以下命令连接到服务器 h1.taos.com, 执行 -s 指定的 SQL: 如以下命令连接到服务器 h1.taos.com, 执行 -s 指定的 SQL
```bash ```bash
taos -h my-server -s "use db; show tables;" taos -h my-server -s "use db; show tables;"
``` ```
- -c CONFIGDIR: 指定配置文件目录。 - -c CONFIGDIR指定配置文件目录。
Linux 环境下默认为 `/etc/taos`,该目录下的配置文件默认名称为 `taos.cfg` Linux 环境下默认为 `/etc/taos`,该目录下的配置文件默认名称为 `taos.cfg`
使用 `-c` 参数改变 `taosc` 客户端加载配置文件的位置,客户端配置参数参考 [客户端配置](../../components/taosc) 使用 `-c` 参数改变 `taosc` 客户端加载配置文件的位置,客户端配置参数参考 [客户端配置](../../components/taosc)。
以下命令指定了 `taosc` 客户端加载 `/root/cfg/` 下的 `taos.cfg` 配置文件。 以下命令指定了 `taosc` 客户端加载 `/root/cfg/` 下的 `taos.cfg` 配置文件。
```bash ```bash
taos -c /root/cfg/ taos -c /root/cfg/
@ -61,30 +61,30 @@ taos> quit
### 高级参数 ### 高级参数
- -a AUTHSTR: 连接服务端的授权信息。 - -a AUTHSTR连接服务端的授权信息。
- -A: 通过用户名和密码计算授权信息。 - -A通过用户名和密码计算授权信息。
- -B: 设置 BI 工具显示模式,设置后所有输出都遵循 BI 工具的格式进行输出。 - -B设置 BI 工具显示模式,设置后所有输出都遵循 BI 工具的格式进行输出。
- -C: 打印 -c 指定的目录中 `taos.cfg` 的配置参数。 - -C打印 -c 指定的目录中 `taos.cfg` 的配置参数。
- -d DATABASE: 指定连接到服务端时使用的数据库。 - -d DATABASE指定连接到服务端时使用的数据库。
- -E dsn: 使用 WebSocket DSN 连接云服务或者提供 WebSocket 连接的服务端。 - -E dsn使用 WebSocket DSN 连接云服务或者提供 WebSocket 连接的服务端。
- -f FILE: 以非交互模式执行 SQL 脚本文件。文件中一个 SQL 语句只能占一行。 - -f FILE以非交互模式执行 SQL 脚本文件。文件中一个 SQL 语句只能占一行。
- -k: 测试服务端运行状态0: unavailable1: network ok2: service ok3: service degraded4: exiting - -k测试服务端运行状态0unavailable、1network ok、2service ok、3service degraded、4exiting
- -l PKTLEN: 网络测试时使用的测试包大小。 - -l PKTLEN网络测试时使用的测试包大小。
- -n NETROLE: 网络连接测试时的测试范围,默认为 `client`, 可选值为 `client`、`server` - -n NETROLE:网络连接测试时的测试范围,默认为 `client`,可选值为 `client`、`server`
- -N PKTNUM: 网络测试时使用的测试包数量。 - -N PKTNUM网络测试时使用的测试包数量。
- -r: 将时间列转化为无符号 64 位整数类型输出(即 C 语言中 uint64_t) - -r将时间列转化为无符号 64 位整数类型输出(即 C 语言中 uint64_t)。
- -R: 使用 RESTful 模式连接服务端。 - -R使用 RESTful 模式连接服务端。
- -t: 测试服务端启动状态,状态同 -k - -t:测试服务端启动状态,状态同 -k
- -w DISPLAYWIDTH: 客户端列显示宽度。 - -w DISPLAYWIDTH客户端列显示宽度。
- -z TIMEZONE: 指定时区,默认为本地时区。 - -z TIMEZONE指定时区,默认为本地时区。
- -V: 打印出当前版本号。 - -V打印出当前版本号。
## 数据导出/导入 ## 数据导出/导入
### 数据导出 ### 数据导出
- 可以使用符号 “>>” 导出查询结果到某个文件中,语法为: sql 查询语句 >> ‘输出文件名’; 输出文件如果不写路径的话,将输出至当前目录下。如 `select * from d0 >> /root/d0.csv;` 将把查询结果输出到 /root/d0.csv 中。 - 可以使用符号 “>>” 导出查询结果到某个文件中语法为sql 查询语句 >> ‘输出文件名’; 输出文件如果不写路径的话,将输出至当前目录下。如 `select * from d0 >> /root/d0.csv;` 将把查询结果输出到 /root/d0.csv 中。
### 数据导入 ### 数据导入
@ -105,7 +105,7 @@ taos> source <filename>;
- TAB 键前为空命令状态下按 TAB 键,会列出 TDengine CLI 支持的所有命令。 - TAB 键前为空命令状态下按 TAB 键,会列出 TDengine CLI 支持的所有命令。
- TAB 键前为空格状态下按 TAB 键,会显示此位置可以出现的所有命令词的第一个,再次按 TAB 键切为下一个。 - TAB 键前为空格状态下按 TAB 键,会显示此位置可以出现的所有命令词的第一个,再次按 TAB 键切为下一个。
- TAB 键前为字符串,会搜索与此字符串前缀匹配的所有可出现命令词,并显示第一个,再次按 TAB 键切为下一个。 - TAB 键前为字符串,会搜索与此字符串前缀匹配的所有可出现命令词,并显示第一个,再次按 TAB 键切为下一个。
- 输入反斜杠 `\` + TAB 键, 会自动补全为列显示模式命令词 `\G;` - 输入反斜杠 `\` + TAB 键, 会自动补全为列显示模式命令词 `\G;`
### 设置字符列显示宽度 ### 设置字符列显示宽度
@ -120,10 +120,10 @@ taos> SET MAX_BINARY_DISPLAY_WIDTH 120;
### 其它 ### 其它
- 可以使用上下光标键查看历史输入的指令。 - 可以使用上下光标键查看历史输入的指令。
- 在 TDengine CLI 中使用 `alter user` 命令可以修改用户密码,缺省密码为 `taosdata` - 在 TDengine CLI 中使用 `alter user` 命令可以修改用户密码,缺省密码为 `taosdata`
- Ctrl+C 中止正在进行中的查询。 - Ctrl+C 中止正在进行中的查询。
- 执行 `RESET QUERY CACHE` 可清除本地表 Schema 的缓存。 - 执行 `RESET QUERY CACHE` 可清除本地表 Schema 的缓存。
- 批量执行 SQL 语句。可以将一系列的 TDengine CLI 命令(以英文 ; 结尾,每个 SQL 语句为一行)按行存放在文件里,在 TDengine CLI 里执行命令 `source <file-name>` 自动执行该文件里所有的 SQL 语句。 - 批量执行 SQL 语句。可以将一系列的 TDengine CLI 命令(以英文 `;` 结尾,每个 SQL 语句为一行)按行存放在文件里,在 TDengine CLI 里执行命令 `source <file-name>` 自动执行该文件里所有的 SQL 语句。
## 错误代码表 ## 错误代码表
在 TDengine 3.3.4.8 版本后 TDengine CLI 在返回错误信息中返回了具体错误码,用户可到 TDengine 官网错误码页面查找具体原因及解决措施,见:[错误码参考表](https://docs.taosdata.com/reference/error-code/) 在 TDengine 3.3.4.8 版本后 TDengine CLI 在返回错误信息中返回了具体错误码,用户可到 TDengine 官网错误码页面查找具体原因及解决措施,见:[错误码参考表](https://docs.taosdata.com/reference/error-code/)

View File

@ -4,7 +4,7 @@ sidebar_label: taosdump
toc_max_heading_level: 4 toc_max_heading_level: 4
--- ---
taosdump 是为开源用户提供的 TDengine 数据备份/恢复工具,备份数据文件采用标准 [ Apache AVRO ](https://avro.apache.org/) 格式方便与外界生态交换数据。taosdump 提供多种数据备份及恢复选项来满足不同需求,可通过 --help 查看支持的全部选项。 taosdump 是为开源用户提供的 TDengine 数据备份/恢复工具,备份数据文件采用标准 [Apache AVRO](https://avro.apache.org/) 格式方便与外界生态交换数据。taosdump 提供多种数据备份及恢复选项来满足不同需求,可通过 --help 查看支持的全部选项。
## 工具获取 ## 工具获取

View File

@ -12,7 +12,7 @@ taosBenchmark 是 TDengine 服务器及客户端安装包中默认安装组件
## 运行 ## 运行
taosBenchmark 支持无参数、命令行、配置文件三种运行模式,`命令行` 为 `配置文件` 功能子集,两者同时使用时,以命令行方式优先。 taosBenchmark 支持无参数、命令行、配置文件三种运行模式,`命令行` 为 `配置文件` 功能子集,两者同时使用时,以命令行方式优先。
:::tip :::tip
在运行 taosBenchmark 之前要确保 TDengine 集群已经在正确运行。 在运行 taosBenchmark 之前要确保 TDengine 集群已经在正确运行。
@ -24,18 +24,18 @@ taosBenchmark 支持无参数、命令行、配置文件三种运行模式,`
taosBenchmark taosBenchmark
``` ```
在无参数运行时taosBenchmark 默认连接 `/etc/taos/taos.cfg` 中指定的 TDengine 集群。 在无参数运行时taosBenchmark 默认连接 `/etc/taos/taos.cfg` 中指定的 TDengine 集群。
连接成功后,会默认创建智能电表示例数据库 test创建超级表 meters, 创建子表 1 万,每子写入数据 1 万条,若 test 库已存在,默认会先删再建。 连接成功后,会默认创建智能电表示例数据库 test创建超级表 meters, 创建子表 1 万,每子写入数据 1 万条,若 test 库已存在,默认会先删再建。
### 命令行模式 ### 命令行模式
命令行支持的参数为写入功能中使用较为频繁的参数,查询与订阅功能不支持命令行方式。 命令行支持的参数为写入功能中使用较为频繁的参数,查询与订阅功能不支持命令行方式。
示例: 示例:
```bash ```bash
taosBenchmark -d db -t 100 -n 1000 -T 4 -I stmt -y taosBenchmark -d db -t 100 -n 1000 -T 4 -I stmt -y
``` ```
此命令表示使用 `taosBenchmark` 将创建一个名为 `db` 的数据库,并建立默认超级表 `meters`,子表 100 ,使用参数绑定(stmt)方式为每张子表写入 1000 条记录。 此命令表示使用 `taosBenchmark` 将创建一个名为 `db` 的数据库,并建立默认超级表 `meters`,子表 100使用参数绑定(stmt)方式为每张子表写入 1000 条记录。
### 配置文件模式 ### 配置文件模式
@ -52,22 +52,22 @@ taosBenchmark -f <json file>
| -c/--config-dir \<dir> | TDengine 集群配置文件所在的目录,默认路径是 /etc/taos | | -c/--config-dir \<dir> | TDengine 集群配置文件所在的目录,默认路径是 /etc/taos |
| -h/--host \<host> | 指定要连接的 TDengine 服务端的 FQDN默认值为 localhost | | -h/--host \<host> | 指定要连接的 TDengine 服务端的 FQDN默认值为 localhost |
| -P/--port \<port> | 要连接的 TDengine 服务器的端口号,默认值为 6030 | | -P/--port \<port> | 要连接的 TDengine 服务器的端口号,默认值为 6030 |
| -I/--interface \<insertMode> | 插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc | | -I/--interface \<insertMode> | 插入模式,可选项有 taosc、rest、stmt、sml、sml-rest分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc |
| -u/--user \<user> | 用于连接 TDengine 服务端的用户名,默认为 root | | -u/--user \<user> | 用于连接 TDengine 服务端的用户名,默认为 root |
| -U/--supplement-insert | 写入数据而不提前建数据库和表,默认关闭 | | -U/--supplement-insert | 写入数据而不提前建数据库和表,默认关闭 |
| -p/--password \<passwd> | 用于连接 TDengine 服务端的密码,默认值为 taosdata | | -p/--password \<passwd> | 用于连接 TDengine 服务端的密码,默认值为 taosdata |
| -o/--output \<file> | 结果输出文件的路径,默认值为 ./output.txt | | -o/--output \<file> | 结果输出文件的路径,默认值为 ./output.txt |
| -T/--thread \<threadNum> | 插入数据的线程数量,默认为 8 | | -T/--thread \<threadNum> | 插入数据的线程数量,默认为 8 |
| -B/--interlace-rows \<rowNum> |启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0 即向一张子表完成数据插入后才会向下一张子表进行数据插入 | | -B/--interlace-rows \<rowNum> |启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0 即向一张子表完成数据插入后才会向下一张子表进行数据插入 |
| -i/--insert-interval \<timeInterval> | 指定交错插入模式的插入间隔,单位为 ms默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用 |意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入 | | -i/--insert-interval \<timeInterval> | 指定交错插入模式的插入间隔,单位为 ms默认值为 0。只有当 `-B/--interlace-rows` 大于 0 时才起作用 |意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入 |
| -r/--rec-per-req \<rowNum> | 每次向 TDengine 请求写入的数据行数,默认值为 30000 | | -r/--rec-per-req \<rowNum> | 每次向 TDengine 请求写入的数据行数,默认值为 30000 |
| -t/--tables \<tableNum> | 指定子表的数量,默认为 10000 | | -t/--tables \<tableNum> | 指定子表的数量,默认为 10000 |
| -S/--timestampstep \<stepLength> | 每个子表中插入数据的时间戳步长,单位是 ms默认值是 1 | | -S/--timestampstep \<stepLength> | 每个子表中插入数据的时间戳步长,单位是 ms默认值是 1 |
| -n/--records \<recordNum> | 每个子表插入的记录数,默认值为 10000 | | -n/--records \<recordNum> | 每个子表插入的记录数,默认值为 10000 |
| -d/--database \<dbName> | 所使用的数据库的名称,默认值为 test | | -d/--database \<dbName> | 所使用的数据库的名称,默认值为 test |
| -b/--data-type \<colType> | 指定超级表普通列数据类型, 多个使用逗号分隔,默认值: "FLOAT,INT,FLOAT" 如:`taosBenchmark -b "FLOAT,BINARY(8),NCHAR(16)"`| | -b/--data-type \<colType> | 指定超级表普通列数据类型, 多个使用逗号分隔,默认值:"FLOAT,INT,FLOAT" 如:`taosBenchmark -b "FLOAT,BINARY(8),NCHAR(16)"`|
| -A/--tag-type \<tagType> | 指定超级表标签列数据类型,多个使用逗号分隔,默认值: "INT,BINARY(24)" 如:`taosBenchmark -A "INT,BINARY(8),NCHAR(8)"`| | -A/--tag-type \<tagType> | 指定超级表标签列数据类型,多个使用逗号分隔,默认值:"INT,BINARY(24)" 如:`taosBenchmark -A "INT,BINARY(8),NCHAR(8)"`|
| -l/--columns \<colNum> | 超级表的数据列的总数量。如果同时设置了该参数和 `-b/--data-type`,则最后的结果列数为两者取大。如果本参数指定的数量大于 `-b/--data-type` 指定的列数,则未指定的列类型默认为 INT 例如: `-l 5 -b float,double` 那么最后的列为 `FLOAT,DOUBLE,INT,INT,INT`。如果 columns 指定的数量小于或等于 `-b/--data-type` 指定的列数,则结果为 `-b/--data-type` 指定的列和类型,例如: `-l 3 -b float,double,float,bigint`,那么最后的列为 `FLOAT,DOUBLE,FLOAT,BIGINT` | | -l/--columns \<colNum> | 超级表的数据列的总数量。如果同时设置了该参数和 `-b/--data-type`,则最后的结果列数为两者取大。如果本参数指定的数量大于 `-b/--data-type` 指定的列数,则未指定的列类型默认为 INT 例如: `-l 5 -b float,double` 那么最后的列为 `FLOAT,DOUBLE,INT,INT,INT`。如果 columns 指定的数量小于或等于 `-b/--data-type` 指定的列数,则结果为 `-b/--data-type` 指定的列和类型,例如`-l 3 -b float,double,float,bigint`,那么最后的列为 `FLOAT,DOUBLE,FLOAT,BIGINT` |
| -L/--partial-col-num \<colNum> | 指定某些列写入数据,其他列数据为 NULL。默认所有列都写入数据 | | -L/--partial-col-num \<colNum> | 指定某些列写入数据,其他列数据为 NULL。默认所有列都写入数据 |
| -w/--binwidth \<length> | nchar 和 binary 类型的默认长度,默认值为 64 | | -w/--binwidth \<length> | nchar 和 binary 类型的默认长度,默认值为 64 |
| -m/--table-prefix \<tablePrefix> | 子表名称的前缀,默认值为 "d" | | -m/--table-prefix \<tablePrefix> | 子表名称的前缀,默认值为 "d" |
@ -93,162 +93,162 @@ taosBenchmark -f <json file>
本节所列参数适用于所有功能模式。 本节所列参数适用于所有功能模式。
- **filetype** : 功能分类,可选值为 `insert`, `query``subscribe`。分别对应插入、查询和订阅功能。每个配置文件中只能指定其中之一。 - **filetype**功能分类,可选值为 `insert`, `query``subscribe`。分别对应插入、查询和订阅功能。每个配置文件中只能指定其中之一。
- **cfgdir** : TDengine 客户端配置文件所在的目录,默认路径是 /etc/taos 。 - **cfgdir**TDengine 客户端配置文件所在的目录,默认路径是 /etc/taos 。
- **host** : 指定要连接的 TDengine 服务端的 FQDN默认值为 localhost 。 - **host**指定要连接的 TDengine 服务端的 FQDN默认值为 localhost 。
- **port** : 要连接的 TDengine 服务器的端口号,默认值为 6030 。 - **port**要连接的 TDengine 服务器的端口号,默认值为 6030 。
- **user** : 用于连接 TDengine 服务端的用户名,默认为 root 。 - **user**用于连接 TDengine 服务端的用户名,默认为 root 。
- **password** : 用于连接 TDengine 服务端的密码,默认值为 taosdata。 - **password**用于连接 TDengine 服务端的密码,默认值为 taosdata。
### 写入配置参数 ### 写入配置参数
写入场景下 `filetype` 必须设置为 `insert`,该参数及其它通用参数详见 [通用配置参数](#通用配置参数) 写入场景下 `filetype` 必须设置为 `insert`,该参数及其它通用参数详见 [通用配置参数](#通用配置参数)
- **keep_trying** : 失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本。 - **keep_trying**失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本。
- **trying_interval** : 失败重试间隔时间,单位为毫秒,仅在 keep_trying 指定重试后有效。需使用 v3.0.9 以上版本。 - **trying_interval**失败重试间隔时间,单位为毫秒,仅在 keep_trying 指定重试后有效。需使用 v3.0.9 以上版本。
- **childtable_from 和 childtable_to** : 指定写入子表范围,开闭区间为 [childtable_from, childtable_to) 。 - **childtable_from 和 childtable_to**指定写入子表范围,开闭区间为 [childtable_from, childtable_to) 。
   
- **continue_if_fail** : 允许用户定义失败后行为。 - **continue_if_fail**允许用户定义失败后行为。
“continue_if_fail”:  “no”, 失败 taosBenchmark 自动退出,默认行为。 “continue_if_fail”“no”, 失败 taosBenchmark 自动退出,默认行为。
“continue_if_fail”: “yes”, 失败 taosBenchmark 警告用户,并继续写入。 “continue_if_fail”“yes”, 失败 taosBenchmark 警告用户,并继续写入。
“continue_if_fail”: “smart”, 如果子表不存在失败taosBenchmark 会建立子表并继续写入。 “continue_if_fail”“smart”, 如果子表不存在失败taosBenchmark 会建立子表并继续写入。
#### 数据库相关 #### 数据库相关
创建数据库时的相关参数在 json 配置文件中的 `dbinfo` 中配置,个别具体参数如下。其余参数均与 TDengine 中 `create database` 时所指定的数据库参数相对应,详见[../../taos-sql/database] 创建数据库时的相关参数在 json 配置文件中的 `dbinfo` 中配置,个别具体参数如下。其余参数均与 TDengine 中 `create database` 时所指定的数据库参数相对应,详见[../../taos-sql/database]
- **name** : 数据库名。 - **name**数据库名。
- **drop** : 数据库已存在时是否删除,可选项为 "yes" 或 "no", 默认为 “yes” 。 - **drop**数据库已存在时是否删除,可选项为 "yes" 或 "no", 默认为 “yes” 。
#### 超级表相关 #### 超级表相关
创建超级表时的相关参数在 json 配置文件中的 `super_tables` 中配置,具体参数如下。 创建超级表时的相关参数在 json 配置文件中的 `super_tables` 中配置,具体参数如下。
- **name**: 超级表名,必须配置,没有默认值。 - **name**超级表名,必须配置,没有默认值。
- **child_table_exists** : 子表是否已经存在,默认值为 "no",可选值为 "yes" 或 "no" 。 - **child_table_exists**子表是否已经存在,默认值为 "no",可选值为 "yes" 或 "no" 。
- **childtable_count** : 子表的数量,默认值为 10。 - **childtable_count**子表的数量,默认值为 10。
- **childtable_prefix** : 子表名称的前缀,必选配置项,没有默认值。 - **childtable_prefix**子表名称的前缀,必选配置项,没有默认值。
- **escape_character** : 超级表和子表名称中是否包含转义字符,默认值为 "no",可选值为 "yes" 或 "no" 。 - **escape_character**超级表和子表名称中是否包含转义字符,默认值为 "no",可选值为 "yes" 或 "no" 。
- **auto_create_table** : 仅当 insert_mode 为 taosc, rest, stmt 并且 child_table_exists 为 "no" 时生效,该参数为 "yes" 表示 taosBenchmark 在插入数据时会自动创建不存在的表;为 "no" 则表示先提前建好所有表再进行插入。 - **auto_create_table**仅当 insert_mode 为 taosc, rest, stmt 并且 child_table_exists 为 "no" 时生效,该参数为 "yes" 表示 taosBenchmark 在插入数据时会自动创建不存在的表;为 "no" 则表示先提前建好所有表再进行插入。
- **batch_create_tbl_num** : 创建子表时每批次的建表数量,默认为 10。注实际的批数不一定与该值相同当执行的 SQL 语句大于支持的最大长度时,会自动截断再执行,继续创建。 - **batch_create_tbl_num**创建子表时每批次的建表数量,默认为 10。注实际的批数不一定与该值相同当执行的 SQL 语句大于支持的最大长度时,会自动截断再执行,继续创建。
- **data_source** : 数据的来源,默认为 taosBenchmark 随机产生,可以配置为 "rand" 和 "sample"。为 "sample" 时使用 sample_file 参数指定的文件内的数据。 - **data_source**数据的来源,默认为 taosBenchmark 随机产生,可以配置为 "rand" 和 "sample"。为 "sample" 时使用 sample_file 参数指定的文件内的数据。
- **insert_mode** : 插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc 。 - **insert_mode**插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc 。
- **non_stop_mode** : 指定是否持续写入,若为 "yes" 则 insert_rows 失效,直到 Ctrl + C 停止程序,写入才会停止。默认值为 "no",即写入指定数量的记录后停止。注:即使在持续写入模式下 insert_rows 失效,但其也必须被配置为一个非零正整数。 - **non_stop_mode**指定是否持续写入,若为 "yes" 则 insert_rows 失效,直到 Ctrl + C 停止程序,写入才会停止。默认值为 "no",即写入指定数量的记录后停止。注:即使在持续写入模式下 insert_rows 失效,但其也必须被配置为一个非零正整数。
- **line_protocol** : 使用行协议插入数据,仅当 insert_mode 为 sml 或 sml-rest 时生效,可选项为 line, telnet, json 。 - **line_protocol**使用行协议插入数据,仅当 insert_mode 为 sml 或 sml-rest 时生效,可选项为 line, telnet, json 。
- **tcp_transfer** : telnet 模式下的通信协议,仅当 insert_mode 为 sml-rest 并且 line_protocol 为 telnet 时生效。如果不配置,则默认为 http 协议。 - **tcp_transfer**telnet 模式下的通信协议,仅当 insert_mode 为 sml-rest 并且 line_protocol 为 telnet 时生效。如果不配置,则默认为 http 协议。
- **insert_rows** : 每个子表插入的记录数,默认为 0 。 - **insert_rows**每个子表插入的记录数,默认为 0 。
- **childtable_offset** : 仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表时的偏移量,即从第几个子表开始。 - **childtable_offset**仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表时的偏移量,即从第几个子表开始。
- **childtable_limit** : 仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表的上限。 - **childtable_limit**仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表的上限。
- **interlace_rows** : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0 即向一张子表完成数据插入后才会向下一张子表进行数据插入。 - **interlace_rows**启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0 即向一张子表完成数据插入后才会向下一张子表进行数据插入。
- **insert_interval** : 指定交错插入模式的插入间隔,单位为 ms默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。 - **insert_interval**指定交错插入模式的插入间隔,单位为 ms默认值为 0。只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
- **partial_col_num** : 若该值为正数 n 时, 则仅向前 n 列写入,仅当 insert_mode 为 taosc 和 rest 时生效,如果 n 为 0 则是向全部列写入。 - **partial_col_num**若该值为正数 n 时, 则仅向前 n 列写入,仅当 insert_mode 为 taosc 和 rest 时生效,如果 n 为 0 则是向全部列写入。
- **disorder_ratio** : 指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0即没有乱序数据。 - **disorder_ratio**指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0即没有乱序数据。
- **disorder_range** : 指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 `-O/--disorder` 指定的乱序数据百分比大于 0 时有效。 - **disorder_range**指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 `-O/--disorder` 指定的乱序数据百分比大于 0 时有效。
- **timestamp_step** : 每个子表中插入数据的时间戳步长,单位与数据库的 `precision` 一致,默认值是 1 。 - **timestamp_step**每个子表中插入数据的时间戳步长,单位与数据库的 `precision` 一致,默认值是 1 。
- **start_timestamp** : 每个子表的时间戳起始值,默认值是 now 。 - **start_timestamp**每个子表的时间戳起始值,默认值是 now 。
- **sample_format** : 样本数据文件的类型,现在只支持 "csv" 。 - **sample_format**样本数据文件的类型,现在只支持 "csv" 。
- **sample_file** : 指定 csv 格式的文件作为数据源,仅当 data_source 为 sample 时生效。若 csv 文件内的数据行数小于等于 prepared_rand那么会循环读取 csv 文件数据直到与 prepared_rand 相同;否则则会只读取 prepared_rand 个数的行的数据。也即最终生成的数据行数为二者取小。 - **sample_file**指定 csv 格式的文件作为数据源,仅当 data_source 为 sample 时生效。若 csv 文件内的数据行数小于等于 prepared_rand那么会循环读取 csv 文件数据直到与 prepared_rand 相同;否则则会只读取 prepared_rand 个数的行的数据。也即最终生成的数据行数为二者取小。
- **use_sample_ts** : 仅当 data_source 为 sample 时生效,表示 sample_file 指定的 csv 文件内是否包含第一列时间戳,默认为 no。 若设置为 yes 则使用 csv 文件第一列作为时间戳,由于同一子表时间戳不能重复,生成的数据量取决于 csv 文件内的数据行数相同,此时 insert_rows 失效。 - **use_sample_ts**仅当 data_source 为 sample 时生效,表示 sample_file 指定的 csv 文件内是否包含第一列时间戳,默认为 no。若设置为 yes 则使用 csv 文件第一列作为时间戳,由于同一子表时间戳不能重复,生成的数据量取决于 csv 文件内的数据行数相同,此时 insert_rows 失效。
- **tags_file** : 仅当 insert_mode 为 taosc, rest 的模式下生效。 最终的 tag 的数值与 childtable_count 有关,如果 csv 文件内的 tag 数据行小于给定的子表数量,那么会循环读取 csv 文件数据直到生成 childtable_count 指定的子表数量;否则则只会读取 childtable_count 行 tag 数据。也即最终生成的子表数量为二者取小。 - **tags_file**仅当 insert_mode 为 taosc, rest 的模式下生效。最终的 tag 的数值与 childtable_count 有关,如果 csv 文件内的 tag 数据行小于给定的子表数量,那么会循环读取 csv 文件数据直到生成 childtable_count 指定的子表数量;否则则只会读取 childtable_count 行 tag 数据。也即最终生成的子表数量为二者取小。
- **primary_key** : 指定超级表是否有复合主键,取值 1 和 0 复合主键列只能是超级表的第二列,指定生成复合主键后要确保第二列符合复合主键的数据类型,否则会报错。 - **primary_key**指定超级表是否有复合主键,取值 1 和 0 复合主键列只能是超级表的第二列,指定生成复合主键后要确保第二列符合复合主键的数据类型,否则会报错。
- **repeat_ts_min** : 数值类型,复合主键开启情况下指定生成相同时间戳记录的最小个数,生成相同时间戳记录的个数是在范围[repeat_ts_min, repeat_ts_max] 内的随机值, 最小值等于最大值时为固定个数。 - **repeat_ts_min**数值类型,复合主键开启情况下指定生成相同时间戳记录的最小个数,生成相同时间戳记录的个数是在范围[repeat_ts_min, repeat_ts_max] 内的随机值, 最小值等于最大值时为固定个数。
- **repeat_ts_max** : 数值类型,复合主键开启情况下指定生成相同时间戳记录的最大个数。 - **repeat_ts_max**数值类型,复合主键开启情况下指定生成相同时间戳记录的最大个数。
- **sqls** : 字符串数组类型,指定超级表创建成功后要执行的 sql 数组sql 中指定表名前面要带数据库名,否则会报未指定数据库错误。 - **sqls**字符串数组类型,指定超级表创建成功后要执行的 sql 数组sql 中指定表名前面要带数据库名,否则会报未指定数据库错误。
#### 标签列与数据列 #### 标签列与数据列
指定超级表标签列与数据列的配置参数分别在 `super_tables` 中的 `columns``tag` 中。 指定超级表标签列与数据列的配置参数分别在 `super_tables` 中的 `columns``tag` 中。
- **type** : 指定列类型,可选值请参考 TDengine 支持的数据类型。 - **type**指定列类型,可选值请参考 TDengine 支持的数据类型。
JSON 数据类型比较特殊,只能用于标签,当使用 JSON 类型作为 tag 时有且只能有这一个标签,此时 count 和 len 代表的意义分别是 JSON tag 内的 key-value pair 的个数和每个 KV pair 的 value 的值的长度value 默认为 string。 JSON 数据类型比较特殊,只能用于标签,当使用 JSON 类型作为 tag 时有且只能有这一个标签,此时 count 和 len 代表的意义分别是 JSON tag 内的 key-value pair 的个数和每个 KV pair 的 value 的值的长度value 默认为 string。
- **len** : 指定该数据类型的长度,对 NCHARBINARY 和 JSON 数据类型有效。如果对其他数据类型配置了该参数,若为 0 则代表该列始终都是以 null 值写入;如果不为 0 则被忽略。 - **len**指定该数据类型的长度,对 NCHARBINARY 和 JSON 数据类型有效。如果对其他数据类型配置了该参数,若为 0 则代表该列始终都是以 null 值写入;如果不为 0 则被忽略。
- **count** : 指定该类型列连续出现的数量,例如 "count": 4096 即可生成 4096 个指定类型的列。 - **count**:指定该类型列连续出现的数量,例如 "count"4096 即可生成 4096 个指定类型的列。
- **name** : 列的名字,若与 count 同时使用,比如 "name""current", "count":3, 则 3 个列的名字分别为 current, current_2. current_3。 - **name**:列的名字,若与 count 同时使用,比如 "name""current", "count"3, 则 3 个列的名字分别为 current、current_2、current_3。
- **min** : 数据类型的 列/标签 的最小值。生成的值将大于或等于最小值。 - **min**数据类型的 列/标签 的最小值。生成的值将大于或等于最小值。
- **max** : 数据类型的 列/标签 的最大值。生成的值将小于最大值。 - **max**数据类型的 列/标签 的最大值。生成的值将小于最大值。
- **scalingFactor** : 浮点数精度增强因子,仅当数据类型是 float/double 时生效,有效值范围为 1 至 1000000 的正整数。用于增强生成浮点数的精度,特别是在 min 或 max 值较小的情况下。此属性按 10 的幂次增强小数点后的精度scalingFactor 为 10 表示增强 1 位小数精度100 表示增强 2 位,依此类推。 - **scalingFactor**浮点数精度增强因子,仅当数据类型是 float/double 时生效,有效值范围为 1 至 1000000 的正整数。用于增强生成浮点数的精度,特别是在 min 或 max 值较小的情况下。此属性按 10 的幂次增强小数点后的精度scalingFactor 为 10 表示增强 1 位小数精度100 表示增强 2 位,依此类推。
- **fun** : 此列数据以函数填充,目前只支持 sin 和 cos 两函数,输入参数为时间戳换算成角度值,换算公式: 角度 x = 输入的时间列ts值 % 360。同时支持系数调节随机波动因子调节以固定格式的表达式展现如 fun=“10\*sin(x)+100\*random(5)” , x 表示角度,取值 0 ~ 360度增长步长与时间列步长一致。10 表示乘的系数100 表示加或减的系数5 表示波动幅度在 5% 的随机范围内。目前支持的数据类型为 int, bigint, float, double 四种数据类型。注意:表达式为固定模式,不可前后颠倒。 - **fun**此列数据以函数填充,目前只支持 sin 和 cos 两函数,输入参数为时间戳换算成角度值,换算公式:角度 x = 输入的时间列ts值 % 360。同时支持系数调节随机波动因子调节以固定格式的表达式展现如 fun=“10\*sin(x)+100\*random(5)” , x 表示角度,取值 0 ~ 360度增长步长与时间列步长一致。10 表示乘的系数100 表示加或减的系数5 表示波动幅度在 5% 的随机范围内。目前支持的数据类型为 int, bigint, float, double 四种数据类型。注意:表达式为固定模式,不可前后颠倒。
- **values** : nchar/binary 列/标签的值域,将从值中随机选择。 - **values**nchar/binary 列/标签的值域,将从值中随机选择。
- **sma**: 将该列加入 SMA 中,值为 "yes" 或者 "no",默认为 "no" 。 - **sma**将该列加入 SMA 中,值为 "yes" 或者 "no",默认为 "no" 。
- **encode**: 字符串类型,指定此列两级压缩中的第一级编码算法,详细参见创建超级表。 - **encode**字符串类型,指定此列两级压缩中的第一级编码算法,详细参见创建超级表。
- **compress**: 字符串类型,指定此列两级压缩中的第二级加密算法,详细参见创建超级表。 - **compress**字符串类型,指定此列两级压缩中的第二级加密算法,详细参见创建超级表。
- **level**: 字符串类型,指定此列两级压缩中的第二级加密算法的压缩率高低,详细参见创建超级表。 - **level**字符串类型,指定此列两级压缩中的第二级加密算法的压缩率高低,详细参见创建超级表。
- **gen**: 字符串类型,指定此列生成数据的方式,不指定为随机,若指定为 “order”, 会按自然数顺序增长。 - **gen**字符串类型,指定此列生成数据的方式,不指定为随机,若指定为 “order”, 会按自然数顺序增长。
- **fillNull**: 字符串类型,指定此列是否随机插入 NULL 值,可指定为 “true” 或 "false", 只有当 generate_row_rule 为 2 时有效。 - **fillNull**字符串类型,指定此列是否随机插入 NULL 值,可指定为 “true” 或 "false", 只有当 generate_row_rule 为 2 时有效。
#### 写入行为相关 #### 写入行为相关
- **thread_count** : 插入数据的线程数量,默认为 8。 - **thread_count**插入数据的线程数量,默认为 8。
- **thread_bind_vgroup** : 写入时 vgroup 是否和写入线程绑定,绑定后可提升写入速度, 取值为 "yes" 或 "no",默认值为 “no”, 设置为 “no” 后与原来行为一致。 当设为 “yes” 时,如果 thread_count 大于写入数据库 vgroups 数量, thread_count 自动调整为 vgroups 数量;如果 thread_count 小于 vgroups 数量,写入线程数量不做调整,一个线程写完一个 vgroup 数据后再写下一个,同时保持一个 vgroup 同时只能由一个线程写入的规则。 - **thread_bind_vgroup**写入时 vgroup 是否和写入线程绑定,绑定后可提升写入速度, 取值为 "yes" 或 "no",默认值为 “no”, 设置为 “no” 后与原来行为一致。当设为 “yes” 时,如果 thread_count 大于写入数据库 vgroups 数量, thread_count 自动调整为 vgroups 数量;如果 thread_count 小于 vgroups 数量,写入线程数量不做调整,一个线程写完一个 vgroup 数据后再写下一个,同时保持一个 vgroup 同时只能由一个线程写入的规则。
- **create_table_thread_count** : 建表的线程数量,默认为 8。 - **create_table_thread_count**建表的线程数量,默认为 8。
- **result_file** : 结果输出文件的路径,默认值为 ./output.txt 。 - **result_file**结果输出文件的路径,默认值为 ./output.txt 。
- **confirm_parameter_prompt** : 开关参数,要求用户在提示后确认才能继续, 可取值 "yes" or "no"。默认值为 "no" 。 - **confirm_parameter_prompt**开关参数,要求用户在提示后确认才能继续, 可取值 "yes" or "no"。默认值为 "no" 。
- **interlace_rows** : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0 即向一张子表完成数据插入后才会向下一张子表进行数据插入。 - **interlace_rows**启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0 即向一张子表完成数据插入后才会向下一张子表进行数据插入。
`super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。
- **insert_interval** : - **insert_interval**
指定交错插入模式的插入间隔,单位为 ms默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。 指定交错插入模式的插入间隔,单位为 ms默认值为 0。只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
`super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。
- **num_of_records_per_req** : - **num_of_records_per_req**
每次向 TDengine 请求写入的数据行数,默认值为 30000 。当其设置过大时TDengine 客户端驱动会返回相应的错误信息,此时需要调低这个参数的设置以满足写入要求。 每次向 TDengine 请求写入的数据行数,默认值为 30000 。当其设置过大时TDengine 客户端驱动会返回相应的错误信息,此时需要调低这个参数的设置以满足写入要求。
- **prepare_rand** : 生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000 。 - **prepare_rand**生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000 。
- **pre_load_tb_meta** :是否提前加载子表的 meta 数据,取值为 “yes” or "no"。当子表数量非常多时,打开此选项可提高写入速度。 - **pre_load_tb_meta**:是否提前加载子表的 meta 数据,取值为 “yes” or "no"。当子表数量非常多时,打开此选项可提高写入速度。
### 查询配置参数 ### 查询配置参数
@ -256,7 +256,7 @@ taosBenchmark -f <json file>
`query_times` 指定运行查询的次数,数值类型。 `query_times` 指定运行查询的次数,数值类型。
查询场景可以通过设置 `kill_slow_query_threshold``kill_slow_query_interval` 参数来控制杀掉慢查询语句的执行threshold 控制如果 exec_usec 超过指定时间的查询将被 taosBenchmark 杀掉,单位为秒。 查询场景可以通过设置 `kill_slow_query_threshold``kill_slow_query_interval` 参数来控制杀掉慢查询语句的执行threshold 控制如果 exec_usec 超过指定时间的查询将被 taosBenchmark 杀掉,单位为秒。
interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为秒。 interval 控制休眠时间,避免持续查询慢查询消耗 CPU单位为秒。
其它通用参数详见 [通用配置参数](#通用配置参数) 其它通用参数详见 [通用配置参数](#通用配置参数)
@ -264,38 +264,38 @@ interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为
查询指定表(可以指定超级表、子表或普通表)的配置参数在 `specified_table_query` 中设置。 查询指定表(可以指定超级表、子表或普通表)的配置参数在 `specified_table_query` 中设置。
- **mixed_query** : 查询模式 - **mixed_query**查询模式
“yes” :`混合查询` “yes”`混合查询`
"no"(默认值) :`普通查询` "no"(默认值)`普通查询`
`普通查询``sqls` 中每个 sql 启动 `threads` 个线程查询此 sql, 执行完 `query_times` 次查询后退出,执行此 sql 的所有线程都完成后进入下一个 sql `普通查询``sqls` 中每个 sql 启动 `threads` 个线程查询此 sql, 执行完 `query_times` 次查询后退出,执行此 sql 的所有线程都完成后进入下一个 sql
`查询总次数` = `sqls` 个数 * `query_times` * `threads` `查询总次数` = `sqls` 个数 * `query_times` * `threads`
`混合查询``sqls` 中所有 sql 分成 `threads` 个组,每个线程执行一组, 每个 sql 都需执行 `query_times` 次查询 `混合查询``sqls` 中所有 sql 分成 `threads` 个组,每个线程执行一组, 每个 sql 都需执行 `query_times` 次查询
`查询总次数` = `sqls` 个数 * `query_times` `查询总次数` = `sqls` 个数 * `query_times`
- **query_interval** : 查询时间间隔,单位: millisecond默认值为 0。 - **query_interval**:查询时间间隔,单位:millisecond默认值为 0。
- **threads** : 执行查询 SQL 的线程数,默认值为 1。 - **threads**执行查询 SQL 的线程数,默认值为 1。
- **sqls** - **sqls**
- **sql**: 执行的 SQL 命令,必填。 - **sql**执行的 SQL 命令,必填。
- **result**: 保存查询结果的文件,未指定则不保存。 - **result**保存查询结果的文件,未指定则不保存。
#### 查询超级表 #### 查询超级表
查询超级表的配置参数在 `super_table_query` 中设置。 查询超级表的配置参数在 `super_table_query` 中设置。
超级表查询的线程模式与上面介绍的指定查询语句查询的 `正常查询` 模式相同,不同之处是本 `sqls` 使用所有子表填充。 超级表查询的线程模式与上面介绍的指定查询语句查询的 `正常查询` 模式相同,不同之处是本 `sqls` 使用所有子表填充。
- **stblname** : 指定要查询的超级表的名称,必填。 - **stblname**指定要查询的超级表的名称,必填。
- **query_interval** : 查询时间间隔,单位是秒,默认值为 0。 - **query_interval**查询时间间隔,单位是秒,默认值为 0。
- **threads** : 执行查询 SQL 的线程数,默认值为 1。 - **threads**执行查询 SQL 的线程数,默认值为 1。
- **sqls** - **sqls**
- **sql** : 执行的 SQL 命令,必填;对于超级表的查询 SQL在 SQL 命令中必须保留 "xxxx",会替换为超级下所有子表名后再执行。 - **sql**执行的 SQL 命令,必填;对于超级表的查询 SQL在 SQL 命令中必须保留 "xxxx",会替换为超级下所有子表名后再执行。
- **result** : 保存查询结果的文件,未指定则不保存。 - **result**保存查询结果的文件,未指定则不保存。
- **限制项** : sqls 下配置 sql 数组最大为 100 个。 - **限制项**sqls 下配置 sql 数组最大为 100 个。
### 订阅配置参数 ### 订阅配置参数
@ -303,14 +303,14 @@ interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为
订阅配置参数在 `tmq_info` 项下设置,参数如下: 订阅配置参数在 `tmq_info` 项下设置,参数如下:
- **concurrent** : 消费订阅的消费者数量或称并发消费数量默认值1。 - **concurrent**消费订阅的消费者数量或称并发消费数量默认值1。
- **create_mode** : 创建消费者模式,可取值 sequential顺序创建 parallel并发同时创建必填项无默认值。 - **create_mode**创建消费者模式,可取值 sequential顺序创建 parallel并发同时创建必填项无默认值。
- **group_mode** : 生成消费者 groupId 模式,可取值 share所有消费者只生成一个 groupId independent每个消费者生成一个独立的 groupId如果 `group.id` 未设置,此项为必填项,无默认值。 - **group_mode**生成消费者 groupId 模式,可取值 share所有消费者只生成一个 groupId independent每个消费者生成一个独立的 groupId如果 `group.id` 未设置,此项为必填项,无默认值。
- **poll_delay** : 调用 tmq_consumer_poll 传入的轮询超时时间,单位为毫秒,负数表示默认超时 1 秒。 - **poll_delay**调用 tmq_consumer_poll 传入的轮询超时时间,单位为毫秒,负数表示默认超时 1 秒。
- **enable.manual.commit** : 是否允许手动提交,可取值 true允许手动提交每次消费完消息后手动调用 tmq_commit_sync 完成提交, false不进行提交默认值: false。 - **enable.manual.commit**是否允许手动提交,可取值 true允许手动提交每次消费完消息后手动调用 tmq_commit_sync 完成提交, false不进行提交默认值false。
- **rows_file** : 存储消费数据的文件,可以为全路径或相对路径,带文件名。实际保存的文件会在后面加上消费者序号,如 rows_file 为 result, 实际文件名为 result_1消费者 1 result_2消费者 2 ... - **rows_file**存储消费数据的文件,可以为全路径或相对路径,带文件名。实际保存的文件会在后面加上消费者序号,如 rows_file 为 result, 实际文件名为 result_1消费者 1 result_2消费者 2 ...
- **expect_rows** : 期望每个消费者消费的行数,数据类型,当消费达到这个数,消费会退出,不设置会一直消费。 - **expect_rows**期望每个消费者消费的行数,数据类型,当消费达到这个数,消费会退出,不设置会一直消费。
- **topic_list** : 指定消费的 topic 列表数组类型。topic 列表格式示例: `{"name": "topic1", "sql": "select * from test.meters;"}` name指定 topic 名sql指定创建 topic 的 sql 语句,需保证 sql 正确,框架会自动创建出 topic。 - **topic_list**指定消费的 topic 列表数组类型。topic 列表格式示例:`{"name": "topic1", "sql": "select * from test.meters;"}`name指定 topic 名sql指定创建 topic 的 sql 语句,需保证 sql 正确,框架会自动创建出 topic。
以下参数透传订阅属性,参见 [订阅创建参数](../../../develop/tmq/#创建参数) 说明: 以下参数透传订阅属性,参见 [订阅创建参数](../../../develop/tmq/#创建参数) 说明:
- **client.id** - **client.id**
@ -319,7 +319,7 @@ interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为
- **enable.auto.commit** - **enable.auto.commit**
- **msg.with.table.name** - **msg.with.table.name**
- **auto.commit.interval.ms** - **auto.commit.interval.ms**
- **group.id** : 若此值不指定,将由 `group_mode` 指定规则生成 groupId若指定此值`group_mode` 参数不再有效。 - **group.id**若此值不指定,将由 `group_mode` 指定规则生成 groupId若指定此值`group_mode` 参数不再有效。
### 数据类型对照表 ### 数据类型对照表
@ -395,18 +395,18 @@ SUCC: Spent 8.527298 (real 8.117379) seconds to insert rows: 10000000 with 8 thr
SUCC: insert delay, min: 19.6780ms, avg: 64.9390ms, p90: 94.6900ms, p95: 105.1870ms, p99: 130.6660ms, max: 157.0830ms SUCC: insert delay, min: 19.6780ms, avg: 64.9390ms, p90: 94.6900ms, p95: 105.1870ms, p99: 130.6660ms, max: 157.0830ms
``` ```
第一行写入速度统计: 第一行写入速度统计:
- Spent: 写入总耗时,单位秒,从开始写入第一个数据开始计时到最后一条数据结束,这里表示共花了 8.527298 秒。 - Spent写入总耗时,单位秒,从开始写入第一个数据开始计时到最后一条数据结束,这里表示共花了 8.527298 秒。
- real : 写入总耗时(调用引擎),此耗时已抛去测试框架准备数据时间,纯统计在引擎调用上花费的时间,示例为 8.117379 秒8.527298 - 8.117379 = 0.409919 秒则为测试框架准备数据消耗时间 - real写入总耗时(调用引擎),此耗时已抛去测试框架准备数据时间,纯统计在引擎调用上花费的时间,示例为 8.117379 秒8.527298 - 8.117379 = 0.409919 秒则为测试框架准备数据消耗时间
- rows : 写入总行数,为 1000 万条数据。 - rows写入总行数,为 1000 万条数据。
- threads: 写入线程数,这里是 8 个线程同时写入。 - threads写入线程数,这里是 8 个线程同时写入。
- records/second 写入速度 = `写入总耗时`/ `写入总行数` 括号中 `real` 同前,表示纯引擎写入速度。 - records/second 写入速度 = `写入总耗时`/ `写入总行数` 括号中 `real` 同前,表示纯引擎写入速度。
第二行单个写入延时统计: 第二行单个写入延时统计:
- min : 写入最小延时。 - min写入最小延时。
- avg : 写入平时延时。 - avg写入平时延时。
- p90 : 写入延时 p90 百分位上的延时数。 - p90写入延时 p90 百分位上的延时数。
- p95 : 写入延时 p95 百分位上的延时数。 - p95写入延时 p95 百分位上的延时数。
- p99 : 写入延时 p99 百分位上的延时数。 - p99写入延时 p99 百分位上的延时数。
- max : 写入最大延时。 - max写入最大延时。
通过此系列指标,可观察到写入请求延时分布情况。 通过此系列指标,可观察到写入请求延时分布情况。
#### 查询指标 #### 查询指标
@ -416,7 +416,7 @@ SUCC: insert delay, min: 19.6780ms, avg: 64.9390ms, p90: 94.6900ms, p95: 105.187
complete query with 3 threads and 10000 query delay avg: 0.002686s min: 0.001182s max: 0.012189s p90: 0.002977s p95: 0.003493s p99: 0.004645s SQL command: select ... complete query with 3 threads and 10000 query delay avg: 0.002686s min: 0.001182s max: 0.012189s p90: 0.002977s p95: 0.003493s p99: 0.004645s SQL command: select ...
INFO: Spend 26.9530 second completed total queries: 30000, the QPS of all threads: 1113.049 INFO: Spend 26.9530 second completed total queries: 30000, the QPS of all threads: 1113.049
``` ```
- 第一行表示 3 个线程每个线程执行 10000 次查询及查询请求延时百分位分布情况,`SQL command` 为测试的查询语句。 - 第一行表示 3 个线程每个线程执行 10000 次查询及查询请求延时百分位分布情况,`SQL command` 为测试的查询语句。
- 第二行表示查询总耗时为 26.9653 秒,每秒查询率(QPS)为1113.049 次/秒。 - 第二行表示查询总耗时为 26.9653 秒,每秒查询率(QPS)为1113.049 次/秒。
- 如果在查询中设置了 `continue_if_fail` 选项为 `yes`,在最后一行中会输出失败请求个数及错误率,格式 error + 失败请求个数 (错误率)。 - 如果在查询中设置了 `continue_if_fail` 选项为 `yes`,在最后一行中会输出失败请求个数及错误率,格式 error + 失败请求个数 (错误率)。
- QPS = 成功请求数量 / 花费时间(单位秒) - QPS = 成功请求数量 / 花费时间(单位秒)
@ -434,6 +434,6 @@ INFO: consumerId: 1, consume msgs: 1000, consume rows: 10000000
INFO: consumerId: 2, consume msgs: 1000, consume rows: 10000000 INFO: consumerId: 2, consume msgs: 1000, consume rows: 10000000
INFO: Consumed total msgs: 3000, total rows: 30000000 INFO: Consumed total msgs: 3000, total rows: 30000000
``` ```
- 1 ~ 3 行实时输出每个消费者当前的消费速度,`msgs/s` 表示消费消息个数,每个消息中包含多行数据,`rows/s` 表示按行数统计的消费速度。 - 1 ~ 3 行实时输出每个消费者当前的消费速度,`msgs/s` 表示消费消息个数,每个消息中包含多行数据,`rows/s` 表示按行数统计的消费速度。
- 4 ~ 6 行是测试完成后每个消费者总体统计,统计共消费了多少条消息,共计多少行。 - 4 ~ 6 行是测试完成后每个消费者总体统计,统计共消费了多少条消息,共计多少行。
- 第 7 行所有消费者总体统计,`msgs` 表示共消费了多少条消息, `rows` 表示共消费了多少行数据。 - 第 7 行所有消费者总体统计,`msgs` 表示共消费了多少条消息, `rows` 表示共消费了多少行数据。

View File

@ -12,7 +12,7 @@ description: 'TDengine 支持的数据类型: 时间戳、浮点型、JSON 类
- 内部函数 NOW 是客户端的当前时间 - 内部函数 NOW 是客户端的当前时间
- 插入记录时,如果时间戳为 NOW插入数据时使用提交这条记录的客户端的当前时间 - 插入记录时,如果时间戳为 NOW插入数据时使用提交这条记录的客户端的当前时间
- Epoch Time时间戳也可以是一个长整数表示从 UTC 时间 1970-01-01 00:00:00 开始的毫秒数。相应地,如果所在 Database 的时间精度设置为“微秒”,则长整型格式的时间戳含义也就对应于从 UTC 时间 1970-01-01 00:00:00 开始的微秒数;纳秒精度逻辑相同。 - Epoch Time时间戳也可以是一个长整数表示从 UTC 时间 1970-01-01 00:00:00 开始的毫秒数。相应地,如果所在 Database 的时间精度设置为“微秒”,则长整型格式的时间戳含义也就对应于从 UTC 时间 1970-01-01 00:00:00 开始的微秒数;纳秒精度逻辑相同。
- 时间可以加减,比如 NOW-2h表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 b纳秒、u微秒、a毫秒、s、m、h小时、d、w 比如 `SELECT * FROM t1 WHERE ts > NOW-2w AND ts <= NOW-1w`表示查询两周前整整一周的数据。在指定降采样操作Down Sampling的时间窗口Interval时间单位还可以使用 n自然月和 y自然年 - 时间可以加减,比如 NOW-2h表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 b纳秒、u微秒、a毫秒、s、m、h小时、d、w。比如 `SELECT * FROM t1 WHERE ts > NOW-2w AND ts <= NOW-1w`表示查询两周前整整一周的数据。在指定降采样操作Down Sampling的时间窗口Interval时间单位还可以使用 n自然月和 y自然年
TDengine 缺省的时间戳精度是毫秒,但通过在 `CREATE DATABASE` 时传递的 `PRECISION` 参数也可以支持微秒和纳秒。 TDengine 缺省的时间戳精度是毫秒,但通过在 `CREATE DATABASE` 时传递的 `PRECISION` 参数也可以支持微秒和纳秒。
@ -24,24 +24,24 @@ CREATE DATABASE db_name PRECISION 'ns';
在 TDengine 中,普通表的数据模型中可使用以下数据类型。 在 TDengine 中,普通表的数据模型中可使用以下数据类型。
| # | **类型** | **Bytes** | **说明** | | # | **类型** | **Bytes** | **说明** |
| --- | :---------------: | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | --- | :---------------: | --------- | ---------------------- |
| 1 | TIMESTAMP | 8 | 时间戳。缺省精度毫秒,可支持微秒和纳秒,详细说明见上节。 | | 1 | TIMESTAMP | 8 | 时间戳。缺省精度毫秒,可支持微秒和纳秒,详细说明见上节。|
| 2 | INT | 4 | 整型,范围 [-2^31, 2^31-1] | | 2 | INT | 4 | 整型,范围 [-2^31, 2^31-1] |
| 3 | INT UNSIGNED | 4 | 无符号整数,[0, 2^32-1] | | 3 | INT UNSIGNED | 4 | 无符号整数,[0, 2^32-1] |
| 4 | BIGINT | 8 | 长整型,范围 [-2^63, 2^63-1] | | 4 | BIGINT | 8 | 长整型,范围 [-2^63, 2^63-1] |
| 5 | BIGINT UNSIGNED | 8 | 长整型,范围 [0, 2^64-1] | | 5 | BIGINT UNSIGNED | 8 | 长整型,范围 [0, 2^64-1] |
| 6 | FLOAT | 4 | 浮点型,有效位数 6-7范围 [-3.4E38, 3.4E38] | | 6 | FLOAT | 4 | 浮点型,有效位数 6-7范围 [-3.4E38, 3.4E38] |
| 7 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16范围 [-1.7E308, 1.7E308] | | 7 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16范围 [-1.7E308, 1.7E308] |
| 8 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 NCHAR | | 8 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 NCHAR|
| 9 | SMALLINT | 2 | 短整型, 范围 [-32768, 32767] | | 9 | SMALLINT | 2 | 短整型, 范围 [-32768, 32767] |
| 10 | SMALLINT UNSIGNED | 2 | 无符号短整型,范围 [0, 65535] | | 10 | SMALLINT UNSIGNED | 2 | 无符号短整型,范围 [0, 65535] |
| 11 | TINYINT | 1 | 单字节整型,范围 [-128, 127] | | 11 | TINYINT | 1 | 单字节整型,范围 [-128, 127] |
| 12 | TINYINT UNSIGNED | 1 | 无符号单字节整型,范围 [0, 255] | | 12 | TINYINT UNSIGNED | 1 | 无符号单字节整型,范围 [0, 255] |
| 13 | BOOL | 1 | 布尔型,{true, false} | | 13 | BOOL | 1 | 布尔型,{true, false} |
| 14 | NCHAR | 自定义 | 记录包含多字节字符在内的字符串,如中文字符。每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 `\'`。NCHAR 使用时须指定字符串大小,类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。如果用户字符串长度超出声明长度,将会报错。 | | 14 | NCHAR | 自定义 | 记录包含多字节字符在内的字符串,如中文字符。每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 `\'`。NCHAR 使用时须指定字符串大小,类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。如果用户字符串长度超出声明长度,将会报错。|
| 15 | JSON | | JSON 数据类型, 只有 Tag 可以是 JSON 格式 | | 15 | JSON | | JSON 数据类型, 只有 Tag 可以是 JSON 格式 |
| 16 | VARCHAR | 自定义 | BINARY 类型的别名 | | 16 | VARCHAR | 自定义 | BINARY 类型的别名 |
| 17 | GEOMETRY | 自定义 | 几何类型3.1.0.0 版本开始支持 | 17 | GEOMETRY | 自定义 | 几何类型3.1.0.0 版本开始支持
| 18 | VARBINARY | 自定义 | 可变长的二进制数据, 3.1.1.0 版本开始支持| | 18 | VARBINARY | 自定义 | 可变长的二进制数据, 3.1.1.0 版本开始支持|
@ -52,14 +52,14 @@ CREATE DATABASE db_name PRECISION 'ns';
- BINARY 类型理论上最长可以有 16,374从 3.0.5.0 版本开始,数据列为 65,517标签列为 16,382 字节。BINARY 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 BINARY(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 字节的存储空间,总共固定占用 20 字节的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'` - BINARY 类型理论上最长可以有 16,374从 3.0.5.0 版本开始,数据列为 65,517标签列为 16,382 字节。BINARY 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 BINARY(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 字节的存储空间,总共固定占用 20 字节的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`
- GEOMETRY 类型数据列为最大长度为 65,517 字节,标签列最大长度为 16,382 字节。支持 2D 的 POINT、LINESTRING 和 POLYGON 子类型数据。长度计算方式如下表所示: - GEOMETRY 类型数据列为最大长度为 65,517 字节,标签列最大长度为 16,382 字节。支持 2D 的 POINT、LINESTRING 和 POLYGON 子类型数据。长度计算方式如下表所示:
| # | **语法** | **最小长度** | **最大长度** | **每组坐标长度增长** | | # | **语法** | **最小长度** | **最大长度** | **每组坐标长度增长** |
|---|--------------------------------------|----------|------------|--------------| |---|--------------------------------------|----------|------------|--------------|
| 1 | POINT(1.0 1.0) | 21 | 21 | 无 | | 1 | POINT(1.0 1.0) | 21 | 21 | 无 |
| 2 | LINESTRING(1.0 1.0, 2.0 2.0) | 9+2*16 | 9+4094*16 | +16 | | 2 | LINESTRING(1.0 1.0, 2.0 2.0) | 9+2*16 | 9+4094*16 | +16 |
| 3 | POLYGON((1.0 1.0, 2.0 2.0, 1.0 1.0)) | 13+3*16 | 13+4094*16 | +16 | | 3 | POLYGON((1.0 1.0, 2.0 2.0, 1.0 1.0)) | 13+3*16 | 13+4094*16 | +16 |
- SQL 语句中的数值类型将依据是否存在小数点或使用科学计数法表示来判断数值类型是否为整型或者浮点型因此在使用时要注意相应类型越界的情况。例如9999999999999999999 会认为超过长整型的上边界而溢出,而 9999999999999999999.0 会被认为是有效的浮点数。 - SQL 语句中的数值类型将依据是否存在小数点或使用科学计数法表示来判断数值类型是否为整型或者浮点型因此在使用时要注意相应类型越界的情况。例如9999999999999999999 会认为超过长整型的上边界而溢出,而 9999999999999999999.0 会被认为是有效的浮点数。
- VARBINARY 是一种存储二进制数据的数据类型,最大长度为 65,517 字节,标签列最大长度为 16,382 字节。可以通过sql或schemaless方式写入二进制数据需要转换为\x开头的字符串写入也可以通过stmt方式写入可以直接使用二进制。显示时通过16进制\x开头。 - VARBINARY 是一种存储二进制数据的数据类型,最大长度为 65,517 字节,标签列最大长度为 16,382 字节。可以通过sql或schemaless方式写入二进制数据需要转换为 `\x` 开头的字符串写入),也可以通过 stmt 方式写入可以直接使用二进制。显示时通过16进制\x开头。
::: :::
@ -67,16 +67,16 @@ CREATE DATABASE db_name PRECISION 'ns';
TDengine 支持多个类型的常量,细节如下表: TDengine 支持多个类型的常量,细节如下表:
| # | **语法** | **类型** | **说明** | | # | **语法** | **类型** | **说明** |
| --- | :-----------------------------------------------: | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | --- | :-----------------------------------------------: | --------- | -------------------------------------------------------------------------------- |
| 1 | [\{+ \| -}]123 | BIGINT | 整型数值的字面量的类型均为 BIGINT。如果用户输入超过了 BIGINT 的表示范围TDengine 按 BIGINT 对数值进行截断。 | | 1 | [\{+ \| -}]123 | BIGINT | 整型数值的字面量的类型均为 BIGINT。如果用户输入超过了 BIGINT 的表示范围TDengine 按 BIGINT 对数值进行截断。 |
| 2 | 123.45 | DOUBLE | 浮点数值的字面量的类型均为 DOUBLE。TDengine 依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型。 | | 2 | 123.45 | DOUBLE | 浮点数值的字面量的类型均为 DOUBLE。TDengine 依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型。|
| 3 | 1.2E3 | DOUBLE | 科学计数法的字面量的类型为 DOUBLE。 | | 3 | 1.2E3 | DOUBLE | 科学计数法的字面量的类型为 DOUBLE。|
| 4 | 'abc' | BINARY | 单引号括住的内容为字符串字面值,其类型为 BINARYBINARY 的 Size 为实际的字符个数。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'` | | 4 | 'abc' | BINARY | 单引号括住的内容为字符串字面值,其类型为 BINARYBINARY 的 Size 为实际的字符个数。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`。|
| 5 | "abc" | BINARY | 双引号括住的内容为字符串字面值,其类型为 BINARYBINARY 的 Size 为实际的字符个数。对于字符串内的双引号,可以用转义字符反斜线加单引号来表示,即 `\"` | | 5 | "abc" | BINARY | 双引号括住的内容为字符串字面值,其类型为 BINARYBINARY 的 Size 为实际的字符个数。对于字符串内的双引号,可以用转义字符反斜线加单引号来表示,即 `\"`。|
| 6 | TIMESTAMP \{'literal' \| "literal"} | TIMESTAMP | TIMESTAMP 关键字表示后面的字符串字面量需要被解释为 TIMESTAMP 类型。字符串需要满足 YYYY-MM-DD HH:mm:ss.MS 格式,其时间分辨率为当前数据库的时间分辨率。 | | 6 | TIMESTAMP \{'literal' \| "literal"} | TIMESTAMP | TIMESTAMP 关键字表示后面的字符串字面量需要被解释为 TIMESTAMP 类型。字符串需要满足 YYYY-MM-DD HH:mm:ss.MS 格式,其时间分辨率为当前数据库的时间分辨率。|
| 7 | \{TRUE \| FALSE} | BOOL | 布尔类型字面量。 | | 7 | \{TRUE \| FALSE} | BOOL | 布尔类型字面量。 |
| 8 | \{'' \| "" \| '\t' \| "\t" \| ' ' \| " " \| NULL } | -- | 空值字面量。可以用于任意类型。 | | 8 | \{'' \| "" \| '\t' \| "\t" \| ' ' \| " " \| NULL } | -- | 空值字面量。可以用于任意类型。|
:::note :::note

View File

@ -46,13 +46,13 @@ database_option: {
### 参数说明 ### 参数说明
- VGROUPS数据库中初始 vgroup 的数目。 - VGROUPS数据库中初始 vgroup 的数目。
- PRECISION数据库的时间戳精度。ms 表示毫秒us 表示微秒ns 表示纳秒,默认 ms 毫秒。 - PRECISION数据库的时间戳精度。ms 表示毫秒、us 表示微秒、ns 表示纳秒、默认 ms 毫秒。
- REPLICA表示数据库副本数取值为 1、2 或 3默认为 1; 2 仅在企业版 3.3.0.0 及以后版本中可用。在集群中使用,副本数必须小于或等于 DNODE 的数目。且使用时存在以下限制: - REPLICA表示数据库副本数取值为 1、2 或 3默认为 1; 2 仅在企业版 3.3.0.0 及以后版本中可用。在集群中使用,副本数必须小于或等于 DNODE 的数目。且使用时存在以下限制:
- 暂不支持对双副本数据库相关 Vgroup 进行 SPLITE VGROUP 或 REDISTRIBUTE VGROUP 操作 - 暂不支持对双副本数据库相关 Vgroup 进行 SPLITE VGROUP 或 REDISTRIBUTE VGROUP 操作
- 单副本数据库可变更为双副本数据库,但不支持从双副本变更为其它副本数,也不支持从三副本变更为双副本 - 单副本数据库可变更为双副本数据库,但不支持从双副本变更为其它副本数,也不支持从三副本变更为双副本
- BUFFER: 一个 VNODE 写入内存池大小,单位为 MB默认为 256最小为 3最大为 16384。 - BUFFER:一个 vnode 写入内存池大小,单位为 MB默认为 256最小为 3最大为 16384。
- PAGES一个 VNODE 中元数据存储引擎的缓存页个数,默认为 256最小 64。一个 VNODE 元数据存储占用 PAGESIZE \* PAGES默认情况下为 1MB 内存。 - PAGES一个 vnode 中元数据存储引擎的缓存页个数,默认为 256最小 64。一个 vnode 元数据存储占用 PAGESIZE \* PAGES默认情况下为 1MB 内存。
- PAGESIZE一个 VNODE 中元数据存储引擎的页大小,单位为 KB默认为 4 KB。范围为 1 到 16384即 1 KB 到 16 MB。 - PAGESIZE一个 vnode 中元数据存储引擎的页大小,单位为 KB默认为 4 KB。范围为 1 到 16384即 1 KB 到 16 MB。
- CACHEMODEL表示是否在内存中缓存子表的最近数据。默认为 none。 - CACHEMODEL表示是否在内存中缓存子表的最近数据。默认为 none。
- none表示不缓存。 - none表示不缓存。
- last_row表示缓存子表最近一行数据。这将显著改善 LAST_ROW 函数的性能表现。 - last_row表示缓存子表最近一行数据。这将显著改善 LAST_ROW 函数的性能表现。
@ -76,17 +76,17 @@ database_option: {
- 1表示只可以创建一张超级表。 - 1表示只可以创建一张超级表。
- TABLE_PREFIX当其为正值时在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的前缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的前缀;例如,假定表名为 "v30001",当 TSDB_PREFIX = 2 时 使用 "0001" 来决定分配到哪个 vgroup ,当 TSDB_PREFIX = -2 时使用 "v3" 来决定分配到哪个 vgroup - TABLE_PREFIX当其为正值时在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的前缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的前缀;例如,假定表名为 "v30001",当 TSDB_PREFIX = 2 时 使用 "0001" 来决定分配到哪个 vgroup ,当 TSDB_PREFIX = -2 时使用 "v3" 来决定分配到哪个 vgroup
- TABLE_SUFFIX当其为正值时在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的后缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的后缀;例如,假定表名为 "v30001",当 TSDB_SUFFIX = 2 时 使用 "v300" 来决定分配到哪个 vgroup ,当 TSDB_SUFFIX = -2 时使用 "01" 来决定分配到哪个 vgroup。 - TABLE_SUFFIX当其为正值时在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的后缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的后缀;例如,假定表名为 "v30001",当 TSDB_SUFFIX = 2 时 使用 "v300" 来决定分配到哪个 vgroup ,当 TSDB_SUFFIX = -2 时使用 "01" 来决定分配到哪个 vgroup。
- TSDB_PAGESIZE一个 VNODE 中时序数据存储引擎的页大小,单位为 KB默认为 4 KB。范围为 1 到 16384即 1 KB到 16 MB。 - TSDB_PAGESIZE一个 vnode 中时序数据存储引擎的页大小,单位为 KB默认为 4 KB。范围为 1 到 16384即 1 KB到 16 MB。
- DNODES指定 VNODE 所在的 DNODE 列表,如 '1,2,3',以逗号区分且字符间不能有空格,仅企业版支持。 - DNODES指定 vnode 所在的 DNODE 列表,如 '1,2,3',以逗号区分且字符间不能有空格,仅企业版支持。
- WAL_LEVELWAL 级别,默认为 1。 - WAL_LEVELWAL 级别,默认为 1。
- 1写 WAL但不执行 fsync。 - 1写 WAL但不执行 fsync。
- 2写 WAL而且执行 fsync。 - 2写 WAL而且执行 fsync。
- WAL_FSYNC_PERIOD当 WAL_LEVEL 参数设置为 2 时,用于设置落盘的周期。默认为 3000单位毫秒。最小为 0表示每次写入立即落盘最大为 180000即三分钟。 - WAL_FSYNC_PERIOD当 WAL_LEVEL 参数设置为 2 时,用于设置落盘的周期。默认为 3000单位毫秒。最小为 0表示每次写入立即落盘最大为 180000即三分钟。
- WAL_RETENTION_PERIOD: 为了数据订阅消费,需要 WAL 日志文件额外保留的最大时长策略。WAL 日志清理,不受订阅客户端消费状态影响。单位为 s。默认为 3600表示在 WAL 保留最近 3600 秒的数据,请根据数据订阅的需要修改这个参数为适当值。 - WAL_RETENTION_PERIOD为了数据订阅消费,需要 WAL 日志文件额外保留的最大时长策略。WAL 日志清理,不受订阅客户端消费状态影响。单位为 s。默认为 3600表示在 WAL 保留最近 3600 秒的数据,请根据数据订阅的需要修改这个参数为适当值。
- WAL_RETENTION_SIZE为了数据订阅消费需要 WAL 日志文件额外保留的最大累计大小策略。单位为 KB。默认为 0表示累计大小无上限。 - WAL_RETENTION_SIZE为了数据订阅消费需要 WAL 日志文件额外保留的最大累计大小策略。单位为 KB。默认为 0表示累计大小无上限。
- COMPACT_INTERVAL自动 compact 触发周期(从 1970-01-01T00:00:00Z 开始切分的时间周期)。取值范围0 或 [10m, keep2]单位m分钟h小时d。不加时间单位默认单位为天默认值为 0即不触发自动 compact 功能。如果 db 中有未完成的 compact 任务,不重复下发 compact 任务。仅企业版 3.3.5.0 版本开始支持。 - COMPACT_INTERVAL自动 compact 触发周期(从 1970-01-01T00:00:00Z 开始切分的时间周期)。取值范围0 或 [10m, keep2]单位m分钟h小时d。不加时间单位默认单位为天默认值为 0即不触发自动 compact 功能。如果 db 中有未完成的 compact 任务,不重复下发 compact 任务。仅企业版 3.3.5.0 版本开始支持。
- COMPACT_TIME_RANGE自动 compact 任务触发的 compact 时间范围,取值范围:[-keep2, -duration]单位m分钟h小时d。不加时间单位时默认单位为天默认值为 [0, 0]。取默认值 [0, 0] 时,如果 COMPACT_INTERVAL 大于 0会按照 [-keep2, -duration] 下发自动 compact。因此要关闭自动 compact 功能,需要将 COMPACT_INTERVAL 设置为 0。仅企业版 3.3.5.0 版本开始支持。 - COMPACT_TIME_RANGE自动 compact 任务触发的 compact 时间范围,取值范围:[-keep2, -duration]单位m分钟h小时d。不加时间单位时默认单位为天默认值为 [0, 0]。取默认值 [0, 0] 时,如果 COMPACT_INTERVAL 大于 0会按照 [-keep2, -duration] 下发自动 compact。因此要关闭自动 compact 功能,需要将 COMPACT_INTERVAL 设置为 0。仅企业版 3.3.5.0 版本开始支持。
- COMPACT_TIME_OFFSET自动 compact 任务触发的 compact 时间相对本地时间的偏移量。取值范围:[0,23],单位: h小时默认值为 0。以 UTC 0 时区为例,如果 COMPACT_INTERVAL 为 1d当 COMPACT_TIME_OFFSET 为 0 时,在每天 0 点下发自动 compact如果 COMPACT_TIME_OFFSET 为 2在每天 2 点下发自动 compact。仅企业版 3.3.5.0 版本开始支持。 - COMPACT_TIME_OFFSET自动 compact 任务触发的 compact 时间相对本地时间的偏移量。取值范围:[0, 23],单位:h小时默认值为 0。以 UTC 0 时区为例,如果 COMPACT_INTERVAL 为 1d当 COMPACT_TIME_OFFSET 为 0 时,在每天 0 点下发自动 compact如果 COMPACT_TIME_OFFSET 为 2在每天 2 点下发自动 compact。仅企业版 3.3.5.0 版本开始支持。
- -
### 创建数据库示例 ### 创建数据库示例

View File

@ -41,7 +41,7 @@ table_option: {
**使用说明** **使用说明**
1. 表(列)名命名规则参见[名称命名规则](./19-limit.md#名称命名规则)。 1. 表(列)名命名规则参见 [名称命名规则](./19-limit.md#名称命名规则)。
2. 表名最大长度为 192。 2. 表名最大长度为 192。
3. 表的第一个字段必须是 TIMESTAMP并且系统自动将其设为主键。 3. 表的第一个字段必须是 TIMESTAMP并且系统自动将其设为主键。
4. 除时间戳主键列之外,还可以通过 PRIMARY KEY 关键字指定第二列为额外的主键列,该列与时间戳列共同组成复合主键。当设置了复合主键时,两条记录的时间戳列与 PRIMARY KEY 列都相同才会被认为是重复记录数据库只保留最新的一条否则视为两条记录全部保留。注意被指定为主键列的第二列必须为整型或字符串类型VARCHAR 4. 除时间戳主键列之外,还可以通过 PRIMARY KEY 关键字指定第二列为额外的主键列,该列与时间戳列共同组成复合主键。当设置了复合主键时,两条记录的时间戳列与 PRIMARY KEY 列都相同才会被认为是重复记录数据库只保留最新的一条否则视为两条记录全部保留。注意被指定为主键列的第二列必须为整型或字符串类型VARCHAR

View File

@ -100,11 +100,11 @@ Hints 是用户控制单个语句查询优化的一种手段,当 Hint 不适
| :-----------: | -------------- | -------------------------- | -----------------------------| | :-----------: | -------------- | -------------------------- | -----------------------------|
| BATCH_SCAN | 无 | 采用批量读表的方式 | 超级表 JOIN 语句 | | BATCH_SCAN | 无 | 采用批量读表的方式 | 超级表 JOIN 语句 |
| NO_BATCH_SCAN | 无 | 采用顺序读表的方式 | 超级表 JOIN 语句 | | NO_BATCH_SCAN | 无 | 采用顺序读表的方式 | 超级表 JOIN 语句 |
| SORT_FOR_GROUP| 无 | 采用sort方式进行分组, 与PARTITION_FIRST冲突 | partition by 列表有普通列时 | | SORT_FOR_GROUP| 无 | 采用 sort 方式进行分组,与 PARTITION_FIRST 冲突 | partition by 列表有普通列时 |
| PARTITION_FIRST| 无 | 在聚合之前使用PARTITION计算分组, 与SORT_FOR_GROUP冲突 | partition by 列表有普通列时 | | PARTITION_FIRST| 无 | 在聚合之前使用 PARTITION 计算分组,与 SORT_FOR_GROUP 冲突 | partition by 列表有普通列时 |
| PARA_TABLES_SORT| 无 | 超级表的数据按时间戳排序时, 不使用临时磁盘空间, 只使用内存。当子表数量多, 行长比较大时候, 会使用大量内存, 可能发生OOM | 超级表的数据按时间戳排序时 | | PARA_TABLES_SORT| 无 | 超级表的数据按时间戳排序时,不使用临时磁盘空间,只使用内存。当子表数量多,行长比较大时候,会使用大量内存,可能发生 OOM | 超级表的数据按时间戳排序时 |
| SMALLDATA_TS_SORT| 无 | 超级表的数据按时间戳排序时, 查询列长度大于等于256, 但是行数不多, 使用这个提示, 可以提高性能 | 超级表的数据按时间戳排序时 | | SMALLDATA_TS_SORT| 无 | 超级表的数据按时间戳排序时,查询列长度大于等于 256但是行数不多使用这个提示可以提高性能 | 超级表的数据按时间戳排序时 |
| SKIP_TSMA | 无 | 用于显示的禁用TSMA查询优化 | 带Agg函数的查询语句 | | SKIP_TSMA | 无 | 用于显示的禁用 TSMA 查询优化 | 带 Agg 函数的查询语句 |
举例: 举例:
@ -322,13 +322,13 @@ NULLS 语法用来指定 NULL 值在排序中输出的位置。NULLS LAST 是升
## LIMIT ## LIMIT
LIMIT 控制输出条数OFFSET 指定从第几条之后开始输出。LIMIT/OFFSET 对结果集的执行顺序在 ORDER BY 之后。LIMIT 5 OFFSET 2 可以简写为 LIMIT 2, 5都输出第 3 行到第 7 行数据。 LIMIT 控制输出条数OFFSET 指定从第几条之后开始输出。LIMIT/OFFSET 对结果集的执行顺序在 ORDER BY 之后。`LIMIT 5 OFFSET 2` 可以简写为 `LIMIT 2, 5`,都输出第 3 行到第 7 行数据。
在有 PARTITION BY/GROUP BY 子句时LIMIT 控制的是每个切分的分片中的输出,而不是总的结果集输出。 在有 PARTITION BY/GROUP BY 子句时LIMIT 控制的是每个切分的分片中的输出,而不是总的结果集输出。
## SLIMIT ## SLIMIT
SLIMIT 和 PARTITION BY/GROUP BY 子句一起使用用来控制输出的分片的数量。SLIMIT 5 SOFFSET 2 可以简写为 SLIMIT 2, 5都表示输出第 3 个到第 7 个分片。 SLIMIT 和 PARTITION BY/GROUP BY 子句一起使用,用来控制输出的分片的数量。`SLIMIT 5 SOFFSET 2` 可以简写为 SLIMIT `2, 5`,都表示输出第 3 个到第 7 个分片。
需要注意,如果有 ORDER BY 子句,则输出只有一个分片。 需要注意,如果有 ORDER BY 子句,则输出只有一个分片。
@ -485,8 +485,8 @@ SELECT ... FROM (SELECT ... FROM ...) ...;
- 内层查询的 ORDER BY 子句一般没有意义,建议避免这样的写法以免无谓的资源消耗。 - 内层查询的 ORDER BY 子句一般没有意义,建议避免这样的写法以免无谓的资源消耗。
- 与非嵌套的查询语句相比,外层查询所能支持的功能特性存在如下限制: - 与非嵌套的查询语句相比,外层查询所能支持的功能特性存在如下限制:
- 计算函数部分: - 计算函数部分:
- 如果内层查询的结果数据未提供时间戳那么计算过程隐式依赖时间戳的函数在外层会无法正常工作。例如INTERP, DERIVATIVE, IRATE, LAST_ROW, FIRST, LAST, TWA, STATEDURATION, TAIL, UNIQUE。 - 如果内层查询的结果数据未提供时间戳那么计算过程隐式依赖时间戳的函数在外层会无法正常工作。例如INTERP、DERIVATIVE、IRATE、LAST_ROW、FIRST、LAST、TWA、STATEDURATION、TAIL、UNIQUE。
- 如果内层查询的结果数据不是按时间戳有序那么计算过程依赖数据按时间有序的函数在外层会无法正常工作。例如LEASTSQUARES, ELAPSED, INTERP, DERIVATIVE, IRATE, TWA, DIFF, STATECOUNT, STATEDURATION, CSUM, MAVG, TAIL, UNIQUE。 - 如果内层查询的结果数据不是按时间戳有序那么计算过程依赖数据按时间有序的函数在外层会无法正常工作。例如LEASTSQUARES、ELAPSED、INTERP、DERIVATIVE、IRATE、TWA、DIFF、STATECOUNT、STATEDURATION、CSUM、MAVG、TAIL、UNIQUE。
- 计算过程需要两遍扫描的函数在外层查询中无法正常工作。例如此类函数包括PERCENTILE。 - 计算过程需要两遍扫描的函数在外层查询中无法正常工作。例如此类函数包括PERCENTILE。
::: :::
@ -521,7 +521,7 @@ SELECT * FROM tb1 WHERE ts >= NOW - 1h;
SELECT * FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND ts <= '2018-06-02 08:00:00.000' AND col3 LIKE '%nny' ORDER BY ts DESC; SELECT * FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND ts <= '2018-06-02 08:00:00.000' AND col3 LIKE '%nny' ORDER BY ts DESC;
``` ```
查询 col1 与 col2 的和,并取名 complex, 时间大于 2018-06-01 08:00:00.000, col2 大于 1.2,结果输出仅仅 10 条记录,从第 5 条开始: 查询 col1 与 col2 的和,并取名 complex,时间大于 2018-06-01 08:00:00.000col2 大于 1.2,结果输出仅仅 10 条记录,从第 5 条开始:
``` ```
SELECT (col1 + col2) AS 'complex' FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND col2 > 1.2 LIMIT 10 OFFSET 5; SELECT (col1 + col2) AS 'complex' FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND col2 > 1.2 LIMIT 10 OFFSET 5;

View File

@ -41,7 +41,7 @@ SHOW INDEXES FROM [db_name.]tbl_name;
## 使用说明 ## 使用说明
1. 索引使用得当能够提升数据过滤的效率,目前支持的过滤算子有 `=`, `>`, `>=`, `<`, `<=`。如果查询过滤条件中使用了这些算子,则索引能够明显提升查询效率。但如果查询过滤条件中使用的是其它算子,则索引起不到作用,查询效率没有变化。未来会逐步添加更多的算子。 1. 索引使用得当能够提升数据过滤的效率,目前支持的过滤算子有 `=`、`>`、`>=`、`<`、`<=`。如果查询过滤条件中使用了这些算子,则索引能够明显提升查询效率。但如果查询过滤条件中使用的是其它算子,则索引起不到作用,查询效率没有变化。未来会逐步添加更多的算子。
2. 针对一个 tag 列只能建立一个索引,如果重复创建索引则会报错。 2. 针对一个 tag 列只能建立一个索引,如果重复创建索引则会报错。
@ -55,4 +55,4 @@ SHOW INDEXES FROM [db_name.]tbl_name;
7. 如果某个 tag 列的唯一值较少时,不建议对其建立索引,这种情况下收效甚微。 7. 如果某个 tag 列的唯一值较少时,不建议对其建立索引,这种情况下收效甚微。
8. 新建立的超级表,会给第一列tag随机生成一个indexNewName, 生成规则是:tag0的name + 23个byte, 在系统表可以查,也可以按需要drop,行为和其他列tag 的索引一样 8. 新建立的超级表,会给第一列 tag随机生成一个indexNewName生成规则是tag0的name + 23个byte在系统表可以查,也可以按需要drop行为和其他列 tag 的索引一样

View File

@ -14,19 +14,19 @@ title: "删除数据"
DELETE FROM [ db_name. ] tb_name [WHERE condition]; DELETE FROM [ db_name. ] tb_name [WHERE condition];
``` ```
**功能** 删除指定表或超级表中的数据记录 **功能**删除指定表或超级表中的数据记录
**参数** **参数**
- `db_name` 可选参数,指定要删除表所在的数据库名,不填写则在当前数据库中 - `db_name` :可选参数,指定要删除表所在的数据库名,不填写则在当前数据库中
- `tb_name` 必填参数,指定要删除数据的表名,可以是普通表、子表,也可以是超级表。 - `tb_name` :必填参数,指定要删除数据的表名,可以是普通表、子表,也可以是超级表。
- `condition` 可选参数,指定删除数据的过滤条件,不指定过滤条件则为表中所有数据,请慎重使用。特别说明,这里的 where 条件中只支持对第一列时间列的过滤。 - `condition`:可选参数,指定删除数据的过滤条件,不指定过滤条件则为表中所有数据,请慎重使用。特别说明,这里的 where 条件中只支持对第一列时间列的过滤。
**特别说明** **特别说明**
数据删除后不可恢复,请慎重使用。为了确保删除的数据确实是自己要删除的,建议可以先使用 `select` 语句加 `where` 后的删除条件查看要删除的数据内容,确认无误后再执行 `delete` 命令。 数据删除后不可恢复,请慎重使用。为了确保删除的数据确实是自己要删除的,建议可以先使用 `select` 语句加 `where` 后的删除条件查看要删除的数据内容,确认无误后再执行 `delete` 命令。
**示例** **示例**
`meters` 是一个超级表,`groupid` 是 int 类型的 tag 列,现在要删除 `meters` 表中时间小于 2021-10-01 10:40:00.100 的所有数据sql 如下: `meters` 是一个超级表,`groupid` 是 int 类型的 tag 列,现在要删除 `meters` 表中时间小于 2021-10-01 10:40:00.100 的所有数据sql 如下:

File diff suppressed because it is too large Load Diff

View File

@ -54,9 +54,9 @@ window_clause: {
``` ```
其中interval_val 和 sliding_val 都表示时间段interval_offset 表示窗口偏移量interval_offset 必须小于 interval_val语法上支持三种方式举例说明如下: 其中interval_val 和 sliding_val 都表示时间段interval_offset 表示窗口偏移量interval_offset 必须小于 interval_val语法上支持三种方式举例说明如下:
- INTERVAL(1s, 500a) SLIDING(1s), 自带时间单位的形式,其中的时间单位是单字符表示, 分别为: a (毫秒), b (纳秒), d (天), h (小时), m (分钟), n (月), s (秒), u (微秒), w (周), y (年). - `INTERVAL(1s, 500a) SLIDING(1s)` 自带时间单位的形式,其中的时间单位是单字符表示,分别为: a (毫秒)、b (纳秒)、d (天)、h (小时)、m (分钟)、n (月)、s (秒)、u (微秒)、w (周)、y (年)。
- INTERVAL(1000, 500) SLIDING(1000), 不带时间单位的形式,将使用查询库的时间精度作为默认时间单位,当存在多个库时默认采用精度更高的库. - `INTERVAL(1000, 500) SLIDING(1000)` 不带时间单位的形式,将使用查询库的时间精度作为默认时间单位,当存在多个库时默认采用精度更高的库
- INTERVAL('1s', '500a') SLIDING('1s'), 自带时间单位的字符串形式,字符串内部不能有任何空格等其它字符. - `INTERVAL('1s', '500a') SLIDING('1s')` 自带时间单位的字符串形式,字符串内部不能有任何空格等其它字符。
### 窗口子句的规则 ### 窗口子句的规则
@ -76,19 +76,19 @@ window_clause: {
FILL 语句指定某一窗口区间数据缺失的情况下的填充模式。填充模式包括以下几种: FILL 语句指定某一窗口区间数据缺失的情况下的填充模式。填充模式包括以下几种:
1. 不进行填充NONE默认填充模式 1. 不进行填充NONE默认填充模式
2. VALUE 填充:固定值填充,此时需要指定填充的数值。例如FILL(VALUE, 1.23)。这里需要注意,最终填充的值受由相应列的类型决定,如 FILL(VALUE, 1.23),相应列为 INT 类型,则填充值为 1, 若查询列表中有多列需要 FILL, 则需要给每一个 FILL 列指定 VALUE, 如 `SELECT _wstart, min(c1), max(c1) FROM ... FILL(VALUE, 0, 0)`, 注意, SELECT 表达式中只有包含普通列时才需要指定 FILL VALUE, 如 `_wstart`, `_wstart+1a`, `now`, `1+1` 以及使用 partition by 时的 partition key (如 tbname)都不需要指定 VALUE, `timediff(last(ts), _wstart)` 则需要指定VALUE。 2. VALUE 填充:固定值填充,此时需要指定填充的数值。例如 FILL(VALUE, 1.23)。这里需要注意,最终填充的值受由相应列的类型决定,如 FILL(VALUE, 1.23),相应列为 INT 类型,则填充值为 1,若查询列表中有多列需要 FILL则需要给每一个 FILL 列指定 VALUE`SELECT _wstart, min(c1), max(c1) FROM ... FILL(VALUE, 0, 0)`注意SELECT 表达式中只有包含普通列时才需要指定 FILL VALUE`_wstart`、`_wstart+1a`、`now`、`1+1` 以及使用 partition by 时的 partition key (如 tbname)都不需要指定 VALUE`timediff(last(ts), _wstart)` 则需要指定 VALUE。
3. PREV 填充:使用前一个非 NULL 值填充数据。例如FILL(PREV)。 3. PREV 填充:使用前一个非 NULL 值填充数据。例如 FILL(PREV)。
4. NULL 填充:使用 NULL 填充数据。例如FILL(NULL)。 4. NULL 填充:使用 NULL 填充数据。例如 FILL(NULL)。
5. LINEAR 填充:根据前后距离最近的非 NULL 值做线性插值填充。例如FILL(LINEAR)。 5. LINEAR 填充:根据前后距离最近的非 NULL 值做线性插值填充。例如 FILL(LINEAR)。
6. NEXT 填充:使用下一个非 NULL 值填充数据。例如FILL(NEXT)。 6. NEXT 填充:使用下一个非 NULL 值填充数据。例如 FILL(NEXT)。
以上填充模式中,除了 NONE 模式默认不填充值之外,其他模式在查询的整个时间范围内如果没有数据 FILL 子句将被忽略即不产生填充数据查询结果为空。这种行为在部分模式PREV、NEXT、LINEAR下具有合理性因为在这些模式下没有数据意味着无法产生填充数值。而对另外一些模式NULL、VALUE来说理论上是可以产生填充数值的至于需不需要输出填充数值取决于应用的需求。所以为了满足这类需要强制填充数据或 NULL 的应用的需求,同时不破坏现有填充模式的行为兼容性,从 3.0.3.0 版本开始,增加了两种新的填充模式: 以上填充模式中,除了 NONE 模式默认不填充值之外,其他模式在查询的整个时间范围内如果没有数据 FILL 子句将被忽略即不产生填充数据查询结果为空。这种行为在部分模式PREV、NEXT、LINEAR下具有合理性因为在这些模式下没有数据意味着无法产生填充数值。而对另外一些模式NULL、VALUE来说理论上是可以产生填充数值的至于需不需要输出填充数值取决于应用的需求。所以为了满足这类需要强制填充数据或 NULL 的应用的需求,同时不破坏现有填充模式的行为兼容性,从 v3.0.3.0 开始,增加了两种新的填充模式:
7. NULL_F: 强制填充 NULL 值 7. NULL_F强制填充 NULL 值
8. VALUE_F: 强制填充 VALUE 值 8. VALUE_F强制填充 VALUE 值
NULL, NULL_F, VALUE, VALUE_F 这几种填充模式针对不同场景区别如下: NULL、NULL_F、VALUE、 VALUE_F 这几种填充模式针对不同场景区别如下:
- INTERVAL 子句: NULL_F, VALUE_F 为强制填充模式NULL, VALUE 为非强制模式。在这种模式下下各自的语义与名称相符 - INTERVAL 子句:NULL_F、VALUE_F 为强制填充模式NULL、VALUE 为非强制模式。在这种模式下下各自的语义与名称相符
- 流计算中的 INTERVAL 子句NULL_F 与 NULL 行为相同均为非强制模式VALUE_F 与 VALUE 行为相同,均为非强制模式。即流计算中的 INTERVAL 没有强制模式 - 流计算中的 INTERVAL 子句NULL_F 与 NULL 行为相同均为非强制模式VALUE_F 与 VALUE 行为相同,均为非强制模式。即流计算中的 INTERVAL 没有强制模式
- INTERP 子句NULL 与 NULL_F 行为相同均为强制模式VALUE 与 VALUE_F 行为相同,均为强制模式。即 INTERP 中没有非强制模式。 - INTERP 子句NULL 与 NULL_F 行为相同均为强制模式VALUE 与 VALUE_F 行为相同,均为强制模式。即 INTERP 中没有非强制模式。
@ -104,7 +104,7 @@ NULL, NULL_F, VALUE, VALUE_F 这几种填充模式针对不同场景区别如下
时间窗口又可分为滑动时间窗口和翻转时间窗口。 时间窗口又可分为滑动时间窗口和翻转时间窗口。
INTERVAL 子句用于产生相等时间周期的窗口SLIDING 用以指定窗口向前滑动的时间。每次执行的查询是一个时间窗口时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口time window 大小和每次前向增量时间forward sliding times。如图[t0s, t0e] [t1s , t1e] [t2s, t2e] 是分别是执行三次连续查询的时间窗口范围,窗口的前向滑动的时间范围 sliding time 标识 。查询过滤、聚合等操作按照每个时间窗口为独立的单位执行。当 SLIDING 与 INTERVAL 相等的时候,滑动窗口即为翻转窗口。 INTERVAL 子句用于产生相等时间周期的窗口SLIDING 用以指定窗口向前滑动的时间。每次执行的查询是一个时间窗口时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口time window 大小和每次前向增量时间forward sliding times。如图[t0s, t0e] [t1s , t1e][t2s, t2e] 是分别是执行三次连续查询的时间窗口范围,窗口的前向滑动的时间范围 sliding time 标识 。查询过滤、聚合等操作按照每个时间窗口为独立的单位执行。当 SLIDING 与 INTERVAL 相等的时候,滑动窗口即为翻转窗口。
![TDengine Database 时间窗口示意图](./timewindow-1.webp) ![TDengine Database 时间窗口示意图](./timewindow-1.webp)
@ -139,21 +139,21 @@ SELECT COUNT(*) FROM meters WHERE _rowts - voltage > 1000000;
- 使用 INTERVAL 语句时,除非极特殊的情况,都要求把客户端和服务端的 taos.cfg 配置文件中的 timezone 参数配置为相同的取值,以避免时间处理函数频繁进行跨时区转换而导致的严重性能影响。 - 使用 INTERVAL 语句时,除非极特殊的情况,都要求把客户端和服务端的 taos.cfg 配置文件中的 timezone 参数配置为相同的取值,以避免时间处理函数频繁进行跨时区转换而导致的严重性能影响。
- 返回的结果中时间序列严格单调递增。 - 返回的结果中时间序列严格单调递增。
- 使用 AUTO 作为窗口偏移量时,如果 WHERE 时间条件比较复杂,比如多个 AND/OR/IN 互相组合,那么 AUTO 可能不生效,这种情况可以通过手动指定窗口偏移量进行解决。 - 使用 AUTO 作为窗口偏移量时,如果 WHERE 时间条件比较复杂,比如多个 AND/OR/IN 互相组合,那么 AUTO 可能不生效,这种情况可以通过手动指定窗口偏移量进行解决。
- 使用 AUTO 作为窗口偏移量时,如果窗口宽度的单位是 d (天), n (月), w (周), y (年),比如: INTERVAL(1d, AUTO), INTERVAL(3w, AUTO),此时 TSMA 优化无法生效。如果目标表上手动创建了TSMA语句会报错退出这种情况下可以显式指定 Hint SKIP_TSMA 或者不使用 AUTO 作为窗口偏移量。 - 使用 AUTO 作为窗口偏移量时,如果窗口宽度的单位是 d (天)、n (月)、w (周)、y (年),比如 `INTERVAL(1d, AUTO)`、`INTERVAL(3w, AUTO)`,此时 TSMA 优化无法生效。如果目标表上手动创建了 TSMA语句会报错退出这种情况下可以显式指定 Hint SKIP_TSMA 或者不使用 AUTO 作为窗口偏移量。
### 状态窗口 ### 状态窗口
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。如下图所示,根据状态量确定的状态窗口分别是[2019-04-28 14:22:072019-04-28 14:22:10]和[2019-04-28 14:22:112019-04-28 14:22:12]两个。 使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。如下图所示,根据状态量确定的状态窗口分别是 [2019-04-28 14:22:072019-04-28 14:22:10] [2019-04-28 14:22:112019-04-28 14:22:12] 两个。
![TDengine Database 时间窗口示意图](./timewindow-3.webp) ![TDengine Database 时间窗口示意图](./timewindow-3.webp)
使用 STATE_WINDOW 来确定状态窗口划分的列。例如 使用 STATE_WINDOW 来确定状态窗口划分的列。例如
``` ```
SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status); SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status);
``` ```
仅关心 status 为 2 时的状态窗口的信息。例如 仅关心 status 为 2 时的状态窗口的信息。例如
``` ```
SELECT * FROM (SELECT COUNT(*) AS cnt, FIRST(ts) AS fst, status FROM temp_tb_1 STATE_WINDOW(status)) t WHERE status = 2; SELECT * FROM (SELECT COUNT(*) AS cnt, FIRST(ts) AS fst, status FROM temp_tb_1 STATE_WINDOW(status)) t WHERE status = 2;
@ -167,7 +167,7 @@ SELECT tbname, _wstart, CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE
### 会话窗口 ### 会话窗口
会话窗口根据记录的时间戳主键的值来确定是否属于同一个会话。如下图所示,如果设置时间戳的连续的间隔小于等于 12 秒,则以下 6 条记录构成 2 个会话窗口,分别是[2019-04-28 14:22:102019-04-28 14:22:30]和[2019-04-28 14:23:102019-04-28 14:23:30]。因为 2019-04-28 14:22:30 与 2019-04-28 14:23:10 之间的时间间隔是 40 秒超过了连续时间间隔12 秒)。 会话窗口根据记录的时间戳主键的值来确定是否属于同一个会话。如下图所示,如果设置时间戳的连续的间隔小于等于 12 秒,则以下 6 条记录构成 2 个会话窗口,分别是 [2019-04-28 14:22:102019-04-28 14:22:30] 和 [2019-04-28 14:23:102019-04-28 14:23:30]。因为 2019-04-28 14:22:30 与 2019-04-28 14:23:10 之间的时间间隔是 40 秒超过了连续时间间隔12 秒)。
![TDengine Database 时间窗口示意图](./timewindow-2.webp) ![TDengine Database 时间窗口示意图](./timewindow-2.webp)
@ -180,11 +180,11 @@ SELECT COUNT(*), FIRST(ts) FROM temp_tb_1 SESSION(ts, tol_val);
### 事件窗口 ### 事件窗口
事件窗口根据开始条件和结束条件来划定窗口当start_trigger_condition满足时则窗口开始直到end_trigger_condition满足时窗口关闭。start_trigger_condition和end_trigger_condition可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。 事件窗口根据开始条件和结束条件来划定窗口,当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。start_trigger_condition end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
事件窗口可以仅包含一条数据。即当一条数据同时满足start_trigger_condition和end_trigger_condition且当前不在一个窗口内时这条数据自己构成了一个窗口。 事件窗口可以仅包含一条数据。即当一条数据同时满足 start_trigger_condition end_trigger_condition且当前不在一个窗口内时这条数据自己构成了一个窗口。
事件窗口无法关闭时不构成一个窗口不会被输出。即有数据满足start_trigger_condition此时窗口打开但后续数据都不能满足end_trigger_condition这个窗口无法被关闭这部分数据不够成一个窗口不会被输出。 事件窗口无法关闭时,不构成一个窗口,不会被输出。即有数据满足 start_trigger_condition此时窗口打开但后续数据都不能满足 end_trigger_condition这个窗口无法被关闭这部分数据不够成一个窗口不会被输出。
如果直接在超级表上进行事件窗口查询TDengine 会将超级表的数据汇总成一条时间线,然后进行事件窗口的计算。 如果直接在超级表上进行事件窗口查询TDengine 会将超级表的数据汇总成一条时间线,然后进行事件窗口的计算。
如果需要对子查询的结果集进行事件窗口查询,那么子查询的结果集需要满足按时间线输出的要求,且可以输出有效的时间戳列。 如果需要对子查询的结果集进行事件窗口查询,那么子查询的结果集需要满足按时间线输出的要求,且可以输出有效的时间戳列。
@ -198,7 +198,7 @@ select _wstart, _wend, count(*) from t event_window start with c1 > 0 end with c
### 计数窗口 ### 计数窗口
计数窗口按固定的数据行数来划分窗口。默认将数据按时间戳排序再按照count_val的值将数据划分为多个窗口然后做聚合计算。count_val表示每个count window包含的最大数据行数总数据行数不能整除count_val时最后一个窗口的行数会小于count_val。sliding_val是常量表示窗口滑动的数量类似于 interval的SLIDING。 计数窗口按固定的数据行数来划分窗口。默认将数据按时间戳排序,再按照 count_val 的值将数据划分为多个窗口然后做聚合计算。count_val 表示每个 count window 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val。sliding_val 是常量,表示窗口滑动的数量,类似于 interval SLIDING。
以下面的 SQL 语句为例,计数窗口切分如图所示: 以下面的 SQL 语句为例,计数窗口切分如图所示:
```sql ```sql
@ -211,7 +211,7 @@ select _wstart, _wend, count(*) from t count_window(4);
### 时间戳伪列 ### 时间戳伪列
窗口聚合查询结果中,如果 SQL 语句中没有指定输出查询结果中的时间戳列,那么最终结果中不会自动包含窗口的时间列信息。如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (\_WSTART), 时间窗口结束时间 (\_WEND), 时间窗口持续时间 (\_WDURATION), 以及查询整体窗口相关的伪列: 查询窗口起始时间(\_QSTART) 和查询窗口结束时间(\_QEND)。需要注意的是时间窗口起始时间和结束时间均是闭区间,时间窗口持续时间是数据当前时间分辨率下的数值。例如,如果当前数据库的时间分辨率是毫秒,那么结果中 500 就表示当前时间窗口的持续时间是 500毫秒 (500 ms)。 窗口聚合查询结果中,如果 SQL 语句中没有指定输出查询结果中的时间戳列,那么最终结果中不会自动包含窗口的时间列信息。如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (\_WSTART), 时间窗口结束时间 (\_WEND), 时间窗口持续时间 (\_WDURATION), 以及查询整体窗口相关的伪列查询窗口起始时间(\_QSTART) 和查询窗口结束时间(\_QEND)。需要注意的是时间窗口起始时间和结束时间均是闭区间,时间窗口持续时间是数据当前时间分辨率下的数值。例如,如果当前数据库的时间分辨率是毫秒,那么结果中 500 就表示当前时间窗口的持续时间是 500毫秒 (500 ms)。
### 示例 ### 示例

View File

@ -10,7 +10,7 @@ TDengine 3.0.0.0 开始对消息队列做了大幅的优化和增强以简化用
TDengine 创建 topic 的个数上限通过参数 tmqMaxTopicNum 控制,默认 20 个。 TDengine 创建 topic 的个数上限通过参数 tmqMaxTopicNum 控制,默认 20 个。
TDengine 使用 SQL 创建一个 topic共有三种类型的 topic TDengine 使用 SQL 创建一个 topic共有三种类型的 topic
### 查询 topic ### 查询 topic
@ -20,12 +20,13 @@ TDengine 使用 SQL 创建一个 topic共有三种类型的 topic
CREATE TOPIC [IF NOT EXISTS] topic_name as subquery CREATE TOPIC [IF NOT EXISTS] topic_name as subquery
``` ```
通过 `SELECT` 语句订阅(包括 `SELECT *``SELECT ts, c1` 等指定查询订阅,可以带条件过滤、标量函数计算,但不支持聚合函数、不支持时间窗口聚合)。需要注意的是: 通过 `SELECT` 语句订阅(包括 `SELECT *` `SELECT ts, c1` 等指定查询订阅,可以带条件过滤、标量函数计算,但不支持聚合函数、不支持时间窗口聚合)。需要注意的是:
- 该类型 TOPIC 一旦创建则订阅数据的结构确定。 - 该类型 TOPIC 一旦创建则订阅数据的结构确定。
- 被订阅或用于计算的列或标签不可被删除(`ALTER table DROP`)、修改(`ALTER table MODIFY`)。 - 被订阅或用于计算的列或标签不可被删除(`ALTER table DROP`)、修改(`ALTER table MODIFY`)。
- 若发生表结构变更,新增的列不出现在结果中。 - 若发生表结构变更,新增的列不出现在结果中。
- 对于 select \*,则订阅展开为创建时所有的列(子表、普通表为数据列,超级表为数据列加标签列) - 对于 select \*,则订阅展开为创建时所有的列(子表、普通表为数据列,超级表为数据列加标签列)。
### 超级表 topic ### 超级表 topic
语法: 语法:
@ -38,8 +39,8 @@ CREATE TOPIC [IF NOT EXISTS] topic_name [with meta] AS STABLE stb_name [where_co
- 不会限制用户的表结构变更。 - 不会限制用户的表结构变更。
- 返回的是非结构化的数据:返回数据的结构会随之超级表的表结构变化而变化。 - 返回的是非结构化的数据:返回数据的结构会随之超级表的表结构变化而变化。
- with meta 参数可选,选择时将返回创建超级表,子表等语句,主要用于taosx做超级表迁移 - with meta 参数可选,选择时将返回创建超级表,子表等语句,主要用于 taosX 做超级表迁移。
- where_condition 参数可选选择时将用来过滤符合条件的子表订阅这些子表。where 条件里不能有普通列只能是tag或tbnamewhere条件里可以用函数用来过滤tag但是不能是聚合函数因为子表tag值无法做聚合。也可以是常量表达式比如 2 > 1订阅全部子表或者 false订阅0个子表 - where_condition 参数可选选择时将用来过滤符合条件的子表订阅这些子表。where 条件里不能有普通列,只能是 tag tbnamewhere 条件里可以用函数,用来过滤 tag但是不能是聚合函数因为子表 tag 值无法做聚合。也可以是常量表达式,比如 2 > 1订阅全部子表或者 false订阅 0 个子表)
- 返回数据不包含标签。 - 返回数据不包含标签。
### 数据库 topic ### 数据库 topic
@ -52,9 +53,9 @@ CREATE TOPIC [IF NOT EXISTS] topic_name [with meta] AS DATABASE db_name;
通过该语句可创建一个包含数据库所有表数据的订阅 通过该语句可创建一个包含数据库所有表数据的订阅
- with meta 参数可选,选择时将返回创建数据库里所有超级表,子表的语句,主要用于taosx做数据库迁移 - with meta 参数可选,选择时将返回创建数据库里所有超级表,子表的语句,主要用于 taosX 做数据库迁移。
说明: 超级表订阅和库订阅属于高级订阅模式,容易出错,如确实要使用,请咨询专业人员 说明:超级表订阅和库订阅属于高级订阅模式,容易出错,如确实要使用,请咨询 TDengine 运维团队
## 删除 topic ## 删除 topic

View File

@ -20,7 +20,7 @@ stream_options: {
``` ```
其中 subquery 是 select 普通查询语法的子集: 其中 subquery 是 select 普通查询语法的子集
```sql ```sql
subquery: SELECT select_list subquery: SELECT select_list
@ -30,11 +30,11 @@ subquery: SELECT select_list
window_clause window_clause
``` ```
支持会话窗口、状态窗口、滑动窗口、事件窗口和计数窗口其中状态窗口、事件窗口和计数窗口搭配超级表时必须与partition by tbname一起使用。对于数据源表是复合主键的流不支持状态窗口、事件窗口、计数窗口的计算。 支持会话窗口、状态窗口、滑动窗口、事件窗口和计数窗口其中,状态窗口、事件窗口和计数窗口搭配超级表时必须与 partition by tbname 一起使用。对于数据源表是复合主键的流,不支持状态窗口、事件窗口、计数窗口的计算。
stb_name 是保存计算结果的超级表的表名如果该超级表不存在会自动创建如果已存在则检查列的schema信息。详见 写入已存在的超级表。 stb_name 是保存计算结果的超级表的表名,如果该超级表不存在,会自动创建;如果已存在,则检查列的 schema 信息。详见 [写入已存在的超级表](#写入已存在的超级表)
TAGS 子句定义了流计算中创建TAG的规则可以为每个partition对应的子表生成自定义的TAG值详见 自定义TAG TAGS 子句定义了流计算中创建TAG的规则可以为每个 partition 对应的子表生成自定义的TAG值详见 [自定义 TAG](#自定义 TAG)
```sql ```sql
create_definition: create_definition:
col_name column_definition col_name column_definition
@ -42,7 +42,7 @@ column_definition:
type_name [COMMENT 'string_value'] type_name [COMMENT 'string_value']
``` ```
subtable 子句定义了流式计算中创建的子表的命名规则,详见 流式计算的 partition 部分 subtable 子句定义了流式计算中创建的子表的命名规则,详见 [流式计算的 partition](#流式计算的 partition)
```sql ```sql
window_clause: { window_clause: {
@ -54,23 +54,25 @@ window_clause: {
} }
``` ```
其中SESSION 是会话窗口tol_val 是时间间隔的最大范围。在 tol_val 时间间隔范围内的数据都属于同一个窗口,如果连续的两条数据的时间超过 tol_val则自动开启下一个窗口。该窗口的 _wend 等于最后一条数据的时间加上 tol_val。 其中
STATE_WINDOW 是状态窗口col 用来标识状态量相同的状态量数值则归属于同一个状态窗口col 数值改变后则当前窗口结束,自动开启下一个窗口 - SESSION 是会话窗口tol_val 是时间间隔的最大范围。在 tol_val 时间间隔范围内的数据都属于同一个窗口,如果连续的两条数据的时间超过 tol_val则自动开启下一个窗口。该窗口的 _wend 等于最后一条数据的时间加上 tol_val
INTERVAL 是时间窗口又可分为滑动时间窗口和翻转时间窗口。INTERVAL 子句用于指定窗口相等时间周期SLIDING 字句用于指定窗口向前滑动的时间。当 interval_val 与 sliding_val 相等的时候时间窗口即为翻转时间窗口否则为滑动时间窗口注意sliding_val 必须小于等于 interval_val - STATE_WINDOW 是状态窗口col 用来标识状态量相同的状态量数值则归属于同一个状态窗口col 数值改变后则当前窗口结束,自动开启下一个窗口
EVENT_WINDOW 是事件窗口,根据开始条件和结束条件来划定窗口。当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。 start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列 - INTERVAL 是时间窗口又可分为滑动时间窗口和翻转时间窗口。INTERVAL 子句用于指定窗口相等时间周期SLIDING 字句用于指定窗口向前滑动的时间。当 interval_val 与 sliding_val 相等的时候时间窗口即为翻转时间窗口否则为滑动时间窗口注意sliding_val 必须小于等于 interval_val
COUNT_WINDOW 是计数窗口,按固定的数据行数来划分窗口。 count_val 是常量是正整数必须大于等于2小于2147483648。 count_val 表示每个 COUNT_WINDOW 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val 。 sliding_val 是常量,表示窗口滑动的数量,类似于 INTERVAL 的 SLIDING 。 - EVENT_WINDOW 是事件窗口,根据开始条件和结束条件来划定窗口。当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
- COUNT_WINDOW 是计数窗口按固定的数据行数来划分窗口。count_val 是常量,是正整数,必须大于等于 2小于 2147483648。count_val 表示每个 COUNT_WINDOW 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val。sliding_val 是常量,表示窗口滑动的数量,类似于 INTERVAL 的 SLIDING。
窗口的定义与时序数据特色查询中的定义完全相同,详见 [TDengine 特色查询](../distinguished) 窗口的定义与时序数据特色查询中的定义完全相同,详见 [TDengine 特色查询](../distinguished)
例如,如下语句创建流式计算。第一个流计算,自动创建名为 avg_vol 的超级表以一分钟为时间窗口、30 秒为前向增量统计这些电表的平均电压,并将来自 meters 表的数据的计算结果写入 avg_vol 表,不同 partition 的数据会分别创建子表并写入不同子表。 例如,如下语句创建流式计算。第一个流计算,自动创建名为 avg_vol 的超级表以一分钟为时间窗口、30 秒为前向增量统计这些电表的平均电压,并将来自 meters 表的数据的计算结果写入 avg_vol 表,不同 partition 的数据会分别创建子表并写入不同子表。
第二个流计算,自动创建名为 streamt0 的超级表,将数据按时间戳的顺序,以 voltage < 0 作为窗口的开始条件voltage > 9作为窗口的结束条件划分窗口做聚合运算并将来自 meters 表的数据的计算结果写入 streamt0 表,不同 partition 的数据会分别创建子表并写入不同子表。 第二个流计算,自动创建名为 streamt0 的超级表,将数据按时间戳的顺序,以 voltage < 0 作为窗口的开始条件voltage > 9 作为窗口的结束条件,划分窗口做聚合运算,并将来自 meters 表的数据的计算结果写入 streamt0 表,不同 partition 的数据会分别创建子表并写入不同子表。
第三个流计算,自动创建名为 streamt1 的超级表将数据按时间戳的顺序以10条数据为一组划分窗口做聚合运算并将来自 meters 表的数据的计算结果写入 streamt1 表,不同 partition 的数据会分别创建子表并写入不同子表。 第三个流计算,自动创建名为 streamt1 的超级表,将数据按时间戳的顺序,以 10 条数据为一组,划分窗口做聚合运算,并将来自 meters 表的数据的计算结果写入 streamt1 表,不同 partition 的数据会分别创建子表并写入不同子表。
```sql ```sql
CREATE STREAM avg_vol_s INTO avg_vol AS CREATE STREAM avg_vol_s INTO avg_vol AS
@ -97,19 +99,19 @@ SELECT _wstart, count(*), avg(voltage) from meters PARTITION BY tbname COUNT_WIN
CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m); CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
``` ```
PARTITION 子句中,为 tbname 定义了一个别名 tname, 在PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名(从3.2.3.0开始,为了避免 SUBTABLE 中的表达式无法区分各个子表,即误将多个相同时间线写入一个子表,在指定的子表名后面加上 _stableName_groupId) PARTITION 子句中,为 tbname 定义了一个别名 tname, 在 PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名(从 v3.2.3.0 开始,为了避免 SUBTABLE 中的表达式无法区分各个子表,即误将多个相同时间线写入一个子表,在指定的子表名后面加上 _stableName_groupId
注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。 注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。
## 流式计算读取历史数据 ## 流式计算读取历史数据
正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。流计算处理历史数据的最大窗口数是2000万超过限制会报错。例如 正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项,这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。流计算处理历史数据的最大窗口数是 2000 万,超过限制会报错。例如:
```sql ```sql
create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s) create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
``` ```
结合 fill_history 1 选项可以实现只处理特定历史时间范围的数据例如只处理某历史时刻2020年1月30日之后的数据 结合 fill_history 1 选项可以实现只处理特定历史时间范围的数据例如只处理某历史时刻2020 1 30 日)之后的数据
```sql ```sql
create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 where ts > '2020-01-30' interval(10s) create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 where ts > '2020-01-30' interval(10s)
@ -147,14 +149,14 @@ SELECT * from information_schema.`ins_streams`;
在创建流时,可以通过 TRIGGER 指令指定流式计算的触发模式。 在创建流时,可以通过 TRIGGER 指令指定流式计算的触发模式。
对于非窗口计算,流式计算的触发是实时的;对于窗口计算,目前提供 4 种触发模式,默认为 WINDOW_CLOSE 对于非窗口计算,流式计算的触发是实时的;对于窗口计算,目前提供 4 种触发模式,默认为 WINDOW_CLOSE
1. AT_ONCE写入立即触发 1. AT_ONCE写入立即触发
2. WINDOW_CLOSE窗口关闭时触发窗口关闭由事件时间决定可配合 watermark 使用) 2. WINDOW_CLOSE窗口关闭时触发窗口关闭由事件时间决定可配合 watermark 使用)
3. MAX_DELAY time若窗口关闭则触发计算。若窗口未关闭且未关闭时长超过 max delay 指定的时间,则触发计算。 3. MAX_DELAY time若窗口关闭则触发计算。若窗口未关闭且未关闭时长超过 max delay 指定的时间,则触发计算。
4. FORCE_WINDOW_CLOSE以操作系统当前时间为准只计算当前关闭窗口的结果并推送出去。窗口只会在被关闭的时刻计算一次后续不会再重复计算。该模式当前只支持 INTERVAL 窗口不支持滑动FILL_HISTORY 必须为 0IGNORE EXPIRED 必须为 1IGNORE UPDATE 必须为 1FILL 只支持 PREV 、NULL、NONE、VALUE。 4. FORCE_WINDOW_CLOSE以操作系统当前时间为准只计算当前关闭窗口的结果并推送出去。窗口只会在被关闭的时刻计算一次后续不会再重复计算。该模式当前只支持 INTERVAL 窗口不支持滑动FILL_HISTORY 必须为 0IGNORE EXPIRED 必须为 1IGNORE UPDATE 必须为 1FILL 只支持 PREV、NULL、NONE、VALUE。
由于窗口关闭是由事件时间决定的,如事件流中断、或持续延迟,则事件时间无法更新,可能导致无法得到最新的计算结果。 由于窗口关闭是由事件时间决定的,如事件流中断、或持续延迟,则事件时间无法更新,可能导致无法得到最新的计算结果。
@ -215,33 +217,33 @@ TDengine 对于修改数据提供两种处理方式,由 IGNORE UPDATE 选项
## 写入已存在的超级表 ## 写入已存在的超级表
```sql ```sql
[field1_name,...] [field1_name, ...]
``` ```
在本页文档顶部的 [field1_name,...] 是用来指定 stb_name 的列与 subquery 输出结果的对应关系的。如果 stb_name 的列与 subquery 输出结果的位置、数量全部匹配,则不需要显示指定对应关系。如果 stb_name 的列与 subquery 输出结果的数据类型不匹配,会把 subquery 输出结果的类型转换成对应的 stb_name 的列的类型。创建流计算时不能指定 stb_name 的列和 TAG 的数据类型,否则会报错。 在本页文档顶部的 [field1_name, ...] 是用来指定 stb_name 的列与 subquery 输出结果的对应关系的。如果 stb_name 的列与 subquery 输出结果的位置、数量全部匹配,则不需要显示指定对应关系。如果 stb_name 的列与 subquery 输出结果的数据类型不匹配,会把 subquery 输出结果的类型转换成对应的 stb_name 的列的类型。创建流计算时不能指定 stb_name 的列和 TAG 的数据类型,否则会报错。
对于已经存在的超级表检查列的schema信息 对于已经存在的超级表检查列的schema信息
1. 检查列的 schema 信息是否匹配,对于不匹配的,则自动进行类型转换,当前只有数据长度大于 4096byte 时才报错,其余场景都能进行类型转换。 1. 检查列的 schema 信息是否匹配,对于不匹配的,则自动进行类型转换,当前只有数据长度大于 4096byte 时才报错,其余场景都能进行类型转换。
2. 检查列的个数是否相同,如果不同,需要显示的指定超级表与 subquery 的列的对应关系,否则报错;如果相同,可以指定对应关系,也可以不指定,不指定则按位置顺序对应。 2. 检查列的个数是否相同,如果不同,需要显示的指定超级表与 subquery 的列的对应关系,否则报错;如果相同,可以指定对应关系,也可以不指定,不指定则按位置顺序对应。
## 自定义TAG ## 自定义 TAG
用户可以为每个 partition 对应的子表生成自定义的TAG值。 用户可以为每个 partition 对应的子表生成自定义的 TAG 值。
```sql ```sql
CREATE STREAM streams2 trigger at_once INTO st1 TAGS(cc varchar(100)) as select _wstart, count(*) c1 from st partition by concat("tag-", tbname) as cc interval(10s)); CREATE STREAM streams2 trigger at_once INTO st1 TAGS(cc varchar(100)) as select _wstart, count(*) c1 from st partition by concat("tag-", tbname) as cc interval(10s));
``` ```
PARTITION 子句中,为 concat("tag-", tbname)定义了一个别名cc, 对应超级表st1的自定义TAG的名字。在上述示例中流新创建的子表的TAG将以前缀 'new-' 连接原表名作为TAG的值。 PARTITION 子句中,为 concat("tag-", tbname) 定义了一个别名 cc对应超级表 st1 的自定义 TAG 的名字。在上述示例中,流新创建的子表的 TAG 将以前缀 'new-' 连接原表名作为 TAG 的值。
会对TAG信息进行如下检查 会对TAG信息进行如下检查
1. 检查tag的schema信息是否匹配对于不匹配的则自动进行数据类型转换当前只有数据长度大于4096byte时才报错其余场景都能进行类型转换。 1. 检查 tag schema 信息是否匹配,对于不匹配的,则自动进行数据类型转换,当前只有数据长度大于 4096byte 时才报错,其余场景都能进行类型转换。
2. 检查tag的个数是否相同如果不同需要显示的指定超级表与subquery的tag的对应关系否则报错如果相同可以指定对应关系也可以不指定不指定则按位置顺序对应。 2. 检查 tag 的个数是否相同,如果不同,需要显示的指定超级表与 subquery tag 的对应关系,否则报错;如果相同,可以指定对应关系,也可以不指定,不指定则按位置顺序对应。
## 清理中间状态 ## 清理中间状态
``` ```
DELETE_MARK time DELETE_MARK time
``` ```
DELETE_MARK用于删除缓存的窗口状态也就是删除流计算的中间结果。如果不设置默认值是10年 DELETE_MARK 用于删除缓存的窗口状态,也就是删除流计算的中间结果。如果不设置,默认值是 10
T = 最新事件时间 - DELETE_MARK T = 最新事件时间 - DELETE_MARK
## 流式计算支持的函数 ## 流式计算支持的函数
@ -272,15 +274,15 @@ T = 最新事件时间 - DELETE_MARK
## 暂停、恢复流计算 ## 暂停、恢复流计算
1.流计算暂停计算任务 1.流计算暂停计算任务
PAUSE STREAM [IF EXISTS] stream_name; PAUSE STREAM [IF EXISTS] stream_name;
没有指定IF EXISTS如果该stream不存在则报错如果存在则暂停流计算。指定了IF EXISTS如果该stream不存在则返回成功如果存在则暂停流计算 没有指定 IF EXISTS如果该 stream 不存在,则报错;如果存在,则暂停流计算。指定了 IF EXISTS如果该 stream 不存在,则返回成功;如果存在,则暂停流计算
2.流计算恢复计算任务 2.流计算恢复计算任务
RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name; RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name;
没有指定IF EXISTS如果该stream不存在则报错如果存在则恢复流计算指定了IF EXISTS如果stream不存在则返回成功如果存在则恢复流计算。如果指定IGNORE UNTREATED则恢复流计算时忽略流计算暂停期间写入的数据。 没有指定 IF EXISTS如果该 stream 不存在,则报错,如果存在,则恢复流计算;指定了 IF EXISTS如果 stream 不存在,则返回成功;如果存在,则恢复流计算。如果指定 IGNORE UNTREATED则恢复流计算时忽略流计算暂停期间写入的数据。
## 状态数据备份与同步 ## 状态数据备份与同步
流计算的中间结果成为计算的状态数据,需要在流计算整个生命周期中进行持久化保存。为了确保流计算中间状态能够在集群环境下在不同的节点间可靠地同步和迁移,至3.3.2.1 版本开始,需要在运行环境中部署 rsync 软件,还需要增加以下的步骤: 流计算的中间结果成为计算的状态数据,需要在流计算整个生命周期中进行持久化保存。为了确保流计算中间状态能够在集群环境下在不同的节点间可靠地同步和迁移,从 v3.3.2.1 开始,需要在运行环境中部署 rsync 软件,还需要增加以下的步骤:
1. 在配置文件中配置 snode 的地址IP+端口)和状态数据备份目录(该目录系 snode 所在的物理节点的目录)。 1. 在配置文件中配置 snode 的地址IP + 端口)和状态数据备份目录(该目录系 snode 所在的物理节点的目录)。
2. 然后创建 snode。 2. 然后创建 snode。
完成上述两个步骤以后才能创建流。 完成上述两个步骤以后才能创建流。
如果没有创建 snode 并正确配置 snode 的地址流计算过程中将无法生成检查点checkpoint并可能导致后续的计算结果产生错误。 如果没有创建 snode 并正确配置 snode 的地址流计算过程中将无法生成检查点checkpoint并可能导致后续的计算结果产生错误。
@ -291,7 +293,7 @@ RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name;
## 创建 snode 的方式 ## 创建 snode 的方式
使用以下命令创建 snodestream node snode 是流计算中有状态的计算节点,可用于部署聚合任务,同时负责备份不同的流计算任务生成的检查点数据。 使用以下命令创建 snodestream nodesnode 是流计算中有状态的计算节点,可用于部署聚合任务,同时负责备份不同的流计算任务生成的检查点数据。
```sql ```sql
CREATE SNODE ON DNODE [id] CREATE SNODE ON DNODE [id]
``` ```

View File

@ -16,7 +16,7 @@ TDengine SQL 是用户对 TDengine 进行数据写入和查询的主要工具。
- | 表示多选一,选择其中一个即可,但不能输入 | 本身 - | 表示多选一,选择其中一个即可,但不能输入 | 本身
- … 表示前面的项可重复多个 - … 表示前面的项可重复多个
为更好地说明 SQL 语法的规则及其特点,本文假设存在一个数据集。以智能电表(meters)为例,假设每个智能电表采集电流、电压、相位三个量。其建模如下: 为更好地说明 SQL 语法的规则及其特点,本文假设存在一个数据集。以智能电表meters为例,假设每个智能电表采集电流、电压、相位三个量。其建模如下:
``` ```
taos> DESCRIBE meters; taos> DESCRIBE meters;
@ -30,7 +30,7 @@ taos> DESCRIBE meters;
groupid | INT | 4 | TAG | groupid | INT | 4 | TAG |
``` ```
数据集包含 4 个智能电表的数据,按照 TDengine 的建模规则,对应 4 个子表,其名称分别是 d1001, d1002, d1003, d1004。 数据集包含 4 个智能电表的数据,按照 TDengine 的建模规则,对应 4 个子表,其名称分别是 d1001、d1002、d1003、d1004。
```mdx-code-block ```mdx-code-block
import DocCardList from '@theme/DocCardList'; import DocCardList from '@theme/DocCardList';

View File

@ -32,13 +32,13 @@ TDengine 客户端驱动的动态库位于:
### 支持的平台 ### 支持的平台
请参考[支持的平台列表](../#支持的平台) 请参考 [支持的平台列表](../#支持的平台)
### 版本历史 ### 版本历史
| TDengine 客户端版本 | 主要变化 | TDengine 版本 | | TDengine 客户端版本 | 主要变化 | TDengine 版本 |
| ------------------ | --------------------------- | ---------------- | | ------------------ | --------------------------- | ---------------- |
| 3.3.3.0 | 首次发布,提供了 SQL执行参数绑定无模式写入和数据订阅等全面功能支持。 | 3.3.2.0 及更高版本 | | 3.3.3.0 | 首次发布,提供了 SQL 执行,参数绑定,无模式写入和数据订阅等全面功能支持。 | 3.3.2.0 及更高版本 |
### 错误码 ### 错误码
@ -50,7 +50,7 @@ WebSocket 连接方式单独的错误码在 `taosws.h` 中,
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ------- | -------- | ---------------------------- | ------------------ | | ------- | -------- | ---------------------------- | ------------------ |
| 0xE000 | DSN 错误 | DSN 不符合规范 | 检查 dsn 字符串是否符合规范 | | 0xE000 | DSN 错误 | DSN 不符合规范 | 检查 dsn 字符串是否符合规范 |
| 0xE001 | 内部错误 | 不确定 | 保留现场和日志github上报issue | | 0xE001 | 内部错误 | 不确定 | 保留现场和日志github 上报 issue |
| 0xE002 | 连接关闭 | 网络断开 | 请检查网络状况,查看 `taosadapter` 日志。 | | 0xE002 | 连接关闭 | 网络断开 | 请检查网络状况,查看 `taosadapter` 日志。 |
| 0xE003 | 发送超时 | 网络断开 | 请检查网络状况 | | 0xE003 | 发送超时 | 网络断开 | 请检查网络状况 |
| 0xE004 | 接收超时 | 慢查询,或者网络断开 | 排查 `taosadapter` 日志 | | 0xE004 | 接收超时 | 慢查询,或者网络断开 | 排查 `taosadapter` 日志 |
@ -93,16 +93,16 @@ DSN 描述字符串基本结构如下:
各部分意义见下表: 各部分意义见下表:
- **driver**: 必须指定驱动名以便连接器选择何种方式创建连接,支持如下驱动名: - **driver**必须指定驱动名以便连接器选择何种方式创建连接,支持如下驱动名:
- **taos**: 默认驱动,支持 SQL 执行,参数绑定,无模式写入。 - **taos**默认驱动,支持 SQL 执行,参数绑定,无模式写入。
- **tmq**: 使用 TMQ 订阅数据。 - **tmq**使用 TMQ 订阅数据。
- **protocol**: 显示指定以何种方式建立连接,例如:`taos+ws://localhost:6041` 指定以 WebSocket 方式建立连接。 - **protocol**显示指定以何种方式建立连接,例如:`taos+ws://localhost:6041` 指定以 WebSocket 方式建立连接。
- **http/ws**: 使用 WebSocket 协议。 - **http/ws**使用 WebSocket 协议。
- **https/wss**: 在 WebSocket 连接方式下显示启用 SSL/TLS 协议。 - **https/wss**在 WebSocket 连接方式下显示启用 SSL/TLS 协议。
- **username/password**: 用于创建连接的用户名及密码。 - **username/password**用于创建连接的用户名及密码。
- **host/port**: 指定创建连接的服务器及端口,当不指定服务器地址及端口时 WebSocket 连接默认为 `localhost:6041` 。 - **host/port**指定创建连接的服务器及端口,当不指定服务器地址及端口时 WebSocket 连接默认为 `localhost:6041` 。
- **database**: 指定默认连接的数据库名,可选参数。 - **database**指定默认连接的数据库名,可选参数。
- **params**:其他可选参数。 - **params**:其他可选参数。
一个完整的 DSN 描述字符串示例如下:`taos+ws://localhost:6041/test` 表示使用 WebSocket`ws`)方式通过 `6041` 端口连接服务器 `localhost`,并指定默认数据库为 `test`。 一个完整的 DSN 描述字符串示例如下:`taos+ws://localhost:6041/test` 表示使用 WebSocket`ws`)方式通过 `6041` 端口连接服务器 `localhost`,并指定默认数据库为 `test`。
@ -280,7 +280,7 @@ TDengine 推荐数据库应用的每个线程都建立一个独立的连接,
- **参数说明** - **参数说明**
- stmt[入参] 指向一个有效的预编译的 SQL 语句对象指针。 - stmt[入参] 指向一个有效的预编译的 SQL 语句对象指针。
- bind[入参] 指向一个有效的 WS_MULTI_BIND 结构体指针,该结构体包含了要批量绑定到 SQL 语句中的参数列表。 - bind[入参] 指向一个有效的 WS_MULTI_BIND 结构体指针,该结构体包含了要批量绑定到 SQL 语句中的参数列表。
- len: [入参] bind 数组的元素个数。 - len[入参] bind 数组的元素个数。
- **返回值**`0`:成功。非 `0`:失败,详情请参考错误码页面。 - **返回值**`0`:成功。非 `0`:失败,详情请参考错误码页面。
- `int ws_stmt_set_tbname(WS_STMT *stmt, const char *name)` - `int ws_stmt_set_tbname(WS_STMT *stmt, const char *name)`
@ -356,8 +356,8 @@ TDengine 推荐数据库应用的每个线程都建立一个独立的连接,
协议类型是枚举类型,包含以下三种格式: 协议类型是枚举类型,包含以下三种格式:
- WS_TSDB_SML_LINE_PROTOCOLInfluxDB 行协议Line Protocol) - WS_TSDB_SML_LINE_PROTOCOLInfluxDB 行协议Line Protocol)
- WS_TSDB_SML_TELNET_PROTOCOL: OpenTSDB Telnet 文本行协议 - WS_TSDB_SML_TELNET_PROTOCOLOpenTSDB Telnet 文本行协议
- WS_TSDB_SML_JSON_PROTOCOL: OpenTSDB Json 协议格式 - WS_TSDB_SML_JSON_PROTOCOLOpenTSDB Json 协议格式
时间戳分辨率的定义,定义在 `taosws.h` 文件中,具体内容如下: 时间戳分辨率的定义,定义在 `taosws.h` 文件中,具体内容如下:
@ -625,9 +625,9 @@ TDengine 服务端或客户端安装后,`taos.h` 位于:
TDengine 客户端驱动的动态库位于: TDengine 客户端驱动的动态库位于:
- Linux: `/usr/local/taos/driver/libtaos.so` - Linux`/usr/local/taos/driver/libtaos.so`
- Windows: `C:\TDengine\driver\taos.dll` - Windows`C:\TDengine\driver\taos.dll`
- macOS: `/usr/local/lib/libtaos.dylib` - macOS`/usr/local/lib/libtaos.dylib`
### 支持的平台 ### 支持的平台
@ -689,7 +689,7 @@ TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一
- `int taos_options_connection(TAOS *taos, TSDB_OPTION_CONNECTION option, const void *arg, ...)` - `int taos_options_connection(TAOS *taos, TSDB_OPTION_CONNECTION option, const void *arg, ...)`
- **接口说明**:设置客户端连接选项,目前支持字符集设置(`TSDB_OPTION_CONNECTION_CHARSET`)、时区设置(`TSDB_OPTION_CONNECTION_TIMEZONE`)、用户 IP 设置(`TSDB_OPTION_CONNECTION_USER_IP`)、用户 APP 设置(`TSDB_OPTION_CONNECTION_USER_APP`)。 - **接口说明**:设置客户端连接选项,目前支持字符集设置(`TSDB_OPTION_CONNECTION_CHARSET`)、时区设置(`TSDB_OPTION_CONNECTION_TIMEZONE`)、用户 IP 设置(`TSDB_OPTION_CONNECTION_USER_IP`)、用户 APP 设置(`TSDB_OPTION_CONNECTION_USER_APP`)。
- **参数说明** - **参数说明**
- `taos`: [入参] taos_connect 返回的连接句柄。 - `taos`[入参] taos_connect 返回的连接句柄。
- `option`[入参] 设置项类型。 - `option`[入参] 设置项类型。
- `arg`[入参] 设置项值。 - `arg`[入参] 设置项值。
- **返回值**`0`:成功,`非0`:失败。 - **返回值**`0`:成功,`非0`:失败。
@ -727,7 +727,7 @@ TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一
- **参数说明** - **参数说明**
- ip[入参] TDengine 集群中任一节点的 FQDN。 - ip[入参] TDengine 集群中任一节点的 FQDN。
- user[入参] 用户名。 - user[入参] 用户名。
- auth: [入参] 原始密码取 32 位小写 md5。 - auth[入参] 原始密码取 32 位小写 md5。
- db[入参] 数据库名称,如果用户没有提供,也可以正常连接,用户可以通过该连接创建新的数据库,如果用户提供了数据库名字,则说明该数据库用户已经创建好,缺省使用该数据库。 - db[入参] 数据库名称,如果用户没有提供,也可以正常连接,用户可以通过该连接创建新的数据库,如果用户提供了数据库名字,则说明该数据库用户已经创建好,缺省使用该数据库。
- port[入参] taosd 程序监听的端口。 - port[入参] taosd 程序监听的端口。
- **返回值**:返回数据库连接,返回值为空表示失败。应用程序需要保存返回的参数,以便后续使用。 - **返回值**:返回数据库连接,返回值为空表示失败。应用程序需要保存返回的参数,以便后续使用。
@ -763,7 +763,7 @@ TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一
- taos[入参] 指向数据库连接的指针,数据库连接是通过 `taos_connect()` 函数建立。 - taos[入参] 指向数据库连接的指针,数据库连接是通过 `taos_connect()` 函数建立。
- fp[入参] 事件回调函数指针。函数声明typedef void (*__taos_notify_fn_t)(void *param, void *ext, int type);其中, param 为用户自定义参数ext 为扩展参数(依赖事件类型,针对 TAOS_NOTIFY_PASSVER 返回用户密码版本)type 为事件类型。 - fp[入参] 事件回调函数指针。函数声明typedef void (*__taos_notify_fn_t)(void *param, void *ext, int type);其中, param 为用户自定义参数ext 为扩展参数(依赖事件类型,针对 TAOS_NOTIFY_PASSVER 返回用户密码版本)type 为事件类型。
- param[入参] 用户自定义参数。 - param[入参] 用户自定义参数。
- type[入参] 事件类型。取值范围1TAOS_NOTIFY_PASSVER 用户密码改变。 - type[入参] 事件类型。取值范围1TAOS_NOTIFY_PASSVER用户密码改变。
- **返回值**`0`:成功,`-1`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 - **返回值**`0`:成功,`-1`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。
- `void taos_close(TAOS *taos)` - `void taos_close(TAOS *taos)`
@ -866,12 +866,12 @@ TDengine 还提供性能更高的异步 API 处理数据插入、查询操作。
- **接口说明**:异步执行 SQL 语句。 - **接口说明**:异步执行 SQL 语句。
- **参数说明** - **参数说明**
- taos[入参] 指向数据库连接的指针,数据库连接是通过 `taos_connect()` 函数建立。 - taos[入参] 指向数据库连接的指针,数据库连接是通过 `taos_connect()` 函数建立。
- sql: [入参] 需要执行的 SQL 语句。 - sql[入参] 需要执行的 SQL 语句。
- fp用户定义的回调函数其第三个参数 `code` 用于指示操作是否成功,`0` 表示成功,负数表示失败(调用 `taos_errstr()` 可获取失败原因)。应用在定义回调函数的时候,主要处理第二个参数 `TAOS_RES *`,该参数是查询返回的结果集。 - fp用户定义的回调函数其第三个参数 `code` 用于指示操作是否成功,`0` 表示成功,负数表示失败(调用 `taos_errstr()` 可获取失败原因)。应用在定义回调函数的时候,主要处理第二个参数 `TAOS_RES *`,该参数是查询返回的结果集。
- param应用提供的用于回调的参数。 - param应用提供的用于回调的参数。
- `void taos_fetch_rows_a(TAOS_RES *res, void (*fp)(void *param, TAOS_RES *, int numOfRows), void *param);` - `void taos_fetch_rows_a(TAOS_RES *res, void (*fp)(void *param, TAOS_RES *, int numOfRows), void *param);`
- **接口说明** 批量获取异步查询的结果集,只能与 `taos_query_a()` 配合使用。 - **接口说明**:批量获取异步查询的结果集,只能与 `taos_query_a()` 配合使用。
- **参数说明** - **参数说明**
- res`taos_query_a()` 回调时返回的结果集。 - res`taos_query_a()` 回调时返回的结果集。
- fp回调函数。其参数 `param` 是用户可定义的传递给回调函数的参数结构体;`numOfRows` 是获取到的数据的行数(不是整个查询结果集的函数)。 在回调函数中,应用可以通过调用 `taos_fetch_row()` 前向迭代获取批量记录中每一行记录。读完一块内的所有记录后,应用需要在回调函数中继续调用 `taos_fetch_rows_a()` 获取下一批记录进行处理,直到返回的记录数 `numOfRows` 为零(结果返回完成)或记录数为负值(查询出错)。 - fp回调函数。其参数 `param` 是用户可定义的传递给回调函数的参数结构体;`numOfRows` 是获取到的数据的行数(不是整个查询结果集的函数)。 在回调函数中,应用可以通过调用 `taos_fetch_row()` 前向迭代获取批量记录中每一行记录。读完一块内的所有记录后,应用需要在回调函数中继续调用 `taos_fetch_rows_a()` 获取下一批记录进行处理,直到返回的记录数 `numOfRows` 为零(结果返回完成)或记录数为负值(查询出错)。
@ -995,8 +995,8 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多
协议类型是枚举类型,包含以下三种格式: 协议类型是枚举类型,包含以下三种格式:
- TSDB_SML_LINE_PROTOCOLInfluxDB 行协议Line Protocol) - TSDB_SML_LINE_PROTOCOLInfluxDB 行协议Line Protocol)
- TSDB_SML_TELNET_PROTOCOL: OpenTSDB Telnet 文本行协议 - TSDB_SML_TELNET_PROTOCOLOpenTSDB Telnet 文本行协议
- TSDB_SML_JSON_PROTOCOL: OpenTSDB Json 协议格式 - TSDB_SML_JSON_PROTOCOLOpenTSDB Json 协议格式
时间戳分辨率的定义,定义在 `taos.h` 文件中,具体内容如下: 时间戳分辨率的定义,定义在 `taos.h` 文件中,具体内容如下:

View File

@ -21,8 +21,8 @@ TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致
## JDBC 和 JRE 版本兼容性 ## JDBC 和 JRE 版本兼容性
- JDBC: 支持 JDBC 4.2 及以上版本。 - JDBC支持 JDBC 4.2 及以上版本。
- JRE: 支持 JRE 8 及以上版本。 - JRE支持 JRE 8 及以上版本。
## 支持的平台 ## 支持的平台
@ -101,7 +101,7 @@ JDBC 连接器可能报错的错误码包括 4 种:
| 0x2318 | | REST 连接中出现了数据传输异常,请检查网络情况并重试。 | | 0x2318 | | REST 连接中出现了数据传输异常,请检查网络情况并重试。 |
| 0x2319 | user is required | 创建连接时缺少用户名信息 | | 0x2319 | user is required | 创建连接时缺少用户名信息 |
| 0x231a | password is required | 创建连接时缺少密码信息 | | 0x231a | password is required | 创建连接时缺少密码信息 |
| 0x231c | httpEntity is null, sql: | REST 连接中执行出现异常 | | 0x231c | httpEntity is null, sql | REST 连接中执行出现异常 |
| 0x231d | can't create connection with server within | 通过增加参数 httpConnectTimeout 增加连接耗时,或是请检查与 taosAdapter 之间的连接情况。 | | 0x231d | can't create connection with server within | 通过增加参数 httpConnectTimeout 增加连接耗时,或是请检查与 taosAdapter 之间的连接情况。 |
| 0x231e | failed to complete the task within the specified time | 通过增加参数 messageWaitTimeout 增加执行耗时,或是请检查与 taosAdapter 之间的连接情况。 | | 0x231e | failed to complete the task within the specified time | 通过增加参数 messageWaitTimeout 增加执行耗时,或是请检查与 taosAdapter 之间的连接情况。 |
| 0x2350 | unknown error | 未知异常,请在 github 反馈给开发人员。 | | 0x2350 | unknown error | 未知异常,请在 github 反馈给开发人员。 |
@ -162,7 +162,7 @@ WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/w
- connectionPoolsHikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。 - connectionPoolsHikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。
- SpringJdbcTemplateSpring JdbcTemplate 中使用 taos-jdbcdriver。 - SpringJdbcTemplateSpring JdbcTemplate 中使用 taos-jdbcdriver。
- mybatisplus-demoSpringboot + Mybatis 中使用 taos-jdbcdriver。 - mybatisplus-demoSpringboot + Mybatis 中使用 taos-jdbcdriver。
- springbootdemo: Springboot 中使用 taos-jdbcdriver。 - springbootdemoSpringboot 中使用 taos-jdbcdriver。
- consumer-demoConsumer 消费 TDengine 数据示例,可通过参数控制消费速度。 - consumer-demoConsumer 消费 TDengine 数据示例,可通过参数控制消费速度。
请参考:[JDBC example](https://github.com/taosdata/TDengine/tree/main/docs/examples/JDBC) 请参考:[JDBC example](https://github.com/taosdata/TDengine/tree/main/docs/examples/JDBC)
@ -191,13 +191,13 @@ WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/w
**原因**taos-jdbcdriver 3.\* 版本仅支持 TDengine 3.0 及以上版本。 **原因**taos-jdbcdriver 3.\* 版本仅支持 TDengine 3.0 及以上版本。
**解决方法** 使用 taos-jdbcdriver 2.\* 版本连接 TDengine 2.\* 版本。 **解决方法**:使用 taos-jdbcdriver 2.\* 版本连接 TDengine 2.\* 版本。
5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar 5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar
**原因**taos-jdbcdriver 3.0.1 版本需要在 JDK 11+ 环境使用。 **原因**taos-jdbcdriver 3.0.1 版本需要在 JDK 11+ 环境使用。
**解决方法** 更换 taos-jdbcdriver 3.0.2+ 版本。 **解决方法**:更换 taos-jdbcdriver 3.0.2+ 版本。
其它问题请参考 [FAQ](../../../train-faq/faq) 其它问题请参考 [FAQ](../../../train-faq/faq)
@ -226,7 +226,7 @@ TDengine 的 JDBC URL 规范格式为:
- charset客户端使用的字符集默认值为系统字符集。 - charset客户端使用的字符集默认值为系统字符集。
- locale客户端语言环境默认值系统当前 locale。 - locale客户端语言环境默认值系统当前 locale。
- timezone客户端使用的时区默认值为系统当前时区。 - timezone客户端使用的时区默认值为系统当前时区。
- batchfetch: true在执行查询时批量拉取结果集false逐行拉取结果集。默认值为true。开启批量拉取同时获取一批数据在查询数据量较大时批量拉取可以有效的提升查询性能。 - batchfetchtrue在执行查询时批量拉取结果集false逐行拉取结果集。默认值为true。开启批量拉取同时获取一批数据在查询数据量较大时批量拉取可以有效的提升查询性能。
- batchErrorIgnoretrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false不再执行失败 SQL 后的任何语句。默认值为false。 - batchErrorIgnoretrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false不再执行失败 SQL 后的任何语句。默认值为false。
JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。
@ -251,9 +251,9 @@ TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可
- user登录 TDengine 用户名,默认值 'root'。 - user登录 TDengine 用户名,默认值 'root'。
- password用户登录密码默认值 'taosdata'。 - password用户登录密码默认值 'taosdata'。
- batchErrorIgnoretrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false不再执行失败 SQL 后的任何语句。默认值为false。 - batchErrorIgnoretrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false不再执行失败 SQL 后的任何语句。默认值为false。
- httpConnectTimeout: 连接超时时间,单位 ms 默认值为 60000。 - httpConnectTimeout连接超时时间,单位 ms 默认值为 60000。
- messageWaitTimeout: 消息超时时间, 单位 ms 默认值为 60000。 - messageWaitTimeout消息超时时间, 单位 ms 默认值为 60000。
- useSSL: 连接中是否使用 SSL。 - useSSL连接中是否使用 SSL。
- timezone客户端使用的时区连接上生效默认值为系统时区。推荐不设置使用系统时区性能更好。 - timezone客户端使用的时区连接上生效默认值为系统时区。推荐不设置使用系统时区性能更好。
**注意**部分配置项比如locale、charset在 WebSocket 连接中不生效。 **注意**部分配置项比如locale、charset在 WebSocket 连接中不生效。
@ -269,10 +269,10 @@ TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可
- user登录 TDengine 用户名,默认值 'root'。 - user登录 TDengine 用户名,默认值 'root'。
- password用户登录密码默认值 'taosdata'。 - password用户登录密码默认值 'taosdata'。
- batchErrorIgnoretrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false不再执行失败 SQL 后的任何语句。默认值为false。 - batchErrorIgnoretrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false不再执行失败 SQL 后的任何语句。默认值为false。
- httpConnectTimeout: 连接超时时间,单位 ms 默认值为 60000。 - httpConnectTimeout连接超时时间,单位 ms 默认值为 60000。
- httpSocketTimeout: socket 超时时间,单位 ms默认值为 60000。 - httpSocketTimeoutsocket 超时时间,单位 ms默认值为 60000。
- useSSL: 连接中是否使用 SSL。 - useSSL连接中是否使用 SSL。
- httpPoolSize: REST 并发请求大小,默认 20。 - httpPoolSizeREST 并发请求大小,默认 20。
**注意**部分配置项比如locale、charset 和 timezone在 REST 连接中不生效。 **注意**部分配置项比如locale、charset 和 timezone在 REST 连接中不生效。
@ -292,7 +292,7 @@ TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可
properties 中的配置参数如下: properties 中的配置参数如下:
- TSDBDriver.PROPERTY_KEY_USER登录 TDengine 用户名,默认值 'root'。 - TSDBDriver.PROPERTY_KEY_USER登录 TDengine 用户名,默认值 'root'。
- TSDBDriver.PROPERTY_KEY_PASSWORD用户登录密码默认值 'taosdata'。 - TSDBDriver.PROPERTY_KEY_PASSWORD用户登录密码默认值 'taosdata'。
- TSDBDriver.PROPERTY_KEY_BATCH_LOAD: true在执行查询时批量拉取结果集false逐行拉取结果集。默认值为false。因历史原因使用 REST 连接时,若设置此参数为 true 会变成 WebSocket 连接。 - TSDBDriver.PROPERTY_KEY_BATCH_LOADtrue在执行查询时批量拉取结果集false逐行拉取结果集。默认值为false。因历史原因使用 REST 连接时,若设置此参数为 true 会变成 WebSocket 连接。
- TSDBDriver.PROPERTY_KEY_BATCH_ERROR_IGNOREtrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 sq 了。false不再执行失败 SQL 后的任何语句。默认值为false。 - TSDBDriver.PROPERTY_KEY_BATCH_ERROR_IGNOREtrue在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 sq 了。false不再执行失败 SQL 后的任何语句。默认值为false。
- TSDBDriver.PROPERTY_KEY_CONFIG_DIR仅在使用 JDBC 原生连接时生效。客户端配置文件目录路径Linux OS 上默认值 `/etc/taos`Windows OS 上默认值 `C:/TDengine/cfg`。 - TSDBDriver.PROPERTY_KEY_CONFIG_DIR仅在使用 JDBC 原生连接时生效。客户端配置文件目录路径Linux OS 上默认值 `/etc/taos`Windows OS 上默认值 `C:/TDengine/cfg`。
- TSDBDriver.PROPERTY_KEY_CHARSET客户端使用的字符集默认值为系统字符集。 - TSDBDriver.PROPERTY_KEY_CHARSET客户端使用的字符集默认值为系统字符集。
@ -300,21 +300,21 @@ properties 中的配置参数如下:
- TSDBDriver.PROPERTY_KEY_TIME_ZONE - TSDBDriver.PROPERTY_KEY_TIME_ZONE
- 原生连接客户端使用的时区默认值为系统当前时区全局生效。因为历史的原因我们只支持POSIX标准的部分规范如UTC-8(代表中国上上海), GMT-8Asia/Shanghai 这几种形式。 - 原生连接客户端使用的时区默认值为系统当前时区全局生效。因为历史的原因我们只支持POSIX标准的部分规范如UTC-8(代表中国上上海), GMT-8Asia/Shanghai 这几种形式。
- WebSocket 连接:客户端使用的时区,连接上生效,默认值为系统时区。仅支持 IANA 时区,即 Asia/Shanghai 这种形式。推荐不设置,使用系统时区性能更好。 - WebSocket 连接:客户端使用的时区,连接上生效,默认值为系统时区。仅支持 IANA 时区,即 Asia/Shanghai 这种形式。推荐不设置,使用系统时区性能更好。
- TSDBDriver.HTTP_CONNECT_TIMEOUT: 连接超时时间,单位 ms 默认值为 60000。仅在 REST 连接时生效。 - TSDBDriver.HTTP_CONNECT_TIMEOUT连接超时时间,单位 ms 默认值为 60000。仅在 REST 连接时生效。
- TSDBDriver.HTTP_SOCKET_TIMEOUT: socket 超时时间,单位 ms默认值为 60000。仅在 REST 连接且 batchfetch 设置为 false 时生效。 - TSDBDriver.HTTP_SOCKET_TIMEOUTsocket 超时时间,单位 ms默认值为 60000。仅在 REST 连接且 batchfetch 设置为 false 时生效。
- TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms 默认值为 60000。 仅 WebSocket 连接下有效。 - TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT消息超时时间, 单位 ms 默认值为 60000。 仅 WebSocket 连接下有效。
- TSDBDriver.PROPERTY_KEY_USE_SSL: 连接中是否使用 SSL。仅在 WebSocket/REST 连接时生效。 - TSDBDriver.PROPERTY_KEY_USE_SSL连接中是否使用 SSL。仅在 WebSocket/REST 连接时生效。
- TSDBDriver.HTTP_POOL_SIZE: REST 并发请求大小,默认 20。 - TSDBDriver.HTTP_POOL_SIZEREST 并发请求大小,默认 20。
- TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。仅在使用 REST/WebSocket 连接时生效。true: 启用false: 不启用。默认为 false。 - TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION:传输过程是否启用压缩。仅在使用 REST/WebSocket 连接时生效。true启用false不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。仅在使用 WebSocket 连接时生效。true: 启用false: 不启用。默认为 false。 - TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT:是否启用自动重连。仅在使用 WebSocket 连接时生效。true启用false不启用。默认为 false。
> **注意**:启用自动重连仅对简单执行 SQL 语句以及 无模式写入、数据订阅有效。对于参数绑定无效。自动重连仅对连接建立时通过参数指定数据库有效,对后面的 `use db` 语句切换数据库无效。 > **注意**:启用自动重连仅对简单执行 SQL 语句以及 无模式写入、数据订阅有效。对于参数绑定无效。自动重连仅对连接建立时通过参数指定数据库有效,对后面的 `use db` 语句切换数据库无效。
- TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。 - TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。 - TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT自动重连重试次数,默认值 3仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TSDBDriver.PROPERTY_KEY_DISABLE_SSL_CERT_VALIDATION: 关闭 SSL 证书验证 。仅在使用 WebSocket 连接时生效。true: 启用false: 不启用。默认为 false。 - TSDBDriver.PROPERTY_KEY_DISABLE_SSL_CERT_VALIDATION:关闭 SSL 证书验证 。仅在使用 WebSocket 连接时生效。true启用false不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_APP_NAME: App 名称,可用于 `show connections` 查询结果显示。仅在使用 WebSocket 连接时生效。默认值为 java。 - TSDBDriver.PROPERTY_KEY_APP_NAMEApp 名称,可用于 `show connections` 查询结果显示。仅在使用 WebSocket 连接时生效。默认值为 java。
- TSDBDriver.PROPERTY_KEY_APP_IP: App IP可用于 `show connections` 查询结果显示。仅在使用 WebSocket 连接时生效。默认值为空。 - TSDBDriver.PROPERTY_KEY_APP_IPApp IP可用于 `show connections` 查询结果显示。仅在使用 WebSocket 连接时生效。默认值为空。
此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数比如日志级别、SQL 长度等。 此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数比如日志级别、SQL 长度等。
@ -1177,7 +1177,7 @@ JDBC 驱动支持标准的 ResultSet 接口,提供了用于读取结果集中
### 参数绑定 ### 参数绑定
PreparedStatement 允许使用预编译的 SQL 语句,这可以提高性能并提供参数化查询的能力,从而增加安全性。 PreparedStatement 允许使用预编译的 SQL 语句,这可以提高性能并提供参数化查询的能力,从而增加安全性。
JDBC 驱动提供了实现 PreparedStatement 接口的两个类: JDBC 驱动提供了实现 PreparedStatement 接口的两个类:
1. 对应原生连接的 TSDBPreparedStatement 1. 对应原生连接的 TSDBPreparedStatement
2. 对应 WebSocket 连接的 TSWSPreparedStatement 2. 对应 WebSocket 连接的 TSWSPreparedStatement
@ -1337,7 +1337,7 @@ ParameterMetaData 提供了参数元数据接口:
- `size`:所有字符串的最大长度,一般为建表语句的限制值。 - `size`:所有字符串的最大长度,一般为建表语句的限制值。
- **异常** - **异常**
- 如果操作过程中发生错误,将抛出 SQLException 异常。 - 如果操作过程中发生错误,将抛出 SQLException 异常。
- 下面接口除了要设置的值类型不同外,其余同 setString - 下面接口除了要设置的值类型不同外,其余同 setString
- `void setVarbinary(int columnIndex, ArrayList<byte[]> list, int size) throws SQLException` - `void setVarbinary(int columnIndex, ArrayList<byte[]> list, int size) throws SQLException`
- `void setGeometry(int columnIndex, ArrayList<byte[]> list, int size) throws SQLException` - `void setGeometry(int columnIndex, ArrayList<byte[]> list, int size) throws SQLException`
- `void setNString(int columnIndex, ArrayList<String> list, int size) throws SQLException` - `void setNString(int columnIndex, ArrayList<String> list, int size) throws SQLException`
@ -1363,19 +1363,19 @@ JDBC 标准不支持数据订阅,因此本章所有接口都是扩展接口。
- **返回值**:消费者对象 - **返回值**:消费者对象
- **异常**:如果创建失败,抛出 SQLException 异常。 - **异常**:如果创建失败,抛出 SQLException 异常。
创建消费者支持属性列表: 创建消费者支持属性列表:
- td.connect.type: 连接方式。jni表示使用动态库连接的方式ws/WebSocket表示使用 WebSocket 进行数据通信。默认为 jni 方式。 - td.connect.type连接方式。jni表示使用动态库连接的方式ws/WebSocket表示使用 WebSocket 进行数据通信。默认为 jni 方式。
- bootstrap.servers: TDengine 服务端所在的`ip:port`,如果使用 WebSocket 连接,则为 taosAdapter 所在的`ip:port`。 - bootstrap.serversTDengine 服务端所在的`ip:port`,如果使用 WebSocket 连接,则为 taosAdapter 所在的`ip:port`。
- enable.auto.commit: 是否允许自动提交。 - enable.auto.commit是否允许自动提交。
- group.id: consumer: 所在的 group。 - group.idconsumer所在的 group。
- value.deserializer: 结果集反序列化方法,可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean实现反序列化。也可以继承 `com.taosdata.jdbc.tmq.Deserializer`,根据 SQL 的 resultSet 自定义反序列化方式。 - value.deserializer结果集反序列化方法,可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean实现反序列化。也可以继承 `com.taosdata.jdbc.tmq.Deserializer`,根据 SQL 的 resultSet 自定义反序列化方式。
- httpConnectTimeout: 创建连接超时参数,单位 ms默认为 5000 ms。仅在 WebSocket 连接下有效。 - httpConnectTimeout创建连接超时参数,单位 ms默认为 5000 ms。仅在 WebSocket 连接下有效。
- messageWaitTimeout: 数据传输超时参数,单位 ms默认为 10000 ms。仅在 WebSocket 连接下有效。 - messageWaitTimeout数据传输超时参数,单位 ms默认为 10000 ms。仅在 WebSocket 连接下有效。
- httpPoolSize: 同一个连接下最大并行请求数。仅在 WebSocket 连接下有效。 - httpPoolSize同一个连接下最大并行请求数。仅在 WebSocket 连接下有效。
- TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。仅在使用 WebSocket 连接时生效。true: 启用false: 不启用。默认为 false。 - TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION:传输过程是否启用压缩。仅在使用 WebSocket 连接时生效。true启用false不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。仅在使用 WebSocket 连接时生效。true: 启用false: 不启用。默认为 false。 - TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT:是否启用自动重连。仅在使用 WebSocket 连接时生效。true启用false不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。 - TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。 - TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT自动重连重试次数,默认值 3仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
其他参数请参考:[Consumer 参数列表](../../../develop/tmq/#创建参数) 注意TDengine服务端自 3.2.0.0 版本开始消息订阅中的 auto.offset.reset 默认值发生变化。 其他参数请参考:[Consumer 参数列表](../../../develop/tmq/#创建参数) 注意TDengine服务端自 3.2.0.0 版本开始消息订阅中的 auto.offset.reset 默认值发生变化。

View File

@ -109,15 +109,15 @@ DSN 描述字符串基本结构如下:
各部分意义见下表: 各部分意义见下表:
- **driver**: 必须指定驱动名以便连接器选择何种方式创建连接,支持如下驱动名: - **driver**必须指定驱动名以便连接器选择何种方式创建连接,支持如下驱动名:
- **taos**: 使用 TDengine 连接器驱动,默认是使用 taos 驱动。 - **taos**使用 TDengine 连接器驱动,默认是使用 taos 驱动。
- **tmq**: 使用 TMQ 订阅数据。 - **tmq**使用 TMQ 订阅数据。
- **protocol**: 显示指定以何种方式建立连接,例如:`taos+ws://localhost:6041` 指定以 WebSocket 方式建立连接。 - **protocol**显示指定以何种方式建立连接,例如:`taos+ws://localhost:6041` 指定以 WebSocket 方式建立连接。
- **http/ws**: 使用 WebSocket 创建连接。 - **http/ws**使用 WebSocket 创建连接。
- **https/wss**: 在 WebSocket 连接方式下显示启用 SSL/TLS 连接。 - **https/wss**在 WebSocket 连接方式下显示启用 SSL/TLS 连接。
- **username/password**: 用于创建连接的用户名及密码。 - **username/password**用于创建连接的用户名及密码。
- **host/port**: 指定创建连接的服务器及端口,当不指定服务器地址及端口时(`taos://`),原生连接默认为 `localhost:6030`WebSocket 连接默认为 `localhost:6041` 。 - **host/port**指定创建连接的服务器及端口,当不指定服务器地址及端口时(`taos://`),原生连接默认为 `localhost:6030`WebSocket 连接默认为 `localhost:6041` 。
- **database**: 指定默认连接的数据库名,可选参数。 - **database**指定默认连接的数据库名,可选参数。
- **params**:其他可选参数。 - **params**:其他可选参数。
一个完整的 DSN 描述字符串示例如下:`taos+ws://localhost:6041/test` 表示使用 WebSocket`ws`)方式通过 `6041` 端口连接服务器 `localhost`,并指定默认数据库为 `test`。 一个完整的 DSN 描述字符串示例如下:`taos+ws://localhost:6041/test` 表示使用 WebSocket`ws`)方式通过 `6041` 端口连接服务器 `localhost`,并指定默认数据库为 `test`。
@ -596,6 +596,6 @@ Offset 结构体提供了获取当前消息所属的数据库,主题和分区
## 附录 ## 附录
- Rust 连接器文档https://docs.rs/taos - Rust 连接器文档https://docs.rs/taos
- Rust 连接器项目地址: https://github.com/taosdata/taos-connector-rust - Rust 连接器项目地址https://github.com/taosdata/taos-connector-rust
- deadpool 连接池: https://crates.io/crates/deadpool - deadpool 连接池https://crates.io/crates/deadpool
- r2d2 连接池: https://crates.io/crates/r2d2 - r2d2 连接池https://crates.io/crates/r2d2

View File

@ -63,7 +63,7 @@ Python Connector 历史版本(建议使用最新版本的 `taospy`
| 2.7.9 | 数据订阅支持获取消费进度和重置消费进度 | 3.0.2.6 及更高版本 | | 2.7.9 | 数据订阅支持获取消费进度和重置消费进度 | 3.0.2.6 及更高版本 |
| 2.7.8 | 新增 `execute_many` | 3.0.0.0 及更高版本 | | 2.7.8 | 新增 `execute_many` | 3.0.0.0 及更高版本 |
WebSocket Connector 历史版本: WebSocket Connector 历史版本:
| WebSocket Connector 版本 | 主要变化 | TDengine 版本 | | WebSocket Connector 版本 | 主要变化 | TDengine 版本 |
@ -168,24 +168,24 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对
| protocol | | username | password | host | port | database | params | | protocol | | username | password | host | port | database | params |
``` ```
- **protocol**: 使用 websocket 协议建立连接。例如`ws://localhost:6041` - **protocol**使用 websocket 协议建立连接。例如`ws://localhost:6041`
- **username/password**: 数据库的用户名和密码。 - **username/password**数据库的用户名和密码。
- **host/port**: 主机地址和端口号。例如`localhost:6041` - **host/port**主机地址和端口号。例如`localhost:6041`
- **database**: 数据库名称。 - **database**数据库名称。
- **params**: 其他参数。 例如token。 - **params**其他参数。 例如token。
#### 建立连接 #### 建立连接
- `fn connect(dsn: Option<&str>, args: Option<&PyDict>) -> PyResult<Connection>` - `fn connect(dsn: Option<&str>, args: Option<&PyDict>) -> PyResult<Connection>`
- **接口说明**:建立 taosAdapter 连接。 - **接口说明**:建立 taosAdapter 连接。
- **参数说明** - **参数说明**
- `dsn`: 类型 `Option<&str>` 可选数据源名称DSN用于指定要连接的数据库的位置和认证信息。 - `dsn`类型 `Option<&str>` 可选数据源名称DSN用于指定要连接的数据库的位置和认证信息。
- `args`: 类型 `Option<&PyDict>` 可选,以 Python 字典的形式提供, 可用于设置 - `args`类型 `Option<&PyDict>` 可选,以 Python 字典的形式提供, 可用于设置
- `user`: 数据库的用户名 - `user`数据库的用户名
- `password`: 数据库的密码。 - `password`数据库的密码。
- `host`: 主机地址 - `host`主机地址
- `port`: 端口号 - `port`端口号
- `database`: 数据库名称 - `database`数据库名称
- **返回值**:连接对象。 - **返回值**:连接对象。
- **异常**:操作失败抛出 `ConnectionError` 异常。 - **异常**:操作失败抛出 `ConnectionError` 异常。
- `fn cursor(&self) -> PyResult<Cursor>` - `fn cursor(&self) -> PyResult<Cursor>`
@ -205,7 +205,7 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对
- **接口说明**:执行带有 req_id 的 sql 语句。 - **接口说明**:执行带有 req_id 的 sql 语句。
- **参数说明** - **参数说明**
- `sql`:待执行的 sql 语句。 - `sql`:待执行的 sql 语句。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**:影响的条数。 - **返回值**:影响的条数。
- **异常**:操作失败抛出 `QueryError` 异常。 - **异常**:操作失败抛出 `QueryError` 异常。
- `fn query(&self, sql: &str) -> PyResult<TaosResult>` - `fn query(&self, sql: &str) -> PyResult<TaosResult>`
@ -218,7 +218,7 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对
- **接口说明**:查询带有 req_id 的 sql 语句。 - **接口说明**:查询带有 req_id 的 sql 语句。
- **参数说明** - **参数说明**
- `sql`:待执行的 sql 语句。 - `sql`:待执行的 sql 语句。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**`TaosResult` 数据集对象。 - **返回值**`TaosResult` 数据集对象。
- **异常**:操作失败抛出 `QueryError` 异常。 - **异常**:操作失败抛出 `QueryError` 异常。
@ -238,19 +238,19 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- **接口说明**:无模式写入。 - **接口说明**:无模式写入。
- **参数说明** - **参数说明**
- `lines`:待写入的数据数组,无模式具体的数据格式可参考 `Schemaless 写入`。 - `lines`:待写入的数据数组,无模式具体的数据格式可参考 `Schemaless 写入`。
- `protocol`: 协议类型 - `protocol`协议类型
- `PySchemalessProtocol::Line` InfluxDB 行协议Line Protocol)。 - `PySchemalessProtocol::Line`InfluxDB 行协议Line Protocol)。
- `PySchemalessProtocol::Telnet`OpenTSDB 文本行协议。 - `PySchemalessProtocol::Telnet`OpenTSDB 文本行协议。
- `PySchemalessProtocol::Json` JSON 协议格式 - `PySchemalessProtocol::Json`JSON 协议格式
- `precision`: 时间精度 - `precision`时间精度
- `PySchemalessPrecision::Hour` 小时 - `PySchemalessPrecision::Hour`:小时
- `PySchemalessPrecision::Minute`:分钟 - `PySchemalessPrecision::Minute`:分钟
- `PySchemalessPrecision::Second` 秒 - `PySchemalessPrecision::Second` 秒
- `PySchemalessPrecision::Millisecond`:毫秒 - `PySchemalessPrecision::Millisecond`:毫秒
- `PySchemalessPrecision::Microsecond`:微秒 - `PySchemalessPrecision::Microsecond`:微秒
- `PySchemalessPrecision::Nanosecond` 纳秒 - `PySchemalessPrecision::Nanosecond`:纳秒
- `ttl`:表过期时间,单位天。 - `ttl`:表过期时间,单位天。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **异常**:操作失败抛出 `DataError` 或 `OperationalError` 异常。 - **异常**:操作失败抛出 `DataError` 或 `OperationalError` 异常。
#### 参数绑定 #### 参数绑定
@ -261,22 +261,22 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `fn prepare(&mut self, sql: &str) -> PyResult<()>` - `fn prepare(&mut self, sql: &str) -> PyResult<()>`
- **接口说明**:绑定预编译 sql 语句。 - **接口说明**:绑定预编译 sql 语句。
- **参数说明** - **参数说明**
- `sql`: 预编译的 SQL 语句。 - `sql`预编译的 SQL 语句。
- **异常**:操作失败抛出 `ProgrammingError` 异常。 - **异常**:操作失败抛出 `ProgrammingError` 异常。
- `fn set_tbname(&mut self, table_name: &str) -> PyResult<()>` - `fn set_tbname(&mut self, table_name: &str) -> PyResult<()>`
- **接口说明**:设置将要写入数据的表名。 - **接口说明**:设置将要写入数据的表名。
- **参数说明** - **参数说明**
- `tableName`: 表名,如果需要指定数据库, 例如: `db_name.table_name` 即可。 - `tableName`:表名,如果需要指定数据库, 例如:`db_name.table_name` 即可。
- **异常**:操作失败抛出 `ProgrammingError` 异常。 - **异常**:操作失败抛出 `ProgrammingError` 异常。
- `fn set_tags(&mut self, tags: Vec<PyTagView>) -> PyResult<()>` - `fn set_tags(&mut self, tags: Vec<PyTagView>) -> PyResult<()>`
- **接口说明**:设置表 Tags 数据, 用于自动建表。 - **接口说明**:设置表 Tags 数据, 用于自动建表。
- **参数说明** - **参数说明**
- `paramsArray`: Tags 数据。 - `paramsArray`Tags 数据。
- **异常**:操作失败抛出 `ProgrammingError` 异常。 - **异常**:操作失败抛出 `ProgrammingError` 异常。
- `fn bind_param(&mut self, params: Vec<PyColumnView>) -> PyResult<()>` - `fn bind_param(&mut self, params: Vec<PyColumnView>) -> PyResult<()>`
- **接口说明**:绑定数据。 - **接口说明**:绑定数据。
- **参数说明** - **参数说明**
- `paramsArray`: 绑定数据。 - `paramsArray`绑定数据。
- **异常**:操作失败抛出 `ProgrammingError` 异常。 - **异常**:操作失败抛出 `ProgrammingError` 异常。
- `fn add_batch(&mut self) -> PyResult<()>` - `fn add_batch(&mut self) -> PyResult<()>`
- **接口说明**:提交绑定数据。 - **接口说明**:提交绑定数据。
@ -286,10 +286,10 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- **返回值**:写入条数。 - **返回值**:写入条数。
- **异常**:操作失败抛出 `QueryError` 异常。 - **异常**:操作失败抛出 `QueryError` 异常。
- `fn affect_rows(&mut self) -> PyResult<usize>` - `fn affect_rows(&mut self) -> PyResult<usize>`
- **接口说明** 获取写入条数。 - **接口说明**:获取写入条数。
- **返回值**:写入条数。 - **返回值**:写入条数。
- `fn close(&self) -> PyResult<()>` - `fn close(&self) -> PyResult<()>`
- **接口说明** 关闭 stmt 对象。 - **接口说明**:关闭 stmt 对象。
#### 数据订阅 #### 数据订阅
@ -298,8 +298,8 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- port端口号。 - port端口号。
- group.id所在的 group。 - group.id所在的 group。
- client.id客户端id。 - client.id客户端id。
- td.connect.user: 数据库用户名。 - td.connect.user数据库用户名。
- td.connect.pass: 数据库密码。 - td.connect.pass数据库密码。
- td.connect.token数据库的连接token。 - td.connect.token数据库的连接token。
- auto.offset.reset来确定消费位置为最新数据latest还是包含旧数据earliest - auto.offset.reset来确定消费位置为最新数据latest还是包含旧数据earliest
- enable.auto.commit是否允许自动提交。 - enable.auto.commit是否允许自动提交。
@ -307,14 +307,14 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `fn Consumer(conf: Option<&PyDict>, dsn: Option<&str>) -> PyResult<Self>` - `fn Consumer(conf: Option<&PyDict>, dsn: Option<&str>) -> PyResult<Self>`
- **接口说明** 消费者构造函数。 - **接口说明** 消费者构造函数。
- `conf`: 类型 `Option<&PyDict>` 可选,以 Python 字典的形式提供, 具体配置参见属性列表。 - `conf`类型 `Option<&PyDict>` 可选,以 Python 字典的形式提供, 具体配置参见属性列表。
- `dsn`: 类型 `Option<&str>` 可选数据源名称DSN用于指定要连接的数据库的位置和认证信息。 - `dsn`类型 `Option<&str>` 可选数据源名称DSN用于指定要连接的数据库的位置和认证信息。
- **返回值**Consumer 消费者对象。 - **返回值**Consumer 消费者对象。
- **异常**:操作失败抛出 `ConsumerException` 异常。 - **异常**:操作失败抛出 `ConsumerException` 异常。
- `fn subscribe(&mut self, topics: &PyList) -> PyResult<()>` - `fn subscribe(&mut self, topics: &PyList) -> PyResult<()>`
- **接口说明** 订阅一组主题。 - **接口说明** 订阅一组主题。
- **参数说明** - **参数说明**
- `topics`: 订阅的主题列表。 - `topics`订阅的主题列表。
- **异常**:操作失败抛出 `ConsumerException` 异常。 - **异常**:操作失败抛出 `ConsumerException` 异常。
- `fn unsubscribe(&mut self)` - `fn unsubscribe(&mut self)`
- **接口说明** 取消订阅。 - **接口说明** 取消订阅。
@ -322,13 +322,13 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `fn poll(&mut self, timeout: Option<f64>) -> PyResult<Option<Message>>` - `fn poll(&mut self, timeout: Option<f64>) -> PyResult<Option<Message>>`
- **接口说明** 轮询消息。 - **接口说明** 轮询消息。
- **参数说明** - **参数说明**
- `timeoutMs`: 表示轮询的超时时间,单位毫秒。 - `timeoutMs`表示轮询的超时时间,单位毫秒。
- **返回值**`Message` 每个主题对应的数据。 - **返回值**`Message` 每个主题对应的数据。
- **异常**:操作失败抛出 `ConsumerException` 异常。 - **异常**:操作失败抛出 `ConsumerException` 异常。
- `fn commit(&mut self, message: &mut Message) -> PyResult<()>` - `fn commit(&mut self, message: &mut Message) -> PyResult<()>`
- **接口说明** 提交当前处理的消息的偏移量。 - **接口说明** 提交当前处理的消息的偏移量。
- **参数说明** - **参数说明**
- `message`: 类型 `Message`, 当前处理的消息的偏移量。 - `message`类型 `Message`, 当前处理的消息的偏移量。
- **异常**:操作失败抛出 `ConsumerException` 异常。 - **异常**:操作失败抛出 `ConsumerException` 异常。
- `fn assignment(&mut self) -> PyResult<Option<Vec<TopicAssignment>>>` - `fn assignment(&mut self) -> PyResult<Option<Vec<TopicAssignment>>>`
- **接口说明**:获取消费者当前分配的指定的分区或所有分区。 - **接口说明**:获取消费者当前分配的指定的分区或所有分区。
@ -337,22 +337,22 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `fn seek(&mut self, topic: &str, vg_id: i32, offset: i64) -> PyResult<()>` - `fn seek(&mut self, topic: &str, vg_id: i32, offset: i64) -> PyResult<()>`
- **接口说明**:将给定分区的偏移量设置到指定的位置。 - **接口说明**:将给定分区的偏移量设置到指定的位置。
- **参数说明** - **参数说明**
- `topic`: 订阅的主题。 - `topic`订阅的主题。
- `vg_id`: vgroupid。 - `vg_id`vgroupid。
- `offset`:需要设置的偏移量。 - `offset`:需要设置的偏移量。
- **异常**:操作失败抛出 ConsumerException 异常。 - **异常**:操作失败抛出 ConsumerException 异常。
- `fn committed(&mut self, topic: &str, vg_id: i32) -> PyResult<i64>` - `fn committed(&mut self, topic: &str, vg_id: i32) -> PyResult<i64>`
- **接口说明**获取订阅主题的vgroupid分区最后提交的偏移量。 - **接口说明**获取订阅主题的vgroupid分区最后提交的偏移量。
- **参数说明** - **参数说明**
- `topic`: 订阅的主题。 - `topic`订阅的主题。
- `vg_id`: vgroupid。 - `vg_id`vgroupid。
- **返回值**`i64`,分区最后提交的偏移量。 - **返回值**`i64`,分区最后提交的偏移量。
- **异常**:操作失败抛出 ConsumerException 异常。 - **异常**:操作失败抛出 ConsumerException 异常。
- `fn position(&mut self, topic: &str, vg_id: i32) -> PyResult<i64>` - `fn position(&mut self, topic: &str, vg_id: i32) -> PyResult<i64>`
- **接口说明**:获取给定分区当前的偏移量。 - **接口说明**:获取给定分区当前的偏移量。
- **参数说明** - **参数说明**
- `topic`: 订阅的主题。 - `topic`订阅的主题。
- `vg_id`: vgroupid。 - `vg_id`vgroupid。
- **返回值**`i64`,分区最后提交的偏移量。 - **返回值**`i64`,分区最后提交的偏移量。
- **异常**:操作失败抛出 ConsumerException 异常。 - **异常**:操作失败抛出 ConsumerException 异常。
- `fn close(&mut self)` - `fn close(&mut self)`
@ -365,14 +365,14 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `def connect(*args, **kwargs):` - `def connect(*args, **kwargs):`
- **接口说明**:建立 taosAdapter 连接。 - **接口说明**:建立 taosAdapter 连接。
- **参数说明** - **参数说明**
- `kwargs`: 以 Python 字典的形式提供, 可用于设置 - `kwargs`以 Python 字典的形式提供, 可用于设置
- `user`: 数据库的用户名 - `user`数据库的用户名
- `password`: 数据库的密码。 - `password`数据库的密码。
- `host`: 主机地址 - `host`主机地址
- `port`: 端口号 - `port`端口号
- `database`: 数据库名称 - `database`数据库名称
- `timezone`: 时区 - `timezone`时区
- **返回值**`TaosConnection` 连接对象。 - **返回值**`TaosConnection` 连接对象。
- **异常**:操作失败抛出 `AttributeError` 或 `ConnectionError` 异常。 - **异常**:操作失败抛出 `AttributeError` 或 `ConnectionError` 异常。
- `def cursor(self)` - `def cursor(self)`
@ -385,14 +385,14 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- **接口说明**:执行 sql 语句。 - **接口说明**:执行 sql 语句。
- **参数说明** - **参数说明**
- `operation`:待执行的 sql 语句。 - `operation`:待执行的 sql 语句。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**:影响的条数。 - **返回值**:影响的条数。
- **异常**:操作失败抛出 `ProgrammingError` 异常。 - **异常**:操作失败抛出 `ProgrammingError` 异常。
- `def query(self, sql: str, req_id: Optional[int] = None) -> TaosResult` - `def query(self, sql: str, req_id: Optional[int] = None) -> TaosResult`
- **接口说明**:查询数据。 - **接口说明**:查询数据。
- **参数说明** - **参数说明**
- `sql`:待执行的 sql 语句。 - `sql`:待执行的 sql 语句。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**`TaosResult` 数据集对象。 - **返回值**`TaosResult` 数据集对象。
- **异常**:操作失败抛出 `ProgrammingError` 异常。 - **异常**:操作失败抛出 `ProgrammingError` 异常。
@ -415,19 +415,19 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- **接口说明**:无模式写入。 - **接口说明**:无模式写入。
- **参数说明** - **参数说明**
- `lines`:待写入的数据数组,无模式具体的数据格式可参考 `Schemaless 写入`。 - `lines`:待写入的数据数组,无模式具体的数据格式可参考 `Schemaless 写入`。
- `protocol`: 协议类型 - `protocol`协议类型
- `SmlProtocol.LINE_PROTOCOL` InfluxDB 行协议Line Protocol)。 - `SmlProtocol.LINE_PROTOCOL`InfluxDB 行协议Line Protocol)。
- `SmlProtocol.TELNET_PROTOCOL`OpenTSDB 文本行协议。 - `SmlProtocol.TELNET_PROTOCOL`OpenTSDB 文本行协议。
- `SmlProtocol.JSON_PROTOCOL` JSON 协议格式 - `SmlProtocol.JSON_PROTOCOL`JSON 协议格式
- `precision`: 时间精度 - `precision`时间精度
- `SmlPrecision.Hour` 小时 - `SmlPrecision.Hour`:小时
- `SmlPrecision.Minute`:分钟 - `SmlPrecision.Minute`:分钟
- `SmlPrecision.Second` 秒 - `SmlPrecision.Second` 秒
- `SmlPrecision.Millisecond`:毫秒 - `SmlPrecision.Millisecond`:毫秒
- `SmlPrecision.Microsecond`:微秒 - `SmlPrecision.Microsecond`:微秒
- `SmlPrecision.Nanosecond` 纳秒 - `SmlPrecision.Nanosecond`:纳秒
- `ttl`:表过期时间,单位天。 - `ttl`:表过期时间,单位天。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**:影响的条数。 - **返回值**:影响的条数。
- **异常**:操作失败抛出 `SchemalessError` 异常。 - **异常**:操作失败抛出 `SchemalessError` 异常。
@ -435,36 +435,36 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `def statement2(self, sql=None, option=None)` - `def statement2(self, sql=None, option=None)`
- **接口说明**:使用连接对象创建 stmt2 对象 - **接口说明**:使用连接对象创建 stmt2 对象
- **参数说明** - **参数说明**
- `sql`: 绑定的 SQL 语句,如果不为空会调用`prepare`函数 - `sql`绑定的 SQL 语句,如果不为空会调用`prepare`函数
- `option` 传入 TaosStmt2Option 类实例选项 - `option` 传入 TaosStmt2Option 类实例选项
- **返回值**stmt2 对象。 - **返回值**stmt2 对象。
- **异常**:操作失败抛出 `ConnectionError` 异常。 - **异常**:操作失败抛出 `ConnectionError` 异常。
- `def prepare(self, sql)` - `def prepare(self, sql)`
- **接口说明**:绑定预编译 sql 语句 - **接口说明**:绑定预编译 sql 语句
- **参数说明** - **参数说明**
- `sql`: 绑定的 SQL 语句 - `sql`绑定的 SQL 语句
- **异常**:操作失败抛出 `StatementError` 异常。 - **异常**:操作失败抛出 `StatementError` 异常。
- `def bind_param(self, tbnames, tags, datas)` - `def bind_param(self, tbnames, tags, datas)`
- **接口说明**:以独立数组方式绑定数据 - **接口说明**:以独立数组方式绑定数据
- **参数说明** - **参数说明**
- `tbnames`: 绑定表名数组,数据类型为 list - `tbnames`绑定表名数组,数据类型为 list
- `tags`: 绑定 tag 列值数组,数据类型为 list - `tags`绑定 tag 列值数组,数据类型为 list
- `tags`: 绑定普通列值数组,数据类型为 list - `tags`绑定普通列值数组,数据类型为 list
- **异常**:操作失败抛出 `StatementError` 异常 - **异常**:操作失败抛出 `StatementError` 异常
- `def bind_param_with_tables(self, tables)` - `def bind_param_with_tables(self, tables)`
- **接口说明**以独立表方式绑定数据独立表是以表为组织单位每张表中有表名TAG 值及普通列数值属性 - **接口说明**以独立表方式绑定数据独立表是以表为组织单位每张表中有表名TAG 值及普通列数值属性
- **参数说明** - **参数说明**
- `tables`: `BindTable` 独立表对象数组 - `tables``BindTable` 独立表对象数组
- **异常**:操作失败抛出 `StatementError` 异常。 - **异常**:操作失败抛出 `StatementError` 异常。
- `def execute(self) -> int:` - `def execute(self) -> int:`
- **接口说明**:执行将绑定数据全部写入 - **接口说明**:执行将绑定数据全部写入
- **返回值**:影响行数 - **返回值**:影响行数
- **异常**:操作失败抛出 `QueryError` 异常。 - **异常**:操作失败抛出 `QueryError` 异常。
- `def result(self)` - `def result(self)`
- **接口说明** 获取参数绑定查询结果集 - **接口说明**:获取参数绑定查询结果集
- **返回值**:返回 TaosResult 对象 - **返回值**:返回 TaosResult 对象
- `def close(self)` - `def close(self)`
- **接口说明** 关闭 stmt2 对象 - **接口说明**:关闭 stmt2 对象
#### 数据订阅 #### 数据订阅
@ -473,21 +473,21 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- td.connect.port端口号。 - td.connect.port端口号。
- group.id所在的 group。 - group.id所在的 group。
- client.id客户端id。 - client.id客户端id。
- td.connect.user: 数据库用户名。 - td.connect.user数据库用户名。
- td.connect.pass: 数据库密码。 - td.connect.pass数据库密码。
- td.connect.token数据库的连接token。 - td.connect.token数据库的连接token。
- auto.offset.reset来确定消费位置为最新数据latest还是包含旧数据earliest - auto.offset.reset来确定消费位置为最新数据latest还是包含旧数据earliest
- enable.auto.commit是否允许自动提交。 - enable.auto.commit是否允许自动提交。
- auto.commit.interval.ms自动提交间隔 - auto.commit.interval.ms自动提交间隔
- `def Consumer(configs)` - `def Consumer(configs)`
- **接口说明** 消费者构造函数。 - **接口说明** 消费者构造函数。
- `configs`: Python 字典的形式提供, 具体配置参见属性列表。 - `configs`Python 字典的形式提供, 具体配置参见属性列表。
- **返回值**Consumer 消费者对象。 - **返回值**Consumer 消费者对象。
- **异常**:操作失败抛出 `TmqError` 异常。 - **异常**:操作失败抛出 `TmqError` 异常。
- `def subscribe(self, topics)` - `def subscribe(self, topics)`
- **接口说明** 订阅一组主题。 - **接口说明** 订阅一组主题。
- **参数说明** - **参数说明**
- `topics`: 订阅的主题列表。 - `topics`订阅的主题列表。
- **异常**:操作失败抛出 `TmqError` 异常。 - **异常**:操作失败抛出 `TmqError` 异常。
- `def unsubscribe(self)` - `def unsubscribe(self)`
- **接口说明** 取消订阅。 - **接口说明** 取消订阅。
@ -495,14 +495,14 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `def poll(self, timeout: float = 1.0)` - `def poll(self, timeout: float = 1.0)`
- **接口说明** 轮询消息。 - **接口说明** 轮询消息。
- **参数说明** - **参数说明**
- `timeout`: 表示轮询的超时时间,单位毫秒。 - `timeout`表示轮询的超时时间,单位毫秒。
- **返回值**`Message` 每个主题对应的数据。 - **返回值**`Message` 每个主题对应的数据。
- **异常**:操作失败抛出 `TmqError` 异常。 - **异常**:操作失败抛出 `TmqError` 异常。
- `def commit(self, message: Message = None, offsets: [TopicPartition] = None)` - `def commit(self, message: Message = None, offsets: [TopicPartition] = None)`
- **接口说明** 提交当前处理的消息的偏移量。 - **接口说明** 提交当前处理的消息的偏移量。
- **参数说明** - **参数说明**
- `message`: 类型 `Message`, 当前处理的消息的偏移量。 - `message`类型 `Message`, 当前处理的消息的偏移量。
- `offsets`: 类型 `[TopicPartition]`, 提交一批消息的偏移量。 - `offsets`类型 `[TopicPartition]`, 提交一批消息的偏移量。
- **异常**:操作失败抛出 `TmqError` 异常。 - **异常**:操作失败抛出 `TmqError` 异常。
- `def assignment(self)` - `def assignment(self)`
- **接口说明**:获取消费者当前分配的指定的分区或所有分区。 - **接口说明**:获取消费者当前分配的指定的分区或所有分区。
@ -511,25 +511,25 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `def seek(self, partition)` - `def seek(self, partition)`
- **接口说明**:将给定分区的偏移量设置到指定的位置。 - **接口说明**:将给定分区的偏移量设置到指定的位置。
- **参数说明** - **参数说明**
- `partition`: 需要设置的偏移量。 - `partition`需要设置的偏移量。
- `topic`: 订阅的主题 - `topic`订阅的主题
- `partition`: 分区 - `partition`分区
- `offset`: 偏移量 - `offset`偏移量
- **异常**:操作失败抛出 `TmqError` 异常。 - **异常**:操作失败抛出 `TmqError` 异常。
- `def committed(self, partitions)` - `def committed(self, partitions)`
- **接口说明**:获取订阅主题的分区最后提交的偏移量。 - **接口说明**:获取订阅主题的分区最后提交的偏移量。
- **参数说明** - **参数说明**
- `partition`: 需要设置的偏移量。 - `partition`需要设置的偏移量。
- `topic`: 订阅的主题 - `topic`订阅的主题
- `partition`: 分区 - `partition`分区
- **返回值**`partition`,分区最后提交的偏移量。 - **返回值**`partition`,分区最后提交的偏移量。
- **异常**:操作失败抛出 `TmqError` 异常。 - **异常**:操作失败抛出 `TmqError` 异常。
- `def position(self, partitions)` - `def position(self, partitions)`
- **接口说明**:获取给定分区当前的偏移量。 - **接口说明**:获取给定分区当前的偏移量。
- **参数说明** - **参数说明**
- `partition`: 需要设置的偏移量。 - `partition`需要设置的偏移量。
- `topic`: 订阅的主题 - `topic`订阅的主题
- `partition`: 分区 - `partition`分区
- **返回值**`partition`,分区最后提交的偏移量。 - **返回值**`partition`,分区最后提交的偏移量。
- **异常**:操作失败抛出 TmqError 异常。 - **异常**:操作失败抛出 TmqError 异常。
- `def close(self)` - `def close(self)`
@ -541,39 +541,39 @@ TaosResult 对象可以通过循环遍历获取查询到的数据。
- `def connect(**kwargs) -> TaosRestConnection` - `def connect(**kwargs) -> TaosRestConnection`
- **接口说明**:建立 taosAdapter 连接。 - **接口说明**:建立 taosAdapter 连接。
- **参数说明** - **参数说明**
- `kwargs`: 以 Python 字典的形式提供, 可用于设置 - `kwargs`以 Python 字典的形式提供, 可用于设置
- `user`: 数据库的用户名 - `user`数据库的用户名
- `password`: 数据库的密码。 - `password`数据库的密码。
- `host`: 主机地址 - `host`主机地址
- `port`: 端口号 - `port`端口号
- `database`: 数据库名称 - `database`数据库名称
- **返回值**:连接对象。 - **返回值**:连接对象。
- **异常**:操作失败抛出 `ConnectError` 异常。 - **异常**:操作失败抛出 `ConnectError` 异常。
- `def execute(self, sql: str, req_id: Optional[int] = None) -> Optional[int]` - `def execute(self, sql: str, req_id: Optional[int] = None) -> Optional[int]`
- **接口说明**:执行 sql 语句。 - **接口说明**:执行 sql 语句。
- **参数说明** - **参数说明**
- `sql`:待执行的 sql 语句。 - `sql`:待执行的 sql 语句。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**:影响的条数。 - **返回值**:影响的条数。
- **异常**:操作失败抛出 `ConnectError` 或 `HTTPError` 异常。 - **异常**:操作失败抛出 `ConnectError` 或 `HTTPError` 异常。
- `def query(self, sql: str, req_id: Optional[int] = None) -> Result` - `def query(self, sql: str, req_id: Optional[int] = None) -> Result`
- **接口说明**:查询数据。 - **接口说明**:查询数据。
- **参数说明** - **参数说明**
- `sql`:待执行的 sql 语句。 - `sql`:待执行的 sql 语句。
- `reqId`: 用于问题追踪。 - `reqId`用于问题追踪。
- **返回值**`Result` 数据集对象。 - **返回值**`Result` 数据集对象。
- **异常**:操作失败抛出 `ConnectError` 或 `HTTPError` 异常。 - **异常**:操作失败抛出 `ConnectError` 或 `HTTPError` 异常。
- `RestClient(self, url: str, token: str = None, database: str = None, user: str = "root", password: str = "taosdata", timeout: int = None, convert_timestamp: bool = True, timezone: Union[str, datetime.tzinfo] = None)` - `RestClient(self, url: str, token: str = None, database: str = None, user: str = "root", password: str = "taosdata", timeout: int = None, convert_timestamp: bool = True, timezone: Union[str, datetime.tzinfo] = None)`
- **接口说明**:建立 taosAdapter 连接 client。 - **接口说明**:建立 taosAdapter 连接 client。
- **参数说明** - **参数说明**
- `url`: taosAdapter REST 服务的 URL。 - `url`taosAdapter REST 服务的 URL。
- `user`: 数据库的用户名。 - `user`数据库的用户名。
- `password`: 数据库的密码。 - `password`数据库的密码。
- `database`: 数据库名称。 - `database`数据库名称。
- `timezone`: 时区。 - `timezone`时区。
- `timeout`: HTTP 请求超时时间。单位为秒。 - `timeout`HTTP 请求超时时间。单位为秒。
- `convert_timestamp`: 是否将时间戳从STR类型转换为datetime类型。 - `convert_timestamp`是否将时间戳从STR类型转换为datetime类型。
- `timezone`: 时区. - `timezone`时区.
- **返回值**:连接对象。 - **返回值**:连接对象。
- **异常**:操作失败抛出 `ConnectError` 异常。 - **异常**:操作失败抛出 `ConnectError` 异常。
- `def sql(self, q: str, req_id: Optional[int] = None) -> dict` - `def sql(self, q: str, req_id: Optional[int] = None) -> dict`

View File

@ -116,11 +116,11 @@ Node.js 连接器(`@tdengine/websocket`, 其通过 taosAdapter 提供的 We
| protocol | | username | password | host | port | database | params | | protocol | | username | password | host | port | database | params |
``` ```
- **protocol**: 使用 websocket 协议建立连接。例如`ws://localhost:6041` - **protocol**使用 websocket 协议建立连接。例如`ws://localhost:6041`
- **username/password**: 数据库的用户名和密码。 - **username/password**数据库的用户名和密码。
- **host/port**: 主机地址和端口号。例如`localhost:6041` - **host/port**主机地址和端口号。例如`localhost:6041`
- **database**: 数据库名称。 - **database**数据库名称。
- **params**: 其他参数。 例如token。 - **params**其他参数。 例如token。
- 完整 URL 示例: - 完整 URL 示例:
@ -180,7 +180,7 @@ WSConfig 中的配置如下:
- **接口说明**:执行 sql 语句。 - **接口说明**:执行 sql 语句。
- **参数说明** - **参数说明**
- `sql`:待执行的 sql 语句。 - `sql`:待执行的 sql 语句。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**:执行结果 - **返回值**:执行结果
```js ```js
TaosResult { TaosResult {
@ -194,7 +194,7 @@ WSConfig 中的配置如下:
- **接口说明**:查询数据。 - **接口说明**:查询数据。
- **参数说明** - **参数说明**
- `sql`:待执行的查询 sql 语句。 - `sql`:待执行的查询 sql 语句。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**WSRows 数据集对象。 - **返回值**WSRows 数据集对象。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
@ -225,43 +225,43 @@ WSConfig 中的配置如下:
- **接口说明**:无模式写入。 - **接口说明**:无模式写入。
- **参数说明** - **参数说明**
- `lines`:待写入的数据数组,无模式具体的数据格式可参考 `Schemaless 写入`。 - `lines`:待写入的数据数组,无模式具体的数据格式可参考 `Schemaless 写入`。
- `protocol`: 协议类型 - `protocol`协议类型
- `SchemalessProto.InfluxDBLineProtocol`InfluxDB 行协议Line Protocol)。 - `SchemalessProto.InfluxDBLineProtocol`InfluxDB 行协议Line Protocol)。
- `SchemalessProto.OpenTSDBTelnetLineProtocol`OpenTSDB 文本行协议。 - `SchemalessProto.OpenTSDBTelnetLineProtocol`OpenTSDB 文本行协议。
- `SchemalessProto.OpenTSDBJsonFormatProtocol`JSON 协议格式。 - `SchemalessProto.OpenTSDBJsonFormatProtocol`JSON 协议格式。
- `precision`: 时间精度 - `precision`时间精度
- `Precision.HOURS` 小时 - `Precision.HOURS`:小时
- `Precision.MINUTES`:分钟 - `Precision.MINUTES`:分钟
- `Precision.SECONDS`:秒 - `Precision.SECONDS`:秒
- `Precision.MILLI_SECONDS`:毫秒 - `Precision.MILLI_SECONDS`:毫秒
- `Precision.MICRO_SECONDS`:微秒 - `Precision.MICRO_SECONDS`:微秒
- `Precision.NANO_SECONDS` 纳秒 - `Precision.NANO_SECONDS`:纳秒
- `ttl`:表过期时间,单位天。 - `ttl`:表过期时间,单位天。
- `reqId`: 用于问题追踪,可选。 - `reqId`用于问题追踪,可选。
- **异常**:连接失败抛出 `TaosResultError` 异常。 - **异常**:连接失败抛出 `TaosResultError` 异常。
### 参数绑定 ### 参数绑定
- `async stmtInit(reqId?:number): Promise<WsStmt>` - `async stmtInit(reqId?:number): Promise<WsStmt>`
- **接口说明** 使用 WsSql 对象创建 stmt 对象。 - **接口说明** 使用 WsSql 对象创建 stmt 对象。
- **参数说明** - **参数说明**
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**stmt 对象。 - **返回值**stmt 对象。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
- `async prepare(sql: string): Promise<void>` - `async prepare(sql: string): Promise<void>`
- **接口说明** 绑定预编译 sql 语句。 - **接口说明** 绑定预编译 sql 语句。
- **参数说明** - **参数说明**
- `sql`: 预编译的 SQL 语句。 - `sql`预编译的 SQL 语句。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
- `async setTableName(tableName: string): Promise<void>` - `async setTableName(tableName: string): Promise<void>`
- **接口说明** 设置将要写入数据的表名。 - **接口说明** 设置将要写入数据的表名。
- **参数说明** - **参数说明**
- `tableName`: 表名,如果需要指定数据库, 例如: `db_name.table_name` 即可。 - `tableName`:表名,如果需要指定数据库, 例如:`db_name.table_name` 即可。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
通过 StmtBindParams 对象设置绑定数据。 通过 StmtBindParams 对象设置绑定数据。
- `setBoolean(params :any[])` - `setBoolean(params :any[])`
- **接口说明** 设置布尔值。 - **接口说明** 设置布尔值。
- **参数说明** - **参数说明**
- `params`: 布尔类型列表。 - `params`布尔类型列表。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
- 下面接口除了要设置的值类型不同外,其余同 setBoolean - 下面接口除了要设置的值类型不同外,其余同 setBoolean
- `setTinyInt(params :any[])` - `setTinyInt(params :any[])`
@ -284,12 +284,12 @@ WSConfig 中的配置如下:
- `async setTags(paramsArray:StmtBindParams): Promise<void>` - `async setTags(paramsArray:StmtBindParams): Promise<void>`
- **接口说明** 设置表 Tags 数据,用于自动建表。 - **接口说明** 设置表 Tags 数据,用于自动建表。
- **参数说明** - **参数说明**
- `paramsArray`: Tags 数据。 - `paramsArray`Tags 数据。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
- `async bind(paramsArray:StmtBindParams): Promise<void>` - `async bind(paramsArray:StmtBindParams): Promise<void>`
- **接口说明** 绑定数据。 - **接口说明** 绑定数据。
- **参数说明** - **参数说明**
- `paramsArray`: 绑定数据。 - `paramsArray`绑定数据。
- **异常**:连接失败抛出 `TDWebSocketClientError` 异常。 - **异常**:连接失败抛出 `TDWebSocketClientError` 异常。
- `async batch(): Promise<void>` - `async batch(): Promise<void>`
- **接口说明** 提交绑定数据。 - **接口说明** 提交绑定数据。
@ -307,69 +307,69 @@ WSConfig 中的配置如下:
### 数据订阅 ### 数据订阅
- **创建消费者支持属性列表** - **创建消费者支持属性列表**
- taos.TMQConstants.CONNECT_USER: 用户名。 - taos.TMQConstants.CONNECT_USER用户名。
- taos.TMQConstants.CONNECT_PASS: 密码。 - taos.TMQConstants.CONNECT_PASS密码。
- taos.TMQConstants.GROUP_ID: 所在的 group。 - taos.TMQConstants.GROUP_ID所在的 group。
- taos.TMQConstants.CLIENT_ID: 客户端id。 - taos.TMQConstants.CLIENT_ID客户端id。
- taos.TMQConstants.WS_URL: taosAdapter 的url地址。 - taos.TMQConstants.WS_URLtaosAdapter 的url地址。
- taos.TMQConstants.AUTO_OFFSET_RESET: 来确定消费位置为最新数据latest还是包含旧数据earliest - taos.TMQConstants.AUTO_OFFSET_RESET来确定消费位置为最新数据latest还是包含旧数据earliest
- taos.TMQConstants.ENABLE_AUTO_COMMIT: 是否允许自动提交。 - taos.TMQConstants.ENABLE_AUTO_COMMIT是否允许自动提交。
- taos.TMQConstants.AUTO_COMMIT_INTERVAL_MS: 自动提交间隔。 - taos.TMQConstants.AUTO_COMMIT_INTERVAL_MS自动提交间隔。
- taos.TMQConstants.CONNECT_MESSAGE_TIMEOUT: 数据传输超时参数,单位 ms默认为 10000 ms。 - taos.TMQConstants.CONNECT_MESSAGE_TIMEOUT数据传输超时参数,单位 ms默认为 10000 ms。
- `static async newConsumer(wsConfig:Map<string, any>):Promise<WsConsumer>` - `static async newConsumer(wsConfig:Map<string, any>):Promise<WsConsumer>`
- **接口说明** 消费者构造函数。 - **接口说明** 消费者构造函数。
- **参数说明** - **参数说明**
- `wsConfig`: 创建消费者属性配置。 - `wsConfig`创建消费者属性配置。
- **返回值**WsConsumer 消费者对象。 - **返回值**WsConsumer 消费者对象。
- **异常**:如果在执行过程中出现异常,抛出 `TDWebSocketClientError` 错误。 - **异常**:如果在执行过程中出现异常,抛出 `TDWebSocketClientError` 错误。
- `async subscribe(topics: Array<string>, reqId?:number): Promise<void>` - `async subscribe(topics: Array<string>, reqId?:number): Promise<void>`
- **接口说明** 订阅一组主题。 - **接口说明** 订阅一组主题。
- **参数说明** - **参数说明**
- `topics`: 订阅的主题列表。 - `topics`订阅的主题列表。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **异常**:失败抛出 `TDWebSocketClientError` 异常。 - **异常**:失败抛出 `TDWebSocketClientError` 异常。
- `async unsubscribe(reqId?:number): Promise<void>` - `async unsubscribe(reqId?:number): Promise<void>`
- **接口说明** 取消订阅。 - **接口说明** 取消订阅。
- **参数说明** - **参数说明**
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **异常**:失败抛出 `TDWebSocketClientError` 异常。 - **异常**:失败抛出 `TDWebSocketClientError` 异常。
- `async poll(timeoutMs: number, reqId?:number):Promise<Map<string, TaosResult>>` - `async poll(timeoutMs: number, reqId?:number):Promise<Map<string, TaosResult>>`
- **接口说明** 轮询消息。 - **接口说明** 轮询消息。
- **参数说明** - **参数说明**
- `timeoutMs`: 表示轮询的超时时间,单位毫秒。 - `timeoutMs`表示轮询的超时时间,单位毫秒。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**`Map<string, TaosResult>` 每个主题对应的数据。 - **返回值**`Map<string, TaosResult>` 每个主题对应的数据。
- **异常**:失败抛出 `TDWebSocketClientError` 异常。 - **异常**:失败抛出 `TDWebSocketClientError` 异常。
- `async subscription(reqId?:number):Promise<Array<string>>` - `async subscription(reqId?:number):Promise<Array<string>>`
- **接口说明** 获取当前订阅的所有主题。 - **接口说明** 获取当前订阅的所有主题。
- **参数说明** - **参数说明**
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**`Array<string>` 主题列表。 - **返回值**`Array<string>` 主题列表。
- **异常**:失败抛出 `TDWebSocketClientError` 异常。 - **异常**:失败抛出 `TDWebSocketClientError` 异常。
- `async commit(reqId?:number):Promise<Array<TopicPartition>>` - `async commit(reqId?:number):Promise<Array<TopicPartition>>`
- **接口说明** 提交当前处理的消息的偏移量。 - **接口说明** 提交当前处理的消息的偏移量。
- **参数说明** - **参数说明**
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**`Array<TopicPartition>` 每个主题的消费进度。 - **返回值**`Array<TopicPartition>` 每个主题的消费进度。
- **异常**:失败抛出 `TDWebSocketClientError` 异常。 - **异常**:失败抛出 `TDWebSocketClientError` 异常。
- `async committed(partitions:Array<TopicPartition>, reqId?:number):Promise<Array<TopicPartition>>` - `async committed(partitions:Array<TopicPartition>, reqId?:number):Promise<Array<TopicPartition>>`
- **接口说明**:获取一组分区最后提交的偏移量。 - **接口说明**:获取一组分区最后提交的偏移量。
- **参数说明** - **参数说明**
- `partitions`:一个 `Array<TopicPartition>` 类型的参数,表示要查询的分区集合。 - `partitions`:一个 `Array<TopicPartition>` 类型的参数,表示要查询的分区集合。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**`Array<TopicPartition>`,即一组分区最后提交的偏移量。 - **返回值**`Array<TopicPartition>`,即一组分区最后提交的偏移量。
- **异常**:如果在获取提交的偏移量过程中发生错误,将抛出 `TDWebSocketClientError` 异常。 - **异常**:如果在获取提交的偏移量过程中发生错误,将抛出 `TDWebSocketClientError` 异常。
- `async seek(partition:TopicPartition, reqId?:number):Promise<void>` - `async seek(partition:TopicPartition, reqId?:number):Promise<void>`
- **接口说明**:将给定分区的偏移量设置到指定的位置。 - **接口说明**:将给定分区的偏移量设置到指定的位置。
- **参数说明** - **参数说明**
- `partition`:一个 `TopicPartition` 类型的参数,表示要操作的分区和要设置的偏移量。 - `partition`:一个 `TopicPartition` 类型的参数,表示要操作的分区和要设置的偏移量。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **异常**:如果在设置偏移量过程中发生错误,将抛出 `TDWebSocketClientError` 异常。 - **异常**:如果在设置偏移量过程中发生错误,将抛出 `TDWebSocketClientError` 异常。
- `async positions(partitions:Array<TopicPartition>, reqId?:number):Promise<Array<TopicPartition>>` - `async positions(partitions:Array<TopicPartition>, reqId?:number):Promise<Array<TopicPartition>>`
- **接口说明**:获取给定分区当前的偏移量。 - **接口说明**:获取给定分区当前的偏移量。
- **参数说明** - **参数说明**
- `partitions`:一个 `TopicPartition` 类型的参数,表示要查询的分区。 - `partitions`:一个 `TopicPartition` 类型的参数,表示要查询的分区。
- `reqId`: 请求 id 非必填,用于问题追踪。 - `reqId`请求 id 非必填,用于问题追踪。
- **返回值**`Array<TopicPartition>`,即一组分区最后提交的偏移量。 - **返回值**`Array<TopicPartition>`,即一组分区最后提交的偏移量。
- **异常**:如果在获取偏移量过程中发生错误,将抛出 `TDWebSocketClientError` 异常。 - **异常**:如果在获取偏移量过程中发生错误,将抛出 `TDWebSocketClientError` 异常。
- `async seekToBeginning(partitions:Array<TopicPartition>):Promise<void>` - `async seekToBeginning(partitions:Array<TopicPartition>):Promise<void>`

View File

@ -365,7 +365,7 @@ C# 驱动提供了符合 ADO.NET 标准的 `DbDataReader` 接口,提供了用
- **接口说明**:获取指定列的值。 - **接口说明**:获取指定列的值。
- **参数说明** - **参数说明**
- `ordinal`:列索引。 - `ordinal`:列索引。
- **返回值** 结果对象。 - **返回值**:结果对象。
- `public int GetValues(object[] values)` - `public int GetValues(object[] values)`

View File

@ -13,11 +13,11 @@ import Rdemo from "../../07-develop/01-connect/_connect_r.mdx"
## 安装过程 ## 安装过程
在开始之前请确保已经安装了R语言环境。然后按照以下步骤安装和配置RJDBC库 在开始之前,请确保已经安装了 R 语言环境。然后按照以下步骤安装和配置 RJDBC 库:
1. 安装Java Development Kit (JDK)RJDBC库需要依赖Java环境。请从Oracle官方网站下载适合您操作系统的JDK并按照安装指南进行安装。 1. 安装 Java Development Kit (JDK)RJDBC库需要依赖 Java 环境。请从 Oracle 官方网站下载适合您操作系统的 JDK并按照安装指南进行安装。
2. 安装RJDBC库在R控制台中执行以下命令来安装RJDBC库。 2. 安装 RJDBC 在R控制台中执行以下命令来安装 RJDBC 库。
```r ```r
install.packages("RJDBC", repos='http://cran.us.r-project.org') install.packages("RJDBC", repos='http://cran.us.r-project.org')
@ -35,7 +35,7 @@ install.packages("RJDBC", repos='http://cran.us.r-project.org')
## 配置过程 ## 配置过程
完成了安装步骤后您需要进行一些配置以便RJDBC库能够正确连接和访问TDengine时序数据库。 完成了安装步骤后您需要进行一些配置以便RJDBC库能够正确连接和访问 TDengine 时序数据库。
1. 在 R 脚本中加载 RJDBC 和其他必要的库: 1. 在 R 脚本中加载 RJDBC 和其他必要的库:
@ -48,10 +48,10 @@ library(RJDBC)
2. 设置 JDBC 驱动程序和 JDBC URL 2. 设置 JDBC 驱动程序和 JDBC URL
```r ```r
# 设置JDBC驱动程序路径根据您实际保存的位置进行修改 # 设置 JDBC 驱动程序路径(根据您实际保存的位置进行修改)
driverPath <- "/path/to/taos-jdbcdriver-X.X.X-dist.jar" driverPath <- "/path/to/taos-jdbcdriver-X.X.X-dist.jar"
# 设置JDBC URL根据您的具体环境进行修改 # 设置 JDBC URL根据您的具体环境进行修改
url <- "jdbc:TAOS://localhost:6030/?user=root&password=taosdata" url <- "jdbc:TAOS://localhost:6030/?user=root&password=taosdata"
``` ```

View File

@ -18,8 +18,8 @@ TDengine 服务端或客户端安装后,`taos.h` 位于:
TDengine 客户端驱动的动态库位于: TDengine 客户端驱动的动态库位于:
- Linux: `/usr/local/taos/driver/libtaos.so` - Linux`/usr/local/taos/driver/libtaos.so`
- Windows: `C:\TDengine\taos.dll` - Windows`C:\TDengine\taos.dll`
- macOS`/usr/local/lib/libtaos.dylib` - macOS`/usr/local/lib/libtaos.dylib`
## 支持的平台 ## 支持的平台
@ -85,7 +85,7 @@ phpize && ./configure --enable-swoole && make -j && make install
本节展示了使用客户端驱动访问 TDengine 集群的常见访问方式的示例代码。 本节展示了使用客户端驱动访问 TDengine 集群的常见访问方式的示例代码。
> 所有错误都会抛出异常: `TDengine\Exception\TDengineException` > 所有错误都会抛出异常`TDengine\Exception\TDengineException`
### 建立连接 ### 建立连接

View File

@ -52,11 +52,11 @@ TDengine ODBC 支持两种连接 TDengine 数据库方式WebSocket 连接与
![ODBC WebSocket connection config](./assets/odbc-ws-config-zh.webp) ![ODBC WebSocket connection config](./assets/odbc-ws-config-zh.webp)
4.1 【DSN】:Data Source Name 必填,为新添加的 ODBC 数据源命名 4.1 【DSN】Data Source Name 必填,为新添加的 ODBC 数据源命名
4.2【连接类型】 : 必选,选择连接类型,这里选择 【WebSocket】 4.2【连接类型】必选,选择连接类型,这里选择 【WebSocket】
4.3【URL】必填ODBC 数据源 URL示例: `http://localhost:6041` 云服务的 url 示例: `https://gw.cloud.taosdata.com?token=your_token` 4.3【URL】必填ODBC 数据源 URL示例`http://localhost:6041` 云服务的 url 示例:`https://gw.cloud.taosdata.com?token=your_token`
4.4【数据库】选填,需要连接的默认数据库 4.4【数据库】选填,需要连接的默认数据库
@ -84,11 +84,11 @@ TDengine ODBC 支持两种连接 TDengine 数据库方式WebSocket 连接与
![ODBC native connection config](./assets/odbc-native-config-zh.webp) ![ODBC native connection config](./assets/odbc-native-config-zh.webp)
4.1 【DSN】:Data Source Name 必填,为新添加的 ODBC 数据源命名 4.1 【DSN】Data Source Name 必填,为新添加的 ODBC 数据源命名
4.2 【连接类型】 : 必选,选择连接类型,这里选择 【Native】 原生连接; 4.2 【连接类型】必选,选择连接类型,这里选择 【Native】 原生连接;
4.3 【服务器】必填ODBC 数据源 服务器 地址,示例: `localhost:6030` 4.3 【服务器】必填ODBC 数据源 服务器 地址,示例`localhost:6030`
4.4 【数据库】选填,需要连接的默认数据库 4.4 【数据库】选填,需要连接的默认数据库
@ -267,388 +267,388 @@ TDengine ODBC 支持两种连接 TDengine 数据库方式WebSocket 连接与
#### 数据源和驱动程序管理 #### 数据源和驱动程序管理
- API: ConfigDSN - APIConfigDSN
- **是否支持**: 支持(仅 Windows - **是否支持**支持(仅 Windows
- **标准**: ODBC - **标准**ODBC
- **作用**: 配置数据源 - **作用**配置数据源
- API: ConfigDriver - APIConfigDriver
- **是否支持**: 支持(仅 Windows - **是否支持**支持(仅 Windows
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于执行与特定驱动程序相关的安装和配置任务 - **作用**用于执行与特定驱动程序相关的安装和配置任务
- API: ConfigTranslator - APIConfigTranslator
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于解析DSN的配置在DSN配置和实际数据库驱动程序配置之间进行翻译或转换 - **作用**用于解析DSN的配置在DSN配置和实际数据库驱动程序配置之间进行翻译或转换
#### 连接到数据源 #### 连接到数据源
- API: SQLAllocHandle - APISQLAllocHandle
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 分配环境、连接、语句或描述符句柄 - **作用**分配环境、连接、语句或描述符句柄
- API: SQLConnect - APISQLConnect
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 通过数据源名称、用户 ID 和密码连接到特定驱动程序 - **作用**通过数据源名称、用户 ID 和密码连接到特定驱动程序
- API: SQLDriverConnect - APISQLDriverConnect
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 通过连接字符串连接到特定驱动程序,支持更多连接信息 - **作用**通过连接字符串连接到特定驱动程序,支持更多连接信息
- API: SQLBrowseConnect - APISQLBrowseConnect
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于发现和枚举连接到数据源所需的特性和属性值。每次调用 SQLBrowseConnect 都会返回属性和属性值的连续级别 - **作用**用于发现和枚举连接到数据源所需的特性和属性值。每次调用 SQLBrowseConnect 都会返回属性和属性值的连续级别
- API: SQLAllocEnv - APISQLAllocEnv
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.x 函数 SQLAllocEnv 已替换为 SQLAllocHandle - **作用**在 ODBC 3.x 中ODBC 2.x 函数 SQLAllocEnv 已替换为 SQLAllocHandle
- API: SQLAllocConnect - APISQLAllocConnect
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.x 函数 SQLAllocConnect 已替换为 SQLAllocHandle - **作用**在 ODBC 3.x 中ODBC 2.x 函数 SQLAllocConnect 已替换为 SQLAllocHandle
#### 获取有关驱动程序和数据源的信息 #### 获取有关驱动程序和数据源的信息
- API: SQLDataSources - APISQLDataSources
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回可用数据源的列表,由驱动程序管理器处理 - **作用**返回可用数据源的列表,由驱动程序管理器处理
- API: SQLDrivers - APISQLDrivers
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回由驱动程序管理器处理的已安装驱动程序及其属性的列表 - **作用**返回由驱动程序管理器处理的已安装驱动程序及其属性的列表
- API: SQLGetInfo - APISQLGetInfo
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回有关数据库环境的详细信息如数据库产品名称、驱动程序名、数据库的SQL语法特性、连接能力等等 - **作用**返回有关数据库环境的详细信息如数据库产品名称、驱动程序名、数据库的SQL语法特性、连接能力等等
- API: SQLGetFunctions - APISQLGetFunctions
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于查询驱动程序支持的函数 - **作用**用于查询驱动程序支持的函数
- API: SQLGetTypeInfo - APISQLGetTypeInfo
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回有关支持的数据类型的信息 - **作用**返回有关支持的数据类型的信息
#### 设置和检索驱动程序属性 #### 设置和检索驱动程序属性
- API: SQLSetConnectAttr - APISQLSetConnectAttr
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 设置连接属性当设置SQL_ATTR_AUTOCOMMIT属性时用于控制自动提交模式 - **作用**设置连接属性当设置SQL_ATTR_AUTOCOMMIT属性时用于控制自动提交模式
- API: SQLGetConnectAttr - APISQLGetConnectAttr
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回连接属性的值 - **作用**返回连接属性的值
- API: SQLSetConnectOption - APISQLSetConnectOption
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLSetConnectOption 已替换为 SQLSetConnectAttr - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLSetConnectOption 已替换为 SQLSetConnectAttr
- API: SQLGetConnectOption - APISQLGetConnectOption
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLSetConnectOption 已替换为 SQLGetConnectAttr - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLSetConnectOption 已替换为 SQLGetConnectAttr
- API: SQLSetEnvAttr - APISQLSetEnvAttr
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 设置控制环境的属性 - **作用**设置控制环境的属性
- API: SQLGetEnvAttr - APISQLGetEnvAttr
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回环境属性的当前设置 - **作用**返回环境属性的当前设置
- API: SQLSetStmtAttr - APISQLSetStmtAttr
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 设置与语句相关的属性 - **作用**设置与语句相关的属性
- API: SQLGetStmtAttr - APISQLGetStmtAttr
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回语句属性的当前设置 - **作用**返回语句属性的当前设置
- API: SQLSetStmtOption - APISQLSetStmtOption
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLSetStmtOption 已替换为 SQLSetStmtAttr - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLSetStmtOption 已替换为 SQLSetStmtAttr
- API: SQLGetStmtOption - APISQLGetStmtOption
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLSetStmtOption 已替换为 SQLGetStmtAttr - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLSetStmtOption 已替换为 SQLGetStmtAttr
#### 准备SQL请求 #### 准备 SQL 请求
- API: SQLAllocStmt - APISQLAllocStmt
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.x 函数 SQLAllocStmt 已替换为 SQLAllocHandle - **作用**在 ODBC 3.x 中ODBC 2.x 函数 SQLAllocStmt 已替换为 SQLAllocHandle
- API: SQLPrepare - APISQLPrepare
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于预处理SQL语句这通常是SQLExecute之前的一个步骤 - **作用**用于预处理SQL语句这通常是SQLExecute之前的一个步骤
- API: SQLBindCol - APISQLBindCol
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于将结果集中的列绑定到应用程序缓冲区 - **作用**用于将结果集中的列绑定到应用程序缓冲区
- API: SQLBindParameter - APISQLBindParameter
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于将SQL语句的参数绑定到应用程序缓冲区 - **作用**用于将SQL语句的参数绑定到应用程序缓冲区
- API: SQLGetCursorName - APISQLGetCursorName
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回与指定语句关联的游标名称 - **作用**返回与指定语句关联的游标名称
- API: SQLSetCursorName - APISQLSetCursorName
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 设置游标名称,允许在查询中使用命名游标 - **作用**设置游标名称,允许在查询中使用命名游标
- API: SQLSetScrollOptions - APISQLSetScrollOptions
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 设置控制光标行为的选项 - **作用**设置控制光标行为的选项
#### 提交请求 #### 提交请求
- API: SQLExecute - APISQLExecute
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于执行之前通过 SQLPrepare 准备好的SQL语句 - **作用**用于执行之前通过 SQLPrepare 准备好的SQL语句
- API: SQLExecDirect - APISQLExecDirect
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于执行包含SQL语句的字符串 - **作用**用于执行包含SQL语句的字符串
- API: SQLNativeSql - APISQLNativeSql
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于将应用程序提供的SQL语句转换为数据库驱动程序的本机SQL语法 - **作用**用于将应用程序提供的SQL语句转换为数据库驱动程序的本机SQL语法
- API: SQLDescribeParam - APISQLDescribeParam
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 返回语句中特定参数的描述 - **作用**返回语句中特定参数的描述
- API: SQLNumParams - APISQLNumParams
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于查询预编译SQL语句中的参数数量 - **作用**用于查询预编译SQL语句中的参数数量
- API: SQLParamData - APISQLParamData
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于从参数数据流中获取下一个参数值 - **作用**用于从参数数据流中获取下一个参数值
- API: SQLPutData - APISQLPutData
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 当使用流输入方式时,可以用于向输出参数发送数据块 - **作用**当使用流输入方式时,可以用于向输出参数发送数据块
#### 检索结果和关于结果的信息 #### 检索结果和关于结果的信息
- API: SQLRowCount - APISQLRowCount
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回受插入或删除请求影响的行数 - **作用**返回受插入或删除请求影响的行数
- API: SQLNumResultCols - APISQLNumResultCols
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回结果集中的列数 - **作用**返回结果集中的列数
- API: SQLDescribeCol - APISQLDescribeCol
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于描述结果集中列的属性。它提供了关于列的数据类型、列名、列的最大宽度、小数位数和是否可为空等信息 - **作用**用于描述结果集中列的属性。它提供了关于列的数据类型、列名、列的最大宽度、小数位数和是否可为空等信息
- API: SQLColAttribute - APISQLColAttribute
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回结果集中列的描述符信息,如标题、排序规则等 - **作用**返回结果集中列的描述符信息,如标题、排序规则等
- API: SQLColAttributes - APISQLColAttributes
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLColAttributes 已替换为 SQLColAttribute - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLColAttributes 已替换为 SQLColAttribute
- API: SQLGetData - APISQLGetData
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于从结果集中的当前行获取特定列的数据 - **作用**用于从结果集中的当前行获取特定列的数据
- API: SQLMoreResults - APISQLMoreResults
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 多个结果集的 SQL 语句执行后(例如:一个批处理或存储过程),移动到下一个结果集 - **作用**多个结果集的 SQL 语句执行后(例如:一个批处理或存储过程),移动到下一个结果集
- API: SQLFetch - APISQLFetch
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于从结果集中提取下一行数据,并返回所有绑定列的数据 - **作用**用于从结果集中提取下一行数据,并返回所有绑定列的数据
- API: SQLFetchScroll - APISQLFetchScroll
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于从结果集中提取指定的数据行集,并返回所有绑定列的数据 - **作用**用于从结果集中提取指定的数据行集,并返回所有绑定列的数据
- API: SQLExtendedFetch - APISQLExtendedFetch
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中SQLExtendedFetch 已替换为 SQLFetchScroll - **作用**在 ODBC 3.x 中SQLExtendedFetch 已替换为 SQLFetchScroll
- API: SQLSetPos - APISQLSetPos
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 设置行集中的游标位置,并允许应用程序更新数据集中的行 - **作用**设置行集中的游标位置,并允许应用程序更新数据集中的行
- API: SQLBulkOperations - APISQLBulkOperations
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 执行批量插入和批量书签操作,包括更新、删除和按书签提取 - **作用**执行批量插入和批量书签操作,包括更新、删除和按书签提取
#### 检索错误或诊断信息 #### 检索错误或诊断信息
- API: SQLError - APISQLError
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.x 函数 SQLError 已替换为 SQLGetDiagRec - **作用**在 ODBC 3.x 中ODBC 2.x 函数 SQLError 已替换为 SQLGetDiagRec
- API: SQLGetDiagField - APISQLGetDiagField
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回附加诊断信息(单条诊断结果) - **作用**返回附加诊断信息(单条诊断结果)
- API: SQLGetDiagRec - APISQLGetDiagRec
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回附加诊断信息(多条诊断结果) - **作用**返回附加诊断信息(多条诊断结果)
#### 获取有关数据源的系统表项的信息 #### 获取有关数据源的系统表项的信息
- API: SQLColumnPrivileges - APISQLColumnPrivileges
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 用于检索指定表中列的权限信息,如哪些用户或角色拥有对特定列的读取、插入、更新或删除权限 - **作用**用于检索指定表中列的权限信息,如哪些用户或角色拥有对特定列的读取、插入、更新或删除权限
- API: SQLColumns - APISQLColumns
- **是否支持**: 支持 - **是否支持**支持
- **标准**: X/Open - **标准**X/Open
- **作用**: 返回指定表中的列名列表 - **作用**返回指定表中的列名列表
- API: SQLForeignKeys - APISQLForeignKeys
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 检索外键关系的详细信息 - **作用**检索外键关系的详细信息
- API: SQLPrimaryKeys - APISQLPrimaryKeys
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 返回构成表主键的列名列表 - **作用**返回构成表主键的列名列表
- API: SQLSpecialColumns - APISQLSpecialColumns
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: X/Open - **标准**X/Open
- **作用**: 返回数据库中特殊列的信息,如唯一键或索引列 - **作用**返回数据库中特殊列的信息,如唯一键或索引列
- API: SQLStatistics - APISQLStatistics
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 返回关于表的统计信息,如行数、列数、平均行宽等 - **作用**返回关于表的统计信息,如行数、列数、平均行宽等
- API: SQLTablePrivileges - APISQLTablePrivileges
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 返回用户在特定表上的权限如SELECT、INSERT、UPDATE等 - **作用**返回用户在特定表上的权限如SELECT、INSERT、UPDATE等
- API: SQLTables - APISQLTables
- **是否支持**: 支持 - **是否支持**支持
- **标准**: X/Open - **标准**X/Open
- **作用**: 返回存储在数据源的当前数据库中的表信息 - **作用**返回存储在数据源的当前数据库中的表信息
- API: SQLProcedures - APISQLProcedures
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 返回数据库中可用的存储过程信息,包括名称和类型 - **作用**返回数据库中可用的存储过程信息,包括名称和类型
- API: SQLProcedureColumns - APISQLProcedureColumns
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 返回存储过程的列信息,包括输入输出参数的详细信息 - **作用**返回存储过程的列信息,包括输入输出参数的详细信息
#### 执行事务 #### 执行事务
- API: SQLTransact - APISQLTransact
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.x 函数 SQLTransact 已替换为 SQLEndTran - **作用**在 ODBC 3.x 中ODBC 2.x 函数 SQLTransact 已替换为 SQLEndTran
- API: SQLEndTran - APISQLEndTran
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 用于提交或回滚事务。TDengine 是非事务性的,因此 SQLEndTran 函数最多只能模拟提交或回滚操作。如果有任何未完成的连接或语句无论是提交commit还是回滚rollback都不会成功 - **作用**用于提交或回滚事务。TDengine 是非事务性的,因此 SQLEndTran 函数最多只能模拟提交或回滚操作。如果有任何未完成的连接或语句无论是提交commit还是回滚rollback都不会成功
#### 终止连接 #### 终止连接
- API: SQLDisconnect - APISQLDisconnect
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 断开数据库连接 - **作用**断开数据库连接
- API: SQLFreeHandle - APISQLFreeHandle
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ISO 92 - **标准**ISO 92
- **作用**: 释放与特定环境、连接、语句或描述符句柄关联的资源 - **作用**释放与特定环境、连接、语句或描述符句柄关联的资源
- API: SQLFreeConnect - APISQLFreeConnect
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLFreeConnect 已替换为 SQLFreeHandle - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLFreeConnect 已替换为 SQLFreeHandle
- API: SQLFreeEnv - APISQLFreeEnv
- **是否支持**: 不支持 - **是否支持**不支持
- **标准**: 弃用 - **标准**弃用
- **作用**: 在 ODBC 3.x 中ODBC 2.0 函数 SQLFreeEnv 已替换为 SQLFreeHandle - **作用**在 ODBC 3.x 中ODBC 2.0 函数 SQLFreeEnv 已替换为 SQLFreeHandle
- API: SQLFreeStmt - APISQLFreeStmt
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 结束语句处理,丢弃挂起的结果,并且可以选择释放与语句句柄关联的所有资源 - **作用**结束语句处理,丢弃挂起的结果,并且可以选择释放与语句句柄关联的所有资源
- API: SQLCloseCursor - APISQLCloseCursor
- **是否支持**: 支持 - **是否支持**支持
- **标准**: ODBC - **标准**ODBC
- **作用**: 关闭与当前语句句柄关联的游标,并释放游标所使用的所有资源 - **作用**关闭与当前语句句柄关联的游标,并释放游标所使用的所有资源

View File

@ -75,12 +75,12 @@ http://<fqdn>:<port>/rest/sql/[db_name][?tz=timezone[&req_id=req_id][&row_with_m
参数说明: 参数说明:
- fqdn: 集群中的任一台主机 FQDN 或 IP 地址。 - fqdn集群中的任一台主机 FQDN 或 IP 地址。
- port: 配置文件中 httpPort 配置项,缺省为 6041。 - port配置文件中 httpPort 配置项,缺省为 6041。
- db_name: 可选参数,指定本次所执行的 SQL 语句的默认数据库库名。 - db_name可选参数,指定本次所执行的 SQL 语句的默认数据库库名。
- tz: 可选参数,指定返回时间的时区,遵照 IANA Time Zone 规则,如 `America/New_York`。 - tz可选参数,指定返回时间的时区,遵照 IANA Time Zone 规则,如 `America/New_York`。
- req_id: 可选参数,指定请求 id可以用于 tracing。 - req_id可选参数,指定请求 id可以用于 tracing。
- row_with_meta: 可选参数,指定是否每行数据都携带列名,缺省为 false。3.3.2.0 版本开始支持) - row_with_meta可选参数,指定是否每行数据都携带列名,缺省为 false。3.3.2.0 版本开始支持)
例如:`http://h1.taos.com:6041/rest/sql/test` 是指向地址为 `h1.taos.com:6041` 的 URL并将默认使用的数据库库名设置为 `test`。 例如:`http://h1.taos.com:6041/rest/sql/test` 是指向地址为 `h1.taos.com:6041` 的 URL并将默认使用的数据库库名设置为 `test`。

View File

@ -18,19 +18,19 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x80000015 | Unable to resolve FQDN | 设置了无效的 fqdn | 检查fqdn 的设置 | | 0x80000015 | Unable to resolve FQDN | 设置了无效的 fqdn | 检查fqdn 的设置 |
| 0x80000017 | Port already in use | 端口已经被某个服务占用的情况下,新启的服务依然尝试绑定该端口 | 1.改动新服务的服务端口 2.杀死之前占用端口的服务 | | 0x80000017 | Port already in use | 端口已经被某个服务占用的情况下,新启的服务依然尝试绑定该端口 | 1.改动新服务的服务端口 2.杀死之前占用端口的服务 |
| 0x80000018 | Conn is broken | 由于网络抖动或者请求时间过长(超过 900 秒),导致系统主动摘掉连接 | 1.设置系统的最大超时时长 2.检查请求时长 | | 0x80000018 | Conn is broken | 由于网络抖动或者请求时间过长(超过 900 秒),导致系统主动摘掉连接 | 1.设置系统的最大超时时长 2.检查请求时长 |
| 0x80000019 | Conn read timeout | 1.请求是否处理时间过长 2. 服务端处理不过来 3. 服务端已经死锁| 1. 显式配置readTimeout参数2. 分析taosd上堆栈 | | 0x80000019 | Conn read timeout | 1.请求是否处理时间过长 2.服务端处理不过来 3.服务端已经死锁| 1.显式配置readTimeout参数2.分析taosd上堆栈 |
| 0x80000020 | some vnode/qnode/mnode(s) out of service | 多次重试之后,仍然无法连接到集群,可能是所有的节点都宕机了,或者存活的节点不是 Leader 节点 | 1.查看 taosd 的状态、分析 taosd 宕机的原因 2.分析存活的 taosd 为什么无法选取 Leader | | 0x80000020 | some vnode/qnode/mnode(s) out of service | 多次重试之后,仍然无法连接到集群,可能是所有的节点都宕机了,或者存活的节点不是 Leader 节点 | 1.查看 taosd 的状态、分析 taosd 宕机的原因 2.分析存活的 taosd 为什么无法选取 Leader |
| 0x80000021 | some vnode/qnode/mnode(s) conn is broken | 多次重试之后,仍然无法连接到集群,可能是网络异常、请求时间太长、服务端死锁等问题 | 1.检查网络 2.请求的执行时间 | | 0x80000021 | some vnode/qnode/mnode(s) conn is broken | 多次重试之后,仍然无法连接到集群,可能是网络异常、请求时间太长、服务端死锁等问题 | 1.检查网络 2.请求的执行时间 |
| 0x80000022 | rpc open too many session | 1.并发太高导致占用链接已经到达上限 2.服务端的 BUG导致连接一直不释放 | 1.调整配置参数 numOfRpcSessions 2.调整配置参数 timeToGetAvailableConn 3.分析服务端不释放的连接的原因 | | 0x80000022 | rpc open too many session | 1.并发太高导致占用链接已经到达上限 2.服务端的 BUG导致连接一直不释放 | 1.调整配置参数 numOfRpcSessions 2.调整配置参数 timeToGetAvailableConn 3.分析服务端不释放的连接的原因 |
| 0x80000023 | rpc network error | 1. 网络问题可能是闪断2. 服务端crash | 1. 检查网络 2. 检查服务端是否重启| | 0x80000023 | rpc network error | 1.网络问题可能是闪断2.服务端 crash | 1.检查网络 2.检查服务端是否重启|
| 0x80000024 |rpc network bus | 1.集群间互相拉数据的时候,没有拿到可用链接,或者链接数目已经到上限 | 1.是否并发太高 2. 检查集群各个节点是否有异常,是否出现了死锁等情况| | 0x80000024 |rpc network bus | 1.集群间互相拉数据的时候,没有拿到可用链接,或者链接数目已经到上限 | 1.是否并发太高 2.检查集群各个节点是否有异常,是否出现了死锁等情况|
| 0x80000025 | http-report already quit | 1. http上报出现的问题| 内部问题,可以忽略| | 0x80000025 | http-report already quit | 1.http上报出现的问题| 内部问题,可以忽略|
| 0x80000026 | rpc module already quit | 1.客户端实例已经退出,依然用该实例做查询 | 检查业务代码,是否用错| | 0x80000026 | rpc module already quit | 1.客户端实例已经退出,依然用该实例做查询 | 检查业务代码,是否用错|
| 0x80000027 | rpc async module already quit | 1. 引擎错误, 可以忽略, 该错误码不会返回到用户侧| 如果返回到用户侧, 需要引擎侧追查问题| | 0x80000027 | rpc async module already quit | 1.引擎错误, 可以忽略, 该错误码不会返回到用户侧| 如果返回到用户侧, 需要引擎侧追查问题|
| 0x80000028 | rpc async in proces | 1. 引擎错误, 可以忽略, 该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题| | 0x80000028 | rpc async in proces | 1.引擎错误, 可以忽略, 该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题|
| 0x80000029 | rpc no state | 1. 引擎错误, 可以忽略, 该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题 | | 0x80000029 | rpc no state | 1.引擎错误, 可以忽略, 该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题 |
| 0x8000002A | rpc state already dropped | 1. 引擎错误, 可以忽略, 该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题| | 0x8000002A | rpc state already dropped | 1.引擎错误, 可以忽略, 该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题|
| 0x8000002B | rpc msg exceed limit | 1. 单个rpc 消息超过上限,该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题| | 0x8000002B | rpc msg exceed limit | 1.单个rpc 消息超过上限,该错误码不会返回到用户侧 | 如果返回到用户侧, 需要引擎侧追查问题|
## common ## common
@ -40,42 +40,42 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x80000100 | Operation not supported | 操作不被支持、不允许的场景 | 检查操作是否有误,确认该功能是否被支持 | | 0x80000100 | Operation not supported | 操作不被支持、不允许的场景 | 检查操作是否有误,确认该功能是否被支持 |
| 0x80000102 | Out of Memory | 客户端或服务端内存分配失败的场景 | 检查客户端、服务端内存是否充足 | | 0x80000102 | Out of Memory | 客户端或服务端内存分配失败的场景 | 检查客户端、服务端内存是否充足 |
| 0x80000104 | Data file corrupted | 1.存储数据文件损坏 2.udf 文件无法创建 | 1.联系涛思客户支持 2.确认服务端对临时目录有读写创建文件权限 | | 0x80000104 | Data file corrupted | 1.存储数据文件损坏 2.udf 文件无法创建 | 1.联系涛思客户支持 2.确认服务端对临时目录有读写创建文件权限 |
| 0x80000106 | too many Ref Objs | 无可用ref资源 | 保留现场和日志github 上报 issue | | 0x80000106 | too many Ref Objs | 无可用 ref 资源 | 保留现场和日志github 上报 issue |
| 0x80000107 | Ref ID is removed | 引用的ref资源已经释放 | 保留现场和日志github 上报 issue | | 0x80000107 | Ref ID is removed | 引用的 ref 资源已经释放 | 保留现场和日志github 上报 issue |
| 0x80000108 | Invalid Ref ID | 无效ref ID | 保留现场和日志github 上报 issue | | 0x80000108 | Invalid Ref ID | 无效 ref ID | 保留现场和日志github 上报 issue |
| 0x8000010A | Ref is not there | ref 信息不存在 | 保留现场和日志github 上报 issue | | 0x8000010A | Ref is not there | ref 信息不存在 | 保留现场和日志github 上报 issue |
| 0x80000110 | Unexpected generic error | 系统内部错误 | 保留现场和日志github 上报 issue | | 0x80000110 | Unexpected generic error | 系统内部错误 | 保留现场和日志github 上报 issue |
| 0x80000111 | Action in progress | 操作进行中 | 1.等待操作完成 2.根据需要取消操作 3.当超出合理时间仍然未完成可保留现场和日志,或联系客户支持 | | 0x80000111 | Action in progress | 操作进行中 | 1.等待操作完成 2.根据需要取消操作 3.当超出合理时间仍然未完成可保留现场和日志,或联系客户支持 |
| 0x80000112 | Out of range | 配置参数超出允许值范围 | 更改参数 | | 0x80000112 | Out of range | 配置参数超出允许值范围 | 更改参数 |
| 0x80000115 | Invalid message | 消息错误 | 1. 检查是否存在节点间版本不一致 2. 保留现场和日志github上报issue | | 0x80000115 | Invalid message | 消息错误 | 1.检查是否存在节点间版本不一致 2.保留现场和日志github 上报 issue |
| 0x80000116 | Invalid message len | 消息长度错误 | 1. 检查是否存在节点间版本不一致 2. 保留现场和日志github上报issue | | 0x80000116 | Invalid message len | 消息长度错误 | 1.检查是否存在节点间版本不一致 2.保留现场和日志github 上报 issue |
| 0x80000117 | Invalid pointer | 无效指针 | 保留现场和日志github上报issue | | 0x80000117 | Invalid pointer | 无效指针 | 保留现场和日志github 上报 issue |
| 0x80000118 | Invalid parameters | 无效参数 | 保留现场和日志github上报issue | | 0x80000118 | Invalid parameters | 无效参数 | 保留现场和日志github 上报 issue |
| 0x80000119 | Invalid config option | 无效配置 | 保留现场和日志github上报issue | | 0x80000119 | Invalid config option | 无效配置 | 保留现场和日志github 上报 issue |
| 0x8000011A | Invalid option | 无效选项 | 保留现场和日志github上报issue | | 0x8000011A | Invalid option | 无效选项 | 保留现场和日志github 上报 issue |
| 0x8000011B | Invalid json format | JSON格式错误 | 保留现场和日志github上报issue | | 0x8000011B | Invalid json format | JSON格式错误 | 保留现场和日志github 上报 issue |
| 0x8000011C | Invalid version number | 无效版本格式 | 保留现场和日志github上报issue | | 0x8000011C | Invalid version number | 无效版本格式 | 保留现场和日志github 上报 issue |
| 0x8000011D | Invalid version string | 无效版本格式 | 保留现场和日志github上报issue | | 0x8000011D | Invalid version string | 无效版本格式 | 保留现场和日志github 上报 issue |
| 0x8000011E | Version not compatible | 节点间版本不兼容 | 检查各节点版本(包括服务端与客户端),确保节点间版本一致或兼容 | | 0x8000011E | Version not compatible | 节点间版本不兼容 | 检查各节点版本(包括服务端与客户端),确保节点间版本一致或兼容 |
| 0x8000011F | Checksum error | 文件checksum校验失败 | 保留现场和日志github上报issue | | 0x8000011F | Checksum error | 文件 checksum 校验失败 | 保留现场和日志github 上报 issue |
| 0x80000120 | Failed to compress msg | 压缩失败 | 保留现场和日志github上报issue | | 0x80000120 | Failed to compress msg | 压缩失败 | 保留现场和日志github 上报 issue |
| 0x80000121 | Message not processed | 消息未被正确处理 | 保留现场和日志github上报issue | | 0x80000121 | Message not processed | 消息未被正确处理 | 保留现场和日志github 上报 issue |
| 0x80000122 | Config not found | 未找到配置项 | 保留现场和日志github上报issue | | 0x80000122 | Config not found | 未找到配置项 | 保留现场和日志github 上报 issue |
| 0x80000123 | Repeat initialization | 重复初始化 | 保留现场和日志github上报issue | | 0x80000123 | Repeat initialization | 重复初始化 | 保留现场和日志github 上报 issue |
| 0x80000124 | Cannot add duplicate keys to hash | 添加重复key数据到哈希表中 | 保留现场和日志github上报issue | | 0x80000124 | Cannot add duplicate keys to hash | 添加重复 key 数据到哈希表中 | 保留现场和日志github 上报 issue |
| 0x80000125 | Retry needed | 需要应用进行重试 | 应用按照API使用规范进行重试 | | 0x80000125 | Retry needed | 需要应用进行重试 | 应用按照API使用规范进行重试 |
| 0x80000126 | Out of memory in rpc queue | rpc消息队列内存使用达到上限 | 1. 检查确认系统负载是否过大 2. 如必要通过配置rpcQueueMemoryAllowed增大rpc消息队列内存上限 3. 如果问题还未解决保留现场和日志github上报issue | | 0x80000126 | Out of memory in rpc queue | rpc 消息队列内存使用达到上限 | 1.检查确认系统负载是否过大 2.(如必要)通过配置 rpcQueueMemoryAllowed 增大 rpc 消息队列内存上限 3.如果问题还未解决保留现场和日志github 上报 issue |
| 0x80000127 | Invalid timestamp format | 时间戳格式错误 | 检查并确认输入的时间戳格式正确 | | 0x80000127 | Invalid timestamp format | 时间戳格式错误 | 检查并确认输入的时间戳格式正确 |
| 0x80000128 | Msg decode error | 消息解码错误 | 保留现场和日志github上报issue | | 0x80000128 | Msg decode error | 消息解码错误 | 保留现场和日志github 上报 issue |
| 0x8000012A | Not found | 未找到内部缓存信息 | 保留现场和日志github上报issue | | 0x8000012A | Not found | 未找到内部缓存信息 | 保留现场和日志github 上报 issue |
| 0x8000012B | Out of disk space | 磁盘空间不足 | 1. 检查并确保数据目录、临时文件夹目录有足够磁盘空间 2. 定期检查维护上述目录,确保空间足够 | | 0x8000012B | Out of disk space | 磁盘空间不足 | 1.检查并确保数据目录、临时文件夹目录有足够磁盘空间 2.定期检查维护上述目录,确保空间足够 |
| 0x80000130 | Database is starting up | 数据库启动中,暂无法提供服务 | 检查数据库状态,待系统完成启动后继续或重试 | | 0x80000130 | Database is starting up | 数据库启动中,暂无法提供服务 | 检查数据库状态,待系统完成启动后继续或重试 |
| 0x80000131 | Database is closing down | 数据库正在或已经关闭,无法提供服务 | 检查数据库状态,确保系统工作在正常状态 | | 0x80000131 | Database is closing down | 数据库正在或已经关闭,无法提供服务 | 检查数据库状态,确保系统工作在正常状态 |
| 0x80000132 | Invalid data format | 数据格式错误 | 1. 保留现场和日志github上报issue 2. 联系涛思客户支持 | | 0x80000132 | Invalid data format | 数据格式错误 | 1.保留现场和日志github 上报 issue 2.联系涛思客户支持 |
| 0x80000133 | Invalid operation | 无效的或不支持的操作 | 1. 修改确认当前操作为合法有效支持的操作,检查参数有效性 2. 如果问题还未解决保留现场和日志github上报issue | | 0x80000133 | Invalid operation | 无效的或不支持的操作 | 1.修改确认当前操作为合法有效支持的操作,检查参数有效性 2.如果问题还未解决保留现场和日志github 上报 issue |
| 0x80000134 | Invalid value | 无效值 | 保留现场和日志github上报issue | | 0x80000134 | Invalid value | 无效值 | 保留现场和日志github 上报 issue |
| 0x80000135 | Invalid fqdn | 无效FQDN | 检查配置或输入的FQDN值是否正确 | | 0x80000135 | Invalid fqdn | 无效 FQDN | 检查配置或输入的 FQDN 值是否正确 |
| 0x8000013C | Invalid disk id | 不合法的disk id | 建议用户检查挂载磁盘是否失效或者使用参数 diskIDCheckEnabled 来跳过磁盘检查 | | 0x8000013C | Invalid disk id | 不合法的 disk id | 建议用户检查挂载磁盘是否失效或者使用参数 diskIDCheckEnabled 来跳过磁盘检查 |
@ -89,20 +89,20 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x8000020A | Table name too long | 表名不合法 | 检查表名是否正确 | | 0x8000020A | Table name too long | 表名不合法 | 检查表名是否正确 |
| 0x8000020F | Query terminated | 查询被中止 | 检查是否有用户中止了查询 | | 0x8000020F | Query terminated | 查询被中止 | 检查是否有用户中止了查询 |
| 0x80000213 | Disconnected from server | 连接已中断 | 检查连接是否被人为中断或客户端正在退出 | | 0x80000213 | Disconnected from server | 连接已中断 | 检查连接是否被人为中断或客户端正在退出 |
| 0x80000216 | Syntax error in SQL | SQL语法错误 | 检查SQL语句并修正错误 | | 0x80000216 | Syntax error in SQL | SQL 语法错误 | 检查 SQL 语句并修正错误 |
| 0x80000219 | SQL statement too long | SQL长度超出限制 | 检查SQL语句并修正错误 | | 0x80000219 | SQL statement too long | SQL 长度超出限制 | 检查 SQL 语句并修正错误 |
| 0x8000021A | File is empty | 文件内容为空 | 检查输入文件内容 | | 0x8000021A | File is empty | 文件内容为空 | 检查输入文件内容 |
| 0x8000021F | Invalid column length | 列长度错误 | 保留现场和日志github上报issue | | 0x8000021F | Invalid column length | 列长度错误 | 保留现场和日志github 上报 issue |
| 0x80000222 | Invalid JSON data type | JSON数据类型错误 | 检查输入JSON内容 | | 0x80000222 | Invalid JSON data type | JSON 数据类型错误 | 检查输入 JSON 内容 |
| 0x80000224 | Value out of range | 数据大小超过类型范围 | 检查输入的数据值 | | 0x80000224 | Value out of range | 数据大小超过类型范围 | 检查输入的数据值 |
| 0x80000229 | Invalid tsc input | API输入错误 | 检查应用调用API时传递的参数 | | 0x80000229 | Invalid tsc input | API 输入错误 | 检查应用调用 API 时传递的参数 |
| 0x8000022A | Stmt API usage error | STMT API使用错误 | 检查STMT API调用的顺序、适用场景、错误处理 | | 0x8000022A | Stmt API usage error | STMT API 使用错误 | 检查 STMT API 调用的顺序、适用场景、错误处理 |
| 0x8000022B | Stmt table name not set | STMT未正确设置table name | 检查是否调用了设置table name接口 | | 0x8000022B | Stmt table name not set | STMT 未正确设置 table name | 检查是否调用了设置 table name 接口 |
| 0x8000022D | Query killed | 查询被中止 | 检查是否有用户中止了查询 | | 0x8000022D | Query killed | 查询被中止 | 检查是否有用户中止了查询 |
| 0x8000022E | No available execution node | 没有可用的查询执行节点 | 检查当前query policy配置如果需要有Qnode参与确保系统中存在可用的Qnode节点 | | 0x8000022E | No available execution node | 没有可用的查询执行节点 | 检查当前 query policy 配置,如果需要有 Qnode 参与确保系统中存在可用的 Qnode 节点 |
| 0x8000022F | Table is not a super table | 当前语句中的表名不是超级表 | 检查当前语句中所用表名是否是超级表 | | 0x8000022F | Table is not a super table | 当前语句中的表名不是超级表 | 检查当前语句中所用表名是否是超级表 |
| 0x80000230 | Stmt cache error | STMT内部缓存出错 | 保留现场和日志github上报issue | | 0x80000230 | Stmt cache error | STMT 内部缓存出错 | 保留现场和日志github 上报 issue |
| 0x80000231 | Tsc internal error | TSC内部错误 | 保留现场和日志github上报issue | | 0x80000231 | Tsc internal error | TSC 内部错误 | 保留现场和日志github 上报 issue |
@ -111,105 +111,105 @@ description: TDengine 服务端的错误码列表和详细说明
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------- | | ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| 0x80000303 | Insufficient privilege for operation | 无权限 | 赋权 | | 0x80000303 | Insufficient privilege for operation | 无权限 | 赋权 |
| 0x8000030B | Data expired | 内部错误 | 上报issue | | 0x8000030B | Data expired | 内部错误 | 上报 issue |
| 0x8000030C | Invalid query id | 内部错误 | 上报issue | | 0x8000030C | Invalid query id | 内部错误 | 上报 issue |
| 0x8000030E | Invalid connection id | 内部错误 | 上报issue | | 0x8000030E | Invalid connection id | 内部错误 | 上报 issue |
| 0x80000315 | User is disabled | 该用户不可用 | 赋权 | | 0x80000315 | User is disabled | 该用户不可用 | 赋权 |
| 0x80000320 | Object already there | 内部错误 | 上报issue | | 0x80000320 | Object already there | 内部错误 | 上报 issue |
| 0x80000322 | Invalid table type | 内部错误 | 上报issue | | 0x80000322 | Invalid table type | 内部错误 | 上报 issue |
| 0x80000323 | Object not there | 内部错误 | 上报issue | | 0x80000323 | Object not there | 内部错误 | 上报 issue |
| 0x80000326 | Invalid action type | 内部错误 | 上报issue | | 0x80000326 | Invalid action type | 内部错误 | 上报 issue |
| 0x80000328 | Invalid raw data version | 内部错误 | 上报issue | | 0x80000328 | Invalid raw data version | 内部错误 | 上报 issue |
| 0x80000329 | Invalid raw data len | 内部错误 | 上报issue | | 0x80000329 | Invalid raw data len | 内部错误 | 上报 issue |
| 0x8000032A | Invalid raw data content | 内部错误 | 上报issue | | 0x8000032A | Invalid raw data content | 内部错误 | 上报 issue |
| 0x8000032C | Object is creating | 内部错误 | 上报issue | | 0x8000032C | Object is creating | 内部错误 | 上报 issue |
| 0x8000032D | Object is dropping | 内部错误 | 上报issue | | 0x8000032D | Object is dropping | 内部错误 | 上报 issue |
| 0x80000330 | Dnode already exists | 内部错误 | 上报issue | | 0x80000330 | Dnode already exists | 内部错误 | 上报 issue |
| 0x80000331 | Dnode does not exist | 内部错误 | 上报issue | | 0x80000331 | Dnode does not exist | 内部错误 | 上报 issue |
| 0x80000332 | Vgroup does not exist | 内部错误 | 上报issue | | 0x80000332 | Vgroup does not exist | 内部错误 | 上报 issue |
| 0x80000333 | Cannot drop mnode which is leader | 操作节点为leader | 确认操作是否正确 | | 0x80000333 | Cannot drop mnode which is leader | 操作节点为 leader | 确认操作是否正确 |
| 0x80000334 | Out of dnodes | dnode节点数量不够 | 增加dnode节点 | | 0x80000334 | Out of dnodes | dnode 节点数量不够 | 增加dnode 节点 |
| 0x80000335 | Cluster cfg inconsistent | 配置不一致 | 检查dnode节点与mnode节点配置是否一致。检查方式1.节点启动时,在日志中输出 2.使用show variables | | 0x80000335 | Cluster cfg inconsistent | 配置不一致 | 检查dnode 节点与 mnode 节点配置是否一致。检查方式1.节点启动时,在日志中输出 2.使用 show variables |
| 0x8000033B | Cluster id not match | 节点配置数据不一致 | 检查各节点data/dnode/dnodes.json文件中的clusterid | | 0x8000033B | Cluster id not match | 节点配置数据不一致 | 检查各节点 data/dnode/dnodes.json 文件中的 clusterid |
| 0x80000340 | Account already exists | (仅企业版)内部错误 | 上报issue | | 0x80000340 | Account already exists | (仅企业版)内部错误 | 上报 issue |
| 0x80000342 | Invalid account options | (仅企业版)该操作不支持 | 确认操作是否正确 | | 0x80000342 | Invalid account options | (仅企业版)该操作不支持 | 确认操作是否正确 |
| 0x80000344 | Invalid account | 账户不存在 | 确认账户是否正确 | | 0x80000344 | Invalid account | 账户不存在 | 确认账户是否正确 |
| 0x80000350 | User already exists | Create user, 重复创建 | 确认操作是否正确 | | 0x80000350 | User already exists | Create user, 重复创建 | 确认操作是否正确 |
| 0x80000351 | Invalid user | 用户不存在 | 确认操作是否正确 | | 0x80000351 | Invalid user | 用户不存在 | 确认操作是否正确 |
| 0x80000352 | Invalid user format | 格式不正确 | 确认操作是否正确 | | 0x80000352 | Invalid user format | 格式不正确 | 确认操作是否正确 |
| 0x80000353 | Invalid password format | 密码长度必须为 8 到 16 位,并且至少包含大写字母、小写字母、数字、特殊字符中的三类 | 确认密码字符串的格式 | | 0x80000353 | Invalid password format | 密码长度必须为 8 到 16 位,并且至少包含大写字母、小写字母、数字、特殊字符中的三类 | 确认密码字符串的格式 |
| 0x80000354 | Can not get user from conn | 内部错误 | 上报issue | | 0x80000354 | Can not get user from conn | 内部错误 | 上报 issue |
| 0x80000355 | Too many users | (仅企业版)用户数量超限 | 调整配置 | | 0x80000355 | Too many users | (仅企业版)用户数量超限 | 调整配置 |
| 0x80000357 | Authentication failure | 密码不正确 | 确认操作是否正确 | | 0x80000357 | Authentication failure | 密码不正确 | 确认操作是否正确 |
| 0x80000358 | User not available | 用户不存在 | 确认操作是否正确 | | 0x80000358 | User not available | 用户不存在 | 确认操作是否正确 |
| 0x80000360 | STable already exists | 内部错误 | 上报issue | | 0x80000360 | STable already exists | 内部错误 | 上报 issue |
| 0x80000361 | STable not exist | 内部错误 | 上报issue | | 0x80000361 | STable not exist | 内部错误 | 上报 issue |
| 0x80000364 | Too many tags | tag数量太多 | 不能修改,代码级别限制 | | 0x80000364 | Too many tags | tag 数量太多 | 不能修改,代码级别限制 |
| 0x80000365 | Too many columns | columns数量太多 | 不能修改,代码级别限制 | | 0x80000365 | Too many columns | columns 数量太多 | 不能修改,代码级别限制 |
| 0x80000369 | Tag already exists | tag已存在 | 确认操作是否正确 | | 0x80000369 | Tag already exists | tag 已存在 | 确认操作是否正确 |
| 0x8000036A | Tag does not exist | tag不存在 | 确认操作是否正确 | | 0x8000036A | Tag does not exist | tag 不存在 | 确认操作是否正确 |
| 0x8000036B | Column already exists | Column 已存在 | 确认操作是否正确 | | 0x8000036B | Column already exists | Column 已存在 | 确认操作是否正确 |
| 0x8000036C | Column does not exist | Column 不存在 | 确认操作是否正确 | | 0x8000036C | Column does not exist | Column 不存在 | 确认操作是否正确 |
| 0x8000036E | Invalid stable options | 内部错误 | 上报issue | | 0x8000036E | Invalid stable options | 内部错误 | 上报 issue |
| 0x8000036F | Invalid row bytes | 内部错误 | 上报issue | | 0x8000036F | Invalid row bytes | 内部错误 | 上报 issue |
| 0x80000370 | Invalid func name | name长度错误 | 确认操作是否正确 | | 0x80000370 | Invalid func name | name 长度错误 | 确认操作是否正确 |
| 0x80000372 | Invalid func code | code长度错误 | 确认操作是否正确 | | 0x80000372 | Invalid func code | code 长度错误 | 确认操作是否正确 |
| 0x80000373 | Func already exists | Func已存在 | 确认操作是否正确 | | 0x80000373 | Func already exists | Func 已存在 | 确认操作是否正确 |
| 0x80000374 | Func not exists | Func不存在 | 确认操作是否正确 | | 0x80000374 | Func not exists | Func 不存在 | 确认操作是否正确 |
| 0x80000375 | Invalid func bufSize | bufSize长度错误或者超过限制 | 确认操作是否正确 | | 0x80000375 | Invalid func bufSize | bufSize 长度错误,或者超过限制 | 确认操作是否正确 |
| 0x80000378 | Invalid func comment | 长度错误,或者超过限制 | 确认操作是否正确 | | 0x80000378 | Invalid func comment | 长度错误,或者超过限制 | 确认操作是否正确 |
| 0x80000379 | Invalid func retrieve msg | 长度错误,或者超过限制 | 确认操作是否正确 | | 0x80000379 | Invalid func retrieve msg | 长度错误,或者超过限制 | 确认操作是否正确 |
| 0x80000380 | Database not specified or available | 未指定database | 使用 use database; | | 0x80000380 | Database not specified or available | 未指定 database | 使用 use database; |
| 0x80000381 | Database already exists | Database已存在 | 确认操作是否正确 | | 0x80000381 | Database already exists | Database 已存在 | 确认操作是否正确 |
| 0x80000382 | Invalid database options | 内部错误 | 上报issue | | 0x80000382 | Invalid database options | 内部错误 | 上报 issue |
| 0x80000383 | Invalid database name | 长度错误 | 确认操作是否正确 | | 0x80000383 | Invalid database name | 长度错误 | 确认操作是否正确 |
| 0x80000385 | Too many databases for account | 数量超限 | 调整配置 | | 0x80000385 | Too many databases for account | 数量超限 | 调整配置 |
| 0x80000386 | Database in dropping status | 数据库正在被删除 | 重试长时间保持该状态上报issue | | 0x80000386 | Database in dropping status | 数据库正在被删除 | 重试,长时间保持该状态上报 issue |
| 0x80000388 | Database not exist | 不存在 | 确认操作是否正确 | | 0x80000388 | Database not exist | 不存在 | 确认操作是否正确 |
| 0x80000389 | Invalid database account | 内部错误 | 上报issue | | 0x80000389 | Invalid database account | 内部错误 | 上报 issue |
| 0x8000038A | Database options not changed | 操作无变化 | 确认操作是否正确 | | 0x8000038A | Database options not changed | 操作无变化 | 确认操作是否正确 |
| 0x8000038B | Index not exist | 不存在 | 确认操作是否正确 | | 0x8000038B | Index not exist | 不存在 | 确认操作是否正确 |
| 0x80000396 | Database in creating status | 数据库正在被创建 | 重试 | | 0x80000396 | Database in creating status | 数据库正在被创建 | 重试 |
| 0x8000039A | Invalid system table name | 内部错误 | 上报issue | | 0x8000039A | Invalid system table name | 内部错误 | 上报 issue |
| 0x800003A0 | Mnode already exists | 已存在 | 确认操作是否正确 | | 0x800003A0 | Mnode already exists | 已存在 | 确认操作是否正确 |
| 0x800003A1 | Mnode not there | 已存在 | 确认操作是否正确 | | 0x800003A1 | Mnode not there | 已存在 | 确认操作是否正确 |
| 0x800003A2 | Qnode already exists | 已存在 | 确认操作是否正确 | | 0x800003A2 | Qnode already exists | 已存在 | 确认操作是否正确 |
| 0x800003A3 | Qnode not there | 不存在 | 确认操作是否正确 | | 0x800003A3 | Qnode not there | 不存在 | 确认操作是否正确 |
| 0x800003A4 | Snode already exists | 已存在 | 确认操作是否正确 | | 0x800003A4 | Snode already exists | 已存在 | 确认操作是否正确 |
| 0x800003A5 | Snode not there | 不存在 | 确认操作是否正确 | | 0x800003A5 | Snode not there | 不存在 | 确认操作是否正确 |
| 0x800003A8 | The replica of mnode cannot less than 1 | mnode少于1 | 操作不允许 | | 0x800003A8 | The replica of mnode cannot less than 1 | mnode 少于 1 | 操作不允许 |
| 0x800003A9 | The replica of mnode cannot exceed 3 | mnode多于1 | 操作不允许 | | 0x800003A9 | The replica of mnode cannot exceed 3 | mnode 多于 1 | 操作不允许 |
| 0x800003B1 | No enough memory in dnode | 内存不足 | 调整配置 | | 0x800003B1 | No enough memory in dnode | 内存不足 | 调整配置 |
| 0x800003B3 | Invalid dnode end point | ep配置不正确 | 确认操作是否正确 | | 0x800003B3 | Invalid dnode end point | ep 配置不正确 | 确认操作是否正确 |
| 0x800003B6 | Offline dnode exists | Dnode offline | 检查节点状态 | | 0x800003B6 | Offline dnode exists | Dnode offline | 检查节点状态 |
| 0x800003B7 | Invalid vgroup replica | 内部错误 | 上报issue | | 0x800003B7 | Invalid vgroup replica | 内部错误 | 上报 issue |
| 0x800003B8 | Dnode in creating status | 正在创建 | 重试 | | 0x800003B8 | Dnode in creating status | 正在创建 | 重试 |
| 0x800003B9 | Dnode in dropping status | 正在删除 | 重试 | | 0x800003B9 | Dnode in dropping status | 正在删除 | 重试 |
| 0x800003C2 | Invalid stable alter options | 内部错误 | 上报issue | | 0x800003C2 | Invalid stable alter options | 内部错误 | 上报 issue |
| 0x800003C3 | STable option unchanged | 操作无变化 | 确认操作是否正确 | | 0x800003C3 | STable option unchanged | 操作无变化 | 确认操作是否正确 |
| 0x800003C4 | Field used by topic | 被使用 | 确认操作是否正确 | | 0x800003C4 | Field used by topic | 被使用 | 确认操作是否正确 |
| 0x800003C5 | Database is single stable mode | 内部错误 | 上报issue | | 0x800003C5 | Database is single stable mode | 内部错误 | 上报 issue |
| 0x800003C6 | Invalid schema version while alter stb | 内部错误 | 上报issue | | 0x800003C6 | Invalid schema version while alter stb | 内部错误 | 上报 issue |
| 0x800003C7 | Invalid stable uid while alter stb | 内部错误 | 上报issue | | 0x800003C7 | Invalid stable uid while alter stb | 内部错误 | 上报 issue |
| 0x800003C8 | Field used by tsma | 被使用 | 确认操作是否正确 | | 0x800003C8 | Field used by tsma | 被使用 | 确认操作是否正确 |
| 0x800003D1 | Transaction not exists | 不存在 | 确认操作是否正确 | | 0x800003D1 | Transaction not exists | 不存在 | 确认操作是否正确 |
| 0x800003D2 | Invalid stage to kill | 事务处在不能被kill的节点比如 在commit阶段 | 等待事务结束如长时间不结束上报issue | | 0x800003D2 | Invalid stage to kill | 事务处在不能被 kill 的节点(比如 在 commit 阶段) | 等待事务结束,如长时间不结束,上报 issue |
| 0x800003D3 | Conflict transaction not completed | 事务冲突,不能执行该操作 | 使用show transactions命令查看冲突的事务等待冲突事务结束如长时间不结束上报issue | | 0x800003D3 | Conflict transaction not completed | 事务冲突,不能执行该操作 | 使用 show transactions 命令查看冲突的事务,等待冲突事务结束,如长时间不结束,上报 issue |
| 0x800003D4 | Transaction commitlog is null | 内部错误 | 上报issue | | 0x800003D4 | Transaction commitlog is null | 内部错误 | 上报 issue |
| 0x800003D5 | Unable to establish connection While execute transaction and will continue in the background | 网络错误 | 检查网络是否正常 | | 0x800003D5 | Unable to establish connection While execute transaction and will continue in the background | 网络错误 | 检查网络是否正常 |
| 0x800003D6 | Last Transaction not finished | 内部错误 | 上报issue | | 0x800003D6 | Last Transaction not finished | 内部错误 | 上报 issue |
| 0x800003D7 | Sync timeout While execute transaction and will continue in the background | 内部错误 | 上报issue | | 0x800003D7 | Sync timeout While execute transaction and will continue in the background | 内部错误 | 上报 issue |
| 0x800003DF | Unknown transaction error | 内部错误 | 上报issue | | 0x800003DF | Unknown transaction error | 内部错误 | 上报 issue |
| 0x800003E0 | Topic already exists | 已存在 | 确认操作是否正确 | | 0x800003E0 | Topic already exists | 已存在 | 确认操作是否正确 |
| 0x800003E1 | Topic not exist | 不存在 | 确认操作是否正确 | | 0x800003E1 | Topic not exist | 不存在 | 确认操作是否正确 |
| 0x800003E3 | Invalid topic | 内部错误 | 上报issue | | 0x800003E3 | Invalid topic | 内部错误 | 上报 issue |
| 0x800003E4 | Topic with invalid query | 内部错误 | 上报issue | | 0x800003E4 | Topic with invalid query | 内部错误 | 上报 issue |
| 0x800003E5 | Topic with invalid option | 内部错误 | 上报issue | | 0x800003E5 | Topic with invalid option | 内部错误 | 上报 issue |
| 0x800003E6 | Consumer not exist | 不存在 | 确认操作是否正确 | | 0x800003E6 | Consumer not exist | 不存在 | 确认操作是否正确 |
| 0x800003E7 | Topic unchanged | 无变化 | 确认操作是否正确 | | 0x800003E7 | Topic unchanged | 无变化 | 确认操作是否正确 |
| 0x800003E8 | Subcribe not exist | 不存在 | 确认操作是否正确 | | 0x800003E8 | Subcribe not exist | 不存在 | 确认操作是否正确 |
| 0x800003E9 | Offset not exist | 不存在 | 确认操作是否正确 | | 0x800003E9 | Offset not exist | 不存在 | 确认操作是否正确 |
| 0x800003EA | Consumer not ready | 内部错误 | 上报issue | | 0x800003EA | Consumer not ready | 内部错误 | 上报 issue |
| 0x800003EB | Topic subscribed cannot be dropped | 被使用 | 确认操作是否正确 | | 0x800003EB | Topic subscribed cannot be dropped | 被使用 | 确认操作是否正确 |
| 0x800003EC | Consumer group being used by some consumer | 被使用 | 确认操作是否正确 | | 0x800003EC | Consumer group being used by some consumer | 被使用 | 确认操作是否正确 |
| 0x800003ED | Topic must be dropped first | 被使用 | 确认操作是否正确 | | 0x800003ED | Topic must be dropped first | 被使用 | 确认操作是否正确 |
@ -217,14 +217,14 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x800003EF | Topic being rebalanced | 操作中 | 重试 | | 0x800003EF | Topic being rebalanced | 操作中 | 重试 |
| 0x800003F0 | Stream already exists | 已存在 | 确认操作是否正确 | | 0x800003F0 | Stream already exists | 已存在 | 确认操作是否正确 |
| 0x800003F1 | Stream not exist | 不存在 | 确认操作是否正确 | | 0x800003F1 | Stream not exist | 不存在 | 确认操作是否正确 |
| 0x800003F2 | Invalid stream option | 内部错误 | 上报issue | | 0x800003F2 | Invalid stream option | 内部错误 | 上报 issue |
| 0x800003F3 | Stream must be dropped first | 被使用 | 确认操作是否正确 | | 0x800003F3 | Stream must be dropped first | 被使用 | 确认操作是否正确 |
| 0x800003F5 | Stream temporarily does not support source db having replica > 1 | 超过限制 | 操作不被允许 | | 0x800003F5 | Stream temporarily does not support source db having replica > 1 | 超过限制 | 操作不被允许 |
| 0x800003F6 | Too many streams | 超过限制 | 不能修改,代码级别限制 | | 0x800003F6 | Too many streams | 超过限制 | 不能修改,代码级别限制 |
| 0x800003F7 | Cannot write the same stable as other stream | 内部错误 | 上报issue | | 0x800003F7 | Cannot write the same stable as other stream | 内部错误 | 上报 issue |
| 0x80000480 | index already exists | 已存在 | 确认操作是否正确 | | 0x80000480 | index already exists | 已存在 | 确认操作是否正确 |
| 0x80000481 | index not exist | 不存在 | 确认操作是否正确 | | 0x80000481 | index not exist | 不存在 | 确认操作是否正确 |
| 0x80000482 | Invalid sma index option | 内部错误 | 上报issue | | 0x80000482 | Invalid sma index option | 内部错误 | 上报 issue |
| 0x80000483 | index already exists | 已存在 | 确认操作是否正确 | | 0x80000483 | index already exists | 已存在 | 确认操作是否正确 |
| 0x80000484 | index not exist | 不存在 | 确认操作是否正确 | | 0x80000484 | index not exist | 不存在 | 确认操作是否正确 |
@ -235,13 +235,13 @@ description: TDengine 服务端的错误码列表和详细说明
| ---------- | ---------------------- | ---------------------------- | ------------------ | | ---------- | ---------------------- | ---------------------------- | ------------------ |
| 0x80000408 | Dnode is offline | 不在线 | 检查节点状态 | | 0x80000408 | Dnode is offline | 不在线 | 检查节点状态 |
| 0x80000409 | Mnode already deployed | 已部署 | 确认操作是否正确 | | 0x80000409 | Mnode already deployed | 已部署 | 确认操作是否正确 |
| 0x8000040A | Mnode not found | 内部错误 | 上报issue | | 0x8000040A | Mnode not found | 内部错误 | 上报 issue |
| 0x8000040B | Mnode not deployed | 内部错误 | 上报issue | | 0x8000040B | Mnode not deployed | 内部错误 | 上报 issue |
| 0x8000040C | Qnode already deployed | 已部署 | 确认操作是否正确 | | 0x8000040C | Qnode already deployed | 已部署 | 确认操作是否正确 |
| 0x8000040D | Qnode not found | 内部错误 | 上报issue | | 0x8000040D | Qnode not found | 内部错误 | 上报 issue |
| 0x8000040E | Qnode not deployed | 内部错误 | 上报issue | | 0x8000040E | Qnode not deployed | 内部错误 | 上报 issue |
| 0x8000040F | Snode already deployed | 已部署 | 确认操作是否正确 | | 0x8000040F | Snode already deployed | 已部署 | 确认操作是否正确 |
| 0x80000410 | Snode not found | 内部错误 | 上报issue | | 0x80000410 | Snode not found | 内部错误 | 上报 issue |
| 0x80000411 | Snode not deployed | 已部署 | 确认操作是否正确 | | 0x80000411 | Snode not deployed | 已部署 | 确认操作是否正确 |
@ -286,18 +286,18 @@ description: TDengine 服务端的错误码列表和详细说明
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | ------------------------------------ | ------------------------------------------ | ------------------------------------------------------ | | ---------- | ------------------------------------ | ------------------------------------------ | ------------------------------------------------------ |
| 0x80000700 | Invalid query handle | 当前查询句柄不存在 | 保留现场和日志github上报issue | | 0x80000700 | Invalid query handle | 当前查询句柄不存在 | 保留现场和日志github 上报 issue |
| 0x80000709 | Multiple retrieval of this query | 当前子查询已经正在进行中 | 保留现场和日志github上报issue | | 0x80000709 | Multiple retrieval of this query | 当前子查询已经正在进行中 | 保留现场和日志github 上报 issue |
| 0x8000070A | Too many groups/time window in query | 当前查询结果中的分组或窗口个数超过限制个数 | 调整查询语句,确保查询条件中的分组和窗口个数不超过上限 | | 0x8000070A | Too many groups/time window in query | 当前查询结果中的分组或窗口个数超过限制个数 | 调整查询语句,确保查询条件中的分组和窗口个数不超过上限 |
| 0x8000070D | System error | 底层系统API返回错误 | 保留现场和日志github上报issue | | 0x8000070D | System error | 底层系统 API 返回错误 | 保留现场和日志github 上报 issue |
| 0x80000720 | Scheduler not exist | 当前子查询对应的客户端信息不存在 | 保留现场和日志github上报issue | | 0x80000720 | Scheduler not exist | 当前子查询对应的客户端信息不存在 | 保留现场和日志github 上报 issue |
| 0x80000721 | Task not exist | 子查询不存在 | 保留现场和日志github上报issue | | 0x80000721 | Task not exist | 子查询不存在 | 保留现场和日志github 上报 issue |
| 0x80000722 | Task already exist | 子查询已经存在 | 保留现场和日志github上报issue | | 0x80000722 | Task already exist | 子查询已经存在 | 保留现场和日志github 上报 issue |
| 0x80000729 | Task message error | 查询消息错误 | 保留现场和日志github上报issue | | 0x80000729 | Task message error | 查询消息错误 | 保留现场和日志github 上报 issue |
| 0x8000072B | Task status error | 子查询状态错误 | 保留现场和日志github上报issue | | 0x8000072B | Task status error | 子查询状态错误 | 保留现场和日志github 上报 issue |
| 0x8000072F | Job not exist | 查询JOB已经不存在 | 保留现场和日志github上报issue | | 0x8000072F | Job not exist | 查询 JOB 已经不存在 | 保留现场和日志github 上报 issue |
| 0x80000739 | Query memory upper limit is reached | 单个查询达到内存使用上限 | 设置合理的内存上限或调整 SQL 语句 | | 0x80000739 | Query memory upper limit is reached | 单个查询达到内存使用上限 | 设置合理的内存上限或调整 SQL 语句 |
| 0x8000073A | Query memory exhausted | dnode查询内存到达使用上限 | 设置合理的内存上限或调整并发查询量或增大系统内存 | | 0x8000073A | Query memory exhausted | dnode 查询内存到达使用上限 | 设置合理的内存上限或调整并发查询量或增大系统内存 |
| 0x8000073B | Timeout for long time no fetch | 查询被长时间中断未恢复 | 调整应用实现尽快 fetch 数据 | | 0x8000073B | Timeout for long time no fetch | 查询被长时间中断未恢复 | 调整应用实现尽快 fetch 数据 |
## grant ## grant
@ -329,9 +329,9 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x80000911 | Sync not ready to propose | 场景1恢复未完成 | 检查集群状态例如show vgroups。查看服务端日志以及服务端节点之间的网络状况。 | | 0x80000911 | Sync not ready to propose | 场景1恢复未完成 | 检查集群状态例如show vgroups。查看服务端日志以及服务端节点之间的网络状况。 |
| 0x80000914 | Sync leader is restoring | 场景1发生了切主 选主后,日志重演中 | 检查集群状态例如show vgroups。查看服务端日志观察恢复进度。 | | 0x80000914 | Sync leader is restoring | 场景1发生了切主 选主后,日志重演中 | 检查集群状态例如show vgroups。查看服务端日志观察恢复进度。 |
| 0x80000915 | Sync invalid snapshot msg | 快照复制消息错误 | 服务端内部错误 | | 0x80000915 | Sync invalid snapshot msg | 快照复制消息错误 | 服务端内部错误 |
| 0x80000916 | Sync buffer is full | 场景1客户端请求并发数特别大超过了服务端处理能力或者因为网络和CPU资源严重不足或者网络连接问题等。 | 检查集群状态系统资源使用率例如磁盘IO、CPU、网络通信等以及节点之间网络连接状况。 | | 0x80000916 | Sync buffer is full | 场景1客户端请求并发数特别大超过了服务端处理能力或者因为网络和CPU资源严重不足或者网络连接问题等。 | 检查集群状态,系统资源使用率(例如磁盘 IO、CPU、网络通信等以及节点之间网络连接状况。 |
| 0x80000917 | Sync write stall | 场景1状态机执行被阻塞例如因系统繁忙磁盘IO资源严重不足或落盘失败等 | 检查集群状态系统资源使用率例如磁盘IO和CPU等以及是否发生了落盘失败等。 | | 0x80000917 | Sync write stall | 场景1状态机执行被阻塞例如因系统繁忙磁盘IO资源严重不足或落盘失败等 | 检查集群状态,系统资源使用率(例如磁盘 IO CPU 等),以及是否发生了落盘失败等。 |
| 0x80000918 | Sync negotiation win is full | 场景1客户端请求并发数特别大超过了服务端处理能力或者因为网络和CPU资源严重不足或者网络连接问题等。 | 检查集群状态系统资源使用率例如磁盘IO、CPU、网络通信等以及节点之间网络连接状况。 | | 0x80000918 | Sync negotiation win is full | 场景1客户端请求并发数特别大超过了服务端处理能力或者因为网络和CPU资源严重不足或者网络连接问题等。 | 检查集群状态,系统资源使用率(例如磁盘 IO、CPU、网络通信等以及节点之间网络连接状况。 |
| 0x800009FF | Sync internal error | 其它内部错误 | 检查集群状态例如show vgroups | | 0x800009FF | Sync internal error | 其它内部错误 | 检查集群状态例如show vgroups |
@ -341,17 +341,17 @@ description: TDengine 服务端的错误码列表和详细说明
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | ------------------------- | --------------------------------------------------------------- | -------------------------------------- | | ---------- | ------------------------- | --------------------------------------------------------------- | -------------------------------------- |
| 0x80000A0C | TQ table schema not found | 消费数据时表不存在 | 内部错误,不透传给用户 | | 0x80000A0C | TQ table schema not found | 消费数据时表不存在 | 内部错误,不透传给用户 |
| 0x80000A0D | TQ no committed offset | 消费时设置offset reset = none并且server端没有之前消费的offset | 设置offset reset为earliest 或者 latest | | 0x80000A0D | TQ no committed offset | 消费时设置 offset reset = none并且 server 端没有之前消费的 offset | 设置 offset reset earliest 或者 latest |
## wal ## wal
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | --------------------- | -------------------------------- | ------------------ | | ---------- | --------------------- | -------------------------------- | ------------------ |
| 0x80001001 | WAL file is corrupted | WAL文件损坏 | 服务端内部错误 | | 0x80001001 | WAL file is corrupted | WAL 文件损坏 | 服务端内部错误 |
| 0x80001003 | WAL invalid version | 请求日志版本,超过了当前日志范围 | 服务端内部错误 | | 0x80001003 | WAL invalid version | 请求日志版本,超过了当前日志范围 | 服务端内部错误 |
| 0x80001005 | WAL log not exist | 请求日志记录,不存在 | 服务端内部错误 | | 0x80001005 | WAL log not exist | 请求日志记录,不存在 | 服务端内部错误 |
| 0x80001006 | WAL checksum mismatch | 场景发生了WAL文件损坏 | 服务端内部错误 | | 0x80001006 | WAL checksum mismatch | 场景:发生了 WAL 文件损坏 | 服务端内部错误 |
| 0x80001007 | WAL log incomplete | 日志文件发生了丢失或损坏 | 服务端内部错误 | | 0x80001007 | WAL log incomplete | 日志文件发生了丢失或损坏 | 服务端内部错误 |
## tfs ## tfs
@ -371,16 +371,16 @@ description: TDengine 服务端的错误码列表和详细说明
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | -------------------------------- | ---------------------------- | -------------------------------- | | ---------- | -------------------------------- | ---------------------------- | -------------------------------- |
| 0x80002400 | catalog internal error | catalog内部错误 | 保留现场和日志github上报issue | | 0x80002400 | catalog internal error | catalog 内部错误 | 保留现场和日志github 上报 issue |
| 0x80002401 | catalog invalid input parameters | catalog输入参数错误 | 保留现场和日志github上报issue | | 0x80002401 | catalog invalid input parameters | catalog 输入参数错误 | 保留现场和日志github 上报 issue |
| 0x80002402 | catalog is not ready | catalog未初始化完成 | 保留现场和日志github上报issue | | 0x80002402 | catalog is not ready | catalog 未初始化完成 | 保留现场和日志github 上报 issue |
| 0x80002403 | catalog system error | catalog系统错误 | 保留现场和日志github上报issue | | 0x80002403 | catalog system error | catalog 系统错误 | 保留现场和日志github 上报 issue |
| 0x80002404 | Database is dropped | db缓存被删除 | 保留现场和日志github上报issue | | 0x80002404 | Database is dropped | db 缓存被删除 | 保留现场和日志github 上报 issue |
| 0x80002405 | catalog is out of service | catalog模块已经退出 | 保留现场和日志github上报issue | | 0x80002405 | catalog is out of service | catalog 模块已经退出 | 保留现场和日志github 上报 issue |
| 0x80002550 | Invalid msg order | 消息顺序错误 | 保留现场和日志github上报issue | | 0x80002550 | Invalid msg order | 消息顺序错误 | 保留现场和日志github 上报 issue |
| 0x80002501 | Job status error | 任务状态错误 | 保留现场和日志github上报issue | | 0x80002501 | Job status error | 任务状态错误 | 保留现场和日志github 上报 issue |
| 0x80002502 | scheduler internal error | scheduler内部错误 | 保留现场和日志github上报issue | | 0x80002502 | scheduler internal error | scheduler 内部错误 | 保留现场和日志github 上报 issue |
| 0x80002504 | Task timeout | 子任务超时 | 保留现场和日志github上报issue | | 0x80002504 | Task timeout | 子任务超时 | 保留现场和日志github 上报 issue |
| 0x80002505 | Job is dropping | 任务正在或已经被取消 | 检查是否有手动或应用中断当前任务 | | 0x80002505 | Job is dropping | 任务正在或已经被取消 | 检查是否有手动或应用中断当前任务 |
@ -389,133 +389,133 @@ description: TDengine 服务端的错误码列表和详细说明
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------- | ------------------------------------- | | ---------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------- | ------------------------------------- |
| 0x80002600 | syntax error near | SQL语法错误 | 检查并修正SQL语句 | | 0x80002600 | syntax error near | SQL 语法错误 | 检查并修正 SQL 语句 |
| 0x80002601 | Incomplete SQL statement | 不完整的SQL语句 | 检查并修正SQL语句 | | 0x80002601 | Incomplete SQL statement | 不完整的 SQL 语句 | 检查并修正 SQL 语句 |
| 0x80002602 | Invalid column name | 不合法或不存在的列名 | 检查并修正SQL语句 | | 0x80002602 | Invalid column name | 不合法或不存在的列名 | 检查并修正 SQL 语句 |
| 0x80002603 | Table does not exist | 表不存在 | 检查并确认SQL语句中的表是否存在 | | 0x80002603 | Table does not exist | 表不存在 | 检查并确认SQL语句中的表是否存在 |
| 0x80002604 | Column ambiguously defined | 列名(别名)重复定义 | 检查并修正SQL语句 | | 0x80002604 | Column ambiguously defined | 列名(别名)重复定义 | 检查并修正 SQL 语句 |
| 0x80002605 | Invalid value type | 常量值非法 | 检查并修正SQL语句 | | 0x80002605 | Invalid value type | 常量值非法 | 检查并修正 SQL 语句 |
| 0x80002608 | There mustn't be aggregation | 聚合函数出现在非法子句中 | 检查并修正SQL语句 | | 0x80002608 | There mustn't be aggregation | 聚合函数出现在非法子句中 | 检查并修正 SQL 语句 |
| 0x80002609 | ORDER BY item must be the number of a SELECT-list expression | Order by指定的位置不合法 | 检查并修正SQL语句 | | 0x80002609 | ORDER BY item must be the number of a SELECT-list expression | Order by 指定的位置不合法 | 检查并修正 SQL 语句 |
| 0x8000260A | Not a GROUP BY expression | 非法group by语句 | 检查并修正SQL语句 | | 0x8000260A | Not a GROUP BY expression | 非法 group by 语句 | 检查并修正 SQL 语句 |
| 0x8000260B | Not SELECTed expression | 非法表达式 | 检查并修正SQL语句 | | 0x8000260B | Not SELECTed expression | 非法表达式 | 检查并修正 SQL 语句 |
| 0x8000260C | Not a single-group group function | 非法使用列与函数 | 检查并修正SQL语句 | | 0x8000260C | Not a single-group group function | 非法使用列与函数 | 检查并修正 SQL 语句 |
| 0x8000260D | Tags number not matched | tag列个数不匹配 | 检查并修正SQL语句 | | 0x8000260D | Tags number not matched | tag 列个数不匹配 | 检查并修正 SQL 语句 |
| 0x8000260E | Invalid tag name | 无效或不存在的tag名 | 检查并修正SQL语句 | | 0x8000260E | Invalid tag name | 无效或不存在的 tag 名 | 检查并修正 SQL 语句 |
| 0x80002610 | Value is too long | 值长度超出限制 | 检查并修正SQL语句或API参数 | | 0x80002610 | Value is too long | 值长度超出限制 | 检查并修正 SQL 语句或 API 参数 |
| 0x80002611 | Password too short or empty | 密码为空或少于 8 个字符 | 使用合法的密码 | | 0x80002611 | Password too short or empty | 密码为空或少于 8 个字符 | 使用合法的密码 |
| 0x80002612 | Port should be an integer that is less than 65535 and greater than 0 | 端口号非法 | 检查并修正端口号 | | 0x80002612 | Port should be an integer that is less than 65535 and greater than 0 | 端口号非法 | 检查并修正端口号 |
| 0x80002613 | Endpoint should be in the format of 'fqdn:port' | 地址格式错误 | 检查并修正地址信息 | | 0x80002613 | Endpoint should be in the format of 'fqdn:port' | 地址格式错误 | 检查并修正地址信息 |
| 0x80002614 | This statement is no longer supported | 功能已经废弃 | 参考功能文档说明 | | 0x80002614 | This statement is no longer supported | 功能已经废弃 | 参考功能文档说明 |
| 0x80002615 | Interval too small | interval值超过允许的最小值 | 更改INTERVAL值 | | 0x80002615 | Interval too small | interval 值超过允许的最小值 | 更改 INTERVAL 值 |
| 0x80002616 | Database not specified | 未指定数据库 | 指定当前操作的数据库 | | 0x80002616 | Database not specified | 未指定数据库 | 指定当前操作的数据库 |
| 0x80002617 | Invalid identifier name | ID非法或长度不合法 | 检查语句中相关的库、表、列、TAG等名称 | | 0x80002617 | Invalid identifier name | ID 非法或长度不合法 | 检查语句中相关的库、表、列、TAG 等名称 |
| 0x80002618 | Corresponding super table not in this db | 超级表不存在 | 检查库中是否存在对应的超级表 | | 0x80002618 | Corresponding super table not in this db | 超级表不存在 | 检查库中是否存在对应的超级表 |
| 0x80002619 | Invalid database option | 数据库选项值非法 | 检查并修正数据库选项值 | | 0x80002619 | Invalid database option | 数据库选项值非法 | 检查并修正数据库选项值 |
| 0x8000261A | Invalid table option | 表选项值非法 | 检查并修正数据表选项值 | | 0x8000261A | Invalid table option | 表选项值非法 | 检查并修正数据表选项值 |
| 0x80002624 | GROUP BY and WINDOW-clause can't be used together | Group by和窗口不能同时使用 | 检查并修正SQL语句 | | 0x80002624 | GROUP BY and WINDOW-clause can't be used together | Group by 和窗口不能同时使用 | 检查并修正 SQL 语句 |
| 0x80002627 | Aggregate functions do not support nesting | 函数不支持嵌套使用 | 检查并修正SQL语句 | | 0x80002627 | Aggregate functions do not support nesting | 函数不支持嵌套使用 | 检查并修正 SQL 语句 |
| 0x80002628 | Only support STATE_WINDOW on integer/bool/varchar column | 不支持的STATE_WINDOW数据类型 | 检查并修正SQL语句 | | 0x80002628 | Only support STATE_WINDOW on integer/bool/varchar column | 不支持的 STATE_WINDOW 数据类型 | 检查并修正 SQL 语句 |
| 0x80002629 | Not support STATE_WINDOW on tag column | 不支持TAG列的STATE_WINDOW | 检查并修正SQL语句 | | 0x80002629 | Not support STATE_WINDOW on tag column | 不支持 TAG 列的 STATE_WINDOW | 检查并修正 SQL 语句 |
| 0x8000262A | STATE_WINDOW not support for super table query | 不支持超级表的STATE_WINDOW | 检查并修正SQL语句 | | 0x8000262A | STATE_WINDOW not support for super table query | 不支持超级表的 STATE_WINDOW | 检查并修正 SQL 语句 |
| 0x8000262B | SESSION gap should be fixed time window, and greater than 0 | SESSION窗口值非法 | 检查并修正SQL语句 | | 0x8000262B | SESSION gap should be fixed time window, and greater than 0 | SESSION 窗口值非法 | 检查并修正 SQL 语句 |
| 0x8000262C | Only support SESSION on primary timestamp column | SESSION窗口列非法 | 检查并修正SQL语句 | | 0x8000262C | Only support SESSION on primary timestamp column | SESSION 窗口列非法 | 检查并修正 SQL 语句 |
| 0x8000262D | Interval offset cannot be negative | INTERVAL offset值非法 | 检查并修正SQL语句 | | 0x8000262D | Interval offset cannot be negative | INTERVAL offset 值非法 | 检查并修正 SQL 语句 |
| 0x8000262E | Cannot use 'year' as offset when interval is 'month' | INTERVAL offset单位非法 | 检查并修正SQL语句 | | 0x8000262E | Cannot use 'year' as offset when interval is 'month' | INTERVAL offset 单位非法 | 检查并修正 SQL 语句 |
| 0x8000262F | Interval offset should be shorter than interval | INTERVAL offset值非法 | 检查并修正SQL语句 | | 0x8000262F | Interval offset should be shorter than interval | INTERVAL offset 值非法 | 检查并修正 SQL 语句 |
| 0x80002630 | Does not support sliding when interval is natural month/year | sliding单位非法 | 检查并修正SQL语句 | | 0x80002630 | Does not support sliding when interval is natural month/year | sliding 单位非法 | 检查并修正 SQL 语句 |
| 0x80002631 | sliding value no larger than the interval value | sliding值非法 | 检查并修正SQL语句 | | 0x80002631 | sliding value no larger than the interval value | sliding 值非法 | 检查并修正 SQL 语句 |
| 0x80002632 | sliding value can not less than 1%% of interval value | sliding值非法 | 检查并修正SQL语句 | | 0x80002632 | sliding value can not less than 1%% of interval value | sliding 值非法 | 检查并修正 SQL 语句 |
| 0x80002633 | Only one tag if there is a json tag | 只支持单个JSON TAG列 | 检查并修正SQL语句 | | 0x80002633 | Only one tag if there is a json tag | 只支持单个 JSON TAG 列 | 检查并修正 SQL 语句 |
| 0x80002634 | Query block has incorrect number of result columns | 列个数不匹配 | 检查并修正SQL语句 | | 0x80002634 | Query block has incorrect number of result columns | 列个数不匹配 | 检查并修正 SQL 语句 |
| 0x80002635 | Incorrect TIMESTAMP value | 主键时间戳列值非法 | 检查并修正SQL语句 | | 0x80002635 | Incorrect TIMESTAMP value | 主键时间戳列值非法 | 检查并修正 SQL 语句 |
| 0x80002637 | soffset/offset can not be less than 0 | soffset/offset值非法 | 检查并修正SQL语句 | | 0x80002637 | soffset/offset can not be less than 0 | soffset/offset 值非法 | 检查并修正 SQL 语句 |
| 0x80002638 | slimit/soffset only available for PARTITION/GROUP BY query | slimit/soffset只支持PARTITION BY/GROUP BY语句 | 检查并修正SQL语句 | | 0x80002638 | slimit/soffset only available for PARTITION/GROUP BY query | slimit/soffset 只支持 PARTITION BY/GROUP BY 语句 | 检查并修正 SQL 语句 |
| 0x80002639 | Invalid topic query | 不支持的TOPIC查询语 | | 0x80002639 | Invalid topic query | 不支持的 TOPIC 查询语 |
| 0x8000263A | Cannot drop super table in batch | 不支持批量删除超级表 | 检查并修正SQL语句 | | 0x8000263A | Cannot drop super table in batch | 不支持批量删除超级表 | 检查并修正 SQL 语句 |
| 0x8000263B | Start(end) time of query range required or time range too large | 窗口个数超出限制 | 检查并修正SQL语句 | | 0x8000263B | Start(end) time of query range required or time range too large | 窗口个数超出限制 | 检查并修正 SQL 语句 |
| 0x8000263C | Duplicated column names | 列名称重复 | 检查并修正SQL语句 | | 0x8000263C | Duplicated column names | 列名称重复 | 检查并修正 SQL 语句 |
| 0x8000263D | Tags length exceeds max length | TAG值长度超出最大支持范围 | 检查并修正SQL语句 | | 0x8000263D | Tags length exceeds max length | TAG 值长度超出最大支持范围 | 检查并修正 SQL 语句 |
| 0x8000263E | Row length exceeds max length | 行长度检查并修正SQL语句 | 检查并修正SQL语句 | | 0x8000263E | Row length exceeds max length | 行长度检查并修正 SQL 语句 | 检查并修正 SQL 语句 |
| 0x8000263F | Illegal number of columns | 列个数错误 | 检查并修正SQL语句 | | 0x8000263F | Illegal number of columns | 列个数错误 | 检查并修正 SQL 语句 |
| 0x80002640 | Too many columns | 列个数超出上限 | 检查并修正SQL语句 | | 0x80002640 | Too many columns | 列个数超出上限 | 检查并修正 SQL 语句 |
| 0x80002641 | First column must be timestamp | 第一列必须是主键时间戳列 | 检查并修正SQL语句 | | 0x80002641 | First column must be timestamp | 第一列必须是主键时间戳列 | 检查并修正 SQL 语句 |
| 0x80002642 | Invalid binary/nchar column/tag length | binary/nchar长度错误 | 检查并修正SQL语句 | | 0x80002642 | Invalid binary/nchar column/tag length | binary/nchar 长度错误 | 检查并修正 SQL 语句 |
| 0x80002643 | Invalid number of tag columns | TAG列个数错误 | 检查并修正SQL语句 | | 0x80002643 | Invalid number of tag columns | TAG 列个数错误 | 检查并修正 SQL 语句 |
| 0x80002644 | Permission denied | 权限错误 | 检查确认用户是否有相应操作权限 | | 0x80002644 | Permission denied | 权限错误 | 检查确认用户是否有相应操作权限 |
| 0x80002645 | Invalid stream query | 非法流语句 | 检查并修正SQL语句 | | 0x80002645 | Invalid stream query | 非法流语句 | 检查并修正 SQL 语句 |
| 0x80002646 | Invalid _c0 or _rowts expression | _c0或_rowts非法使用 | 检查并修正SQL语句 | | 0x80002646 | Invalid _c0 or _rowts expression | _c0 _rowts 非法使用 | 检查并修正 SQL 语句 |
| 0x80002647 | Invalid timeline function | 函数依赖的主键时间戳不存在 | 检查并修正SQL语句 | | 0x80002647 | Invalid timeline function | 函数依赖的主键时间戳不存在 | 检查并修正 SQL 语句 |
| 0x80002648 | Invalid password | 密码不符合规范 | 检查并修改密码 | | 0x80002648 | Invalid password | 密码不符合规范 | 检查并修改密码 |
| 0x80002649 | Invalid alter table statement | 修改表语句不合法 | 检查并修正SQL语句 | | 0x80002649 | Invalid alter table statement | 修改表语句不合法 | 检查并修正 SQL 语句 |
| 0x8000264A | Primary timestamp column cannot be dropped | 主键时间戳列不允许删除 | 检查并修正SQL语句 | | 0x8000264A | Primary timestamp column cannot be dropped | 主键时间戳列不允许删除 | 检查并修正 SQL 语句 |
| 0x8000264B | Only binary/nchar column length could be modified, and the length can only be increased, not decreased | 非法列修改 | 检查并修正SQL语句 | | 0x8000264B | Only binary/nchar column length could be modified, and the length can only be increased, not decreased | 非法列修改 | 检查并修正 SQL 语句 |
| 0x8000264C | Invalid tbname pseudo column | 非法使用tbname列 | 检查并修正SQL语句 | | 0x8000264C | Invalid tbname pseudo column | 非法使用 tbname 列 | 检查并修正 SQL 语句 |
| 0x8000264D | Invalid function name | 非法函数名 | 检查并修正函数名 | | 0x8000264D | Invalid function name | 非法函数名 | 检查并修正函数名 |
| 0x8000264E | Comment too long | 注释长度超限 | 检查并修正SQL语句 | | 0x8000264E | Comment too long | 注释长度超限 | 检查并修正 SQL 语句 |
| 0x8000264F | Function(s) only allowed in SELECT list, cannot mixed with non scalar functions or columns | 非法的函数混用 | 检查并修正SQL语句 | | 0x8000264F | Function(s) only allowed in SELECT list, cannot mixed with non scalar functions or columns | 非法的函数混用 | 检查并修正 SQL 语句 |
| 0x80002650 | Window query not supported, since no valid timestamp column included in the result of subquery | 窗口查询依赖的主键时间戳列不存在 | 检查并修正SQL语句 | | 0x80002650 | Window query not supported, since no valid timestamp column included in the result of subquery | 窗口查询依赖的主键时间戳列不存在 | 检查并修正 SQL 语句 |
| 0x80002651 | No columns can be dropped | 必须的列不能被删除 | 检查并修正SQL语句 | | 0x80002651 | No columns can be dropped | 必须的列不能被删除 | 检查并修正 SQL 语句 |
| 0x80002652 | Only tag can be json type | 普通列不支持JSON类型 | 检查并修正SQL语句 | | 0x80002652 | Only tag can be json type | 普通列不支持 JSON 类型 | 检查并修正 SQL 语句 |
| 0x80002655 | The DELETE statement must have a definite time window range | DELETE语句中存在非法WHERE条件 | 检查并修正SQL语句 | | 0x80002655 | The DELETE statement must have a definite time window range | DELETE 语句中存在非法 WHERE 条件 | 检查并修正 SQL 语句 |
| 0x80002656 | The REDISTRIBUTE VGROUP statement only support 1 to 3 dnodes | REDISTRIBUTE VGROUP指定的DNODE个数非法 | 检查并修正SQL语句 | | 0x80002656 | The REDISTRIBUTE VGROUP statement only support 1 to 3 dnodes | REDISTRIBUTE VGROUP 指定的 DNODE 个数非法 | 检查并修正 SQL 语句 |
| 0x80002657 | Fill now allowed | 函数不允许FILL功能 | 检查并修正SQL语句 | | 0x80002657 | Fill now allowed | 函数不允许 FILL 功能 | 检查并修正 SQL 语句 |
| 0x80002658 | Invalid windows pc | 非法使用窗口伪列 | 检查并修正SQL语句 | | 0x80002658 | Invalid windows pc | 非法使用窗口伪列 | 检查并修正 SQL 语句 |
| 0x80002659 | Window not allowed | 函数不能在窗口中使用 | 检查并修正SQL语句 | | 0x80002659 | Window not allowed | 函数不能在窗口中使用 | 检查并修正 SQL 语句 |
| 0x8000265A | Stream not allowed | 函数不能在流计算中使用 | 检查并修正SQL语句 | | 0x8000265A | Stream not allowed | 函数不能在流计算中使用 | 检查并修正 SQL 语句 |
| 0x8000265B | Group by not allowd | 函数不能在分组中使用 | 检查并修正SQL语句 | | 0x8000265B | Group by not allowd | 函数不能在分组中使用 | 检查并修正 SQL 语句 |
| 0x8000265D | Invalid interp clause | 非法INTERP或相关语句 | 检查并修正SQL语句 | | 0x8000265D | Invalid interp clause | 非法 INTERP 或相关语句 | 检查并修正 SQL 语句 |
| 0x8000265E | Not valid function ion window | 非法窗口语句 | 检查并修正SQL语句 | | 0x8000265E | Not valid function ion window | 非法窗口语句 | 检查并修正 SQL 语句 |
| 0x8000265F | Only support single table | 函数只支持在单表查询中使用 | 检查并修正SQL语句 | | 0x8000265F | Only support single table | 函数只支持在单表查询中使用 | 检查并修正 SQL 语句 |
| 0x80002660 | Invalid sma index | 非法创建SMA语句 | 检查并修正SQL语句 | | 0x80002660 | Invalid sma index | 非法创建 SMA 语句 | 检查并修正 SQL 语句 |
| 0x80002661 | Invalid SELECTed expression | 无效查询语句 | 检查并修正SQL语句 | | 0x80002661 | Invalid SELECTed expression | 无效查询语句 | 检查并修正 SQL 语句 |
| 0x80002662 | Fail to get table info | 获取表元数据信息失败 | 保留现场和日志github上报issue | | 0x80002662 | Fail to get table info | 获取表元数据信息失败 | 保留现场和日志github 上报 issue |
| 0x80002663 | Not unique table/alias | 表名(别名)冲突 | 检查并修正SQL语句 | | 0x80002663 | Not unique table/alias | 表名(别名)冲突 | 检查并修正 SQL 语句 |
| 0x80002664 | Join requires valid time series input | 不支持子查询不含主键时间戳列输出的JOIN查询 | 检查并修正SQL语句 | | 0x80002664 | Join requires valid time series input | 不支持子查询不含主键时间戳列输出的 JOIN 查询 | 检查并修正 SQL 语句 |
| 0x80002665 | The _TAGS pseudo column can only be used for subtable and supertable queries | 非法TAG列查询 | 检查并修正SQL语句 | | 0x80002665 | The _TAGS pseudo column can only be used for subtable and supertable queries | 非法 TAG 列查询 | 检查并修正 SQL 语句 |
| 0x80002666 | 子查询不含主键时间戳列输出 | 检查并修正SQL语句 | | 0x80002666 | 子查询不含主键时间戳列输出 | 检查并修正 SQL 语句 |
| 0x80002667 | Invalid usage of expr: %s | 非法表达式 | 检查并修正SQL语句 | | 0x80002667 | Invalid usage of expr: %s | 非法表达式 | 检查并修正 SQL 语句 |
| 0x800026FF | Parser internal error | 解析器内部错误 | 保留现场和日志github上报issue | | 0x800026FF | Parser internal error | 解析器内部错误 | 保留现场和日志github 上报 issue |
| 0x80002700 | Planner internal error | 计划期内部错误 | 保留现场和日志github上报issue | | 0x80002700 | Planner internal error | 计划期内部错误 | 保留现场和日志github 上报 issue |
| 0x80002701 | Expect ts equal | JOIN条件校验失败 | 保留现场和日志github上报issue | | 0x80002701 | Expect ts equal | JOIN 条件校验失败 | 保留现场和日志github 上报 issue |
| 0x80002702 | Cross join not support | 不支持CROSS JOIN | 检查并修正SQL语句 | | 0x80002702 | Cross join not support | 不支持 CROSS JOIN | 检查并修正 SQL 语句 |
## function ## function
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | ---------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| 0x80002800 | Function internal error | 函数参数输入不合理造成的错误随错误码会返回具体错误描述信息。比如APERCENTILE函数第三个参数指定算法时只能使用字符串"default" | "t-digest", 使用其他输入会报此类错误。或者TO_ISO8601函数第二个参数指定时区时字符串不符合时区格式规范等。 | 根据具体错误描述信息,调整函数输入。 | | 0x80002800 | Function internal error | 函数参数输入不合理造成的错误,随错误码会返回具体错误描述信息。比如 APERCENTILE 函数第三个参数指定算法时只能使用字符串"default" | "t-digest", 使用其他输入会报此类错误。或者 TO_ISO8601 函数第二个参数指定时区时,字符串不符合时区格式规范等。 | 根据具体错误描述信息,调整函数输入。 |
| 0x80002801 | Invalid function para number | 函数输入参数个数不正确。函数规定必须要使用n个参数而用户给定参数个数不为n。比如COUNT(col1, col2)。 | 调整函数输入参数为正确个数。 | | 0x80002801 | Invalid function para number | 函数输入参数个数不正确。函数规定必须要使用n个参数而用户给定参数个数不为 n。比如 COUNT(col1, col2)。 | 调整函数输入参数为正确个数。 |
| 0x80002802 | Invalid function para type | 函数输入参数类型不正确。函数输入参数要求为数值类型但是用户所给参数为字符串。比如SUM("abc")。 | 调整函数参数输入为正确类型 | | 0x80002802 | Invalid function para type | 函数输入参数类型不正确。函数输入参数要求为数值类型,但是用户所给参数为字符串。比如 SUM("abc")。 | 调整函数参数输入为正确类型 |
| 0x80002803 | Invalid function para value | 函数输入参数取值不正确。函数输入参数范围不正确。比如SAMPLE函数第二个参数指定采样个数范围为[1, 1000], 如果不在这个范围内会会报错。 | 调整函数参数输入为正确取值。 | | 0x80002803 | Invalid function para value | 函数输入参数取值不正确。函数输入参数范围不正确。比如 SAMPLE 函数第二个参数指定采样个数范围为 [1, 1000], 如果不在这个范围内会会报错。 | 调整函数参数输入为正确取值。 |
| 0x80002804 | Not builtin function | 函数非内置函数。内置函数不在的哈希表中会报错,用户应该很少遇见这个问题,否则是内部内置函数哈希初始化的时候出错或者写坏。 | 客户应该不会遇到如果遇到说明程序有bug咨询开发人员。 | | 0x80002804 | Not builtin function | 函数非内置函数。内置函数不在的哈希表中会报错,用户应该很少遇见这个问题,否则是内部内置函数哈希初始化的时候出错或者写坏。 | 客户应该不会遇到,如果遇到,说明程序有 bug咨询开发人员。 |
| 0x80002805 | Duplicate timestamps not allowed in function | 函数输入主键列有重复时间戳。对某些依赖时间线顺序函数做超级表查询时所有子表数据会按照时间戳进行排序后合并为一条时间线进行计算因此子表合并后的时间戳可能会出现重复导致某些计算没有意义而报错。涉及到的函数有CSUMDERIVATIVEDIFFIRATEMAVGSTATECOUNTSTATEDURATIONTWA | 如果需要对超级表查询并且使用这些依赖时间线顺序函数时,确保子表中不存在重复时间戳数据。 | | 0x80002805 | Duplicate timestamps not allowed in function | 函数输入主键列有重复时间戳。对某些依赖时间线顺序函数做超级表查询时所有子表数据会按照时间戳进行排序后合并为一条时间线进行计算因此子表合并后的时间戳可能会出现重复导致某些计算没有意义而报错。涉及到的函数有CSUM、DERIVATIVE、DIFF、IRATE、MAVG、STATECOUNT、STATEDURATION、TWA | 如果需要对超级表查询并且使用这些依赖时间线顺序函数时,确保子表中不存在重复时间戳数据。 |
## udf ## udf
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | ---------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------- | | ---------- | ---------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------- |
| 0x80002901 | udf is stopping | dnode退出时收到udf调用 | 停止执行udf查询 | | 0x80002901 | udf is stopping | dnode 退出时,收到 udf 调用 | 停止执行 udf 查询 |
| 0x80002902 | udf pipe read error | taosd读取udfd pipe发生错误 | udfd异常退出1c udf崩溃 2udfd崩溃 | | 0x80002902 | udf pipe read error | taosd 读取 udfd pipe发生错误 | udfd 异常退出1. c udf 崩溃 2. udfd 崩溃 |
| 0x80002903 | udf pipe connect error | taosd建立到udfd的管道连接时发生错误 | 1)taosd对应的udfd未启动。重启taosd | | 0x80002903 | udf pipe connect error | taosd 建立到 udfd 的管道连接时,发生错误 | 1. taosd 对应的 udfd 未启动。重启 taosd |
| 0x80002904 | udf pip not exist | udf建立调用拆除三个阶段两个阶段中间发生连接错误导致连接消失后续阶段继续执行 | udfd异常退出1c udf崩溃 2udfd崩溃 | | 0x80002904 | udf pip not exist | udf 建立,调用,拆除三个阶段,两个阶段中间发生连接错误,导致连接消失,后续阶段继续执行 | udfd 异常退出1. c udf 崩溃 2. udfd 崩溃 |
| 0x80002905 | udf load failure | udfd加载udf时错误 | 1mnode中udf不存在 2udf 加载出错。查看日志 | | 0x80002905 | udf load failure | udfd 加载 udf 时错误 | 1.mnode 中 udf 不存在 2. udf 加载出错。查看日志 |
| 0x80002906 | udf invalid function input | udf检查输入 | udf函数不接受输入如输入列类型错误 | | 0x80002906 | udf invalid function input | udf 检查输入 | udf 函数不接受输入,如输入列类型错误 |
| 0x80002907 | udf invalid bufsize | udf聚合函数中间结果大于创建udf中指定的bufsize | 增大bufSize或者降低中间结果大小 | | 0x80002907 | udf invalid bufsize | udf 聚合函数中间结果大于创建udf中指定的 bufsize | 增大 bufSize或者降低中间结果大小 |
| 0x80002908 | udf invalid output type | udf输出的类型和创建udf中指定的类型 | 修改udf或者创建udf的类型使得结果相同 | | 0x80002908 | udf invalid output type | udf 输出的类型和创建 udf 中指定的类型 | 修改 udf或者创建 udf 的类型,使得结果相同 |
| 0x80002909 | udf program language not supported | udf编程语言不支持 | 使用支持的语言,当前支持cpython | | 0x80002909 | udf program language not supported | udf 编程语言不支持 | 使用支持的语言,当前支持 c、python |
| 0x8000290A | udf function execution failure | udf函数执行错误如返回错误的行数 | 具体查看错误日志 | | 0x8000290A | udf function execution failure | udf 函数执行错误,如返回错误的行数 | 具体查看错误日志 |
## sml ## sml
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | -------------------------------- | ----------------------------------------------- | --------------------------------------------------------------- | | ---------- | -------------------------------- | ----------------------------------------------- | --------------------------------------------------------------- |
| 0x80003000 | Invalid line protocol type | schemaless接口传入的协议非法 | 检查传入的协议是否为taos.h 中定位的三种 TSDB_SML_PROTOCOL_TYPE | | 0x80003000 | Invalid line protocol type | schemaless 接口传入的协议非法 | 检查传入的协议是否为 taos.h 中定位的三种 TSDB_SML_PROTOCOL_TYPE |
| 0x80003001 | Invalid timestamp precision type | schemaless接口传入的时间精度非法 | 检查传入的协议是否为taos.h 中定位的七种 TSDB_SML_TIMESTAMP_TYPE | | 0x80003001 | Invalid timestamp precision type | schemaless 接口传入的时间精度非法 | 检查传入的协议是否为 taos.h 中定位的七种 TSDB_SML_TIMESTAMP_TYPE |
| 0x80003002 | Invalid data format | schemaless接口传入的数据格式非法 | 具体查看client端的错误日志提示 | | 0x80003002 | Invalid data format | schemaless 接口传入的数据格式非法 | 具体查看 client 端的错误日志提示 |
| 0x80003004 | Not the same type as before | schemaless 数据一批的多行数据里相同列类型不一致 | 检测数据里每行相同列的数据类型是否一致 | | 0x80003004 | Not the same type as before | schemaless 数据一批的多行数据里相同列类型不一致 | 检测数据里每行相同列的数据类型是否一致 |
| 0x80003005 | Internal error | schemaless 内部逻辑错误,一般不会出现 | 具体查看client端的错误日志提示 | | 0x80003005 | Internal error | schemaless 内部逻辑错误,一般不会出现 | 具体查看 client 端的错误日志提示 |
## sma ## sma
@ -527,7 +527,7 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x80003102 | Invalid tsma env | TSMA 运行环境异常 | 检查错误日志,联系开发处理 | | 0x80003102 | Invalid tsma env | TSMA 运行环境异常 | 检查错误日志,联系开发处理 |
| 0x80003103 | Invalid tsma state | 流计算下发结果的 vgroup 与创建 TSMA index 的 vgroup 不一致 | 检查错误日志,联系开发处理 | | 0x80003103 | Invalid tsma state | 流计算下发结果的 vgroup 与创建 TSMA index 的 vgroup 不一致 | 检查错误日志,联系开发处理 |
| 0x80003104 | Invalid tsma pointer | 在处理写入流计算下发的结果,消息体为空指针。 | 检查错误日志,联系开发处理 | | 0x80003104 | Invalid tsma pointer | 在处理写入流计算下发的结果,消息体为空指针。 | 检查错误日志,联系开发处理 |
| 0x80003105 | Invalid tsma parameters | 在处理写入流计算下发的结果结果数量为0。 | 检查错误日志,联系开发处理 | | 0x80003105 | Invalid tsma parameters | 在处理写入流计算下发的结果,结果数量为 0。 | 检查错误日志,联系开发处理 |
| 0x80003113 | Tsma optimization cannot be applied with INTERVAL AUTO offset. | 当前查询条件下使用 INTERVAL AUTO OFFSET 无法启用 tsma 优化。 | 使用 SKIP_TSMA Hint 或者手动指定 INTERVAL OFFSET。 | | 0x80003113 | Tsma optimization cannot be applied with INTERVAL AUTO offset. | 当前查询条件下使用 INTERVAL AUTO OFFSET 无法启用 tsma 优化。 | 使用 SKIP_TSMA Hint 或者手动指定 INTERVAL OFFSET。 |
| 0x80003150 | Invalid rsma env | Rsma 执行环境异常。 | 检查错误日志,联系开发处理 | | 0x80003150 | Invalid rsma env | Rsma 执行环境异常。 | 检查错误日志,联系开发处理 |
| 0x80003151 | Invalid rsma state | Rsma 执行状态异常。 | 检查错误日志,联系开发处理 | | 0x80003151 | Invalid rsma state | Rsma 执行状态异常。 | 检查错误日志,联系开发处理 |
@ -543,7 +543,7 @@ description: TDengine 服务端的错误码列表和详细说明
## index ## index
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | ---------------- | --------------------------------------------------------------------- | -------------------------- | | ---------- | ---------------- | --------------------------------------------------------------------- | -------------------------- |
| 0x80003200 | INDEX 正在重建中 | 1. 写入过快导致index 的合并线程处理不过来 2. 索引文件损坏,正在重建 | 检查错误日志,联系开发处理 | | 0x80003200 | INDEX 正在重建中 | 1.写入过快,导致 index 的合并线程处理不过来 2.索引文件损坏,正在重建 | 检查错误日志,联系开发处理 |
| 0x80003201 | 索引文件损坏 | 文件损坏 | 检查错误日志,联系开发处理 | | 0x80003201 | 索引文件损坏 | 文件损坏 | 检查错误日志,联系开发处理 |
@ -551,9 +551,9 @@ description: TDengine 服务端的错误码列表和详细说明
| 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 | | 错误码 | 错误描述 | 可能的出错场景或者可能的原因 | 建议用户采取的措施 |
| ---------- | --------------------- | -------------------------------------------------------------------------------- | ------------------------------ | | ---------- | --------------------- | -------------------------------------------------------------------------------- | ------------------------------ |
| 0x80004000 | Invalid message | 订阅到的数据非法,一般不会出现 | 具体查看client端的错误日志提示 | | 0x80004000 | Invalid message | 订阅到的数据非法,一般不会出现 | 具体查看 client 端的错误日志提示 |
| 0x80004001 | Consumer mismatch | 订阅请求的vnode和重新分配的vnode不一致一般存在于有新消费者加入相同消费者组里时 | 内部错误,不暴露给用户 | | 0x80004001 | Consumer mismatch | 订阅请求的 vnode 和重新分配的 vnode 不一致,一般存在于有新消费者加入相同消费者组里时 | 内部错误,不暴露给用户 |
| 0x80004002 | Consumer closed | 消费者已经不存在了 | 查看是否已经close掉了 | | 0x80004002 | Consumer closed | 消费者已经不存在了 | 查看是否已经 close 掉了 |
| 0x80004017 | Invalid status, please subscribe topic first | 数据订阅状态不对 | 没有调用 subscribe直接poll数据 | | 0x80004017 | Invalid status, please subscribe topic first | 数据订阅状态不对 | 没有调用 subscribe直接 poll 数据 |
| 0x80004100 | Stream task not exist | 流计算任务不存在 | 具体查看server端的错误日志 | | 0x80004100 | Stream task not exist | 流计算任务不存在 | 具体查看 server 端的错误日志 |

View File

@ -8,57 +8,51 @@ toc_max_heading_level: 4
## 车联网面临的挑战 ## 车联网面临的挑战
在国家政策的有力引导下车联网行业正迎来前所未有的发展机遇。早在2016年我国便推出了GB/T 32960标准规范以推动车联网应用的快速发展。自2017年起一系列车联网相关政策相继出台旨在促进网联化、智能化、共享化和电动化的实现。在这一进程中车联网车与一切技术扮演着举足轻重的角色其收集的信息中时序数据占据了绝大多数。随着联网汽车数量的持续增长如何高效地上传、存储和处理海量数据以及如何有效应对乱序数据的挑战进行高效的查询和分析已成为业界亟须解决的关键问题。 在国家政策的有力引导下,车联网行业正迎来前所未有的发展机遇。早在 2016 年,我国便推出了 GB/T 32960 标准规范,以推动车联网应用的快速发展。自 2017 年起,一系列车联网相关政策相继出台,旨在促进网联化、智能化、共享化和电动化的实现。在这一进程中,车联网车与一切技术扮演着举足轻重的角色,其收集的信息中时序数据占据了绝大多数。随着联网汽车数量的持续增长,如何高效地上传、存储和处理海量数据,以及如何有效应对乱序数据的挑战,进行高效的查询和分析,已成为业界亟须解决的关键问题。
- 海量数据采集如今无论是小型客车还是受监管的货车普遍配备了T-Box或其他OBDOn-Board Diagnostics车载自动诊断系统车载终端设备用于实时采集车辆的运行参数并将这些数据及时传输至云端数据中心。以某品牌汽车为例每辆车每秒可采集140个高频测点数据每30s采集280个低频测点数据。在日常运营中80万辆在线车辆每天产生的数据量高达4.5TB,这些数据最终汇入时序数据库,形成了庞大的数据采集点网络。 - 海量数据采集:如今,无论是小型客车还是受监管的货车,普遍配备了 T-Box 或其他 OBDOn-Board Diagnostics车载自动诊断系统车载终端设备用于实时采集车辆的运行参数并将这些数据及时传输至云端数据中心。以某品牌汽车为例每辆车每秒可采集 140 个高频测点数据,每 30s 采集 280 个低频测点数据。在日常运营中80 万辆在线车辆每天产生的数据量高达 4.5TB,这些数据最终汇入时序数据库,形成了庞大的数据采集点网络。
- 海量数据存储:鉴于数据采集的规模之大,相应的硬件资源需求自然引起了汽车制造商的高度关注。因此,在选择数据存储方案时,必须考虑高压缩率,最大限度地减少存储空间的占用。同时,应实现冷热数据的自动分离,确保热数据被自动存储到高性能的硬盘上,而冷数据则被转移到较低性能的硬盘上。这样既能保障查询性能不受影响,又能有效降低存储成本,实现资源的合理利用。 - 海量数据存储:鉴于数据采集的规模之大,相应的硬件资源需求自然引起了汽车制造商的高度关注。因此,在选择数据存储方案时,必须考虑高压缩率,最大限度地减少存储空间的占用。同时,应实现冷热数据的自动分离,确保热数据被自动存储到高性能的硬盘上,而冷数据则被转移到较低性能的硬盘上。这样既能保障查询性能不受影响,又能有效降低存储成本,实现资源的合理利用。
- 支持乱序写入整理在信号不佳或无信号的区域数据通常会在本地缓存。一旦网络通信恢复正常依照GB/T 32960的规定数据将以交替发送的方式上传至数据中心确保实时与离线数据的同步传输。在消息分发至不同区域后消费组的消费顺序也会导致数据的乱序写入。这种乱序写入若频繁发生将导致大量存储碎片的产生进而降低时序数据库的存储效率和查询速度。 - 支持乱序写入整理:在信号不佳或无信号的区域,数据通常会在本地缓存。一旦网络通信恢复正常,依照 GB/T 32960 的规定,数据将以交替发送的方式上传至数据中心,确保实时与离线数据的同步传输。在消息分发至不同区域后,消费组的消费顺序也会导致数据的乱序写入。这种乱序写入若频繁发生,将导致大量存储碎片的产生,进而降低时序数据库的存储效率和查询速度。
- 强大的查询和分析能力系统应能支持使用标准SQL进行状态、时长、位置等关键指标的统计分析。此外还应具备轨迹历史回放、双轨合验、预警报警等实用功能以降低学习和分析的难度。对于更复杂的分析需求系统须支持UDF通过编写高级编程语言生成的库文件并加载至集群中以弥补时序数据库内置函数的局限性。系统应查询操作简便且结果实时性强以便为业务决策提供有力且及时的数据支持。 - 强大的查询和分析能力:系统应能支持使用标准 SQL 进行状态、时长、位置等关键指标的统计分析。此外,还应具备轨迹历史回放、双轨合验、预警报警等实用功能,以降低学习和分析的难度。对于更复杂的分析需求,系统须支持 UDF通过编写高级编程语言生成的库文件并加载至集群中以弥补时序数据库内置函数的局限性。系统应查询操作简便且结果实时性强以便为业务决策提供有力且及时的数据支持。
## TDengine在车联网中的核心价值 ## TDengine在车联网中的核心价值
在面对亿万级别的点位信息时任何微小的数据处理逻辑错误或冗余都可能导致性能瓶颈。得益于全球社区爱好者的共同努力、超过53万个的装机实例部署以及在极端条件下的严格验证TDengine在功能和性能方面均达到顶尖水平。在车联网领域TDengine的核心价值体现在以下几个方面。 在面对亿万级别的点位信息时,任何微小的数据处理逻辑错误或冗余都可能导致性能瓶颈。得益于全球社区爱好者的共同努力、超过 53 万个的装机实例部署以及在极端条件下的严格验证TDengine 在功能和性能方面均达到顶尖水平。在车联网领域TDengine 的核心价值体现在以下几个方面。
- 便于采集作为物联网的一个分支车联网的技术特点与之一致。TDengine配备了可视化采集界面用户无须编写代码即可轻松将Kafka、MQTT等通用消息中间件中 - 便于采集作为物联网的一个分支车联网的技术特点与之一致。TDengine 配备了可视化采集界面,用户无须编写代码即可轻松将 Kafka、MQTT 等通用消息中间件中的数据导入数据库。此外,提供的可视化性能指标看板大大简化了数据接入和管理的工作流程。
的数据导入数据库。此外,提供的可视化性能指标看板大大简化了数据接入和管理 - 数据存储车联网数据具有高度的相关性例如特定车型的配置信息或同一车辆上不同点位的状态数据。TDengine 的设计理念完美契合车联网的需求采用“一车一表”的模式简化了数据存储管理的复杂性。结合云原生架构、冷热数据分离、列式存储以及动态扩容包括横向、纵向扩容和动态添加存储空间等技术TDengine 在数据存储的性能和成本控制方面表现出色。
的工作流程。 - 查询分析TDengine 作为一个开放且简洁的时序大数据平台,提供了丰富的 API兼容各种分析工具、编程语言和 BI 系统,如 Matlab、R、永洪 BI 等。TDengine 主要采用 SQL易于学习和使用支持状态、计数、时间、事件及会话窗口等多种分析模式并内置了 70 多个基础算子,足以应对日常的分析需求。对于更专业的算法分析,用户可通过 C 或 Python 语言开发 UDF并将其集成到 TDengine 中。
- 数据存储车联网数据具有高度的相关性例如特定车型的配置信息或同一车辆上不同点位的状态数据。TDengine的设计理念完美契合车联网的需求采用“一车一表”的模式简化了数据存储管理的复杂性。结合云原生架构、冷热数据分离、列式存储以及动态扩容包括横向、纵向扩容和动态添加存储空间等技术TDengine在数据存储的性能和成本控制方面表现出色。
- 查询分析TDengine作为一个开放且简洁的时序大数据平台提供了丰富的API兼容各种分析工具、编程语言和BI系统如Matlab、R、永洪BI等。TDengine 主要采用SQL易于学习和使用支持状态、计数、时间、事件及会话窗口等多种分析模式并内置了70多个基础算子足以应对日常的分析需求。对于更专业的算法分析用户可通过C或Python语言开发UDF并将其集成到TDengine中。
## TDengine在车联网中的应用 ## TDengine在车联网中的应用
车联网场景是时序数据应用的典型代表而TDengine正是处理这类海量时序数据的理想选择。通过整合车载数据车联网系统能够实现对汽车各个零部件健康状况的监控、用户驾驶行为的追踪、车载系统的安全分析、合规性检查以及车载网络质量的监测。此外利用TDengine提供的geometry数据类型及其相关函数车联网系统能够轻松且高效地执行车辆轨迹监管、历史轨迹回放、最新位置定位等关键功能。 车联网场景是时序数据应用的典型代表,而 TDengine 正是处理这类海量时序数据的理想选择。通过整合车载数据,车联网系统能够实现对汽车各个零部件健康状况的监控、用户驾驶行为的追踪、车载系统的安全分析、合规性检查以及车载网络质量的监测。此外,利用 TDengine 提供的 geometry 数据类型及其相关函数,车联网系统能够轻松且高效地执行车辆轨迹监管、历史轨迹回放、最新位置定位等关键功能。
### TSP 车联网 ### TSP 车联网
汽车制造商通过车载T-Box终端收集车辆的关键行驶数据包括行驶速度、行驶方向、电门开度、制动踏板开度、挡位、电机转速以及电池包信息等。这些数据通过MQTT协议汇聚至TDengine进行存储从而满足车辆历史轨迹的回放需求以及对车辆实时状态的监控。TSP车联网架构如下图所示。 汽车制造商通过车载 T-Box 终端收集车辆的关键行驶数据,包括行驶速度、行驶方向、电门开度、制动踏板开度、挡位、电机转速以及电池包信息等。这些数据通过 MQTT 协议汇聚至 TDengine 进行存储从而满足车辆历史轨迹的回放需求以及对车辆实时状态的监控。TSP 车联网架构如下图所示。
![TSP 车联网架构](./carnet.png) ![TSP 车联网架构](./carnet.png)
TDengine能够无缝地从外部消息队列如MQTT、Kafka中采集并过滤数据用户可通过直观的可视化界面来管理和配置采集任务实现无须编写代码即可接入外部数据源。此外TDengine还支持对接入消息的解析、过滤和映射操作并提供数据采集任务状态的实时监控功能从而极大地提高数据接入的工作效率。 TDengine 能够无缝地从外部消息队列(如 MQTT、Kafka中采集并过滤数据用户可通过直观的可视化界面来管理和配置采集任务实现无须编写代码即可接入外部数据源。此外TDengine 还支持对接入消息的解析、过滤和映射操作,并提供数据采集任务状态的实时监控功能,从而极大地提高数据接入的工作效率。
在本案例中,系统采用了“一车一表”的建模策略,确保每张子表中的数据都能按照时间顺序进行追加操作。设备表与表之间保持相对独立,并且数据是连续写入的,这一设计显著提高了数据的写入效率。 在本案例中,系统采用了“一车一表”的建模策略,确保每张子表中的数据都能按照时间顺序进行追加操作。设备表与表之间保持相对独立,并且数据是连续写入的,这一设计显著提高了数据的写入效率。
- 海量高频数据采集上报存储为了应对海量且高频的数据采集与上报需求系统采用多节点的三副本或双副本集群架构。每个核心节点能够高效管理并存储高达100万张子表。通过分布式部署、构建高可用集群以及实施负载均衡技术系统确保了数据采集存储在性能、可用性和可靠性方面的卓越表现。 - 海量高频数据采集上报存储:为了应对海量且高频的数据采集与上报需求,系统采用多节点的三副本或双副本集群架构。每个核心节点能够高效管理并存储高达 100 万张子表。通过分布式部署、构建高可用集群以及实施负载均衡技术,系统确保了数据采集存储在性能、可用性和可靠性方面的卓越表现。
- 采用多级存储方式系统支持冷热数据分离的策略将热数据存储于高性能的硬盘上而冷数据则可根据配置迁移至S3对象存储服务中实现存储方式的灵活性。鉴于数据量的庞大多级存储不仅满足了日常业务需求还有效降低了存储成本。通过独特的数据存储结构设计实现了行转列和连续存储无损压缩率轻松达到10%以内,极大地节约了数据存储空间。 - 采用多级存储方式:系统支持冷热数据分离的策略,将热数据存储于高性能的硬盘上,而冷数据则可根据配置迁移至 S3 对象存储服务中,实现存储方式的灵活性。鉴于数据量的庞大,多级存储不仅满足了日常业务需求,还有效降低了存储成本。通过独特的数据存储结构设计,实现了行转列和连续存储,无损压缩率轻松达到 10% 以内,极大地节约了数据存储空间。
- 预统计和缓存在数据写入存储空间的过程中系统已经计算并附带了max、min、avg、count等预统计结果。这些预计算结果为大多数统计分析提供了基础使得在数据量庞大时能够通过统计函数迅速筛选出所需信息。在处理海量数据的并发写入场景时系统展现出高效的统计报表生成能力和卓越的SQL查询效率。此外系统内置的实时缓存功能能够实现毫秒级的实时数据反馈。 - 预统计和缓存:在数据写入存储空间的过程中,系统已经计算并附带了 max、min、avg、count 等预统计结果。这些预计算结果为大多数统计分析提供了基础,使得在数据量庞大时,能够通过统计函数迅速筛选出所需信息。在处理海量数据的并发写入场景时,系统展现出高效的统计报表生成能力和卓越的 SQL 查询效率。此外,系统内置的实时缓存功能能够实现毫秒级的实时数据反馈。
- 在线异步方式数据整理:此过程不会干扰正常的存储和查询服务,而是对乱序数据和因数据删除产生的存储碎片进行整理,有效释放存储空间。 - 在线异步方式数据整理:此过程不会干扰正常的存储和查询服务,而是对乱序数据和因数据删除产生的存储碎片进行整理,有效释放存储空间。
- 系统部署满足分布式、高可用以及负载均衡的需求,其性能、可靠性和稳定性已经过充分验证。 - 系统部署满足分布式、高可用以及负载均衡的需求,其性能、可靠性和稳定性已经过充分验证。
- 极简大数据平台与传统大数据平台相比系统将消息队列、流计算、实时缓存、ETL工具以及数据库本体集成于一体构建了极为简洁的架构同时增强了实时性大幅减少了验证和维护过程中的工作量。 - 极简大数据平台与传统大数据平台相比系统将消息队列、流计算、实时缓存、ETL 工具以及数据库本体集成于一体,构建了极为简洁的架构,同时增强了实时性,大幅减少了验证和维护过程中的工作量。
### 物流车联网 ### 物流车联网
物流车辆运营商借助车辆的轨迹监管、异常预警以及历史轨迹回放功能,实现对运营车辆的在线监控、精准轨迹追踪、深入大数据分析及可视化应用等多方面目标。 物流车辆运营商借助车辆的轨迹监管、异常预警以及历史轨迹回放功能,实现对运营车辆的在线监控、精准轨迹追踪、深入大数据分析及可视化应用等多方面目标。
在这一业务场景中系统数据建模遵循“一车一表”的原则进行设计。GIS Geographic Information System地理信息系统网关负责收集并汇聚数万台车辆上报的车辆定位和行驶数据。随后下游服务解析这些报文并将数据推送至消息队列。通过TDengine的数据接入组件数据经过加载、过滤和转换等一系列处理步骤后最终存储于TDengine中。这为下游应用程序提供了实时的车辆位置监控和历史轨迹回放等查询分析服务。物流车联网系统的架构如下图所示 在这一业务场景中系统数据建模遵循“一车一表”的原则进行设计。GISGeographic Information System地理信息系统网关负责收集并汇聚数万台车辆上报的车辆定位和行驶数据。随后下游服务解析这些报文并将数据推送至消息队列。通过TDengine的数据接入组件数据经过加载、过滤和转换等一系列处理步骤后最终存储于 TDengine 中。这为下游应用程序提供了实时的车辆位置监控和历史轨迹回放等查询分析服务。物流车联网系统的架构如下图所示:
![物流车联网系统架构](./distribution.png) ![物流车联网系统架构](./distribution.png)
方案特点如下。 方案特点如下。
- 高性能该项目服务于一万辆车数据量呈现快速增长态势日均写入记录高达约10亿条。项目对聚合查询的高效性和存储压缩性能进行了严格的验证无损压缩率可达4%。这证明了TDengine在处理大规模数据时的卓越性能。 - 高性能:该项目服务于一万辆车,数据量呈现快速增长态势,日均写入记录高达约 10 亿条。项目对聚合查询的高效性和存储压缩性能进行了严格的验证,无损压缩率可达 4%。这证明了 TDengine 在处理大规模数据时的卓越性能。
- 乱序治理尽管消息队列的使用难以避免乱序问题的出现尤其是在离线数据补传的场景中乱序数据往往表现为时间戳早于当前车辆存储记录的时间戳。这种乱序写入会导致大量存储碎片的产生严重时会影响数据库的性能。TDengine巧妙地解决了这一行业难题支持在线整理乱序写入确保数据库性能不受影响。同时对于异常数据段的删除也可以通过在线整理实现真正的数据存储空间释放而不仅仅是索引屏蔽。 - 乱序治理尽管消息队列的使用难以避免乱序问题的出现尤其是在离线数据补传的场景中乱序数据往往表现为时间戳早于当前车辆存储记录的时间戳。这种乱序写入会导致大量存储碎片的产生严重时会影响数据库的性能。TDengine 巧妙地解决了这一行业难题,支持在线整理乱序写入,确保数据库性能不受影响。同时,对于异常数据段的删除,也可以通过在线整理实现真正的数据存储空间释放,而不仅仅是索引屏蔽。
- 数据应用:鉴于车辆运营涉及食品安全的特殊性,实时监控当前车辆位置信息显 - 数据应用鉴于车辆运营涉及食品安全的特殊性实时监控当前车辆位置信息显得尤为重要。TDengine 具备缓存实时数据的功能无论数据库中已存储多少数据仍能保持稳定的性能毫秒级响应最新数据请求充分发挥时序数据库的实时特性。业务中还需要进行历史轨迹回放、行驶里程分析、时间分段分析等多项操作TDengine 的强大性能和多功能性为业务分析提供了无限可能。
得尤为重要。TDengine 具备缓存实时数据的功能,无论数据库中已存储多少数据,
仍能保持稳定的性能,毫秒级响应最新数据请求,充分发挥时序数据库的实时特
性。业务中还需要进行历史轨迹回放、行驶里程分析、时间分段分析等多项操作,
TDengine 的强大性能和多功能性为业务分析提供了无限可能。

View File

@ -6,11 +6,11 @@ toc_max_heading_level: 4
在当前可再生能源迅速发展的浪潮中,分布式光伏和可再生能源的装机容量已经达到相当可观的规模。尽管新能源的发展得到政策的鼎力扶持,但其并网后对电网的运行调度、供电可靠性以及系统的安全稳定带来诸多新挑战。 在当前可再生能源迅速发展的浪潮中,分布式光伏和可再生能源的装机容量已经达到相当可观的规模。尽管新能源的发展得到政策的鼎力扶持,但其并网后对电网的运行调度、供电可靠性以及系统的安全稳定带来诸多新挑战。
分布式光伏即分布式光伏发电系统是指将光伏电池板安装在城市的建筑物屋顶或墙壁上甚至农田、山坡等非建筑用地上利用采集到的太阳能为城市供电的一种绿色能源解决方案。其显著特点是电力产生地与用电地重合可以直接向用户提供电力或者通过配电变压器并入电网。这种能源系统不仅环保而且高效能有效降低长距离输电的损耗减少能源使用成本。分布式光伏电站主要由光伏电池板、组串式逆变器、配电设备和监控系统4部分组成。光伏电池板负责将太阳能转换为直流电组串式逆变器进一步将直流电转换为交流电供用户使用或并入电网。电力公司普遍采用HPLC High-speed Power Line Communication高速电力线通信方案对分布式光伏接入的电能表进行数据采集以实现1分钟、15分钟级别的运行数据采集能力。 分布式光伏,即分布式光伏发电系统,是指将光伏电池板安装在城市的建筑物屋顶或墙壁上,甚至农田、山坡等非建筑用地上,利用采集到的太阳能为城市供电的一种绿色能源解决方案。其显著特点是电力产生地与用电地重合,可以直接向用户提供电力,或者通过配电变压器并入电网。这种能源系统不仅环保,而且高效,能有效降低长距离输电的损耗,减少能源使用成本。分布式光伏电站主要由光伏电池板、组串式逆变器、配电设备和监控系统 4 部分组成。光伏电池板负责将太阳能转换为直流电组串式逆变器进一步将直流电转换为交流电供用户使用或并入电网。电力公司普遍采用HPLC High-speed Power Line Communication高速电力线通信方案对分布式光伏接入的电能表进行数据采集以实现 1 分钟、15 分钟级别的运行数据采集能力。
储能系统以其独特的能力,能够平滑新能源输出的不稳定性,实现削峰填谷,从而有望显著降低微电网的运行成本。更为重要的是,从长远角度考虑,引入储能系统有助于减轻对主电网的依赖,进一步优化整体的能源结构。 储能系统以其独特的能力,能够平滑新能源输出的不稳定性,实现削峰填谷,从而有望显著降低微电网的运行成本。更为重要的是,从长远角度考虑,引入储能系统有助于减轻对主电网的依赖,进一步优化整体的能源结构。
新能源的波动性无疑加剧了电网供电的不确定性这使得储能系统成为确保电网稳定性和可靠性的关键。针对这方面《2030年前碳达峰行动方案》明确强调了储能系统的重要性并支持分布式新能源与储能系统的融合发展旨在加速储能技术的示范应用和推广普及。 新能源的波动性无疑加剧了电网供电的不确定性这使得储能系统成为确保电网稳定性和可靠性的关键。针对这方面《2030 年前碳达峰行动方案》明确强调了储能系统的重要性,并支持分布式新能源与储能系统的融合发展,旨在加速储能技术的示范应用和推广普及。
## 新能源面临的挑战 ## 新能源面临的挑战
@ -18,70 +18,67 @@ toc_max_heading_level: 4
储能系统的核心组件是电芯,对其实时工作参数(如电流、电压、温度、内阻)的监控对于保障储能系统的安全和可靠运行至关重要。如何有效地存储和分析这些海量的测点和数据,已成为储能领域不得不正视的技术难题。这些难题主要体现在如下几个方面。 储能系统的核心组件是电芯,对其实时工作参数(如电流、电压、温度、内阻)的监控对于保障储能系统的安全和可靠运行至关重要。如何有效地存储和分析这些海量的测点和数据,已成为储能领域不得不正视的技术难题。这些难题主要体现在如下几个方面。
- 测点量大:分布式光伏组件众多,大型储能系统中电芯数量庞大,需要监测的测点数从数十万到数千万不等。加之较高的采集频率,每天产生的海量监测数据需要进行长期持久化存储。 - 测点量大:分布式光伏组件众多,大型储能系统中电芯数量庞大,需要监测的测点数从数十万到数千万不等。加之较高的采集频率,每天产生的海量监测数据需要进行长期持久化存储。
- 数据接入难:电网调度中心须实时监控分布式光伏电站和储能系统的运行状况,但由于分布式光伏电站目前主要通过配网侧接入电网,数据接入过程面临挑战。 - 数据接入难:电网调度中心须实时监控分布式光伏电站和储能系统的运行状况,但由于分布式光伏电站目前主要通过配网侧接入电网,数据接入过程面临挑战。另外,由于营销系统与调度中心的信息化水平存在差异,数据接入过程中存在客观难题:数据提取规则复杂,测点数量庞大,传统的数据采集方案资源消耗大。
另外,由于营销系统与调度中心的信息化水平存在差异,数据接入过程中存在客观难题:数据提取规则复杂,测点数量庞大,传统的数据采集方案资源消耗大。 - 数据分发难:分布式光伏电站的运行数据一旦接入省级调度中心,就需要迅速分发至各地市的生产区以驱动后续业务。如何实现快速且高效的数据分发,是客户需要解决的一个棘手问题。
- 数据分发难:分布式光伏电站的运行数据一旦接入省级调度中心,就需要迅速分发至各地市的生产区以驱动后续业务。如何实现快速且高效的数据分发,是客户
需要解决的一个棘手问题。
- 聚合分析难:分布式光伏电站的运行数据须根据电站在电网拓扑中的具体隶属关系(如电站隶属于某台配电变压器、馈线、主网变压器)进行多维度的聚合分析。现有技术方案在提供高效聚合分析手段方面存在不足,如性能低下、耗时过长等问题尤为突出。 - 聚合分析难:分布式光伏电站的运行数据须根据电站在电网拓扑中的具体隶属关系(如电站隶属于某台配电变压器、馈线、主网变压器)进行多维度的聚合分析。现有技术方案在提供高效聚合分析手段方面存在不足,如性能低下、耗时过长等问题尤为突出。
## TDengine在新能源中的核心价值 ## TDengine在新能源中的核心价值
在新能源领域特别是分布式光伏电站和储能系统的复杂任务与数据处理需求面前TDengine的时序数据库技术扮演了不可或缺的角色。TDengine的核心优势体现在以下几个方面。 在新能源领域特别是分布式光伏电站和储能系统的复杂任务与数据处理需求面前TDengine 的时序数据库技术扮演了不可或缺的角色。TDengine 的核心优势体现在以下几个方面。
- 支持海量测点TDengine能够支持高达10亿个时间线充分满足分布式光伏电站和储能系统的数据处理需求。 - 支持海量测点TDengine 能够支持高达 10 亿个时间线,充分满足分布式光伏电站和储能系统的数据处理需求。
- 高性能面对千万级测点的分钟级数据采集场景调度业务对时序数据库的写入性能和低延迟有着严苛的要求。TDengine凭借“一个数据采集点一张表”的创新设计理念实现了卓越的写入性能完全契合业务需求。 - 高性能面对千万级测点的分钟级数据采集场景调度业务对时序数据库的写入性能和低延迟有着严苛的要求。TDengine 凭借“一个数据采集点一张表”的创新设计理念,实现了卓越的写入性能,完全契合业务需求。
- 最新状态数据快速查询在千万级测点数据写入后调度业务需要时序数据库能够迅速查询各设备的最新状态数据以驱动后续业务逻辑。TDengine通过超级表和内置的高速读缓存设计使用户能够高效查询光伏设备和储能电芯的最新运行数据使运维人员能够实时获取并监控设备状态从而提高运维效率。 - 最新状态数据快速查询在千万级测点数据写入后调度业务需要时序数据库能够迅速查询各设备的最新状态数据以驱动后续业务逻辑。TDengine 通过超级表和内置的高速读缓存设计,使用户能够高效查询光伏设备和储能电芯的最新运行数据,使运维人员能够实时获取并监控设备状态,从而提高运维效率。
- 数据订阅与分发针对需要实时数据分发的业务场景TDengine内置的消息队列功能从机制上解决了大量数据即时分发的难题简化了整个系统架构的复 - 数据订阅与分发针对需要实时数据分发的业务场景TDengine 内置的消息队列功能从机制上解决了大量数据即时分发的难题,简化了整个系统架构的复杂性。
杂性。 - 开放的生态TDengine 易于与其他系统集成,兼容多种大数据框架,支持数据的整合与分析,为开发者提供了一个灵活的生态平台。
- 开放的生态TDengine易于与其他系统集成兼容多种大数据框架支持数据的整合与分析为开发者提供了一个灵活的生态平台。
## TDengine 在新能源中的应用 ## TDengine 在新能源中的应用
### 营销侧分布式光伏电站运行数据接入 ### 营销侧分布式光伏电站运行数据接入
分布式光伏电站的运行数据通常须从外部营销系统接入而该营销系统所提供的数据接口采用的是Kafka如下图所示 分布式光伏电站的运行数据通常须从外部营销系统接入,而该营销系统所提供的数据接口采用的是 Kafka如下图所示
![从营销系统接入 TDengine](./energy-kafka.png) ![从营销系统接入 TDengine](./energy-kafka.png)
针对外部数据源的接入场景TDengine Enterprise提供了专业的taosX数据接入组件。用户无须编写任何代码只须通过配置参数即可迅速接入营销侧Kafka消息队列中的分布式光伏电站采集数据实现提取解析、过滤、数据映射等操作并将处理后的数据写入TDengine。这种方法不再依赖第三方ETL工具如下图所示 针对外部数据源的接入场景TDengine Enterprise 提供了专业的 taosX 数据接入组件。用户无须编写任何代码,只须通过配置参数即可迅速接入营销侧 Kafka 消息队列中的分布式光伏电站采集数据,实现提取解析、过滤、数据映射等操作,并将处理后的数据写入 TDengine。这种方法不再依赖第三方 ETL 工具,如下图所示:
![TDengine外部数据源接入流程](./energy-data-in.png) ![TDengine外部数据源接入流程](./energy-data-in.png)
taosX是一个高度灵活的数据接入工具能够适应多样化的数据源格式。它配备了全面的过滤选项和丰富的数据映射功能这些特性大幅缩短了从外部系统收集并整合数据的开发周期。在维持低资源消耗的同时taosX保证了高效的数据接入能力。 taosX 是一个高度灵活的数据接入工具能够适应多样化的数据源格式。它配备了全面的过滤选项和丰富的数据映射功能这些特性大幅缩短了从外部系统收集并整合数据的开发周期。在维持低资源消耗的同时taosX 保证了高效的数据接入能力。
与市面上常见的开源ETL工具相比taosX在接入Kafka数据时能够显著减少服务器CPU资源的占用。这不仅意味着企业能够在更短的时间内完成数据接入任务还能有效降低硬件成本为企业的发展提供强有力的支持。 与市面上常见的开源 ETL 工具相比taosX 在接入 Kafka 数据时能够显著减少服务器 CPU 资源的占用。这不仅意味着企业能够在更短的时间内完成数据接入任务,还能有效降低硬件成本,为企业的发展提供强有力的支持。
### 数据即时分发至各地市 ### 数据即时分发至各地市
针对汇总至省级调度中心的分布式光伏电站运行数据,用户须将这些数据及时分发至各地市的调度中心,以便推动下游业务的顺利进行。 针对汇总至省级调度中心的分布式光伏电站运行数据,用户须将这些数据及时分发至各地市的调度中心,以便推动下游业务的顺利进行。
利用TDengine内置的结构化消息队列功能用户可以迅速构建数据分发子系统。通过订阅省级调度中心TDengine集群中的分布式光伏电站瞬时功率数据并根据各地市进行分类实时将数据分发至对应地市的TDengine。各地市调度中心根据收到的数据进一步驱动后续业务如本地电网负载调控等。分布式光伏电站运行数据的分发架构如下图所示 利用 TDengine 内置的结构化消息队列功能,用户可以迅速构建数据分发子系统。通过订阅省级调度中心 TDengine 集群中的分布式光伏电站瞬时功率数据,并根据各地市进行分类,实时将数据分发至对应地市的 TDengine。各地市调度中心根据收到的数据进一步驱动后续业务如本地电网负载调控等。分布式光伏电站运行数据的分发架构如下图所示
![分布式光伏电站运行数据的分发架构](./energy-distribution.png) ![分布式光伏电站运行数据的分发架构](./energy-distribution.png)
### 分类聚合计算瞬时发电功率 ### 分类聚合计算瞬时发电功率
分布式光伏电站通过配电变压器并入配电网并逐级向上汇聚至配网的10kV线端和110kV主网变压器。各级配电变压器、10kV线端、馈线以及110kV主网变压器所汇集的分布式光伏电站瞬时发电功率对电网的安全稳定运行具有决定性的影响。 分布式光伏电站通过配电变压器并入配电网,并逐级向上汇聚至配网的 10kV 线端和 110kV 主网变压器。各级配电变压器、10kV 线端、馈线以及 110kV 主网变压器所汇集的分布式光伏电站瞬时发电功率,对电网的安全稳定运行具有决定性的影响。
在一个省份中分布式光伏电站和配电变压器的数量庞大可达百万级别。每个分布式光伏电站和配电变压器通常设有8至10个测点涵盖三相电流电压、功率、功率因数、示值等指标总测点数往往超过千万个。在这种大规模的测点环境下实现快速聚合计算成为一个关键挑战。 在一个省份中,分布式光伏电站和配电变压器的数量庞大,可达百万级别。每个分布式光伏电站和配电变压器通常设有 8 10 个测点,涵盖三相电流电压、功率、功率因数、示值等指标,总测点数往往超过千万个。在这种大规模的测点环境下,实现快速聚合计算成为一个关键挑战。
TDengine的标签设计允许用户从超级表中迅速分类和检索数据这一点对于基于分布式光伏电站产生的大量时序数据进行快速聚合计算尤为重要。在TDengine中通常会分别为分布式光伏电站发电功率和配电变压器的瞬时功率创建超级表每个分布式光伏电站和配电变压器分别对应一张子表。通过TDengine的静态标签可以存储分布式光伏电站发电功率的相关分类信息如地区、所属配电变压器、所属馈线、所属10kV单端线端、所属110kV主网变压器等。 TDengine 的标签设计允许用户从超级表中迅速分类和检索数据,这一点对于基于分布式光伏电站产生的大量时序数据进行快速聚合计算尤为重要。在 TDengine中通常会分别为分布式光伏电站发电功率和配电变压器的瞬时功率创建超级表每个分布式光伏电站和配电变压器分别对应一张子表。通过 TDengine 的静态标签,可以存储分布式光伏电站发电功率的相关分类信息,如地区、所属配电变压器、所属馈线、所属 10kV 单端线端、所属 110kV 主网变压器等。
用户可根据多样化的标签如地区、所属配电变压器、所属馈线、所属主网变压器等对分布式光伏电站执行指定条件的聚合查询实现快速求解。例如用户可以迅速查询特定地区内所有配电变压器的下辖分布式光伏电站瞬时发电功率或根据业务需求针对不同级别的电网变电站220kV、110kV、35kV、10kV进行下辖分布式光伏电站瞬时功率的条件聚合查询。这为电网调度和设备故障判断提供了高效的数据支持手段。此类条件聚合查询的结果集可能包含数百至数十万条记录。 用户可根据多样化的标签如地区、所属配电变压器、所属馈线、所属主网变压器等对分布式光伏电站执行指定条件的聚合查询实现快速求解。例如用户可以迅速查询特定地区内所有配电变压器的下辖分布式光伏电站瞬时发电功率或根据业务需求针对不同级别的电网变电站220kV、110kV、35kV、10kV进行下辖分布式光伏电站瞬时功率的条件聚合查询。这为电网调度和设备故障判断提供了高效的数据支持手段。此类条件聚合查询的结果集可能包含数百至数十万条记录。
在TDengine中用户可以基于标签进行聚合分析无须编写代码进行表关联和数据处理仅须通过SQL查询超级表即可直接获得结果性能表现卓越通常能在几秒内返回查询结果。示例SQL如下。 在TDengine中用户可以基于标签进行聚合分析无须编写代码进行表关联和数据处理仅须通过 SQL 查询超级表即可直接获得结果,性能表现卓越,通常能在几秒内返回查询结果。示例 SQL 如下。
```sql ```sql
select sum(val) from dpv_power_1m where ts > now-1m group by dtr; select sum(val) from dpv_power_1m where ts > now-1m group by dtr;
``` ```
借助TDengine的高效聚合特性用户可以高效、及时地获得分布式光伏电站实时运行状态为运行决策提供可靠的数据支持。 借助 TDengine 的高效聚合特性,用户可以高效、及时地获得分布式光伏电站实时运行状态,为运行决策提供可靠的数据支持。
### 实时数据监测 ### 实时数据监测
在某储能项目中TDengine被应用于实时监控电池的充放电过程以保障电池的安全运行。所有电芯的充放电数据都被精确记录得益于TDengine的强大分析能力用户显著提高了数据处理和分析的效率。 在某储能项目中TDengine 被应用于实时监控电池的充放电过程,以保障电池的安全运行。所有电芯的充放电数据都被精确记录,得益于 TDengine 的强大分析能力,用户显著提高了数据处理和分析的效率。
### 智慧运维系统 ### 智慧运维系统
在某储能智慧运维系统中用户原有的解决方案受到站端系统在内存、CPU以及读写性能等硬件资源上的限制这导致项目进度一再推迟。TDengine凭借卓越的架构设计和工程实现以较低的资源消耗完美满足了项目需求解决了客户的痛点问题并迅速支持业务系统的顺利部署。 在某储能智慧运维系统中用户原有的解决方案受到站端系统在内存、CPU 以及读写性能等硬件资源上的限制这导致项目进度一再推迟。TDengine 凭借卓越的架构设计和工程实现,以较低的资源消耗完美满足了项目需求,解决了客户的痛点问题,并迅速支持业务系统的顺利部署。
TDengine的加入为储能设备注入了信息感知、控制协调以及远程运维的能力确保了电站和设备运行的安全性与可靠性。 TDengine 的加入为储能设备注入了信息感知、控制协调以及远程运维的能力,确保了电站和设备运行的安全性与可靠性。

View File

@ -28,7 +28,7 @@ toc_max_heading_level: 4
## TDengine在智慧油田中的应用 ## TDengine在智慧油田中的应用
在一项致力于提升大型油田生产管理水平的技术方案中,客户设定了实现多个关键领域技术集成的目标。这些领域包括但不限于如下这些 在一项致力于提升大型油田生产管理水平的技术方案中,客户设定了实现多个关键领域技术集成的目标。这些领域包括但不限于如下这些
- 自动化采集与控制:在生产现场构建先进的自动化系统,以实现数据的实时采集和精确控制,提升生产过程的自动化水平。 - 自动化采集与控制:在生产现场构建先进的自动化系统,以实现数据的实时采集和精确控制,提升生产过程的自动化水平。
- 生产视频系统:整合高效的视频监控系统,对生产过程进行全面监控,确保作业安全,并为管理层提供实时、直观的决策支持。 - 生产视频系统:整合高效的视频监控系统,对生产过程进行全面监控,确保作业安全,并为管理层提供实时、直观的决策支持。
- 工业物联网:运用物联网技术,将各种传感器和设备无缝连接,实现数据的远程采集与分析,提高油田运营的透明度和智能化程度。 - 工业物联网:运用物联网技术,将各种传感器和设备无缝连接,实现数据的远程采集与分析,提高油田运营的透明度和智能化程度。
@ -36,7 +36,7 @@ toc_max_heading_level: 4
- 智能化生产管控应用:研发智能化的生产管控应用,利用大数据分析和人工智能技术,提高生产效率,优化资源配置,加强生产管理。 - 智能化生产管控应用:研发智能化的生产管控应用,利用大数据分析和人工智能技术,提高生产效率,优化资源配置,加强生产管理。
- 信息化采集标准建设:制定统一的信息化采集标准和规范,确保数据的一致性、准确性和可管理性,为油田的数字化和智能化转型奠定坚实基础。 - 信息化采集标准建设:制定统一的信息化采集标准和规范,确保数据的一致性、准确性和可管理性,为油田的数字化和智能化转型奠定坚实基础。
以往的技术解决方案中客户普遍采用常规的实时数据库来搜集现场数据。然而这些传统软件在数据分析功能上显得力不从心。鉴于此用户不得不将数据迁移到以Oracle为代表的关系型数据库中以期利用这些数据库作为数据汇聚与分析的核心平台。 以往的技术解决方案中,客户普遍采用常规的实时数据库来搜集现场数据。然而,这些传统软件在数据分析功能上显得力不从心。鉴于此,用户不得不将数据迁移到以 Oracle 为代表的关系型数据库中,以期利用这些数据库作为数据汇聚与分析的核心平台。
但随着油田数据量的激增,客户遭遇了两大核心挑战:一是数据采集量的快速增长,二是数据采集频率的显著提高。在这种背景下,传统关系型数据库在数据处理上开始显现出一系列问题和瓶颈。 但随着油田数据量的激增,客户遭遇了两大核心挑战:一是数据采集量的快速增长,二是数据采集频率的显著提高。在这种背景下,传统关系型数据库在数据处理上开始显现出一系列问题和瓶颈。
@ -46,35 +46,35 @@ toc_max_heading_level: 4
- 数据的分区和归档操作变得异常复杂,一旦系统出现故障,恢复数据所需的时间极为漫长,这对业务连续性构成了严重威胁。 - 数据的分区和归档操作变得异常复杂,一旦系统出现故障,恢复数据所需的时间极为漫长,这对业务连续性构成了严重威胁。
- 数据协同效率低下,难以实现秒级的数据同步,这对于需要快速响应的业务场景来说是一个巨大的限制。 - 数据协同效率低下,难以实现秒级的数据同步,这对于需要快速响应的业务场景来说是一个巨大的限制。
在这样的项目背景下TDengine凭借作为时序数据库的独特优势展现出强大的竞争力。TDengine以高效的数据处理速度、卓越的数据压缩率、直观的系统易用性以及出色的可扩展性有效地支持了智慧油田项目在数据管理和分析方面的需求。此外TDengine还覆盖了数据生命周期的全管理流程并积极应对日益严峻的数据安全挑战确保了大型项目在技术上的顺利优化和升级。 在这样的项目背景下TDengine 凭借作为时序数据库的独特优势展现出强大的竞争力。TDengine 以高效的数据处理速度、卓越的数据压缩率、直观的系统易用性以及出色的可扩展性有效地支持了智慧油田项目在数据管理和分析方面的需求。此外TDengine 还覆盖了数据生命周期的全管理流程,并积极应对日益严峻的数据安全挑战,确保了大型项目在技术上的顺利优化和升级。
TDengine的“一个数据采集点一张表”与“超级表”的创新设计理念极大地提高了时序数据的写入、查询和存储效率。如下图所示当客户采用TDengine后他们可以根据不同专业领域的多样化数据需求创建相应的超级表。以油井为例客户首先须细致梳理业务所需的数据项及其采集频率随后为每一口油井建立一张独立的表并为这些表附加相应的静态标签如采油厂名称、所属业务部门等。这样的设计不仅确保了数据的精细化管理和高效检索还极大地简化了数据的组织和维护工作。 TDengine 的“一个数据采集点一张表”与“超级表”的创新设计理念,极大地提高了时序数据的写入、查询和存储效率。如下图所示,当客户采用 TDengine 后,他们可以根据不同专业领域的多样化数据需求,创建相应的超级表。以油井为例,客户首先须细致梳理业务所需的数据项及其采集频率,随后为每一口油井建立一张独立的表,并为这些表附加相应的静态标签,如采油厂名称、所属业务部门等。这样的设计不仅确保了数据的精细化管理和高效检索,还极大地简化了数据的组织和维护工作。
![TDengine 在智慧油田中的应用](./oil-1.png) ![TDengine 在智慧油田中的应用](./oil-1.png)
在将Oracle全面迁移至TDengine之后该项目的优化效果显著具体体现在以下几个方面。 在将 Oracle 全面迁移至 TDengine 之后,该项目的优化效果显著,具体体现在以下几个方面。
- 数据写入性能显著提升,同时硬件资源消耗得以降低,实现了更高的资源利用率。 - 数据写入性能显著提升,同时硬件资源消耗得以降低,实现了更高的资源利用率。
- 集群支持在线水平扩展,使得未来面对扩容需求时能够轻松应对,保证了系统的可扩展性和前瞻性。 - 集群支持在线水平扩展,使得未来面对扩容需求时能够轻松应对,保证了系统的可扩展性和前瞻性。
- 灵活定义数据的生命周期,简化了过期数据的管理流程,提高了数据管理的效率和便捷性。 - 灵活定义数据的生命周期,简化了过期数据的管理流程,提高了数据管理的效率和便捷性。
- 达到每秒500万测点的同步速率这一性能指标满足了用户在边云协同场景下的高实时性需求为数据的高效流动和利用提供了有力保障。 - 达到每秒 500 万测点的同步速率,这一性能指标满足了用户在边云协同场景下的高实时性需求,为数据的高效流动和利用提供了有力保障。
如果说前3点是TDengine固有特性的体现那么第4点无疑是其核心价值所在。为了满足人工智能研究、数据挖掘、设备预测性维护等多方面的数据需求客户经常需要将各个厂级的油田实时数据集中汇聚至公司层面然后再进一步将公司数据整合至集团或相应的业务板块。如下图所示这一过程对数据的实时性和同步性提出了极高要求TDengine的出色表现确保了这一关键环节的顺畅运行。 如果说前 3 点是 TDengine 固有特性的体现,那么第 4 点无疑是其核心价值所在。为了满足人工智能研究、数据挖掘、设备预测性维护等多方面的数据需求客户经常需要将各个厂级的油田实时数据集中汇聚至公司层面然后再进一步将公司数据整合至集团或相应的业务板块。如下图所示这一过程对数据的实时性和同步性提出了极高要求TDengine 的出色表现确保了这一关键环节的顺畅运行。
![智慧油田边云同步](./oil-2.png) ![智慧油田边云同步](./oil-2.png)
在传统业务模式中由于需要定义众多复杂的数据接口导致业务开发效率低下且数据传输频率受限难以满足对原始数据和原始频率进行同步的需求。在这一关键节点上客户可以充分利用TDengine的边云协同功能实现数据的实时高效同步。 在传统业务模式中,由于需要定义众多复杂的数据接口,导致业务开发效率低下,且数据传输频率受限,难以满足对原始数据和原始频率进行同步的需求。在这一关键节点上,客户可以充分利用 TDengine 的边云协同功能,实现数据的实时高效同步。
边云协同允许将多个分散在不同地点的TDengine服务中的全量历史数据以及新产生的数据实时同步至云端TDengine。作为TDengine套件的重要组成部分taosX工具简化了这一过程。用户只须在数据接收端部署taosX并通过一行简单的命令即可轻松实现实时数据同步、历史数据迁移或是两者的混合处理方案。例如同步某台服务器的db1 的历史数据以及实时数据到本地的db2数据库仅需要执行如下一条命令。 边云协同允许将多个分散在不同地点的 TDengine 服务中的全量历史数据以及新产生的数据实时同步至云端 TDengine。作为 TDengine 套件的重要组成部分taosX 工具简化了这一过程。用户只须在数据接收端部署 taosX并通过一行简单的命令即可轻松实现实时数据同步、历史数据迁移或是两者的混合处理方案。例如同步某台服务器的 db1 的历史数据以及实时数据到本地的 db2 数据库仅需要执行如下一条命令。
```shell ```shell
taosxrun-f'taos://192.168.1.101:6030/db1?mode=all'-t'taos://localhost:6030/db2'-v taosxrun-f'taos://192.168.1.101:6030/db1?mode=all'-t'taos://localhost:6030/db2'-v
``` ```
此外taosX提供了一种基于数据订阅的实时数据同步方法它按照事件到达的顺序来处理数据。这种方法确保了无论是实时数据还是历史数据的写入都能够实时同步到目标集群并且不会遗漏任何补录的历史数据。 此外taosX提供了一种基于数据订阅的实时数据同步方法它按照事件到达的顺序来处理数据。这种方法确保了无论是实时数据还是历史数据的写入都能够实时同步到目标集群并且不会遗漏任何补录的历史数据。
通过实施这一方案多个TDengine服务得以通过taosX跨省份实时同步数据至云端总部集群。迄今为止在该项目中TDengine总部集群存储的数据量已达到36TB总数据条目超过1034亿条压缩率降至10%以内,这一成就令人瞩目。 通过实施这一方案,多个 TDengine 服务得以通过 taosX 跨省份实时同步数据至云端总部集群。迄今为止在该项目中TDengine 总部集群存储的数据量已达到 36TB总数据条目超过 1034 亿条,压缩率降至 10% 以内,这一成就令人瞩目。
边云协同功能的广泛采用充分验证了TDengine在处理大规模、高频工业数据方面的卓越实力。其灵活的架构设计和优化的存储机制不仅满足了工业物联网环境对实时数据处理的高要求而且有效降低了存储成本。同时TDengine的水平扩展性、实时分析支持、边缘计算集成以及强大的数据安全保护功能为工业物联网的智能化发展奠定了坚实的技术基础。这不仅确保了数据处理的高效性和安全性还简化了维护流程相较于传统关系型数据库展现了更高的成本效益。TDengine的这些优势为工业物联网的持续进步和发展提供了强有力的支持和保障。 边云协同功能的广泛采用充分验证了 TDengine 在处理大规模、高频工业数据方面的卓越实力。其灵活的架构设计和优化的存储机制不仅满足了工业物联网环境对实时数据处理的高要求而且有效降低了存储成本。同时TDengine 的水平扩展性、实时分析支持、边缘计算集成以及强大的数据安全保护功能为工业物联网的智能化发展奠定了坚实的技术基础。这不仅确保了数据处理的高效性和安全性还简化了维护流程相较于传统关系型数据库展现了更高的成本效益。TDengine 的这些优势为工业物联网的持续进步和发展提供了强有力的支持和保障。
随着项目的深入推进TDengine的数据抽稀功能作为处理和管理时序数据的一种高效策略在与Kudu为核心的数据中台相结合时展现出非凡的能力。数据抽稀通过精心挑选具有代表性的数据点有效减少了数据的存储量同时确保了数据的关键特征和趋势得以完整保留。这种方法特别适合于那些需要长期保存数据但又不必要保留所有细节的应用场景。例如在监控系统中随着时间的积累只须保存关键时间节点的数据而不是每个瞬间的数据。 随着项目的深入推进TDengine 的数据抽稀功能,作为处理和管理时序数据的一种高效策略,在与 Kudu 为核心的数据中台相结合时,展现出非凡的能力。数据抽稀通过精心挑选具有代表性的数据点,有效减少了数据的存储量,同时确保了数据的关键特征和趋势得以完整保留。这种方法特别适合于那些需要长期保存数据但又不必要保留所有细节的应用场景。例如,在监控系统中,随着时间的积累,只须保存关键时间节点的数据,而不是每个瞬间的数据。
因此TDengine成为构建数据中台的理想选择尤其是对于那些需要高效处理大量时序数据的中台环境。通过将TDengine集成到数据中台中企业能够进一步优化其数据存储、查询和管理流程从而提高数据平台的功能性和效率。TDengine的这一特性不仅提高了数据处理的速度和效率还为企业提供了更加灵活和经济的数据管理解决方案。 因此TDengine 成为构建数据中台的理想选择,尤其是对于那些需要高效处理大量时序数据的中台环境。通过将 TDengine 集成到数据中台中企业能够进一步优化其数据存储、查询和管理流程从而提高数据平台的功能性和效率。TDengine 的这一特性不仅提高了数据处理的速度和效率,还为企业提供了更加灵活和经济的数据管理解决方案。

View File

@ -6,59 +6,56 @@ toc_max_heading_level: 4
智能制造与数据库技术的深度融合,已成为现代工业技术进步的一个重要里程碑。随着信息技术的飞速发展,智能制造已经成为推动工业转型升级的关键动力。在这一进程中,数据库技术扮演着不可或缺的角色,它不仅承载着海量的生产数据,还为智能制造提供了强大的数据支持和服务。 智能制造与数据库技术的深度融合,已成为现代工业技术进步的一个重要里程碑。随着信息技术的飞速发展,智能制造已经成为推动工业转型升级的关键动力。在这一进程中,数据库技术扮演着不可或缺的角色,它不仅承载着海量的生产数据,还为智能制造提供了强大的数据支持和服务。
特别是随着大数据、云计算等前沿技术的崛起TDengine凭借灵活多变的数据模型和卓越的数据处理能力在智能制造领域大放异彩。TDengine能够高效地管理和分析制造过程中的各类数据从生产线的实时监控到产品质量的精细管理再到供应链的优化协调它都能提供精准可靠的数据支持。 特别是随着大数据、云计算等前沿技术的崛起TDengine 凭借灵活多变的数据模型和卓越的数据处理能力在智能制造领域大放异彩。TDengine 能够高效地管理和分析制造过程中的各类数据,从生产线的实时监控到产品质量的精细管理,再到供应链的优化协调,它都能提供精准可靠的数据支持。
## 智能制造面临的挑战 ## 智能制造面临的挑战
依照传统的IEC 62264-1层次模型工业制造领域被划分为5个层级—现场设备层、现场控制层、过程监控层、生产管理层及企业资源层。这一模型清晰地描绘了从生产现场的实时操作到企业管理层面的战略规划每一层级的跃迁都伴随着数据量的急剧增长和需求的变化如下图所示。这种层级划分不仅反映了工业制造过程中信息流动的复杂性也揭示了随着生产规模的扩大和自动程度的提高对数据处理能力和效率的要求也在不断提升。 依照传统的 IEC 62264-1 层次模型,工业制造领域被划分为 5 个层级—现场设备层、现场控制层、过程监控层、生产管理层及企业资源层。这一模型清晰地描绘了从生产现场的实时操作到企业管理层面的战略规划,每一层级的跃迁都伴随着数据量的急剧增长和需求的变化,如下图所示。这种层级划分不仅反映了工业制造过程中信息流动的复杂性,也揭示了随着生产规模的扩大和自动程度的提高,对数据处理能力和效率的要求也在不断提升。
![IEC 62264-1 5 层架构模型](./manufacture-1.png) ![IEC 62264-1 5 层架构模型](./manufacture-1.png)
随着工业数字化的巨浪席卷而来,我们见证了数据采集量的爆炸式增长和分析需求的日益复杂化,随之而来的问题和挑战也愈发凸显。 随着工业数字化的巨浪席卷而来,我们见证了数据采集量的爆炸式增长和分析需求的日益复杂化,随之而来的问题和挑战也愈发凸显。
- 海量设备数据采集:在过去的十余年里,制造业的数字化进程取得了显著进展。工厂的数据采集点从传统的数千个激增至数十万甚至数百万个。面对如此庞大的 - 海量设备数据采集:在过去的十余年里,制造业的数字化进程取得了显著进展。工厂的数据采集点从传统的数千个激增至数十万甚至数百万个。面对如此庞大的数据采集需求,传统的实时数据库已显得力不从心。
数据采集需求,传统的实时数据库已显得力不从心。
- 动态扩容:随着数据的逐步接入,初期的硬件配置往往较为有限。随着业务量的增加和数据量的上升,硬件资源必须迅速扩展以满足业务的正常运行。然而,一旦系统上线运行,通常不允许进行停机扩容,这就要求系统在设计时就要考虑到未来的扩展性。 - 动态扩容:随着数据的逐步接入,初期的硬件配置往往较为有限。随着业务量的增加和数据量的上升,硬件资源必须迅速扩展以满足业务的正常运行。然而,一旦系统上线运行,通常不允许进行停机扩容,这就要求系统在设计时就要考虑到未来的扩展性。
- 数据关联与多维分析:传统工业实时数据库通常只包含几个固定的字段,如变量名、变量值、质量戳和时间戳,缺乏信息间的关联性,这使得复杂的多维分析变 - 数据关联与多维分析:传统工业实时数据库通常只包含几个固定的字段,如变量名、变量值、质量戳和时间戳,缺乏信息间的关联性,这使得复杂的多维分析变得难以执行。
得难以执行。
- 截面查询与插值查询:为了满足报表和其他统计需求,系统需要支持历史截面查询以及按指定时间间隔进行的线性插值查询。 - 截面查询与插值查询:为了满足报表和其他统计需求,系统需要支持历史截面查询以及按指定时间间隔进行的线性插值查询。
- 第三方系统数据库对接除了设备数据以外还须采集来自各个生产系统的数据这些系统通常位于过程监控层或生产管理层。这就要求系统能够实时采集数据、迁移历史数据并在网络断开时能够断线续传。除了API以外常见的对接方式还包括数据库对接例如与LIMIS对接采集其关系型数据库中存储的时序数据或与第三方生产数据库如AVEVA PI System或Wonderware系统对接获取实时、历史和报警数据。 - 第三方系统数据库对接:除了设备数据以外,还须采集来自各个生产系统的数据,这些系统通常位于过程监控层或生产管理层。这就要求系统能够实时采集数据、迁移历史数据,并在网络断开时能够断线续传。除了 API 以外常见的对接方式还包括数据库对接例如与LIMIS对接采集其关系型数据库中存储的时序数据或与第三方生产数据库如AVEVA PI System或Wonderware系统对接获取实时、历史和报警数据。
- 与SCADASupervisory Control and Data Acquisition监控控制与数据采集系统对接SCADA系统作为过程监控层的核心汇集了站内和厂区的所有生产数据并提供了直观易用的开发、运行和管理界面。然而其自带的传统实时数据库在分析能力和高密度点位容量上存在限制通常仅支持约1万个点位。因此将SCADA系统与性能更优越的数据库相结合充分发挥双方的优势通过面向操作技术层的模块化组态开发为工业控制系统注入新的活力已成为工业数字化发展的重要方向。 - 与SCADASupervisory Control and Data Acquisition监控控制与数据采集系统对接SCADA 系统作为过程监控层的核心,汇集了站内和厂区的所有生产数据,并提供了直观易用的开发、运行和管理界面。然而,其自带的传统实时数据库在分析能力和高密度点位容量上存在限制,通常仅支持约 1 万个点位。因此,将 SCADA 系统与性能更优越的数据库相结合,充分发挥双方的优势,通过面向操作技术层的模块化组态开发,为工业控制系统注入新的活力,已成为工业数字化发展的重要方向。
## TDengine在智能制造中的核心价值 ## TDengine在智能制造中的核心价值
智能制造领域涵盖众多类型的数据设备、系统以及复杂的数据分析方法。TDengine 不仅巧妙解决了数据接入和存储的挑战更通过强大的数据分析功能为黄金批次、设备综合效率Overall Equipment EffectivenessOEE、设备预防性维护、统计过程控制Statistical Process ControlSPC等关键分析系统提供了卓越的数据统计服务。这不仅显著提高了生产效率和产品品质还有效降低了生产成本。 智能制造领域涵盖众多类型的数据设备、系统以及复杂的数据分析方法。TDengine 不仅巧妙解决了数据接入和存储的挑战更通过强大的数据分析功能为黄金批次、设备综合效率Overall Equipment EffectivenessOEE、设备预防性维护、统计过程控制Statistical Process ControlSPC等关键分析系统提供了卓越的数据统计服务。这不仅显著提高了生产效率和产品品质还有效降低了生产成本。
- 广泛兼容各种设备和系统TDengine配备了可视化配置的采集器能够轻松对接SQL Server、MySQL、Oracle、AVEVA PI System、AVEVA Historian、InfluxDB、OpenTSDB、ClickHouse等多种系统支持实时数据采集、历史数据迁移以及断线续传等功能。通过与诸如Kepware或KingIOServer这样的强大第三方采集平台对接TDengine能够应对各种工业互联网协议实现海量生产设备数据的接入。 - 广泛兼容各种设备和系统TDengine配备了可视化配置的采集器能够轻松对接 SQL Server、MySQL、Oracle、AVEVA PI System、AVEVA Historian、InfluxDB、OpenTSDB、ClickHouse 等多种系统,支持实时数据采集、历史数据迁移以及断线续传等功能。通过与诸如 Kepware KingIOServer 这样的强大第三方采集平台对接TDengine 能够应对各种工业互联网协议,实现海量生产设备数据的接入。
- 高效的集群管理与传统实时数据库相比TDengine采用了基于云原生技术的先进架构能够轻松实现动态扩容。TDengine集群采用Raft强一致性协议确保生产数据对外查询结果的一致性。集群的运维管理简便内部自动完成数据分区和数据分片实现了分布式、高可用性和负载均衡的集群环境。 - 高效的集群管理与传统实时数据库相比TDengine 采用了基于云原生技术的先进架构能够轻松实现动态扩容。TDengine 集群采用 Raft 强一致性协议,确保生产数据对外查询结果的一致性。集群的运维管理简便,内部自动完成数据分区和数据分片,实现了分布式、高可用性和负载均衡的集群环境。
- 设备物模型TDengine秉承“一台设备一张表”的设计策略构建了以设备对象为核心的变量关系模型为相关分析提供了坚实的基础。 - 设备物模型TDengine 秉承“一台设备一张表”的设计策略,构建了以设备对象为核心的变量关系模型,为相关分析提供了坚实的基础。
- 先进的时序分析TDengine支持时序领域的截面查询、步进查询、线性插值查询等多种查询方式并提供了窗口查询功能使得设备状态时长统计、连续过载报警等时序分析变得简单易行。 - 先进的时序分析TDengine 支持时序领域的截面查询、步进查询、线性插值查询等多种查询方式,并提供了窗口查询功能,使得设备状态时长统计、连续过载报警等时序分析变得简单易行。
## TDengine在智能制造中的应用 ## TDengine在智能制造中的应用
作为新一代时序大数据平台的杰出代表TDengine针对工业场景中的种种挑战凭借独特的设计理念和卓越的性能为智能制造领域注入了强大的动力。接下来以某烟厂的实际应用案例为例进行阐述。 作为新一代时序大数据平台的杰出代表TDengine 针对工业场景中的种种挑战,凭借独特的设计理念和卓越的性能,为智能制造领域注入了强大的动力。接下来以某烟厂的实际应用案例为例进行阐述。
在该项目中TDengine集群为工厂内的各类业务提供了坚实的时序数据服务。无论是看板展示还是预警系统等对实时数据要求极高的业务场景TDengine都能够提供低延迟、高质量的数据响应。自系统上线以来已稳定运行超过两年成功存储超过2万亿条数据且查询最新数据的延迟控制在毫秒级完全达到项目立项的预期要求。该项目的亮点设计如下 在该项目中TDengine 集群为工厂内的各类业务提供了坚实的时序数据服务。无论是看板展示还是预警系统等对实时数据要求极高的业务场景TDengine 都能够提供低延迟、高质量的数据响应。自系统上线以来,已稳定运行超过两年,成功存储超过 2 万亿条数据,且查询最新数据的延迟控制在毫秒级,完全达到项目立项的预期要求。该项目的亮点设计如下
- 高效采集烟草项目初期规模有限全厂测点数不足10万。数据采集网关将部分测点数据写入OPCOLE for Process Control用于过程控制的OLE服务器并通过OPC协议接入TDengine另一部分测点数据则写入Kafka进而接入TDengine。客户无须开发OPC或Kafka接口应用程序即可实现数据的高效接入。对于采用关系型数据库如LIMIS的场景TDengine通过可视化配置SQL Server采集器实现了数据的同步更新、历史数据迁移、断线续传以及故障诊断等功能无须编写代码大幅降低了开发和运维成本。在其兄弟单位中部分生产系统使用Wonderware数据库现AVEVA HistorianTDengine通过建立AVEVA Historian采集器同样实现了零代码可视化配置轻松完成实时数据接入、历史数据迁移及断线续传等功能。相较于初次定制化开发长达3个月的交付周期TDengine采集器的部署仅需要十几分钟且具有更强的可靠性和灵活性。 - 高效采集:烟草项目初期规模有限,全厂测点数不足 10 万。数据采集网关将部分测点数据写入OPCOLE for Process Control用于过程控制的 OLE服务器并通过 OPC 协议接入 TDengine另一部分测点数据则写入 Kafka进而接入 TDengine。客户无须开发 OP C或 Kafka 接口应用程序,即可实现数据的高效接入。对于采用关系型数据库如 LIMIS 的场景TDengine 通过可视化配置 SQL Server 采集器,实现了数据的同步更新、历史数据迁移、断线续传以及故障诊断等功能,无须编写代码,大幅降低了开发和运维成本。在其兄弟单位中,部分生产系统使用 Wonderware 数据库(现 AVEVA HistorianTDengine 通过建立 AVEVA Historian 采集器,同样实现了零代码可视化配置,轻松完成实时数据接入、历史数据迁移及断线续传等功能。相较于初次定制化开发长达 3 个月的交付周期TDengine 采集器的部署仅需要十几分钟,且具有更强的可靠性和灵活性。
- 动态扩容和负载再均衡为应对未来业务的增长TDengine支持在不停止服务的前提下进行动态的纵向和水平扩容。在单台计算机资源充足的场景下TDengine 可通过拆分虚拟节点服务充分利用计算机的额外CPU资源来提高数据库性能。而在资源不足的情况下只须增加物理节点TDengine集群便能根据需求进行自动负载均衡。 - 动态扩容和负载再均衡为应对未来业务的增长TDengine 支持在不停止服务的前提下进行动态的纵向和水平扩容。在单台计算机资源充足的场景下TDengine 可通过拆分虚拟节点服务,充分利用计算机的额外 CPU 资源来提高数据库性能。而在资源不足的情况下只须增加物理节点TDengine 集群便能根据需求进行自动负载均衡。
- 支持建立大宽表TDengine的这一设计满足了数据关联和多维分析的需求解决了传统工业实时数据库固定格式数据存储的限制。通过超级表的静态标签设计 - 支持建立大宽表TDengine 的这一设计满足了数据关联和多维分析的需求,解决了传统工业实时数据库固定格式数据存储的限制。通过超级表的静态标签设计,
用户可以便捷地进行多维度数据分析。 用户可以便捷地进行多维度数据分析。
- 支持丰富的对外接口作为数据中心TDengine可对接第三方可视化界面如看板、MES、预警报警、水分预测、零配件需求预测、SPC、故障分析、产能分析、能耗分析、预防性维护等系统如下图所示 - 支持丰富的对外接口作为数据中心TDengine 可对接第三方可视化界面如看板、MES、预警报警、水分预测、零配件需求预测、SPC、故障分析、产能分析、能耗分析、预防性维护等系统如下图所示
![TDengine支持丰富的对外接口](./manufacture-2.png) ![TDengine支持丰富的对外接口](./manufacture-2.png)
- TDengine与SCADA系统的融合生产调度中心常采用SCADA系统进行数据采集、监视和控制。SCADA系统通过TDengine的ODBC接口将实时和历史数据、设备报警、操作记录、登录信息以及系统事件等数据存储到TDengine中。与SCADA系统自带的历史库相比客户在查询曲线、报表等历史数据时耗时更短、响应更快、灵活性更强这不仅降低了对SCADA系统的压力还提高了整个系统的效率和稳定性。 - TDengine SCADA 系统的融合:生产调度中心常采用 SCADA 系统进行数据采集、监视和控制。SCADA 系统通过 TDengine ODBC 接口,将实时和历史数据、设备报警、操作记录、登录信息以及系统事件等数据存储到 TDengine 中。与 SCADA 系统自带的历史库相比,客户在查询曲线、报表等历史数据时耗时更短、响应更快、灵活性更强,这不仅降低了对 SCADA 系统的压力,还提高了整个系统的效率和稳定性。
此外TDengine还支持云边系统部署如下图所示 此外TDengine 还支持云边系统部署,如下图所示:
![TDengine支持边云协同系统部署](./manufacture-3.png) ![TDengine支持边云协同系统部署](./manufacture-3.png)
在工厂侧部署TDengine不仅为该烟厂提供数据存储、查询和分析服务还能通过高效的数据同步工具实现工厂数据实时同步至上一级或集团中心。TDengine的量化裁剪功能使其能够适应资源有限的计算机或边缘盒子环境满足不同规模部署的需求。TDengine的同步特性如下。 在工厂侧部署 TDengine不仅为该烟厂提供数据存储、查询和分析服务还能通过高效的数据同步工具实现工厂数据实时同步至上一级或集团中心。TDengine 的量化裁剪功能使其能够适应资源有限的计算机或边缘盒子环境满足不同规模部署的需求。TDengine 的同步特性如下。
- 统计意义的降采样同步TDengine利用流计算技术实现了具有统计意义的降采样数据同步。通过这种方式可以在不损失数据精度的前提下对数据进行降采样处理确保即使在数据时间颗粒度增大的情况下也能保持数据的准确性。流计算的使用方式简便无须复杂配置客户只须根据自己的需求编写SQL即可实现。 - 统计意义的降采样同步TDengine 利用流计算技术实现了具有统计意义的降采样数据同步。通过这种方式可以在不损失数据精度的前提下对数据进行降采样处理确保即使在数据时间颗粒度增大的情况下也能保持数据的准确性。流计算的使用方式简便无须复杂配置客户只须根据自己的需求编写SQL即可实现。
- 订阅式传输TDengine采用了类似Kafka的消息订阅方式进行数据同步相较于传统的周期性同步和普通订阅访问这种方式实现了负载隔离和流量削峰提高了同步的稳定性和效率。消息订阅机制遵循至少一次消费原则确保在网络断线故障恢复后能够从断点处继续消费数据或者从头开始消费以保证消费者能够接收到完整的生产数据。 - 订阅式传输TDengine 采用了类似 Kafka 的消息订阅方式进行数据同步,相较于传统的周期性同步和普通订阅访问,这种方式实现了负载隔离和流量削峰,提高了同步的稳定性和效率。消息订阅机制遵循至少一次消费原则,确保在网络断线故障恢复后,能够从断点处继续消费数据,或者从头开始消费,以保证消费者能够接收到完整的生产数据。
- 操作行为同步TDengine能够将操作行为同步到中心端确保设备故障或人为对边缘侧数据的修改和删除操作能够实时反映到中心侧维护了数据的一致性。 - 操作行为同步TDengine 能够将操作行为同步到中心端,确保设备故障或人为对边缘侧数据的修改和删除操作能够实时反映到中心侧,维护了数据的一致性。
- 数据传输压缩在数据传输过程中TDengine实现了高达20%的数据压缩率,结合流计算的降采样同步,显著降低了同步过程对带宽的占用,提高了数据传输 - 数据传输压缩在数据传输过程中TDengine 实现了高达 20% 的数据压缩率,结合流计算的降采样同步,显著降低了同步过程对带宽的占用,提高了数据传输效率。
效率。 - 多种同步方式TDengine 支持多对一、一对多以及多对多的数据同步模式,满足不同场景下的数据同步需求。
- 多种同步方式TDengine支持多对一、一对多以及多对多的数据同步模式满足不同场景下的数据同步需求。 - 支持双活:数据中心侧可实现异地灾备。边缘侧的 TDengine 或第三方客户端能够根据集团中心侧的 TDengine 状态进行智能连接。若主 TDengine 集群发生故障,无法对外提供服务,异地备用的 TDengine 集群将立即激活,接管所有客户端的访问连接,包括写入和查询功能。一旦主 TDengine 集群恢复正常,备用集群会将历史缓存和实时数据同步回主集群,整个过程对客户端透明,无须人工干预。
- 支持双活数据中心侧可实现异地灾备。边缘侧的TDengine或第三方客户端能够根据集团中心侧的TDengine状态进行智能连接。若主TDengine集群发生故障无法对外提供服务异地备用的TDengine集群将立即激活接管所有客户端的访问连接包括写入和查询功能。一旦主TDengine集群恢复正常备用集群会将历史缓存和实时数据同步回主集群整个过程对客户端透明无须人工干预。

View File

@ -8,16 +8,15 @@ toc_max_heading_level: 4
在金融领域,行情数据的处理尤为复杂,不仅数据量大,而且具有标准化的数据格式、长期的存储需求以及高度分散的子表管理要求,这些特点共同构成了数据处理领域的一大难题。具体挑战如下。 在金融领域,行情数据的处理尤为复杂,不仅数据量大,而且具有标准化的数据格式、长期的存储需求以及高度分散的子表管理要求,这些特点共同构成了数据处理领域的一大难题。具体挑战如下。
- 数据量庞大金融市场的数据量达到TB级别这为数据的存储和管理带来巨大的挑战。金融机构需要确保有足够的能力来处理和存储这些数据同时保证系统的稳定性和可扩展性。 - 数据量庞大:金融市场的数据量达到 TB 级别,这为数据的存储和管理带来巨大的挑战。金融机构需要确保有足够的能力来处理和存储这些数据,同时保证系统的稳定性和可扩展性。
- 标的数量众多:金融市场中资产和衍生品的种类繁多,这意味着行情中心需要管理数十万至数千万个不同的标的。这种多样性和数量级的增长要求系统必须具备高度的灵活性和高效的管理能力。 - 标的数量众多:金融市场中资产和衍生品的种类繁多,这意味着行情中心需要管理数十万至数千万个不同的标的。这种多样性和数量级的增长要求系统必须具备高度的灵活性和高效的管理能力。
- 存储期限长金融数据的敏感性要求这些数据必须被长期保存通常存储期限为5至10年有些关键数据甚至需要保存超过30年。这要求金融机构必须投资于可靠的存储解决方案以确保长期数据的完整性和可访问性。 - 存储期限长:金融数据的敏感性要求这些数据必须被长期保存,通常存储期限为 5 10 年,有些关键数据甚至需要保存超过 30 年。这要求金融机构必须投资于可靠的存储解决方案,以确保长期数据的完整性和可访问性。
## 处理金融时序数据时面临的挑战 ## 处理金融时序数据时面临的挑战
在时序数据处理领域,金融机构面临着一系列核心需求与挑战,这些需求与挑战不仅关系到日常运营的效率,还直接影响到决策的准确性和业务的创新能力。 在时序数据处理领域,金融机构面临着一系列核心需求与挑战,这些需求与挑战不仅关系到日常运营的效率,还直接影响到决策的准确性和业务的创新能力。
- 高性能写入:金融机构需要的是一个能够实时处理巨量数据流的平台。随着交易活动的频繁和市场数据的不断更新,平台必须能够每秒处理数以亿计的数据点, - 高性能写入:金融机构需要的是一个能够实时处理巨量数据流的平台。随着交易活动的频繁和市场数据的不断更新,平台必须能够每秒处理数以亿计的数据点,确保数据的即时性和完整性,以支持实时的交易决策和风险管理。
确保数据的即时性和完整性,以支持实时的交易决策和风险管理。
- 强大的读取及数据消费性能:金融市场的特点是业务场景多变,这要求平台必须具备高度的数据读取和计算能力。例如,量化投资策略的研发依赖于实时行情数据和衍生数据的深度分析。平台需要支持高效的数据查询和计算,以便量化分析师能够快速回测模型、优化策略,并进行实时学习和调整。 - 强大的读取及数据消费性能:金融市场的特点是业务场景多变,这要求平台必须具备高度的数据读取和计算能力。例如,量化投资策略的研发依赖于实时行情数据和衍生数据的深度分析。平台需要支持高效的数据查询和计算,以便量化分析师能够快速回测模型、优化策略,并进行实时学习和调整。
- 计算性能:资产和衍生品的监控对平台的计算性能提出了更高的要求。金融机构需要能够执行复杂的统计分析、风险预测和价格发现等计算任务,以监控市场动态和评估投资组合的风险。这要求平台不仅要有强大的计算能力,还要能够提供快速响应,以支持实时决策和快速反应市场变化。 - 计算性能:资产和衍生品的监控对平台的计算性能提出了更高的要求。金融机构需要能够执行复杂的统计分析、风险预测和价格发现等计算任务,以监控市场动态和评估投资组合的风险。这要求平台不仅要有强大的计算能力,还要能够提供快速响应,以支持实时决策和快速反应市场变化。
@ -40,7 +39,7 @@ TDengine作为一个高性能、云原生的时序大数据平台在金融
特别是在金融科技取得突破性进展的今天,量化交易已成为资本市场中一股不可逆转的趋势。基于行情数据的量化交易平台,凭借其全面的应用模块和深入的数据应用能力,为金融市场提供了精准的分析和智能化的决策支持。这些平台不仅能够处理海量的市场数据,还能够运用先进的算法和模型,为交易者提供个性化的投资策略和风险管理方案。 特别是在金融科技取得突破性进展的今天,量化交易已成为资本市场中一股不可逆转的趋势。基于行情数据的量化交易平台,凭借其全面的应用模块和深入的数据应用能力,为金融市场提供了精准的分析和智能化的决策支持。这些平台不仅能够处理海量的市场数据,还能够运用先进的算法和模型,为交易者提供个性化的投资策略和风险管理方案。
在此背景下TDengine作为一个专为时序数据设计的高性能数据库其在量化交易平台中的应用进一步提高了平台的性能和效率。TDengine的主要模块或功能如下。 在此背景下TDengine 作为一个专为时序数据设计的高性能数据库其在量化交易平台中的应用进一步提高了平台的性能和效率。TDengine 的主要模块或功能如下。
1. 多路校验 1. 多路校验
@ -64,7 +63,7 @@ TDengine 中的智能监控和分析是一系列高级特性,它们共同构
- 自动调整交易策略TDengine 的函数、UDF 和流计算功能,结合其他计算框架,使得交易策略能够根据市场实时数据自动调整。这种自适应的策略调整机制优化了资产配置,提高了交易的灵活性和效率。 - 自动调整交易策略TDengine 的函数、UDF 和流计算功能,结合其他计算框架,使得交易策略能够根据市场实时数据自动调整。这种自适应的策略调整机制优化了资产配置,提高了交易的灵活性和效率。
- 清晰的交易执行计划通过对数据进行全面的计算分析TDengine 能够输出清晰、明确的交易执行计划,为投资团队提供决策支持。这些计划结合了市场分析和风险评估,有助于团队制定出更加精准和有效的投资策略。 - 清晰的交易执行计划通过对数据进行全面的计算分析TDengine 能够输出清晰、明确的交易执行计划,为投资团队提供决策支持。这些计划结合了市场分析和风险评估,有助于团队制定出更加精准和有效的投资策略。
行情数据文件和实时数据流统一汇入TDengine集群后客户可以通过HTTP接口轻松访问所有时序数据构建各种金融服务应用。行情数据系统架构见下图不仅提供了数据的集中管理还为开发者提供了开放的接口使得构建复杂的数据分析工具和金融服务应用变得更加便捷和高效。通过这种架构金融机构能够加快创新速度提升服务质量并在竞争激烈的金融市场中获得优势。 行情数据文件和实时数据流统一汇入 TDengine 集群后,客户可以通过 HTTP 接口轻松访问所有时序数据,构建各种金融服务应用。行情数据系统架构(见下图)不仅提供了数据的集中管理,还为开发者提供了开放的接口,使得构建复杂的数据分析工具和金融服务应用变得更加便捷和高效。通过这种架构,金融机构能够加快创新速度,提升服务质量,并在竞争激烈的金融市场中获得优势。
![行情数据系统架构](./finance-1.png) ![行情数据系统架构](./finance-1.png)
@ -77,8 +76,8 @@ TDengine 中的智能监控和分析是一系列高级特性,它们共同构
- 高并发:行情中心需要同时为众多应用提供高效的服务,必须具备强大的高并发处理能力。除了支持实时交易的核心业务以外,行情中心还须为量化回测、因子计算、风险管理等提供高效的时序数据服务。 - 高并发:行情中心需要同时为众多应用提供高效的服务,必须具备强大的高并发处理能力。除了支持实时交易的核心业务以外,行情中心还须为量化回测、因子计算、风险管理等提供高效的时序数据服务。
- 稳定性:作为金融市场的心脏,行情中心的稳定运行至关重要。任何形式的停机或故障都可能导致不可估量的经济损失。系统的高稳定性和可靠性是不可或缺的。众多券商在经过全面评估后,纷纷选择 TDengine 作为构建行情中心的核心组件,并且已经稳定运行多年。这一选择充分验证了 TDengine 在以下几个关键方面的卓越价值。 - 稳定性:作为金融市场的心脏,行情中心的稳定运行至关重要。任何形式的停机或故障都可能导致不可估量的经济损失。系统的高稳定性和可靠性是不可或缺的。众多券商在经过全面评估后,纷纷选择 TDengine 作为构建行情中心的核心组件,并且已经稳定运行多年。这一选择充分验证了 TDengine 在以下几个关键方面的卓越价值。
- 实时性TDengine 的高效写入能力能够处理大量的实时数据流,支持毫秒级甚至亚毫秒级的数据查询响应,完美契合行情中心对实时性的高标准要求。 - 实时性TDengine 的高效写入能力能够处理大量的实时数据流,支持毫秒级甚至亚毫秒级的数据查询响应,完美契合行情中心对实时性的高标准要求。
- 高并发处理TDengine 设计了卓越的并发处理机制能够支持从千万到亿级别的QPSQueries Per Second每秒查询率的时序数据读写操作确保了各类业务对实时和历史行情数据的写入和查询需求得到满足。 - 高并发处理TDengine 设计了卓越的并发处理机制,能够支持从千万到亿级别的 QPSQueries Per Second每秒查询率的时序数据读写操作确保了各类业务对实时和历史行情数据的写入和查询需求得到满足。
- 海量数据处理能力TDengine 的“一个数据采集点一张表”创新设计,结合先进的数据压缩技术和高效的存储格式,使得即使在存储超过 10 年历史数据的情况下,依然能够保持良好的读写性能,并且显著降低了存储空间的占用。 - 海量数据处理能力TDengine 的“一个数据采集点一张表”创新设计,结合先进的数据压缩技术和高效的存储格式,使得即使在存储超过 10 年历史数据的情况下,依然能够保持良好的读写性能,并且显著降低了存储空间的占用。
- 稳定性TDengine 提供了服务的高可用性和数据的强一致性保障,即使在单个节点发生故障的情况下,也能确保系统连续稳定运行,满足了行情中心对系统稳定性的严格要求。 - 稳定性TDengine 提供了服务的高可用性和数据的强一致性保障,即使在单个节点发生故障的情况下,也能确保系统连续稳定运行,满足了行情中心对系统稳定性的严格要求。
这些券商的选择不仅体现了TDengine在技术性能上的领先地位也彰显了对TDengine在金融行业中可靠性和适用性的广泛认可。通过采用TDengine券商能够进一步提升行情中心的服务质量增强核心竞争力并在激烈的市场竞争中占据有利地位。 这些券商的选择不仅体现了 TDengine 在技术性能上的领先地位,也彰显了对 TDengine 在金融行业中可靠性和适用性的广泛认可。通过采用 TDengine券商能够进一步提升行情中心的服务质量增强核心竞争力并在激烈的市场竞争中占据有利地位。

View File

@ -33,14 +33,14 @@ dnode 在 TDengine 集群中的唯一标识由其实例的 endpointEP
每个 vnode 都拥有独立的运行线程、内存空间和持久化存储路径,确保数据的隔离性和高效访问。一个 vnode 可以包含多张表(即数据采集点),这些表在物理上分布在不 每个 vnode 都拥有独立的运行线程、内存空间和持久化存储路径,确保数据的隔离性和高效访问。一个 vnode 可以包含多张表(即数据采集点),这些表在物理上分布在不
同的 vnode 上,以实现数据的均匀分布和负载均衡。 同的 vnode 上,以实现数据的均匀分布和负载均衡。
当在集群中创建一个新的数据库时,系统会自动为该数据库创建相应的 vnode。一个dnode 上能够创建的 vnode 数量取决于该 dnode 所在物理节点的硬件资源,如 CPU、内存和存储容量等。需要注意的是一个 vnode 只能属于一个数据库,但一个数据库可以包含多个 vnode。 当在集群中创建一个新的数据库时,系统会自动为该数据库创建相应的 vnode。一个 dnode 上能够创建的 vnode 数量取决于该 dnode 所在物理节点的硬件资源,如 CPU、内存和存储容量等。需要注意的是一个 vnode 只能属于一个数据库,但一个数据库可以包含多个 vnode。
除了存储时序数据以外,每个 vnode 还保存了其包含的表的 schema 信息和标签值等元数据。这些信息对于数据的查询和管理至关重要。 除了存储时序数据以外,每个 vnode 还保存了其包含的表的 schema 信息和标签值等元数据。这些信息对于数据的查询和管理至关重要。
在集群内部,一个 vnode 由其所归属的 dnode 的 endpoint 和所属的 vgroup ID 唯一标识。管理节点负责创建和管理这些 vnode确保它们能够正常运行并协同工作。 在集群内部,一个 vnode 由其所归属的 dnode 的 endpoint 和所属的 vgroup ID 唯一标识。管理节点负责创建和管理这些 vnode确保它们能够正常运行并协同工作。
**管理节点mnode** **管理节点mnode**
mnode管理节点是 TDengine 集群中的核心逻辑单元,负责监控和维护所有 dnode的运行状态并在节点之间实现负载均衡如图 15-1 中的 M1、M2、M3 所示。作为元数据包括用户、数据库、超级表等的存储和管理中心mnode 也被称为 MetaNode。 mnode管理节点是 TDengine 集群中的核心逻辑单元,负责监控和维护所有 dnode的运行状态并在节点之间实现负载均衡如图 1 中的 M1、M2、M3 所示。作为元数据包括用户、数据库、超级表等的存储和管理中心mnode 也被称为 MetaNode。
为了提高集群的高可用性和可靠性TDengine 集群允许有多个(最多不超过 3 个mnode。这些 mnode 自动组成一个虚拟的 mnode 组共同承担管理职责。mnode 支持多副本,并采用 Raft 一致性协议来确保数据的一致性和操作的可靠性。在 mnode 集群中,任何数据更新操作都必须在 leader 节点上执行。 为了提高集群的高可用性和可靠性TDengine 集群允许有多个(最多不超过 3 个mnode。这些 mnode 自动组成一个虚拟的 mnode 组共同承担管理职责。mnode 支持多副本,并采用 Raft 一致性协议来确保数据的一致性和操作的可靠性。在 mnode 集群中,任何数据更新操作都必须在 leader 节点上执行。
@ -49,7 +49,7 @@ mnode 集群的第 1 个节点在集群部署时自动创建,而其他节点
为了实现集群内部的信息共享和通信,每个 dnode 通过内部消息交互机制自动获取整个集群中所有 mnode 所在的 dnode 的 endpoint。 为了实现集群内部的信息共享和通信,每个 dnode 通过内部消息交互机制自动获取整个集群中所有 mnode 所在的 dnode 的 endpoint。
**计算节点qnode** **计算节点qnode**
qnode计算节点是 TDengine 集群中负责执行查询计算任务的虚拟逻辑单元,同时也处理基于系统表的 show 命令。为了提高查询性能和并行处理能力,集群中可以配置多个 qnode这些 qnode 在整个集群范围内共享使用(如图 15-1 中的 Q1、Q2、Q3 所示)。 qnode计算节点是 TDengine 集群中负责执行查询计算任务的虚拟逻辑单元,同时也处理基于系统表的 show 命令。为了提高查询性能和并行处理能力,集群中可以配置多个 qnode这些 qnode 在整个集群范围内共享使用(如图 1 中的 Q1、Q2、Q3 所示)。
与 dnode 不同qnode 并不与特定的数据库绑定,这意味着一个 qnode 可以同时处理来自多个数据库的查询任务。每个 dnode 上最多有一个 qnode并由其所归属的 dnode 的endpoint 唯一标识。 与 dnode 不同qnode 并不与特定的数据库绑定,这意味着一个 qnode 可以同时处理来自多个数据库的查询任务。每个 dnode 上最多有一个 qnode并由其所归属的 dnode 的endpoint 唯一标识。
@ -155,14 +155,14 @@ TDengine 集群可以容纳单个、多个甚至几千个数据节点。应用
<center> 图 2 TDengine 典型的操作流程 </center> <center> 图 2 TDengine 典型的操作流程 </center>
1. 应用通过 JDBC 或其他 API 接口发起插入数据的请求。 - 第 1 步:应用通过 JDBC 或其他 API 接口发起插入数据的请求。
2. taosc 会检查缓存,看是否保存有该表所在数据库的 vgroup-info 信息。如果有,直接到第 4 步。如果没有taosc 将向 mnode 发出 get vgroup-info 请求。 - 第 2 步:taosc 会检查缓存,看是否保存有该表所在数据库的 vgroup-info 信息。如果有,直接到第 4 步。如果没有taosc 将向 mnode 发出 get vgroup-info 请求。
3. mnode 将该表所在数据库的 vgroup-info 返回给 taosc。Vgroup-info 包含数据库的 vgroup 分布信息vnode ID 以及所在的 dnode 的 End Point如果副本数为 N就有 N 组 End Point还包含每个 vgroup 中存储数据表的 hash 范围。如果 taosc 迟迟得不到 mnode 回应,而且存在多个 mnodetaosc 将向下一个 mnode 发出请求。 - 第 4 步:mnode 将该表所在数据库的 vgroup-info 返回给 taosc。Vgroup-info 包含数据库的 vgroup 分布信息vnode ID 以及所在的 dnode 的 End Point如果副本数为 N就有 N 组 End Point还包含每个 vgroup 中存储数据表的 hash 范围。如果 taosc 迟迟得不到 mnode 回应,而且存在多个 mnodetaosc 将向下一个 mnode 发出请求。
4. taosc 会继续检查缓存,看是否保存有该表的 meta-data。如果有直接到第 6 步。如果没有taosc 将向 vnode 发出 get meta-data 请求。 - 第 4 步:taosc 会继续检查缓存,看是否保存有该表的 meta-data。如果有直接到第 6 步。如果没有taosc 将向 vnode 发出 get meta-data 请求。
5. vnode 将该表的 meta-data 返回给 taosc。Meta-data 包含有该表的 schema。 - 第 5 步:vnode 将该表的 meta-data 返回给 taosc。Meta-data 包含有该表的 schema。
6. taosc 向 leader vnode 发起插入请求。 - 第 6 步:taosc 向 leader vnode 发起插入请求。
7. vnode 插入数据后,给 taosc 一个应答,表示插入成功。如果 taosc 迟迟得不到 vnode 的回应taosc 会认为该节点已经离线。这种情况下如果被插入的数据库有多个副本taosc 将向 vgroup 里下一个 vnode 发出插入请求。 - 第 7 步:vnode 插入数据后,给 taosc 一个应答,表示插入成功。如果 taosc 迟迟得不到 vnode 的回应taosc 会认为该节点已经离线。这种情况下如果被插入的数据库有多个副本taosc 将向 vgroup 里下一个 vnode 发出插入请求。
8. taosc 通知 APP写入成功。 - 第 8 步:taosc 通知 APP写入成功。
对于第二步taosc 启动时,并不知道 mnode 的 End Point因此会直接向配置的集群对外服务的 End Point 发起请求。如果接收到该请求的 dnode 并没有配置 mnode该 dnode 会在回复的消息中告知 mnode EP 列表,这样 taosc 会重新向新的 mnode 的 EP 发出获取 meta-data 的请求。 对于第二步taosc 启动时,并不知道 mnode 的 End Point因此会直接向配置的集群对外服务的 End Point 发起请求。如果接收到该请求的 dnode 并没有配置 mnode该 dnode 会在回复的消息中告知 mnode EP 列表,这样 taosc 会重新向新的 mnode 的 EP 发出获取 meta-data 的请求。
@ -231,7 +231,7 @@ Leader Vnode 遵循下面的写入流程:
<center> 图 3 TDengine Leader 写入流程 </center> <center> 图 3 TDengine Leader 写入流程 </center>
- 第 1 步: leader vnode 收到应用的写入数据请求,验证 OK验证有效性后进入第 2 步; - 第 1 步leader vnode 收到应用的写入数据请求,验证 OK验证有效性后进入第 2 步;
- 第 2 步vnode 将该请求的原始数据包写入数据库日志文件 WAL。如果 `wal_level` 设置为 2而且 `wal_fsync_period` 设置为 0TDengine 还将 WAL 数据立即落盘,以保证即使宕机,也能从数据库日志文件中恢复数据,避免数据的丢失; - 第 2 步vnode 将该请求的原始数据包写入数据库日志文件 WAL。如果 `wal_level` 设置为 2而且 `wal_fsync_period` 设置为 0TDengine 还将 WAL 数据立即落盘,以保证即使宕机,也能从数据库日志文件中恢复数据,避免数据的丢失;
- 第 3 步如果有多个副本vnode 将把数据包转发给同一虚拟节点组内的 follower vnodes该转发包带有数据的版本号version - 第 3 步如果有多个副本vnode 将把数据包转发给同一虚拟节点组内的 follower vnodes该转发包带有数据的版本号version
- 第 4 步:写入内存,并将记录加入到 skip list。但如果未达成一致会触发回滚操作 - 第 4 步:写入内存,并将记录加入到 skip list。但如果未达成一致会触发回滚操作
@ -315,17 +315,17 @@ TDengine 采用了一种数据驱动的策略来实现缓存数据的持久化
每个数据文件块(以 .data 结尾)都配有一个索引文件(以 .head 结尾),该索引文件包含每张表的各个数据文件块的摘要信息,记录了每个数据文件块在数据文件中的偏移量、数据的起始时间和结束时间等信息,以便于快速定位所需数据。此外,每个数据文件块还有一个与之关联的 last 文件(以 .last 结尾),该文件旨在防止数据文件块在落盘时发生碎片化。如果某张表落盘的记录条数未达到数据库参数 minRows每块最小记录条数的要求这些记录将首先存储在 last 文件中,待下次落盘时,新落盘的记录将与 last文件中的记录合并然后再写入数据文件块。 每个数据文件块(以 .data 结尾)都配有一个索引文件(以 .head 结尾),该索引文件包含每张表的各个数据文件块的摘要信息,记录了每个数据文件块在数据文件中的偏移量、数据的起始时间和结束时间等信息,以便于快速定位所需数据。此外,每个数据文件块还有一个与之关联的 last 文件(以 .last 结尾),该文件旨在防止数据文件块在落盘时发生碎片化。如果某张表落盘的记录条数未达到数据库参数 minRows每块最小记录条数的要求这些记录将首先存储在 last 文件中,待下次落盘时,新落盘的记录将与 last文件中的记录合并然后再写入数据文件块。
在数据写入硬盘的过程中,是否对数据进行压缩取决于数据库参数 comp 的设置。TDengine 提供了 3 种压缩选项—无压缩、一级压缩和二级压缩,对应的 comp 值分别为 0、1 和 2。一级压缩会根据数据类型采用相应的压缩算法如 delta-delta 编码、simple8B 方法、zig-zag 编码、LZ4 等。二级压缩则在一级压缩的基础上进一步使用通用压缩算法,以实现更高的压缩率。 在数据写入硬盘的过程中,是否对数据进行压缩取决于数据库参数 comp 的设置。TDengine 提供了 3 种压缩选项—无压缩、一级压缩和二级压缩,对应的 comp 值分别为 0、1 和 2。一级压缩会根据数据类型采用相应的压缩算法如 delta-delta 编码、simple8B 编码、zig-zag 编码、LZ4 等。二级压缩则在一级压缩的基础上进一步使用通用压缩算法,以实现更高的压缩率。
### 预计算 ### 预计算
为了显著提高查询处理的效率TDengine 在数据文件块的头部存储了该数据文件块的统计信息,包括最大值、最小值和数据总和,这些被称为预计算单元。当查询处理涉及这些计算结果时,可以直接利用这些预计算值,而无须访问数据文件块的具体内容。对于那些硬盘 I/O 成为瓶颈的查询场景,利用预计算结果可以有效减轻读取硬盘 I/O 的压力,从而提高查询速度。 为了显著提高查询处理的效率TDengine 在数据文件块的头部存储了该数据文件块的统计信息,包括最大值、最小值和数据总和,这些被称为预计算单元。当查询处理涉及这些计算结果时,可以直接利用这些预计算值,而无须访问数据文件块的具体内容。对于那些硬盘 I/O 成为瓶颈的查询场景,利用预计算结果可以有效减轻读取硬盘 I/O 的压力,从而提高查询速度。
除了预计算功能以外TDengine 还支持对原始数据进行多种降采样存储。一种降采样存储方式是 Rollup SMA它能够自动对原始数据进行降采样存储并支持 3 个不同的数据保存层级,用户可以指定每层数据的聚合周期和保存时长。这对于那些关注数据趋势的场景尤为适用,其核心目的是减少存储开销并提高查询速度。另一种降采样存储方式是 Time-Range-Wise SMA它可以根据聚合结果进行降采样存储非常适合于高频的 interval 查询场景。该功能采用与普通流计算相同的逻辑并允许用户通过设置watermark 来处理延时数据,相应地,实际的查询结果也会有一定的时间延迟。 除了预计算功能以外TDengine 还支持对原始数据进行多种降采样存储。一种降采样存储方式是 Rollup SMA它能够自动对原始数据进行降采样存储并支持 3 个不同的数据保存层级,用户可以指定每层数据的聚合周期和保存时长。这对于那些关注数据趋势的场景尤为适用,其核心目的是减少存储开销并提高查询速度。另一种降采样存储方式是 Time-Range-Wise SMA它可以根据聚合结果进行降采样存储非常适合于高频的 interval 查询场景。该功能采用与普通流计算相同的逻辑,并允许用户通过设置 watermark 来处理延时数据,相应地,实际的查询结果也会有一定的时间延迟。
### 多级存储与对象存储 ### 多级存储与对象存储
说明:多级存储功能仅企业版支持,从 2.0.16.0 版本开始提供 说明:多级存储功能仅企业版支持。
在默认配置下TDengine 会将所有数据保存在 /var/lib/taos 目录下,而且每个 vnode 的数据文件保存在该目录下的不同目录。为扩大存储空间,尽量减少文件读取的瓶颈,提高数据吞吐率 TDengine 可通过配置系统参数 dataDir 让多个挂载的硬盘被系统同时使用。 在默认配置下TDengine 会将所有数据保存在 /var/lib/taos 目录下,而且每个 vnode 的数据文件保存在该目录下的不同目录。为扩大存储空间,尽量减少文件读取的瓶颈,提高数据吞吐率 TDengine 可通过配置系统参数 dataDir 让多个挂载的硬盘被系统同时使用。

View File

@ -30,13 +30,13 @@ Tuple 编码格式主要用于非稀疏数据的场景,如所有列数据全
Key-Value 编码格式特别适合于稀疏数据的场景,即在表的 schema 中定义了大量列(例如数千列),但实际有值的列却非常少的情况。在这种情形下,如果采用传统的 Tuple 编码格式,会造成极大的空间浪费。相比之下,采用 Key-Value 编码格式可以显著减少行数据所占用的存储空间。如下图所示。 Key-Value 编码格式特别适合于稀疏数据的场景,即在表的 schema 中定义了大量列(例如数千列),但实际有值的列却非常少的情况。在这种情形下,如果采用传统的 Tuple 编码格式,会造成极大的空间浪费。相比之下,采用 Key-Value 编码格式可以显著减少行数据所占用的存储空间。如下图所示。
Key-Value 编码的行数据通过一个 offset 数组来索引各列的值,虽然这种方式的访问速度相对于直接访问列数据较慢,但它能显著减少存储空间的占用。在实际编码实现中,通过引入 flag 选项,进一步优化了空间占用。具体来说,当所有 offset 值均小于 256 时Key-Value 编码行的 offset 数组采用 uint8_t 类型;若所有 offset 值均小于 65 536 时,则使用 uint16_t 类型;在其他情况下,则使用 uint32_t 类型。这样的设计使得空间利用率得到进一步提升。 Key-Value 编码的行数据通过一个 offset 数组来索引各列的值,虽然这种方式的访问速度相对于直接访问列数据较慢,但它能显著减少存储空间的占用。在实际编码实现中,通过引入 flag 选项,进一步优化了空间占用。具体来说,当所有 offset 值均小于 256 时Key-Value 编码行的 offset 数组采用 uint8_t 类型;若所有 offset 值均小于 65536 时,则使用 uint16_t 类型;在其他情况下,则使用 uint32_t 类型。这样的设计使得空间利用率得到进一步提升。
![Key-Value 行格式示意图](./key-value.png) ![Key-Value 行格式示意图](./key-value.png)
### 列格式 ### 列格式
在 TDengine 中,列格式的定长数据可以被视为数组,但由于存在 NONE、NULL和有值的并存情况列格式中还需要一个 bitmap 来标识各个索引位置的值是 NONE、NULL 还是有值。而对于变长类型的数据,列格式则有所不同。除了数据数组以外,变长类型的数据列格式还包含一个 offset 数组,用于索引变长数据的起始位置。变长数据的长度可以通过两个相邻 offset 值之差来获得。这种设计使得数据的存储和访问更加高效,如下图所示: 在 TDengine 中,列格式的定长数据可以被视为数组,但由于存在 NONE、NULL 和有值的并存情况,列格式中还需要一个 bitmap 来标识各个索引位置的值是 NONE、NULL 还是有值。而对于变长类型的数据,列格式则有所不同。除了数据数组以外,变长类型的数据列格式还包含一个 offset 数组,用于索引变长数据的起始位置。变长数据的长度可以通过两个相邻 offset 值之差来获得。这种设计使得数据的存储和访问更加高效,如下图所示:
![列格式示意图](./column.png) ![列格式示意图](./column.png)
@ -51,7 +51,7 @@ vnode 是 TDengine 中数据存储、查询以及备份的基本单元。每个
![vnode 存储架构](./vnode.png) ![vnode 存储架构](./vnode.png)
当 vnode 收到写入数据请求时,首先会对请求进行预处理,以确保多副本上的数据保持一致。预处理的目的在于确保数据的安全性和一致性。在预处理完成后,数据会被写入到 WAL 文件中,以确保数据的持久性。接着,数据会被写入 vnode 的内存池中。当内存池的空间占用达到一定阈值时后台线程会将写入的数据刷新到硬盘上META 和TSDB以便持久化。同时标记内存中对应的 WAL 编号为已落盘。此外TSDB 采用了 LSMLog-Structured Merge-Tree日志结构合并树存储结构这种结构在打开数据库的多表低频参数时后台还会对 TSDB 的数据文件进行合并,以减少文件数量并提高查询性能。这种设计使得数据的存储和访问更加高效。 当 vnode 收到写入数据请求时,首先会对请求进行预处理,以确保多副本上的数据保持一致。预处理的目的在于确保数据的安全性和一致性。在预处理完成后,数据会被写入到 WAL 文件中,以确保数据的持久性。接着,数据会被写入 vnode 的内存池中。当内存池的空间占用达到一定阈值时后台线程会将写入的数据刷新到硬盘上META 和 TSDB以便持久化。同时标记内存中对应的 WAL 编号为已落盘。此外TSDB 采用了 LSMLog-Structured Merge-Tree日志结构合并树存储结构这种结构在打开数据库的多表低频参数时后台还会对 TSDB 的数据文件进行合并,以减少文件数量并提高查询性能。这种设计使得数据的存储和访问更加高效。
### 元数据的存储 ### 元数据的存储
@ -60,7 +60,7 @@ vnode 中存储的元数据主要涉及表的元数据信息,包括超级表
![元数据写入过程](./meta.png) ![元数据写入过程](./meta.png)
当 META 模块接收到元数据写入请求时,它会生成多个 Key-Value 数据对,并将这些数据对存储在底层的 TDB 存储引擎中。TDB 是 TDengine 根据自身需求研发的 B+Tree存储引擎它由 3 个主要部分组成——内置 Cache、TDB 存储主文件和 TDB 的日志文件。数据在写入 TDB 时,首先被写入内置 Cache如果 Cache 内存不足,系统会向 vnode的内存池请求额外的内存分配。如果写入操作涉及已有数据页的更改系统会在修改数据页之前先将未更改的数据页写入 TDB 的日志文件,作为备份。这样做可以在断电或其他故障发生时,通过日志文件回滚到原始数据,确保数据更新的原子性和数据完整性。 当 META 模块接收到元数据写入请求时,它会生成多个 Key-Value 数据对,并将这些数据对存储在底层的 TDB 存储引擎中。TDB 是 TDengine 根据自身需求研发的 B+Tree 存储引擎,它由 3 个主要部分组成——内置 Cache、TDB 存储主文件和 TDB 的日志文件。数据在写入 TDB 时,首先被写入内置 Cache如果 Cache 内存不足,系统会向 vnode 的内存池请求额外的内存分配。如果写入操作涉及已有数据页的更改,系统会在修改数据页之前,先将未更改的数据页写入 TDB 的日志文件,作为备份。这样做可以在断电或其他故障发生时,通过日志文件回滚到原始数据,确保数据更新的原子性和数据完整性。
由于 vnode 存储了各种元数据信息并且元数据的查询需求多样化vnode 内部会创建多个 B+Tree用于存储不同维度的索引信息。这些 B+Tree 都存储在一个共享的存储文件中,并通过一个根页编号为 1 的索引 B+Tree 来索引各个 B+Tree 的根页编号,如下图所示: 由于 vnode 存储了各种元数据信息并且元数据的查询需求多样化vnode 内部会创建多个 B+Tree用于存储不同维度的索引信息。这些 B+Tree 都存储在一个共享的存储文件中,并通过一个根页编号为 1 的索引 B+Tree 来索引各个 B+Tree 的根页编号,如下图所示:
@ -80,9 +80,9 @@ B+ Tree 的页结构如下图所示:
在 MemTable 中,数据采用了 Red-Black Tree红黑树和 SkipList 相结合的索引方式。不同表的数据索引存储在 Red-Black Tree 中而同一张表的数据索引则存储在SkipList 中。这种设计方式充分利用了时序数据的特点,提高了数据的存储和访问效率。 在 MemTable 中,数据采用了 Red-Black Tree红黑树和 SkipList 相结合的索引方式。不同表的数据索引存储在 Red-Black Tree 中而同一张表的数据索引则存储在SkipList 中。这种设计方式充分利用了时序数据的特点,提高了数据的存储和访问效率。
Red-Black Tree 是一种自平衡的二叉树,它通过对节点进行着色和旋转操作来保持树的平衡,从而确保了查询、插入和删除操作的时间复杂度为 O(log n)。在 MemTable 中Red-Black Tree 用于存储不同表 Red-Black Tree 是一种自平衡的二叉树,它通过对节点进行着色和旋转操作来保持树的平衡,从而确保了查询、插入和删除操作的时间复杂度为 O(logn)。在 MemTable 中Red-Black Tree 用于存储不同表
SkipList 是一种基于有序链表的数据结构它通过在链表的基础上添加多级索引来实现快速查找。SkipList 的查询、插入和删除操作的时间复杂度为 O(log n),与 Red-Black Tree 相当。在 MemTable 中SkipList 用于存储同一张表的数据索引,这样可以快速定位到特定时间范围内的数据,为时序数据的查询和写入提供高效支持。 SkipList 是一种基于有序链表的数据结构它通过在链表的基础上添加多级索引来实现快速查找。SkipList 的查询、插入和删除操作的时间复杂度为 O(logn),与 Red-Black Tree 相当。在 MemTable 中SkipList 用于存储同一张表的数据索引,这样可以快速定位到特定时间范围内的数据,为时序数据的查询和写入提供高效支持。
通过将 Red-Black Tree 和 SkipList 相结合TDengine 在 MemTable 中实现了一种高效的数据索引方式既能够快速定位到不同表的数据又能够快速定位到同一张表中特定时间范围内的数据。SkipList 索引如下图所示: 通过将 Red-Black Tree 和 SkipList 相结合TDengine 在 MemTable 中实现了一种高效的数据索引方式既能够快速定位到不同表的数据又能够快速定位到同一张表中特定时间范围内的数据。SkipList 索引如下图所示:

View File

@ -4,7 +4,7 @@ title: 查询引擎
toc_max_heading_level: 4 toc_max_heading_level: 4
--- ---
TDengine 作为一个高性能的时序大数据平台,其查询与计算功能是核心组件之一。该平台提供了丰富的查询处理功能,不仅包括常规的聚合查询,还涵盖了时序数据的窗口查询、统计聚合等高级功能。这些查询计算任务需要 taosc、vnode、qnode 和 mnode 之间的紧密协作。在一个复杂的超级表聚合查询场景中,可能需要多个 vnode 和 qnode 共同承担查询和计算的职责。关于 vnode、qnode、mnode 的定义和介绍,请参考[系统架构](../arch) TDengine 作为一个高性能的时序大数据平台,其查询与计算功能是核心组件之一。该平台提供了丰富的查询处理功能,不仅包括常规的聚合查询,还涵盖了时序数据的窗口查询、统计聚合等高级功能。这些查询计算任务需要 taosc、vnode、qnode 和 mnode 之间的紧密协作。在一个复杂的超级表聚合查询场景中,可能需要多个 vnode 和 qnode 共同承担查询和计算的职责。关于 vnode、qnode、mnode 的定义和介绍,请参考 [系统架构](../arch)
## 各模块在查询计算中的职责 ## 各模块在查询计算中的职责
@ -127,6 +127,6 @@ TDengine 针对不同类型的缓存对象采用了相应的缓存管理策略
![缓存方案](./cache.png) ![缓存方案](./cache.png)
- 元数据缓存meta data包括数据库、超级表、用户、节点、视图、虚拟节点等信息以及表的 schema 和其所在虚拟节点的映射关系。通过在 taosc 缓存元数据可以避免频繁地向 mnode/vnode 请求元数据。taosc 对元数据的缓存采用固定大小的缓存空间,先到先得,直到缓存空间用完。当缓存空间用完时,缓存会被进行部分淘汰处理,用来缓存新进请求所需要的元数据。 - 元数据缓存meta data包括数据库、超级表、用户、节点、视图、虚拟节点等信息以及表的 schema 和其所在虚拟节点的映射关系。通过在 taosc 缓存元数据可以避免频繁地向 mnode/vnode 请求元数据。taosc 对元数据的缓存采用固定大小的缓存空间,先到先得,直到缓存空间用完。当缓存空间用完时,缓存会被进行部分淘汰处理,用来缓存新进请求所需要的元数据。
- 时序数据缓存time series data时序数据首先被缓存在 vnode 的内存中,以SkipList 形式组织,当达到落盘条件后,将时序数据进行压缩,写入数据存储文件 - 时序数据缓存time series data时序数据首先被缓存在 vnode 的内存中,以 skipList 形式组织,当达到落盘条件后,将时序数据进行压缩,写入数据存储文件
中,并从缓存中清除。 中,并从缓存中清除。
- 最新数据缓存last/last_row对时序数据中的最新数据进行缓存可以提高最新数据的查询效率。最新数据以子表为单元组织成 KV 形式其中K 是子表 IDV 是该子表中每列的最后一个非 NULL 以及最新的一行数据。 - 最新数据缓存last/last_row对时序数据中的最新数据进行缓存可以提高最新数据的查询效率。最新数据以子表为单元组织成 KV 形式其中K 是子表 IDV 是该子表中每列的最后一个非 NULL 以及最新的一行数据。

View File

@ -26,7 +26,7 @@ TDengine 会为 WAL 文件自动创建索引以支持快速随机访问。通过
### 消费者 ### 消费者
消费者负责从主题中获取数据。在订阅主题之后,消费者可以消费分配给该消费者的 vnode 中的所有数据。为了实现高效、有序的数据获取消费者采用了推拉push 和poll相结合的方式。 消费者负责从主题中获取数据。在订阅主题之后,消费者可以消费分配给该消费者的 vnode 中的所有数据。为了实现高效、有序的数据获取消费者采用了推拉push 和 poll相结合的方式。
当 vnode 中存在大量未被消费的数据时,消费者会按照顺序向 vnode 发送推送请求,以便一次性拉取大量数据。同时,消费者会在本地记录每个 vnode 的消费位置,确保所有数据都能被顺序地推送。 当 vnode 中存在大量未被消费的数据时,消费者会按照顺序向 vnode 发送推送请求,以便一次性拉取大量数据。同时,消费者会在本地记录每个 vnode 的消费位置,确保所有数据都能被顺序地推送。
@ -34,7 +34,7 @@ TDengine 会为 WAL 文件自动创建索引以支持快速随机访问。通过
### 消费组 ### 消费组
在创建消费者时需要为其指定一个消费组。同一消费组内的消费者将共享消费进度确保数据在消费者之间均匀分配。正如前面所述一个主题的数据会被分布在多个vnode 中。为了提高消费速度和实现多线程、分布式地消费数据,可以在同一消费组中添加多个消费者。这些消费者首先会均分 vnode然后分别对分配给自己的 vnode 进行消费。例如,假设数据分布在 4 个 vnode 上: 在创建消费者时,需要为其指定一个消费组。同一消费组内的消费者将共享消费进度,确保数据在消费者之间均匀分配。正如前面所述,一个主题的数据会被分布在多个 vnode 中。为了提高消费速度和实现多线程、分布式地消费数据,可以在同一消费组中添加多个消费者。这些消费者首先会均分 vnode然后分别对分配给自己的 vnode 进行消费。例如,假设数据分布在 4 个 vnode 上:
- 当有 2 个消费者时,每个消费者将消费 2 个 vnode - 当有 2 个消费者时,每个消费者将消费 2 个 vnode
- 当有 3 个消费者时,其中 2 个消费者各消费 1 个 vnode而剩下的 1 个消费者将消费剩余的 2 个 vnode - 当有 3 个消费者时,其中 2 个消费者各消费 1 个 vnode而剩下的 1 个消费者将消费剩余的 2 个 vnode
- 当有 5 个消费者时,其中 4 个消费者各分配 1 个 vnode而剩下的 1 个消费者则不参与消费。 - 当有 5 个消费者时,其中 4 个消费者各分配 1 个 vnode而剩下的 1 个消费者则不参与消费。
@ -81,7 +81,7 @@ mnode 主要负责处理订阅过程中的控制消息,包括创建和删除
![rebalance 过程](./rebalance.png) ![rebalance 过程](./rebalance.png)
再平衡计时器每 2s 检测一次是否需要再平衡。在再平衡过程中,如果消费者获取的状态是 not ready则不能进行消费。只有再平衡正常结束后消费者获取分配 vnode 的offset 后才可正常消费,否则消费者会重试指定次数后报错。 再平衡计时器每 2s 检测一次是否需要再平衡。在再平衡过程中,如果消费者获取的状态是 not ready则不能进行消费。只有再平衡正常结束后消费者获取分配 vnode 的 offset 后才可正常消费,否则消费者会重试指定次数后报错。
## 消费者状态处理 ## 消费者状态处理

View File

@ -13,8 +13,7 @@ TDengine 流计算的架构如下图所示。当用户输入用于创建流的 S
mnode 包含与流计算相关的如下 4 个逻辑模块。 mnode 包含与流计算相关的如下 4 个逻辑模块。
- 任务调度,负责将逻辑执行计划转化为物理执行计划,并下发到每个 vnode。 - 任务调度,负责将逻辑执行计划转化为物理执行计划,并下发到每个 vnode。
- meta store负责存储流计算任务的元数据信息以及流任务相应的 DAG 信息。 - meta store负责存储流计算任务的元数据信息以及流任务相应的 DAG 信息。
- 检查点调度负责定期生成检查点checkpoint事务并下发到各 source task - 检查点调度负责定期生成检查点checkpoint事务并下发到各 source task源任务
任务)。
- exec 监控,负责接收上报的心跳、更新 mnode 中各任务的执行状态,以及定期监控检查点执行状态和 DAG 变动信息。 - exec 监控,负责接收上报的心跳、更新 mnode 中各任务的执行状态,以及定期监控检查点执行状态和 DAG 变动信息。
此外mnode 还承担着向流计算任务下发控制命令的重要角色,这些命令包括但不限于暂停、恢复执行、删除流任务及更新流任务的上下游信息等。 此外mnode 还承担着向流计算任务下发控制命令的重要角色,这些命令包括但不限于暂停、恢复执行、删除流任务及更新流任务的上下游信息等。
@ -67,7 +66,7 @@ TDengine 的流计算功能允许根据记录的事件时间将数据划分到
![流计算任务组成](./streamtask.png) ![流计算任务组成](./streamtask.png)
按照流任务承担任务的不同,可将其划分为 3 个类别source task源任务、agg task聚合任务和 sink task写回任务 按照流任务承担任务的不同,可将其划分为 3 个类别source task源任务、agg task聚合任务和 sink task写回任务
### source task ### source task
@ -75,7 +74,7 @@ TDengine 的流计算功能允许根据记录的事件时间将数据划分到
### agg task ### agg task
source task 的下游任务是接收源任务聚合后的结果,并对这些结果进行进一步的汇总以生成最终输出。在集群中配置 snode 的情况下agg task 会被优先安排在 snode 上执行,以利用其存储和处理能力。如果集群中没有 snodemnode 则会随机选择一个vnode在该 vnode 上调度执行 agg task。值得注意的是agg task 并非在所有情况下都是必需的。对于那些不涉及窗口聚合的流计算场景(例如,仅包含标量运算的流计算,或者在数据库只有一个 vnode 时的聚合流计算),就不会出现 agg task。在这种情况下流计算的拓扑结构将简化为仅包含两级流计算任务即 source task 和直接输出结果的下游任务。 source task 的下游任务是接收源任务聚合后的结果,并对这些结果进行进一步的汇总以生成最终输出。在集群中配置 snode 的情况下agg task 会被优先安排在 snode 上执行,以利用其存储和处理能力。如果集群中没有 snodemnode 则会随机选择一个 vnode在该 vnode 上调度执行 agg task。值得注意的是agg task 并非在所有情况下都是必需的。对于那些不涉及窗口聚合的流计算场景(例如,仅包含标量运算的流计算,或者在数据库只有一个 vnode 时的聚合流计算),就不会出现 agg task。在这种情况下流计算的拓扑结构将简化为仅包含两级流计算任务即 source task 和直接输出结果的下游任务。
### sink task ### sink task

View File

@ -11,16 +11,16 @@ TDengine 通过日志文件记录系统运行状态,帮助用户监控系统
### 普通日志实现逻辑 ### 普通日志实现逻辑
- 普通日志分同步和异步两种方式,同步立即写入日志文件,异步写入到 buff 里,然后定时写入日志文件。 - 普通日志分同步和异步两种方式,同步立即写入日志文件,异步写入到 buff 里,然后定时写入日志文件。
- 异步方式日志文件缓存在循环 buff 里, buff 的大小为 buffSize = 20 M。如果某次写buf 的日志大小大于buf 可用空间,本次日志会舍弃,日志里记录: ...Lost N lines here... - 异步方式日志文件缓存在循环 buff 里, buff 的大小为 buffSize = 20M。如果某次写 buf 的日志大小大于buf 可用空间,本次日志会舍弃,日志里记录 ...Lost N lines here...
![TDengine 日志循环buff](./normal_log1.png) ![TDengine 日志循环buff](./normal_log1.png)
- 异步线程里每隔 1 s 会更新磁盘信息用于判断是否有空间写日志 - 异步线程里每隔 1s 会更新磁盘信息用于判断是否有空间写日志
- 异步线程每隔 Interval 时间处理一次写入逻辑。写入规则如下: - 异步线程每隔 Interval 时间处理一次写入逻辑。写入规则如下:
- 如果buff 里数据小于 buffSize/10不写入磁盘除非超过1 s。 - 如果 buff 里数据小于 buffSize/10不写入磁盘除非超过 1s。
- 如果buff 里数据大于 buffSize/10全部写入磁盘。 - 如果 buff 里数据大于 buffSize/10全部写入磁盘。
- Interval 默认值为 25 msInterval 值会根据每次写入日志的大小动态调整。Interval 调试规则如下: - Interval 默认值为 25 msInterval 值会根据每次写入日志的大小动态调整。Interval 调试规则如下:
- 数据量小时(小于 buffSize/10增大写入间隔Interval 每次增加 5ms最大25ms。 - 数据量小时(小于 buffSize/10增大写入间隔Interval 每次增加 5ms最大 25ms。
- 数据量大时(大于 buffSize/3写入间隔最小Interval 为 5ms。 - 数据量大时(大于 buffSize/3写入间隔最小Interval 为 5ms。
- 数据量比较大时(大于 buffSize/4小于等于buffSize/3减小写入间隔Interval 每次减小 5ms最小5ms。 - 数据量比较大时(大于 buffSize/4小于等于buffSize/3减小写入间隔Interval 每次减小 5ms最小 5ms。
- 数据量适中时(大于等于 buffSize/10小于等于buffSize/4写入间隔不变。 - 数据量适中时(大于等于 buffSize/10小于等于buffSize/4写入间隔不变。
![TDengine 日志buff调整方式](./normal_log2.png) ![TDengine 日志buff调整方式](./normal_log2.png)
@ -57,7 +57,7 @@ TDengine 通过日志文件记录系统运行状态,帮助用户监控系统
- 因为客户端进程里可能存在很多个链接 connection所以需要将慢查询日志根据 clusterId 来分组。分组方式通过临时文件名来实现,命名方式为 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}```processId 为进程ID主要为了区分多个客户端的上报。 - 因为客户端进程里可能存在很多个链接 connection所以需要将慢查询日志根据 clusterId 来分组。分组方式通过临时文件名来实现,命名方式为 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}```processId 为进程ID主要为了区分多个客户端的上报。
- 如上图 connection 1 连接的是 cluster 1。connection 2connection 3 连接的是 cluster 2所以connection 1 的慢 sql 数据写入文件 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}```connection 2 和 connection 3的慢 sql 数据写入文件 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}``` - 如上图 connection 1 连接的是 cluster 1。connection 2connection 3 连接的是 cluster 2所以connection 1 的慢 sql 数据写入文件 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}```connection 2 和 connection 3的慢 sql 数据写入文件 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}```
#### 上报逻辑 #### 上报逻辑
- 读取 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}``` 临时文件内容,每行数据作为 json 数组的一个元素,组装成 json 数组上报(文件里数据每接近 1M大小上报一次上报成功后记录读取文件进度上报采用异步上报方式。在 callback 里继续根据上次的进度继续读取文件的内容上报直至整个文件读取上报完毕上报完毕后会清空临时文件callback 里成功或失败都会继续读取文件,失败时会记录上报失败的数据日志)。每接近 1M 上报一次主要为了防止文件太大,放在一次上报失败)。 - 读取 ```{tmp dir}/tdengine_slow_log/tdengeine-{clusterId1}-{processId}-{rand}``` 临时文件内容,每行数据作为 json 数组的一个元素,组装成 json 数组上报(文件里数据每接近 1M 大小上报一次,上报成功后记录读取文件进度,上报采用异步上报方式。在 callback 里继续根据上次的进度继续读取文件的内容上报直至整个文件读取上报完毕上报完毕后会清空临时文件callback 里成功或失败都会继续读取文件,失败时会记录上报失败的数据日志)。每接近 1M 上报一次主要为了防止文件太大,放在一次上报失败)。
#### 上报时机 #### 上报时机
- 客户端运行过程中定时上报 - 客户端运行过程中定时上报
- 每个 monitorInterval 时间间隔上报数据。 - 每个 monitorInterval 时间间隔上报数据。
@ -67,19 +67,19 @@ TDengine 通过日志文件记录系统运行状态,帮助用户监控系统
- 异常退出后再次与某个集群(clusterId)建立新的链接后遍历 ```{tmp dir}/tdengine_slow_log/``` 目录下 ```tdengine-{clusterId}``` 开头的所有文件进行重新上报(这些文件可能是另一个客户端进程或本进程正在操作的。所以每个文件打开时都需要添加文件锁),然后删除这个临时文件。 - 异常退出后再次与某个集群(clusterId)建立新的链接后遍历 ```{tmp dir}/tdengine_slow_log/``` 目录下 ```tdengine-{clusterId}``` 开头的所有文件进行重新上报(这些文件可能是另一个客户端进程或本进程正在操作的。所以每个文件打开时都需要添加文件锁),然后删除这个临时文件。
#### 一些异常行为说明 #### 一些异常行为说明
- 因为上报数据和删除文件里的上报内容没法作为一个原子操作,所以如果上报后还没删除数据就 crash可能导致下次重复上报重复上报的数据会覆盖并没丢失影响很小。 - 因为上报数据和删除文件里的上报内容没法作为一个原子操作,所以如果上报后还没删除数据就 crash可能导致下次重复上报重复上报的数据会覆盖并没丢失影响很小。
- 另外为了保证性能, slow log thread 线程把慢 sql 日志写入临时文件缓存,只保证刷新到操作系统的磁盘缓冲区,并不真正每次都 fsync 到磁盘,所以如果机器断电,仍可能丢失数据。该异常出现概率很小,可以容忍此种情况下的数据丢失。 - 另外为了保证性能slow log thread 线程把慢 sql 日志写入临时文件缓存,只保证刷新到操作系统的磁盘缓冲区,并不真正每次都 fsync 到磁盘,所以如果机器断电,仍可能丢失数据。该异常出现概率很小,可以容忍此种情况下的数据丢失。
### 慢日志行为说明 ### 慢日志行为说明
- 慢日志一方面会记录到本地慢日志文件中,另一方面会通过 taosAdapter 发送到 taosKeeper 进行结构化存储(需打开 monitorr 开关)。 - 慢日志一方面会记录到本地慢日志文件中,另一方面会通过 taosAdapter 发送到 taosKeeper 进行结构化存储(需打开 monitor 开关)。
- 慢日志文件存储规则为: - 慢日志文件存储规则为:
- 慢日志文件一天一个,如果当天没有慢日志,没有当天的文件。 - 慢日志文件一天一个,如果当天没有慢日志,没有当天的文件。
- 文件名为 taosSlowLog.yyyy-mm-ddtaosSlowLog.2024-08-02日志存储路径通过 logDir 配置。 - 文件名为 taosSlowLog.yyyy-mm-ddtaosSlowLog.2024-08-02日志存储路径通过 logDir 配置。
- 多个客户端的日志存储在相应日志路径下的同一个 taosSlowLog.yyyy.mm.dd 文件里。 - 多个客户端的日志存储在相应日志路径下的同一个 taosSlowLog.yyyy.mm.dd 文件里。
- 慢日志文件不自动删除,不压缩。 - 慢日志文件不自动删除,不压缩。
- 使用和普通日志文件相同的三个参数 logDir, minimalLogDirGB, asyncLog。另外两个参数 numOfLogLineslogKeepDays 不适用于慢日志。 - 使用和普通日志文件相同的三个参数 logDir、minimalLogDirGB、asyncLog。另外两个参数 numOfLogLines、logKeepDays 不适用于慢日志。
## 日志级别说明 ## 日志级别说明
日志级别分为9种如下所示 日志级别分为 9 种,如下所示:
```c ```c
typedef enum { typedef enum {
@ -102,6 +102,6 @@ typedef enum {
例如: 例如:
- 131 = 128 + 2 + 1 文件 + info + error - 131 = 128 + 2 + 1 文件 + info + error
- 135 = 128 + 4 + 2 + 1 文件 + debug + info + error - 135 = 128 + 4 + 2 + 1 文件 + debug + info + error
- 143 = 128 + 8 + 4 + 2 + 1 文件 + trace + debug + info + error - 143 = 128 + 8 + 4 + 2 + 1 文件 + trace + debug + info + error
通过设置日志开关的参数,可以开启不同级别的日志。 通过设置日志开关的参数,可以开启不同级别的日志。

View File

@ -7,20 +7,20 @@ description: 一些常见问题的解决方法汇总
如果 FAQ 中的信息不能够帮到您,需要 TDengine 技术团队的技术支持与协助,请将以下两个目录中内容打包: 如果 FAQ 中的信息不能够帮到您,需要 TDengine 技术团队的技术支持与协助,请将以下两个目录中内容打包:
1. /var/log/taos (如果没有修改过默认路径) 1. `/var/log/taos` (如果没有修改过默认路径)
2. /etc/taos如果没有指定其他配置文件路径 2. `/etc/taos` (如果没有指定其他配置文件路径)
附上必要的问题描述,包括使用的 TDengine 版本信息、平台环境信息、发生该问题的执行操作、出现问题的表征及大概的时间,在 [GitHub](https://github.com/taosdata/TDengine) 提交 issue。 附上必要的问题描述,包括使用的 TDengine 版本信息、平台环境信息、发生该问题的执行操作、出现问题的表征及大概的时间,在 [GitHub](https://github.com/taosdata/TDengine) 提交 issue。
为了保证有足够的 debug 信息,如果问题能够重复,请修改/etc/taos/taos.cfg 文件最后面添加一行“debugFlag 135"(不带引号本身),然后重启 taosd, 重复问题,然后再递交。也可以通过如下 SQL 语句,临时设置 taosd 的日志级别。 为了保证有足够的 debug 信息,如果问题能够重复,请修改 `/etc/taos/taos.cfg` 文件,最后面添加一行 `debugFlag 135`,然后重启 taosd, 重复问题,然后再递交。也可以通过如下 SQL 语句,临时设置 taosd 的日志级别。
``` ```
alter dnode <dnode_id> 'debugFlag' '135'; alter dnode <dnode_id> 'debugFlag' '135';
``` ```
其中 dnode_id 请从 show dnodes; 命令输出中获取。 其中 dnode_id 请从 `show dnodes` 命令输出中获取。
但系统正常运行时,请一定将 debugFlag 设置为 131否则会产生大量的日志信息降低系统效率。 但系统正常运行时,请一定将 debugFlag 设置为 `131`,否则会产生大量的日志信息,降低系统效率。
## 常见问题列表 ## 常见问题列表
@ -31,7 +31,7 @@ description: 一些常见问题的解决方法汇总
1. 删除配置文件,执行 `sudo rm -rf /etc/taos/taos.cfg` 1. 删除配置文件,执行 `sudo rm -rf /etc/taos/taos.cfg`
2. 删除日志文件,执行 `sudo rm -rf /var/log/taos/` 2. 删除日志文件,执行 `sudo rm -rf /var/log/taos/`
3. 确保数据已经不再需要的前提下,删除数据文件,执行 `sudo rm -rf /var/lib/taos/` 3. 确保数据已经不再需要的前提下,删除数据文件,执行 `sudo rm -rf /var/lib/taos/`
4. 安装最新3.0稳定版本的 TDengine 4. 安装最新 3.0 稳定版本的 TDengine
5. 如果需要迁移数据或者数据文件损坏,请联系涛思数据官方技术支持团队,进行协助解决 5. 如果需要迁移数据或者数据文件损坏,请联系涛思数据官方技术支持团队,进行协助解决
### 2. Windows 平台下 JDBCDriver 找不到动态链接库,怎么办? ### 2. Windows 平台下 JDBCDriver 找不到动态链接库,怎么办?
@ -49,24 +49,24 @@ description: 一些常见问题的解决方法汇总
1. 检查网络环境 1. 检查网络环境
- 云服务器:检查云服务器的安全组是否打开 TCP/UDP 端口 6030/6041 的访问权限 - 云服务器:检查云服务器的安全组是否打开 TCP/UDP 端口 6030/6041 的访问权限
- 本地虚拟机:检查网络能否 ping 通,尽量避免使用`localhost` 作为 hostname - 本地虚拟机:检查网络能否 ping 通,尽量避免使用 `localhost` 作为 hostname
- 公司服务器:如果为 NAT 网络环境,请务必检查服务器能否将消息返回值客户端 - 公司服务器:如果为 NAT 网络环境,请务必检查服务器能否将消息返回值客户端
2. 确保客户端与服务端版本号是完全一致的,开源社区版和企业版也不能混用 2. 确保客户端与服务端版本号是完全一致的,开源社区版和企业版也不能混用
3. 在服务器,执行 `systemctl status taosd` 检查*taosd*运行状态。如果没有运行,启动*taosd* 3. 在服务器,执行 `systemctl status taosd` 检查 *taosd* 运行状态。如果没有运行,启动 *taosd*
4. 确认客户端连接时指定了正确的服务器 FQDN (Fully Qualified Domain Name —— 可在服务器上执行 Linux/macOS 命令 hostname -f 获得FQDN 配置参考:[一篇文章说清楚 TDengine 的 FQDN](https://www.taosdata.com/blog/2020/09/11/1824.html)。 4. 确认客户端连接时指定了正确的服务器 FQDN (Fully Qualified Domain Name —— 可在服务器上执行 Linux/macOS 命令 `hostname -f` 获得FQDN 配置参考 [一篇文章说清楚 TDengine 的 FQDN](https://www.taosdata.com/blog/2020/09/11/1824.html)。
5. ping 服务器 FQDN如果没有反应请检查你的网络DNS 设置,或客户端所在计算机的系统 hosts 文件。如果部署的是 TDengine 集群,客户端需要能 ping 通所有集群节点的 FQDN。 5. ping 服务器 FQDN如果没有反应请检查你的网络DNS 设置,或客户端所在计算机的系统 hosts 文件。如果部署的是 TDengine 集群,客户端需要能 ping 通所有集群节点的 FQDN。
6. 检查防火墙设置Ubuntu 使用 ufw statusCentOS 使用 firewall-cmd --list-port确保集群中所有主机在端口 6030/6041 上的 TCP/UDP 协议能够互通。 6. 检查防火墙设置Ubuntu 使用 ufw statusCentOS 使用 firewall-cmd --list-port确保集群中所有主机在端口 6030/6041 上的 TCP/UDP 协议能够互通。
7. 对于 Linux 上的 JDBCODBC, Python, Go 等接口类似)连接, 确保*libtaos.so*在目录*/usr/local/taos/driver*里, 并且*/usr/local/taos/driver*在系统库函数搜索路径*LD_LIBRARY_PATH* 7. 对于 Linux 上的 JDBCODBC、Python、Go 等接口类似)连接,确保 *libtaos.so* 在目录 */usr/local/taos/driver* 里,并且 */usr/local/taos/driver* 在系统库函数搜索路径 *LD_LIBRARY_PATH*
8. 对于 macOS 上的 JDBCODBC, Python, Go 等接口类似)连接, 确保*libtaos.dylib*在目录*/usr/local/lib*里, 并且*/usr/local/lib*在系统库函数搜索路径*LD_LIBRARY_PATH* 8. 对于 macOS 上的 JDBCODBC、Python、Go 等接口类似)连接,确保 *libtaos.dylib* 在目录 */usr/local/lib* 里,并且 */usr/local/lib* 在系统库函数搜索路径 *LD_LIBRARY_PATH*
9. 对于 Windows 上的 JDBC, ODBC, Python, Go 等连接,确保*C:\TDengine\driver\taos.dll*在你的系统库函数搜索目录里 (建议*taos.dll*放在目录 _C:\Windows\System32_) 9. 对于 Windows 上的 JDBC、ODBC、Python、Go 等连接,确保 *C:\TDengine\driver\taos.dll* 在你的系统库函数搜索目录里 (建议 *taos.dll* 放在目录 _C:\Windows\System32_)
10. 如果仍不能排除连接故障 10. 如果仍不能排除连接故障
@ -75,7 +75,7 @@ description: 一些常见问题的解决方法汇总
检查服务器侧 TCP 端口连接是否工作:`nc -l {port}` 检查服务器侧 TCP 端口连接是否工作:`nc -l {port}`
检查客户端侧 TCP 端口连接是否工作:`nc {hostIP} {port}` 检查客户端侧 TCP 端口连接是否工作:`nc {hostIP} {port}`
- Windows 系统请使用 PowerShell 命令 Test-NetConnection -ComputerName \{fqdn} -Port \{port} 检测服务段端口是否访问 - Windows 系统请使用 PowerShell 命令 `Test-NetConnection -ComputerName \{fqdn} -Port \{port}` 检测服务段端口是否访问
11. 也可以使用 taos 程序内嵌的网络连通检测功能,来验证服务器和客户端之间指定的端口连接是否通畅:[运维指南](../../operation)。 11. 也可以使用 taos 程序内嵌的网络连通检测功能,来验证服务器和客户端之间指定的端口连接是否通畅:[运维指南](../../operation)。
@ -88,7 +88,7 @@ description: 一些常见问题的解决方法汇总
3. 如果网络没有配置 DNS server请检查客户端所在机器的 hosts 文件,查看该 FQDN 是否配置,并是否有正确的 IP 地址 3. 如果网络没有配置 DNS server请检查客户端所在机器的 hosts 文件,查看该 FQDN 是否配置,并是否有正确的 IP 地址
4. 如果网络配置 OK从客户端所在机器你需要能 Ping 该连接的 FQDN否则客户端是无法连接服务器的 4. 如果网络配置 OK从客户端所在机器你需要能 Ping 该连接的 FQDN否则客户端是无法连接服务器的
5. 如果服务器曾经使用过 TDengine且更改过 hostname建议检查 data 目录的 dnode.json 是否符合当前配置的 EP路径默认为/var/lib/taos/dnode。正常情况下建议更换新的数据目录或者备份后删除以前的数据目录这样可以避免该问题。 5. 如果服务器曾经使用过 TDengine且更改过 hostname建议检查 data 目录的 dnode.json 是否符合当前配置的 EP路径默认为/var/lib/taos/dnode。正常情况下建议更换新的数据目录或者备份后删除以前的数据目录这样可以避免该问题。
6. 检查/etc/hosts 和/etc/hostname 是否是预配置的 FQDN 6. 检查 /etc/hosts 和/etc/hostname 是否是预配置的 FQDN
### 6. 最有效的写入数据的方法是什么? ### 6. 最有效的写入数据的方法是什么?
@ -105,7 +105,7 @@ properties.setProperty(TSDBDriver.LOCALE_KEY, "UTF-8");
Connection = DriverManager.getConnection(url, properties); Connection = DriverManager.getConnection(url, properties);
``` ```
### 8. Windows 系统下客户端无法正常显示中文字符? ### 8. Windows 系统下客户端无法正常显示中文字符?
Windows 系统中一般是采用 GBK/GB18030 存储中文字符,而 TDengine 的默认字符集为 UTF-8 ,在 Windows 系统中使用 TDengine 客户端时,客户端驱动会将字符统一转换为 UTF-8 编码后发送到服务端存储,因此在应用开发过程中,调用接口时正确配置当前的中文字符集即可。 Windows 系统中一般是采用 GBK/GB18030 存储中文字符,而 TDengine 的默认字符集为 UTF-8 ,在 Windows 系统中使用 TDengine 客户端时,客户端驱动会将字符统一转换为 UTF-8 编码后发送到服务端存储,因此在应用开发过程中,调用接口时正确配置当前的中文字符集即可。
@ -124,7 +124,7 @@ charset UTF-8
TDengine 是根据 hostname 唯一标志一台机器的对于3.0版本,将数据文件从机器 A 移动机器 B 时,需要重新配置机器 B 的 hostname 为机器 A 的 hostname。 TDengine 是根据 hostname 唯一标志一台机器的对于3.0版本,将数据文件从机器 A 移动机器 B 时,需要重新配置机器 B 的 hostname 为机器 A 的 hostname。
3.x 和 之前的1.x、2.x 版本的存储结构不兼容,需要使用迁移工具或者自己开发应用导出导入数据。 3.x 和 之前的 1.x、2.x 版本的存储结构不兼容,需要使用迁移工具或者自己开发应用导出导入数据。
### 11. 如何在命令行程序 taos 中临时调整日志级别 ### 11. 如何在命令行程序 taos 中临时调整日志级别
@ -145,11 +145,11 @@ local_option: {
其含义是,在当前的命令行程序下,清空本机所有客户端生成的日志文件(resetLog),或修改一个特定模块的日志记录级别(只对当前命令行程序有效,如果 taos 命令行程序重启,则需要重新设置): 其含义是,在当前的命令行程序下,清空本机所有客户端生成的日志文件(resetLog),或修改一个特定模块的日志记录级别(只对当前命令行程序有效,如果 taos 命令行程序重启,则需要重新设置):
- value 的取值可以是131输出错误和警告日志135 输出错误、警告和调试日志),143 输出错误、警告、调试和跟踪日志)。 - value 的取值可以是131输出错误和警告日志、135 输出错误、警告和调试日志)、143 输出错误、警告、调试和跟踪日志)。
### 12. go 语言编写组件编译失败怎样解决? ### 12. go 语言编写组件编译失败怎样解决?
TDengine 3.0版本包含一个使用 go 语言开发的 taosAdapter 独立组件需要单独运行提供restful接入功能以及支持多种其他软件Prometheus、Telegraf、collectd、StatsD 等)的数据接入功能。 TDengine 3.0 版本包含一个使用 go 语言开发的 taosAdapter 独立组件,需要单独运行,提供 restful 接入功能以及支持多种其他软件Prometheus、Telegraf、collectd、StatsD 等)的数据接入功能。
使用最新 develop 分支代码编译需要先 `git submodule update --init --recursive` 下载 taosAdapter 仓库代码后再编译。 使用最新 develop 分支代码编译需要先 `git submodule update --init --recursive` 下载 taosAdapter 仓库代码后再编译。
go 语言版本要求 1.14 以上,如果发生 go 编译错误,往往是国内访问 go mod 问题,可以通过设置 go 环境变量来解决: go 语言版本要求 1.14 以上,如果发生 go 编译错误,往往是国内访问 go mod 问题,可以通过设置 go 环境变量来解决:
@ -192,21 +192,21 @@ TDengine 中时间戳的时区总是由客户端进行处理,而与服务端
这个现象可能是因为 taosAdapter 没有被正确启动引起的,需要执行:```systemctl start taosadapter``` 命令来启动 taosAdapter 服务。 这个现象可能是因为 taosAdapter 没有被正确启动引起的,需要执行:```systemctl start taosadapter``` 命令来启动 taosAdapter 服务。
需要说明的是taosAdapter 的日志路径 path 需要单独配置,默认路径是 /var/log/taos ;日志等级 logLevel 有 8 个等级,默认等级是 info ,配置成 panic 可关闭日志输出。请注意操作系统 / 目录的空间大小,可通过命令行参数、环境变量或配置文件来修改配置,默认配置文件是 /etc/taos/taosadapter.toml 。 需要说明的是taosAdapter 的日志路径 path 需要单独配置,默认路径是 /var/log/taos ;日志等级 logLevel 有 8 个等级,默认等级是 info ,配置成 panic 可关闭日志输出。请注意操作系统 `/` 目录的空间大小,可通过命令行参数、环境变量或配置文件来修改配置,默认配置文件是 /etc/taos/taosadapter.toml 。
有关 taosAdapter 组件的详细介绍请看文档:[taosAdapter](../../reference/components/taosadapter/) 有关 taosAdapter 组件的详细介绍请看文档:[taosAdapter](../../reference/components/taosadapter/)
### 18. 发生了 OOM 怎么办? ### 18. 发生了 OOM 怎么办?
OOM 是操作系统的保护机制,当操作系统内存(包括 SWAP )不足时,会杀掉某些进程,从而保证操作系统的稳定运行。通常内存不足主要是如下两个原因导致,一是剩余内存小于 vm.min_free_kbytes ;二是程序请求的内存大于剩余内存。还有一种情况是内存充足但程序占用了特殊的内存地址,也会触发 OOM OOM 是操作系统的保护机制,当操作系统内存(包括 SWAP)不足时,会杀掉某些进程,从而保证操作系统的稳定运行。通常内存不足主要是如下两个原因导致,一是剩余内存小于 vm.min_free_kbytes二是程序请求的内存大于剩余内存。还有一种情况是内存充足但程序占用了特殊的内存地址也会触发 OOM。
TDengine 会预先为每个 VNode 分配好内存,每个 Database 的 VNode 个数受 建库时的vgroups参数影响每个 VNode 占用的内存大小受 buffer参数 影响。要防止 OOM需要在项目建设之初合理规划内存并合理设置 SWAP 除此之外查询过量的数据也有可能导致内存暴涨这取决于具体的查询语句。TDengine 企业版对内存管理做了优化,采用了新的内存分配器,对稳定性有更高要求的用户可以考虑选择企业版。 TDengine 会预先为每个 VNode 分配好内存,每个 Database 的 VNode 个数受 建库时的vgroups参数影响每个 VNode 占用的内存大小受 buffer参数 影响。要防止 OOM需要在项目建设之初合理规划内存并合理设置 SWAP 除此之外查询过量的数据也有可能导致内存暴涨这取决于具体的查询语句。TDengine 企业版对内存管理做了优化,采用了新的内存分配器,对稳定性有更高要求的用户可以考虑选择企业版。
### 19. 在macOS上遇到Too many open files怎么办 ### 19. 在macOS上遇到 Too many open files 怎么办?
taosd日志文件报错Too many open file是由于taosd打开文件数超过系统设置的上限所致。 taosd 日志文件报错 Too many open file是由于 taosd 打开文件数超过系统设置的上限所致。
解决方案如下: 解决方案如下:
1. 新建文件 /Library/LaunchDaemons/limit.maxfiles.plist写入以下内容(以下示例将limit和maxfiles改为10万可按需修改) 1. 新建文件 /Library/LaunchDaemons/limit.maxfiles.plist写入以下内容(以下示例将 limit maxfiles 改为 10万可按需修改)
``` ```
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
@ -235,7 +235,7 @@ taosd日志文件报错Too many open file是由于taosd打开文件数超过
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist
``` ```
3. 加载 plist 文件 (或重启系统后生效。launchd在启动时会自动加载该目录的 plist) 3. 加载 plist 文件 (或重启系统后生效。launchd 在启动时会自动加载该目录的 plist)
``` ```
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
``` ```
@ -247,29 +247,29 @@ launchctl limit maxfiles
该提示是创建 db 的 vnode 数量不够了,需要的 vnode 不能超过了 dnode 中 vnode 的上限。因为系统默认是一个 dnode 中有 CPU 核数两倍的 vnode也可以通过配置文件中的参数 supportVnodes 控制。 该提示是创建 db 的 vnode 数量不够了,需要的 vnode 不能超过了 dnode 中 vnode 的上限。因为系统默认是一个 dnode 中有 CPU 核数两倍的 vnode也可以通过配置文件中的参数 supportVnodes 控制。
正常调大 taos.cfg 中 supportVnodes 参数即可。 正常调大 taos.cfg 中 supportVnodes 参数即可。
### 21 在服务器上的使用 TDengine CLI能查到指定时间段的数据但在客户端机器上查不到 ### 21 在服务器上的使用 TDengine CLI 能查到指定时间段的数据,但在客户端机器上查不到?
这种情况是因为客户端与服务器上设置的时区不一致导致的,调整客户端与服务器的时区一致即可解决。 这种情况是因为客户端与服务器上设置的时区不一致导致的,调整客户端与服务器的时区一致即可解决。
### 22 表名确认是存在的,但在写入或查询时返回表名不存在,什么原因? ### 22 表名确认是存在的,但在写入或查询时返回表名不存在,什么原因?
TDengine 中的所有名称,包括数据库名、表名等都是区分大小写的,如果这些名称在程序或 TDengine CLI中没有使用反引号`)括起来使用,即使你输入的是大写的,引擎也会转化成小写来使用,如果名称前后加上了反引号,引擎就不会再转化成小写,会保持原样来使用。 TDengine 中的所有名称,包括数据库名、表名等都是区分大小写的,如果这些名称在程序或 TDengine CLI 中没有使用反引号(`)括起来使用,即使你输入的是大写的,引擎也会转化成小写来使用,如果名称前后加上了反引号,引擎就不会再转化成小写,会保持原样来使用。
### 23 在 TDengine CLI中查询字段内容不能完全显示出来怎么办 ### 23 在 TDengine CLI中查询字段内容不能完全显示出来怎么办
可以使用 \G 参数来竖式显示,如 show databases\G; (为了输入方便,在"\"后加 TAB 键,会自动补全后面的内容) 可以使用 `\G` 参数来竖式显示,如 `show databases\G;` (为了输入方便,在"\"后加 TAB 键,会自动补全后面的内容)
### 24 使用 taosBenchmark 测试工具写入数据查询很快,为什么我写入的数据查询非常慢? ### 24 使用 taosBenchmark 测试工具写入数据查询很快,为什么我写入的数据查询非常慢?
TDengine 在写入数据时如果有很严重的乱序写入问题,会严重影响查询性能,所以需要在写入前解决乱序的问题。如果业务是从 kafka 消费写入,请合理设计消费者,尽可能的一个子表数据由一个消费者去消费并写入,避免由设计产生的乱序。 TDengine 在写入数据时如果有很严重的乱序写入问题,会严重影响查询性能,所以需要在写入前解决乱序的问题。如果业务是从 Kafka 消费写入,请合理设计消费者,尽可能的一个子表数据由一个消费者去消费并写入,避免由设计产生的乱序。
### 25 我想统计下前后两条写入记录之间的时间差值是多少? ### 25 我想统计下前后两条写入记录之间的时间差值是多少?
使用 DIFF 函数,可以查看时间列或数值列前后两条记录的差值,非常方便,详细说明见 SQL手册->函数->DIFF 使用 DIFF 函数,可以查看时间列或数值列前后两条记录的差值,非常方便,详细说明见 SQL 手册->函数->DIFF
### 26 遇到报错 “DND ERROR Version not compatible,cliver : 3000700swr wer : 3020300” ### 26 遇到报错 “DND ERROR Version not compatible, client: 3000700, server: 3020300”
说明客户端和服务端版本不兼容,这里cliver的版本是3.0.7.0,server版本是 3.2.3.0。目前的兼容策略是前三位一致client 和 sever才能兼容。 说明客户端和服务端版本不兼容,这里 client 的版本是 3.0.7.0server 版本是 3.2.3.0。目前的兼容策略是前三位一致client 和 sever 才能兼容。
### 27 修改database的root密码后启动taos遇到报错 “failed to connect to server, reason: Authentication failure” ### 27 修改 database root 密码后,启动 taos 遇到报错 “failed to connect to server, reason: Authentication failure”
默认情况启动taos服务会使用系统默认的用户名root和密码尝试连接taosd在root密码修改后启用taos连接就需要指明用户名和密码例如: taos -h xxx.xxx.xxx.xxx -u root -p然后输入新密码进行连接。 默认情况启动taos服务会使用系统默认的用户名root和密码尝试连接 taosd root 密码修改后,启用 taos 连接就需要指明用户名和密码,例如 `taos -h xxx.xxx.xxx.xxx -u root -p`,然后输入新密码进行连接。
### 28 修改database的root密码后Grafana监控插件TDinsight无数据展示 ### 28 修改 database root 密码后Grafana 监控插件 TDinsight 无数据展示
TDinsight插件中展示的数据是通过taosKeeper和taosAdapter服务收集并存储于TD的log库中在root密码修改后需要同步更新taosKeeper和taosAdapter配置文件中对应的密码信息然后重启taosKeeper和taosAdapter服务若是集群需要重启每个节点上的对应服务 TDinsight 插件中展示的数据是通过 taosKeeper taosAdapter 服务收集并存储于 TD log 库中,在 root 密码修改后,需要同步更新 taosKeeper taosAdapter 配置文件中对应的密码信息,然后重启 taosKeeper taosAdapter 服务(注:若是集群需要重启每个节点上的对应服务)。
### 29 遇到报错 “some vnode/qnode/mnode(s) out of service” 怎么办? ### 29 遇到报错 “some vnode/qnode/mnode(s) out of service” 怎么办?
客户端未配置所有服务端的 FQDN 解析。比如服务端有 3 个节点,客户端只配置了 1 个节点的 FQDN 解析。FQDN 配置参考:[一篇文章说清楚 TDengine 的 FQDN](https://www.taosdata.com/blog/2020/09/11/1824.html) 客户端未配置所有服务端的 FQDN 解析。比如服务端有 3 个节点,客户端只配置了 1 个节点的 FQDN 解析。FQDN 配置参考:[一篇文章说清楚 TDengine 的 FQDN](https://www.taosdata.com/blog/2020/09/11/1824.html)
@ -277,21 +277,21 @@ TDinsight插件中展示的数据是通过taosKeeper和taosAdapter服务收集
### 30 为什么开源版 TDengine 的主进程会建立一个与公网的连接? ### 30 为什么开源版 TDengine 的主进程会建立一个与公网的连接?
这个连接只会上报不涉及任何用户数据的最基本信息用于官方了解产品在世界范围内的分布情况进而优化产品提升用户体验具体采集项目为集群名、操作系统版本、cpu信息等。 这个连接只会上报不涉及任何用户数据的最基本信息用于官方了解产品在世界范围内的分布情况进而优化产品提升用户体验具体采集项目为集群名、操作系统版本、cpu信息等。
该特性为可选配置项,在开源版中默认开启,具体参数为 telemetryReporting , 在官方文档中有做说明,链接如下:[参数简介](https://docs.taosdata.com/reference/components/taosd/#%E7%9B%91%E6%8E%A7%E7%9B%B8%E5%85%B3) 该特性为可选配置项,在开源版中默认开启,具体参数为 telemetryReporting在官方文档中有做说明,链接如下:[参数简介](https://docs.taosdata.com/reference/components/taosd/#%E7%9B%91%E6%8E%A7%E7%9B%B8%E5%85%B3)
您可以随时关闭该参数只需要在taos.cfg 中修改telemetryReporting为 0然后重启数据库服务即可。 您可以随时关闭该参数只需要在taos.cfg 中修改 telemetryReporting 为 0然后重启数据库服务即可。
代码位于:[点击此处](https://github.com/taosdata/TDengine/blob/62e609c558deb764a37d1a01ba84bc35115a85a4/source/dnode/mnode/impl/src/mndTelem.c) 代码位于[点击此处](https://github.com/taosdata/TDengine/blob/62e609c558deb764a37d1a01ba84bc35115a85a4/source/dnode/mnode/impl/src/mndTelem.c)
此外,对于安全性要求极高的企业版 TDengine Enterprise 来说,此参数不会工作。 此外,对于安全性要求极高的企业版 TDengine Enterprise 来说,此参数不会工作。
### 31 第一次连接集群时遇到“Sync leader is unreachable”怎么办 ### 31 第一次连接集群时遇到“Sync leader is unreachable”怎么办
报这个错说明第一次向集群的连接是成功的但第一次访问的IP不是mnode的leader节点客户端试图与leader建立连接时发生错误。客户端通过EP也就是指定的fqdn与端口号寻找leader节点常见的报错原因有两个 报这个错,说明第一次向集群的连接是成功的,但第一次访问的 IP 不是 mnode leader 节点,客户端试图与 leader 建立连接时发生错误。客户端通过 EP也就是指定的 fqdn 与端口号寻找 leader 节点,常见的报错原因有两个:
- 集群中其他节点的端口没有打开 - 集群中其他节点的端口没有打开
- 客户端的hosts未正确配置 - 客户端的 hosts 未正确配置
因此用户首先要检查服务端集群的所有端口原生连接默认6030http连接默认6041有无打开其次是客户端的hosts文件中是否配置了集群所有节点的fqdn与IP信息。 因此用户首先要检查服务端,集群的所有端口(原生连接默认 6030http 连接默认 6041有无打开其次是客户端的 hosts 文件中是否配置了集群所有节点的 fqdn IP 信息。
如仍无法解决,则需要联系涛思技术人员支持。 如仍无法解决,则需要联系涛思技术人员支持。
### 32 同一台服务器,数据库的数据目录 dataDir 不变,为什么原有数据库丢失且集群 ID 发生了变化? ### 32 同一台服务器,数据库的数据目录 dataDir 不变,为什么原有数据库丢失且集群 ID 发生了变化?

View File

@ -16,7 +16,7 @@ TDengine 版本号由四个数字组成,中间由点号分隔,定义如下
## TDengine 2.x 下载 ## TDengine 2.x 下载
TDengine 2.x 各版本安装包请访问[这里](https://www.taosdata.com/all-downloads) TDengine 2.x 各版本安装包请访问 [这里](https://www.taosdata.com/all-downloads)
## TDengine 3.x 下载 ## TDengine 3.x 下载

View File

@ -6,7 +6,7 @@ description: taosTools 的发布历史、Release Notes 和下载链接
从 3.0.6.0 开始taosTools 集成到 TDengine 的安装包中不再单独提供。taosTools对应 TDengine 3.0.5.2及以下)各版本安装包下载链接如下: 从 3.0.6.0 开始taosTools 集成到 TDengine 的安装包中不再单独提供。taosTools对应 TDengine 3.0.5.2及以下)各版本安装包下载链接如下:
2.6 的历史版本安装包请访问[这里](https://www.taosdata.com/all-downloads) 2.6 的历史版本安装包请访问 [这里](https://www.taosdata.com/all-downloads)
import Release from "/components/ReleaseV3"; import Release from "/components/ReleaseV3";