diff --git a/docs-cn/08-advance-feature/04-udf.md b/docs-cn/08-advance-feature/04-udf.md index 6fd05cca1d9821dc5e3074b8302c0a01245741a0..c0c3eec4ad6b3b07e3170a0680daba0dab13ef9b 100644 --- a/docs-cn/08-advance-feature/04-udf.md +++ b/docs-cn/08-advance-feature/04-udf.md @@ -7,19 +7,17 @@ title: UDF(用户定义函数) 从 2.2.0.0 版本开始,TDengine 支持通过 C/C++ 语言进行 UDF 定义。接下来结合示例讲解 UDF 的使用方法。 -## 用 C/C++ 语言来定义 UDF - -TDengine 提供 3 个 UDF 的源代码示例,分别为: +用户可以通过 UDF 实现两类函数: 标量函数 和 聚合函数。 -- [add_one.c](#add_one.c) -- [abs_max.c](#abs_max.c) -- [demo.c](#demo.c) +## 用 C/C++ 语言来定义 UDF ### 标量函数 -[add_one.c](https://github.com/taosdata/TDengine/blob/develop/tests/script/sh/add_one.c) 是结构最简单的 UDF 实现。其功能为:对传入的一个数据列(可能因 WHERE 子句进行了筛选)中的每一项,都输出 +1 之后的值,并且要求输入的列数据类型为 INT。 +用户可以按照下列函数模板定义自己的标量计算函数 -这一具体的处理逻辑在函数 `void add_one(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* interBuf, char* tsOutput, int* numOfOutput, short otype, short obytes, SUdfInit* buf)` 中定义。这类用于实现 UDF 的基础计算逻辑的函数,我们称为 udfNormalFunc,也就是对行数据块的标量计算函数。需要注意的是,udfNormalFunc 的参数项是固定的,用于按照约束完成与引擎之间的数据交换。 + `void udfNormalFunc(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* interBuf, char* tsOutput, int* numOfOutput, short otype, short obytes, SUdfInit* buf)` + + 其中 udfNormalFunc 是函数名的占位符,以上述模板实现的函数对行数据块进行标量计算,其参数项是固定的,用于按照约束完成与引擎之间的数据交换。 - udfNormalFunc 中各参数的具体含义是: - data:输入数据。 @@ -35,15 +33,15 @@ TDengine 提供 3 个 UDF 的源代码示例,分别为: - oBytes:输出数据中每个值占用的字节数。 - buf:用于在 UDF 与引擎间的状态控制信息传递块。 -### 聚合函数 + [add_one.c](https://github.com/taosdata/TDengine/blob/develop/tests/script/sh/add_one.c) 是结构最简单的 UDF 实现,也即上面定义的 udfNormalFunc 函数的一个具体实现。其功能为:对传入的一个数据列(可能因 WHERE 子句进行了筛选)中的每一项,都输出 +1 之后的值,并且要求输入的列数据类型为 INT。 -[abs_max.c](https://github.com/taosdata/TDengine/blob/develop/tests/script/sh/abs_max.c) 实现的是一个聚合函数,功能是对一组数据按绝对值取最大值。 +### 聚合函数 -其计算过程为:与所在查询语句相关的数据会被分为多个行数据块,对每个行数据块调用 udfNormalFunc(在本例的实现代码中,实际函数名是 `abs_max`)来生成每个子表的中间结果,再将子表的中间结果调用 udfMergeFunc(本例中,其实际的函数名是 `abs_max_merge`)进行聚合,生成超级表的最终聚合结果或中间结果。聚合查询最后还会通过 udfFinalizeFunc(本例中,其实际的函数名是 `abs_max_finalize`)再把超级表的中间结果处理为最终结果,最终结果只能含 0 或 1 条结果数据。 +用户可以按照如下函数模板定义自己的聚合函数。 -值得注意的是,udfNormalFunc、udfMergeFunc、udfFinalizeFunc 之间,函数名约定使用相同的前缀,此前缀即 udfNormalFunc 的实际函数名。udfMergeFunc 的函数名后缀 `_merge`、udfFinalizeFunc 的函数名后缀 `_finalize`,是 UDF 实现规则的一部分,系统会按照这些函数名后缀来调用相应功能。 +`void abs_max_merge(char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput, SUdfInit* buf)` -- udfMergeFunc 用于对计算中间结果进行聚合,只有针对超级表的聚合查询才需要调用该函数。本例中 udfMergeFunc 对应的实现函数为 `void abs_max_merge(char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput, SUdfInit* buf)`,其中各参数的具体含义是: +其中 udfMergeFunc 是函数名的占位符,以上述模板实现的函数用于对计算中间结果进行聚合,只有针对超级表的聚合查询才需要调用该函数。其中各参数的具体含义是: - data:udfNormalFunc 的输出数据数组,如果使用了 interBuf 那么 data 就是 interBuf 的数组。 - numOfRows:data 中数据的行数。 @@ -51,41 +49,43 @@ TDengine 提供 3 个 UDF 的源代码示例,分别为: - numOfOutput:输出结果的个数(行数)。 - buf:用于在 UDF 与引擎间的状态控制信息传递块。 -- udfFinalizeFunc 用于对计算结果进行最终计算,通常用于有 interBuf 使用的场景。本例中 udfFinalizeFunc 对应的实现函数为 `void abs_max_finalize(char* dataOutput, char* interBuf, int* numOfOutput, SUdfInit* buf)`,其中各参数的具体含义是: - - dataOutput:输出数据的缓冲区。 - - interBuf:中间结算结果缓冲区,可作为输入。 - - numOfOutput:输出数据的个数,对聚合函数来说只能是 0 或者 1。 - - buf:用于在 UDF 与引擎间的状态控制信息传递块。 +[abs_max.c](https://github.com/taosdata/TDengine/blob/develop/tests/script/sh/abs_max.c) 实现的是一个聚合函数,功能是对一组数据按绝对值取最大值。 -其他典型场景,如协方差的计算,即可通过定义聚合 UDF 的方式实现。 +其计算过程为:与所在查询语句相关的数据会被分为多个行数据块,对每个行数据块调用 udfNormalFunc(在本例的实现代码中,实际函数名是 `abs_max`)来生成每个子表的中间结果,再将子表的中间结果调用 udfMergeFunc(本例中,其实际的函数名是 `abs_max_merge`)进行聚合,生成超级表的最终聚合结果或中间结果。聚合查询最后还会通过 udfFinalizeFunc(本例中,其实际的函数名是 `abs_max_finalize`)再把超级表的中间结果处理为最终结果,最终结果只能含 0 或 1 条结果数据。 -### 其他 UDF 函数 +其他典型场景,如协方差的计算,也可通过定义聚合 UDF 的方式实现。 -用户 UDF 程序除了需要实现上面几个函数外,还有两个用于初始化和释放 UDF 与引擎间的状态控制信息传递块的函数。具体来说,也即对应 udfInitFunc 和 udfDestroyFunc。其函数名命名规则同样是采取以 udfNormalFunc 的实际函数名为前缀,以 `_init` 和 `_destroy` 为后缀。系统会在初始化和资源释放时调用对应名称的函数。 +### 最终计算 -- udfInitFunc 用于初始化状态控制信息传递块。上例中 udfInitFunc 对应的实现函数为 `int abs_max_init(SUdfInit* buf)`,其中各参数的具体含义是: +用户可以按下面的函数模板实现自己的函数对计算结果进行最终计算,通常用于有 interBuf 使用的场景。 - - buf:用于在 UDF 与引擎间的状态控制信息传递块。 +`void abs_max_finalize(char* dataOutput, char* interBuf, int* numOfOutput, SUdfInit* buf)` -- udfDestroyFunc 用于释放状态控制信息传递块。上例中 udfDestroyFunc 对应的实现函数为 `void abs_max_destroy(SUdfInit* buf)`,其中各参数的具体含义是: +其中 udfFinalizeFunc 是函数名的占位符 ,其中各参数的具体含义是: + - dataOutput:输出数据的缓冲区。 + - interBuf:中间结算结果缓冲区,可作为输入。 + - numOfOutput:输出数据的个数,对聚合函数来说只能是 0 或者 1。 - buf:用于在 UDF 与引擎间的状态控制信息传递块。 -目前该功能暂时没有实际意义,待后续扩展使用。 +## UDF 实现方式的规则总结 -### UDF 实现方式的规则总结 +三类 UDF 函数: udfNormalFunc、udfMergeFunc、udfFinalizeFunc ,其函数名约定使用相同的前缀,此前缀即 udfNormalFunc 的实际函数名,也即 udfNormalFunc 函数不需要在实际函数名后添加后缀;而udfMergeFunc 的函数名要加上后缀 `_merge`、udfFinalizeFunc 的函数名要加上后缀 `_finalize`,这是 UDF 实现规则的一部分,系统会按照这些函数名后缀来调用相应功能。 根据 UDF 函数类型的不同,用户所要实现的功能函数也不同: - 标量函数:UDF 中需实现 udfNormalFunc。 - 聚合函数:UDF 中需实现 udfNormalFunc、udfMergeFunc(对超级表查询)、udfFinalizeFunc。 -需要注意的是,如果对应的函数不需要具体的功能,也需要实现一个空函数。 +:::note +如果对应的函数不需要具体的功能,也需要实现一个空函数。 + +::: ## 编译 UDF -用户定义函数的 C 语言源代码无法直接被 TDengine 系统使用,而是需要先编译为 .so 链接库,之后才能载入 TDengine 系统。 +用户定义函数的 C 语言源代码无法直接被 TDengine 系统使用,而是需要先编译为 动态链接库,之后才能载入 TDengine 系统。 -例如,按照上一章节描述的规则准备好了用户定义函数的源代码 add_one.c,那么可以执行如下指令编译得到动态链接库文件: +例如,按照上一章节描述的规则准备好了用户定义函数的源代码 add_one.c,以 Linux 为例可以执行如下指令编译得到动态链接库文件: ```bash gcc -g -O0 -fPIC -shared add_one.c -o add_one.so @@ -101,7 +101,10 @@ gcc -g -O0 -fPIC -shared add_one.c -o add_one.so 在创建 UDF 时,需要区分标量函数和聚合函数。如果创建时声明了错误的函数类别,则可能导致通过 SQL 指令调用函数时出错。此外, UDF 支持输入与输出类型不一致,用户需要保证输入数据类型与 UDF 程序匹配,UDF 输出数据类型与 OUTPUTTYPE 匹配。 -- 创建标量函数:`CREATE FUNCTION ids(X) AS ids(Y) OUTPUTTYPE typename(Z) [ BUFSIZE B ];` +- 创建标量函数 +```sql +CREATE FUNCTION ids(X) AS ids(Y) OUTPUTTYPE typename(Z) [ BUFSIZE B ]; +``` - ids(X):标量函数未来在 SQL 指令中被调用时的函数名,必须与函数实现中 udfNormalFunc 的实际名称一致; - ids(Y):包含 UDF 函数实现的动态链接库的库文件绝对路径(指的是库文件在当前客户端所在主机上的保存路径,通常是指向一个 .so 文件),这个路径需要用英文单引号或英文双引号括起来; @@ -114,7 +117,10 @@ gcc -g -O0 -fPIC -shared add_one.c -o add_one.so CREATE FUNCTION add_one AS "/home/taos/udf_example/add_one.so" OUTPUTTYPE INT; ``` -- 创建聚合函数:`CREATE AGGREGATE FUNCTION ids(X) AS ids(Y) OUTPUTTYPE typename(Z) [ BUFSIZE B ];` +- 创建聚合函数: +```sql +CREATE AGGREGATE FUNCTION ids(X) AS ids(Y) OUTPUTTYPE typename(Z) [ BUFSIZE B ]; +``` - ids(X):聚合函数未来在 SQL 指令中被调用时的函数名,必须与函数实现中 udfNormalFunc 的实际名称一致; - ids(Y):包含 UDF 函数实现的动态链接库的库文件绝对路径(指的是库文件在当前客户端所在主机上的保存路径,通常是指向一个 .so 文件),这个路径需要用英文单引号或英文双引号括起来; @@ -131,14 +137,23 @@ gcc -g -O0 -fPIC -shared add_one.c -o add_one.so ### 管理 UDF -- 删除指定名称的用户定义函数:`DROP FUNCTION ids(X);` - - ids(X):此参数的含义与 CREATE 指令中的 ids(X) 参数一致,也即要删除的函数的名字,例如 `DROP FUNCTION add_one;`。 -- 显示系统中当前可用的所有 UDF:`SHOW FUNCTIONS;` +- 删除指定名称的用户定义函数: +``` +DROP FUNCTION ids(X); +``` + +- ids(X):此参数的含义与 CREATE 指令中的 ids(X) 参数一致,也即要删除的函数的名字,例如 +```sql +DROP FUNCTION add_one; +``` +- 显示系统中当前可用的所有 UDF: +```sql +SHOW FUNCTIONS; +``` ### 调用 UDF 在 SQL 指令中,可以直接以在系统中创建 UDF 时赋予的函数名来调用用户定义函数。例如: - ```sql SELECT X(c) FROM table/stable; ``` @@ -156,7 +171,7 @@ SELECT X(c) FROM table/stable; 5. 无法通过 RESTful 接口来创建 UDF; 6. UDF 在 SQL 中定义的函数名,必须与 .so 库文件实现中的接口函数名前缀保持一致,也即必须是 udfNormalFunc 的名称,而且不可与 TDengine 中已有的内建 SQL 函数重名。 -## 代码附件 +## 示例代码 ### [add_one.c](https://github.com/taosdata/TDengine/blob/develop/tests/script/sh/add_one.c) diff --git a/docs-cn/09-third-party/02-prometheus.md b/docs-cn/09-third-party/02-prometheus.md index e30c50d67fff449ad3adeafa9489f3bd43b02b28..a543bde90eefe6be9a8d2c8a8f58e3e5a2c54d1c 100644 --- a/docs-cn/09-third-party/02-prometheus.md +++ b/docs-cn/09-third-party/02-prometheus.md @@ -1,10 +1,13 @@ --- sidebar_label: Prometheus -title: Prometheus 写入 +title: Prometheus 远端读取/远端写入 --- -remote_read 和 remote_write 是 Prometheus 数据读写分离的集群方案。 -只需要将 remote_read 和 remote_write url 指向 taosAdapter 对应的 url 同时设置 Basic 验证即可使用。 +Prometheus 是一款流行的开源监控告警系统。Prometheus 的 remote_read 和 remote_write 的接口提供监控数据的远端读写的能力。 + +TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责接收包括 Prometheus 在内的多种应用的数据写入。只需要将 remote_read 和 remote_write url 指向 taosAdapter 对应的 url 同时设置 Basic 验证即可使用。 + +启动 taosAdapter 的命令为 `systemctl start taosadapter`。可以使用 `systemctl status taosadapter` 检查 taosAdapter 的运行状态。 - remote_read url : `http://host_to_taosAdapter:port(default 6041)/prometheus/v1/remote_read/:db` - remote_write url : `http://host_to_taosAdapter:port(default 6041)/prometheus/v1/remote_write/:db` @@ -31,3 +34,7 @@ remote_read: remote_timeout: 10s read_recent: true ``` + +即可在 TDengine 中查询 metrics 数据库中 Prometheus 写入的数据。 + +taosAdapter 相关配置参数请参考 `taosadapter --help` 命令输出以及相关文档。 diff --git a/docs-cn/09-third-party/03-telegraf.md b/docs-cn/09-third-party/03-telegraf.md index 8b517cdf94bdb2088e36a0f14a2667342bac59ae..f7e70d7f497b158e6e25293300416944a8268141 100644 --- a/docs-cn/09-third-party/03-telegraf.md +++ b/docs-cn/09-third-party/03-telegraf.md @@ -3,11 +3,13 @@ sidebar_label: Telegraf title: Telegraf 写入 --- -安装 Telegraf 请参考[官方文档](https://portal.influxdata.com/downloads/)。 +Telegraf 是一款十分流行的指标采集开源软件。安装 Telegraf 请参考[官方文档](https://portal.influxdata.com/downloads/)。 -TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责接收包括 Telegraf 的多种应用的数据写入。 +TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,可以接收包括 Telegraf 在内的多种应用的数据写入。 -配置方法,在 /etc/telegraf/telegraf.conf 增加如下配置,其中 database name 请填写希望在 TDengine 保存 Telegraf 数据的数据库名,TDengine server、cluster host、username 和 password 填写 TDengine 集群中的实际配置: +启动 taosAdapter 的命令为 `systemctl start taosadapter`。可以使用 `systemctl status taosadapter` 检查 taosAdapter 的运行状态。 + +配置方法,在 /etc/telegraf/telegraf.conf 增加如下配置,其中 `database name` 请填写希望在 TDengine 保存 Telegraf 数据的数据库名,`TDengine server`、`cluster host`、`username` 和 `password` 填写 TDengine 集群中的实际配置: ``` [[outputs.http]] @@ -23,9 +25,9 @@ TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责 然后重启 telegraf: ``` -sudo systemctl start telegraf +sudo systemctl restart telegraf ``` 即可在 TDengine 中查询 metrics 数据库中 Telegraf 写入的数据。 -taosAdapter 相关配置参数请参考 taosadapter --help 命令输出以及相关文档。 +taosAdapter 相关配置参数请参考 `taosadapter --help` 命令输出以及相关文档。 diff --git a/docs-cn/09-third-party/05-collectd.md b/docs-cn/09-third-party/05-collectd.md index c9c1c0404583e34edda07fa7f1e109b13c878222..e92c1f1ef65168d1b96a8dac675e51fb950d8891 100644 --- a/docs-cn/09-third-party/05-collectd.md +++ b/docs-cn/09-third-party/05-collectd.md @@ -3,9 +3,11 @@ sidebar_label: collectd title: collectd 写入 --- -安装 collectd,请参考[官方文档](https://collectd.org/download.shtml)。 +collectd 是一款插件式架构的开源监控软件,它可以收集各种来源的指标,如操作系统,应用程序,日志文件和外部设备,并存储此信息或通过网络提供。安装 collectd 请参考[官方文档](https://collectd.org/download.shtml)。 -TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责接收包括 collectd 的多种应用的数据写入。 +TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,可以接收包括 collectd 的多种应用的数据写入。 + +启动 taosAdapter 的命令为 `systemctl start taosadapter`,可以使用 `systemctl status taosadapter` 检查 taosAdapter 的运行状态。 在 `/etc/collectd/collectd.conf` 文件中增加如下内容,其中 host 和 port 请填写 TDengine 和 taosAdapter 配置的实际值: diff --git a/docs-cn/09-third-party/06-statsd.md b/docs-cn/09-third-party/06-statsd.md index 9b38d95fe40a792260b59b60c6cd6b8deb5bbe48..6c0082da8604d598cd7b85faa3aba413f475a2f6 100644 --- a/docs-cn/09-third-party/06-statsd.md +++ b/docs-cn/09-third-party/06-statsd.md @@ -3,10 +3,11 @@ sidebar_label: StatsD title: StatsD 直接写入 --- -安装 StatsD -请参考[官方文档](https://github.com/statsd/statsd)。 +StatsD 是汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议。安装 StatsD 请参考[官方文档](https://github.com/statsd/statsd)。 -TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责接收包括 StatsD 的多种应用的数据写入。 +TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,可以接收包括 StatsD 的多种应用的数据写入。 + +启动 taosAdapter 的命令为 `systemctl start taosadapter`,可以使用 `systemctl status taosadapter` 检查 taosAdapter 的运行状态。 在 `config.js` 文件中增加如下内容后启动 StatsD,其中 host 和 port 请填写 TDengine 和 taosAdapter 配置的实际值: diff --git a/docs-cn/09-third-party/07-icinga2.md b/docs-cn/09-third-party/07-icinga2.md index 0a37a10ea9275ef3a578074de34b1c846416ad84..25e84874024d155ef52db2f9ce0a28105836a591 100644 --- a/docs-cn/09-third-party/07-icinga2.md +++ b/docs-cn/09-third-party/07-icinga2.md @@ -3,11 +3,12 @@ sidebar_label: icinga2 title: icinga2 写入 --- -安装 icinga2 -请参考[官方文档](https://icinga.com/docs/icinga-2/latest/doc/02-installation/) +icinga2 是一款开源主机、网络监控软件,最初由 Nagios 网络监控应用发展而来。目前,icinga2 遵从 GNU GPL v2 许可协议发行。安装 icinga2 请参考[官方文档](https://icinga.com/docs/icinga-2/latest/doc/02-installation/) TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责接收包括 icinga2 的多种应用的数据写入。 +启动 taosAdapter 的命令为 `systemctl start taosadapter`,可以使用 `systemctl status taosadapter` 检查 taosAdapter 的运行状态。 + icinga2 可以收集监控和性能数据并写入 OpenTSDB,taosAdapter 可以支持接收 icinga2 的数据并写入到 TDengine 中。 - 参考链接 `https://icinga.com/docs/icinga-2/latest/doc/14-features/#opentsdb-writer` 使能 opentsdb-writer diff --git a/docs-cn/09-third-party/08-tcollector.md b/docs-cn/09-third-party/08-tcollector.md index ba56fb1dc1effffbbfb56f3f7b2b12dcb8e7136f..6d449b59ebd036cf9ac6fbd3350b326793503266 100644 --- a/docs-cn/09-third-party/08-tcollector.md +++ b/docs-cn/09-third-party/08-tcollector.md @@ -3,11 +3,12 @@ sidebar_label: TCollector title: TCollector 写入 --- -安装 TCollector -请参考[官方文档](http://opentsdb.net/docs/build/html/user_guide/utilities/tcollector.html#installation-of-tcollector) +TCollector 是 openTSDB 的一部分,它用来采集客户端日志发送给数据库。安装 TCollector 请参考[官方文档](http://opentsdb.net/docs/build/html/user_guide/utilities/tcollector.html#installation-of-tcollector) TDengine 新版本(2.4.0.0+)包含一个 taosAdapter 独立程序,负责接收包括 TCollector 的多种应用的数据写入。 +启动 taosAdapter 的命令为 `systemctl start taosadapter`,可以使用 `systemctl status taosadapter` 检查 taosAdapter 的运行状态。 + TCollector 是一个在客户侧收集本地收集器并发送数据到 OpenTSDB 的进程,taosAdapter 可以支持接收 TCollector 的数据并写入到 TDengine 中。 使能 taosAdapter 配置项 `opentsdb_telnet.enable` diff --git a/docs-cn/14-reference/01-taos-sql/02-database.md b/docs-cn/14-reference/01-taos-sql/02-database.md index 041e241c1b542e84367437e0bebb64487d1be296..863cdc2e7688bb872b13024a93315d21fb824945 100644 --- a/docs-cn/14-reference/01-taos-sql/02-database.md +++ b/docs-cn/14-reference/01-taos-sql/02-database.md @@ -9,25 +9,16 @@ title: 数据库管理 CREATE DATABASE [IF NOT EXISTS] db_name [KEEP keep] [DAYS days] [UPDATE 1]; ``` -:::info 说明 - +:::info 1. KEEP 是该数据库的数据保留多长天数,缺省是 3650 天(10 年),数据库会自动删除超过时限的数据; - 2. UPDATE 标志数据库支持更新相同时间戳数据;(从 2.1.7.0 版本开始此参数支持设为 2,表示允许部分列更新,也即更新数据行时未被设置的列会保留原值。)(从 2.0.8.0 版本开始支持此参数。注意此参数不能通过 `ALTER DATABASE` 指令进行修改。) - 1. UPDATE 设为 0 时,表示不允许更新数据,后发送的相同时间戳的数据会被直接丢弃; - 2. UPDATE 设为 1 时,表示更新全部列数据,即如果更新一个数据行,其中某些列没有提供取值,那么这些列会被设为 NULL; - 3. UPDATE 设为 2 时,表示支持更新部分列数据,即如果更新一个数据行,其中某些列没有提供取值,那么这些列会保持原有数据行中的对应值; - 4. 更多关于 UPDATE 参数的用法,请参考[FAQ](/train-fqa/faq)。 - 3. 数据库名最大长度为 33; - 4. 一条 SQL 语句的最大长度为 65480 个字符; - -5. 数据库还有更多与存储相关的配置参数,请参见 [配置参数](/reference/config/) 章节。 +5. 数据库还有更多与数据库相关的配置参数,如 cache, blocks, days, keep, minRows, maxRows, wal, fsync, update, cacheLast, replica, quorum, maxVgroupsPerDb, ctime, comp, prec, 具体细节请参见 [配置参数](/reference/config/) 章节。 ::: diff --git a/docs-cn/14-reference/01-taos-sql/03-table.md b/docs-cn/14-reference/01-taos-sql/03-table.md index 9dd69b968f46854467dcfbca2e0dbc1a75b68ec4..330734f9bc46ffb09fc338997f37c0e05560a2d5 100644 --- a/docs-cn/14-reference/01-taos-sql/03-table.md +++ b/docs-cn/14-reference/01-taos-sql/03-table.md @@ -76,13 +76,6 @@ SHOW CREATE TABLE tb_name; 常用于数据库迁移。对一个已经存在的数据表,返回其创建语句;在另一个集群中执行该语句,就能得到一个结构完全相同的数据表。 -## 在线修改显示字符宽度 - -``` -SET MAX_BINARY_DISPLAY_WIDTH ; -``` - -如显示的内容后面以...结尾时,表示该内容已被截断,可通过本命令修改显示字符宽度以显示完整的内容。 ## 获取表的结构信息 diff --git a/docs-cn/14-reference/03-connector/03-connector.mdx b/docs-cn/14-reference/03-connector/03-connector.mdx index 077f07ad269e68fc6a2883f85e3e4b4060b0e363..2f417d65a27aa76d161c11a70594af890cda49c6 100644 --- a/docs-cn/14-reference/03-connector/03-connector.mdx +++ b/docs-cn/14-reference/03-connector/03-connector.mdx @@ -2,7 +2,7 @@ title: 连接器 --- -TDengine 提供了丰富的应用程序开发接口,其中包括支持使用 C/C++、Java、Python、Go、Node.js、C# 等多种语言的连接器,包括使用 taos 客户端驱动接口和 RESTful 接口,便于用户快速开发自己的应用。 +TDengine 提供了丰富的应用程序开发接口,其中包括支持使用 C/C++、Java、Python、Go、Node.js、C# 等多种语言的连接器,支持使用本地驱动接口 taosc 和 RESTful 接口,便于用户快速开发自己的应用。 ![image-connector](/img/connector.png) @@ -10,17 +10,17 @@ TDengine 提供了丰富的应用程序开发接口,其中包括支持使用 C 目前 TDengine 的连接器可支持的平台广泛,包括:X64/X86/ARM64/ARM32/MIPS/Alpha 等硬件平台,以及 Linux/Win64/Win32 等开发环境。对照矩阵如下: -| **CPU** | **OS** | **JDBC** | **Python** | **Go** | **Node.js** | **C#** | **Rust** | **RESTful** | -| -------------- | --------- | -------- | ---------- | ------ | ----------- | ------ | -------- | ----------- | -| **X86 64bit** | **Linux** | ● | ● | ● | ● | ● | ● | ● | -| **X86 64bit** | **Win64** | ● | ● | ● | ● | ● | ● | ● | -| **X86 64bit** | **Win32** | ● | ● | ● | ● | ○ | ○ | ● | -| **X86 32bit** | **Win32** | ○ | ○ | ○ | ○ | ○ | ○ | ● | -| **ARM64** | **Linux** | ● | ● | ● | ● | ○ | ○ | ● | -| **ARM32** | **Linux** | ● | ● | ● | ● | ○ | ○ | ● | -| **MIPS 龙芯** | **Linux** | ○ | ○ | ○ | ○ | ○ | ○ | ○ | -| **Alpha 申威** | **Linux** | ○ | ○ | -- | -- | -- | -- | ○ | -| **X86 海光** | **Linux** | ○ | ○ | ○ | -- | -- | -- | ○ | +| **CPU** | **OS** | **JDBC** | **Python** | **Go** | **Node.js** | **C#** | **Rust** | +| -------------- | --------- | -------- | ---------- | ------ | ----------- | ------ | -------- | +| **X86 64bit** | **Linux** | ● | ● | ● | ● | ● | ● | +| **X86 64bit** | **Win64** | ● | ● | ● | ● | ● | ● | +| **X86 64bit** | **Win32** | ● | ● | ● | ● | ○ | ○ | +| **X86 32bit** | **Win32** | ○ | ○ | ○ | ○ | ○ | ○ | +| **ARM64** | **Linux** | ● | ● | ● | ● | ○ | ○ | +| **ARM32** | **Linux** | ● | ● | ● | ● | ○ | ○ | +| **MIPS 龙芯** | **Linux** | ○ | ○ | ○ | ○ | ○ | ○ | +| **Alpha 申威** | **Linux** | ○ | ○ | -- | -- | -- | -- | +| **X86 海光** | **Linux** | ○ | ○ | ○ | -- | -- | -- | 其中 ● 表示官方测试验证通过,○ 表示非官方测试验证通过,-- 表示未经验证。 @@ -28,6 +28,8 @@ TDengine 提供了丰富的应用程序开发接口,其中包括支持使用 C 连接器对 TDengine 特性的支持对照矩阵如下[1]: +### 使用本地驱动接口 taosc + | **Feature** | **Java** | **Python** | **Go** | **C#** | **Node.js** | **Rust** | | ------------------ | --------- | ---------- | -------- | -------- | ----------- | -------- | | **连接管理** | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | @@ -38,8 +40,20 @@ TDengine 提供了丰富的应用程序开发接口,其中包括支持使用 C | **错误信息** | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | | **订阅功能** | 支持 | 支持 | 支持 | 支持 | 支持 | 暂不支持 | | **Schemaless** | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | -| **RESTful 连接** | 支持 | 支持 | 支持 | 暂不支持 | 支持 | 支持 | -| **批量拉取(WS)** | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | + +### 使用 RESTful 接口 + +| **Feature** | **Java** | **Python(暂不支持)** | **Go** | **C#(暂不支持)** | **Node.js** | **Rust** | +| ------------------ | --------- | ---------------------- | -------- | -------------------- | ----------- | -------- | +| **连接管理** | 支持 | n/a | 支持 | n/a | 支持 | 支持 | +| **同步查询** | 支持 | n/a | 支持 | n/a | 支持 | 支持 | +| **异步查询** | 不支持[2] | n/a | 不支持 | n/a | 不支持 | 暂不支持 | +| **参数绑定** | 不支持 | n/a | 不支持 | n/a | 不支持 | 不支持 | +| **获取系统信息** | 暂不支持 | n/a | 暂不支持 | n/a | 支持 | 暂不支持 | +| **错误信息** | 支持 | n/a | 支持 | n/a | 支持 | 支持 | +| **订阅功能** | 不支持 | n/a | 不支持 | n/a | 不支持 | 不支持 | +| **Schemaless** | 支持 | n/a | 支持 | n/a | 支持 | 支持 | +| **批量拉取(WS)** | 支持 | n/a | 暂不支持 | n/a | 暂不支持 | 暂不支持 | 备注: diff --git a/docs-cn/14-reference/12-directory.md b/docs-cn/14-reference/12-directory.md index 451a5569f42df6f8b75f21100e6d6b79d5580a99..df2a6536ee1faf9ef9a041a453ecd3d3375483f6 100644 --- a/docs-cn/14-reference/12-directory.md +++ b/docs-cn/14-reference/12-directory.md @@ -22,13 +22,13 @@ TDengine 的所有可执行文件默认存放在 _/usr/local/taos/bin_ 目录下 - _taos_:TDengine Shell 可执行文件 - _taosdump_:数据导入导出工具 - _taosBenchmark_:TDengine 测试工具 -- _remove.sh_:卸载 TDengine 的脚本,请谨慎执行,链接到/usr/bin 目录下的**rmtaos**命令。会删除 TDengine 的安装目录/usr/local/taos,但会保留/etc/taos、/var/lib/taos、/var/log/taos。 +- _remove.sh_:卸载 TDengine 的脚本,请谨慎执行,链接到/usr/bin 目录下的**rmtaos**命令。会删除 TDengine 的安装目录/usr/local/taos,但会保留/etc/taos、/var/lib/taos、/var/log/taos - _taosadapter_: 提供 RESTful 服务和接受其他多种软件写入请求的服务端可执行文件 - _tarbitrator_: 提供双节点集群部署的仲裁功能 - _run_taosd_and_taosadapter.sh_:同时启动 taosd 和 taosAdapter 的脚本 - _TDinsight.sh_:用于下载 TDinsight 并安装的脚本 - _set_core.sh_:用于方便调试设置系统生成 core dump 文件的脚本 -- _taosd-dump-cfg.gdb_:用于方便调试 taosd 的 gdb 执行脚本 +- _taosd-dump-cfg.gdb_:用于方便调试 taosd 的 gdb 执行脚本。 :::note 2.4.0.0 版本之后的 taosBenchmark 和 taosdump 需要安装独立安装包 taosTools。 diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 2db808013f97be28230695047522c90982b64856..f5b887936814b4d0614c9cb2ded71235e5863904 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -8267,6 +8267,24 @@ static void updateTagPrjFunction(SQueryInfo* pQueryInfo) { } } +/* + retrun false : expr is not in groupbu column. + return true : expr is in groupby column. +*/ +static bool check_expr_in_groupby_colum(SGroupbyExpr* pGroupbyExpr, SExprInfo* pExpr){ + SColIndex* pIndex = NULL; + assert( pExpr); + if (NULL == pGroupbyExpr) + return false; + for (int32_t k = 0; k < pGroupbyExpr->numOfGroupCols ; ++k) { + pIndex = taosArrayGet(pGroupbyExpr->columnInfo, k); + if (!strcmp(pIndex->name,&pExpr->base.colInfo.name[1])){ // notes:first char is dot, skip one char. + return true; + } + } + return false; +} + /* * check for selectivity function + tags column function both exist. * 1. tagprj functions are not compatible with aggregated function when missing "group by" clause @@ -8284,12 +8302,15 @@ static int32_t checkUpdateTagPrjFunctions(SQueryInfo* pQueryInfo, char* msg) { int16_t numOfTimeWindow = 0; size_t numOfExprs = taosArrayGetSize(pQueryInfo->exprList); + SGroupbyExpr* pGroupbyExpr = &pQueryInfo->groupbyExpr; for (int32_t i = 0; i < numOfExprs; ++i) { SExprInfo* pExpr = taosArrayGetP(pQueryInfo->exprList, i); if (pExpr->base.functionId == TSDB_FUNC_TAGPRJ || (pExpr->base.functionId == TSDB_FUNC_PRJ && pExpr->base.colInfo.colId == PRIMARYKEY_TIMESTAMP_COL_INDEX)) { - tagTsColExists = true; // selectivity + ts/tag column - break; + if (false == check_expr_in_groupby_colum(pGroupbyExpr,pExpr)) { + tagTsColExists = true; // selectivity + ts/tag column + break; + } } }