diff --git a/README-CN.md b/README-CN.md index f36626c890..985b25500e 100644 --- a/README-CN.md +++ b/README-CN.md @@ -41,23 +41,23 @@ # 1. 简介 -TDengine 是一款开源、高性能、云原生、AI驱动的时序数据库 (Time-Series Database, TSDB)。TDengine 能被广泛运用于物联网、工业互联网、车联网、IT 运维、金融等领域。除核心的时序数据库功能外,TDengine 还提供缓存、数据订阅、流式计算、AI智能体等功能,是一极简的时序数据处理平台,最大程度的减小系统设计的复杂度,降低研发和运营成本。与其他时序数据库相比,TDengine 的主要优势如下: +TDengine 是一款开源、高性能、云原生、AI 驱动的时序数据库 (Time-Series Database, TSDB)。TDengine 能被广泛运用于物联网、工业互联网、车联网、IT 运维、金融等领域。除核心的时序数据库功能外,TDengine 还提供缓存、数据订阅、流式计算、AI 智能体等功能,是一极简的时序数据处理平台,最大程度的减小系统设计的复杂度,降低研发和运营成本。与其他时序数据库相比,TDengine 的主要优势如下: - **高性能**:通过创新的存储引擎设计,无论是数据写入还是查询,TDengine 的性能比通用数据库快 10 倍以上,也远超其他时序数据库,存储空间不及通用数据库的 1/10。 - **云原生**:通过原生分布式的设计,充分利用云平台的优势,TDengine 提供了水平扩展能力,具备弹性、韧性和可观测性,支持 k8s 部署,可运行在公有云、私有云和混合云上。 -- **极简时序数据平台**:TDengine 内建消息队列、缓存、流式计算、AI智能体等功能,应用无需再集成 Kafka/Redis/HBase/Spark 等软件,大幅降低系统的复杂度,降低应用开发和运营成本。 +- **极简时序数据平台**:TDengine 内建消息队列、缓存、流式计算、AI 智能体等功能,应用无需再集成 Kafka/Redis/HBase/Spark 等软件,大幅降低系统的复杂度,降低应用开发和运营成本。 -- **分析能力**:支持 SQL,同时为时序数据特有的分析提供SQL扩展。通过超级表、存储计算分离、分区分片、预计算、自定义函数以及AI Agent等技术,TDengine 具备强大的分析能力。 +- **分析能力**:支持 SQL,同时为时序数据特有的分析提供 SQL 扩展。通过超级表、存储计算分离、分区分片、预计算、自定义函数以及 AI Agent 等技术,TDengine 具备强大的分析能力。 -- **AI智能体**:内置时序数据智能体TDgpt, 无缝连接时序数据基础模型、大语言模型、机器学习、传统统计算法等,提供时序数据预测、异常检测、数据补全和数据分类的功能。 +- **AI智能体**:内置时序数据智能体 TDgpt, 无缝连接时序数据基础模型、大语言模型、机器学习、传统统计算法等,提供时序数据预测、异常检测、数据补全和数据分类的功能。 -- **简单易用**:无任何依赖,安装、集群几秒搞定;提供REST以及各种语言连接器,与众多第三方工具无缝集成;提供命令行程序,便于管理和即席查询;提供各种运维工具。 +- **简单易用**:无任何依赖,安装、集群几秒搞定;提供 REST 以及各种语言连接器,与众多第三方工具无缝集成;提供命令行程序,便于管理和即席查询;提供各种运维工具。 - **核心开源**:TDengine 的核心代码包括集群功能全部开源,截止到 2022 年 8 月 1 日,全球超过 135.9k 个运行实例,GitHub Star 18.7k,Fork 4.4k,社区活跃。 -了解TDengine高级功能的完整列表,请 [点击](https://tdengine.com/tdengine/)。体验 TDengine 最简单的方式是通过 [TDengine云平台](https://cloud.tdengine.com)。对最新发布的TDengine 组件 TDgpt,请访问[TDgpt README](./tools/tdgpt/README.md) 了解细节。 +了解TDengine高级功能的完整列表,请 [点击](https://tdengine.com/tdengine/)。体验 TDengine 最简单的方式是通过 [TDengine云平台](https://cloud.tdengine.com)。对最新发布的 TDengine 组件 TDgpt,请访问 [TDgpt README](./tools/tdgpt/README.md) 了解细节。 # 2. 文档 diff --git a/docs/zh/06-advanced/06-TDgpt/04-forecast/index.md b/docs/zh/06-advanced/06-TDgpt/04-forecast/index.md index 1af5c2b29f..cf6506d3ae 100644 --- a/docs/zh/06-advanced/06-TDgpt/04-forecast/index.md +++ b/docs/zh/06-advanced/06-TDgpt/04-forecast/index.md @@ -140,7 +140,7 @@ gen_figure = true ``` -对比程序执行完成以后,会自动生成名称为`fc_result.xlsx` 的文件,第一个卡片是算法运行结果(如下表所示),分别包含了算法名称、执行调用参数、均方误差、执行时间 4 个指标。 +对比程序执行完成以后,会自动生成名称为 `fc_result.xlsx` 的文件,第一个卡片是算法运行结果(如下表所示),分别包含了算法名称、执行调用参数、均方误差、执行时间 4 个指标。 | algorithm | params | MSE | elapsed_time(ms.) | | ----------- | ------------------------------------------------------------------------- | ------- | ----------------- | diff --git a/docs/zh/06-advanced/06-TDgpt/05-anomaly-detection/index.md b/docs/zh/06-advanced/06-TDgpt/05-anomaly-detection/index.md index 14fc9b2905..0171db8ad5 100644 --- a/docs/zh/06-advanced/06-TDgpt/05-anomaly-detection/index.md +++ b/docs/zh/06-advanced/06-TDgpt/05-anomaly-detection/index.md @@ -98,9 +98,7 @@ grubbs={} lof={"algorithm":"auto", "n_neighbor": 3} ``` -对比程序执行完成以后,会自动生成名称为`ad_result.xlsx` 的文件,第一个卡片是算法运行结果(如下表所示),分别包含了算法名称、执行调用参数、查全率、查准率、执行时间 5 个指标。 - - +对比程序执行完成以后,会自动生成名称为 `ad_result.xlsx` 的文件,第一个卡片是算法运行结果(如下表所示),分别包含了算法名称、执行调用参数、查全率、查准率、执行时间 5 个指标。 | algorithm | params | precision(%) | recall(%) | elapsed_time(ms.) | | --------- | -------------------------------------- | ------------ | --------- | ----------------- | diff --git a/tools/tdgpt/resource/sample-ad.sql b/tools/tdgpt/resource/sample-ad.sql new file mode 100644 index 0000000000..fb680c319d --- /dev/null +++ b/tools/tdgpt/resource/sample-ad.sql @@ -0,0 +1,23 @@ +create database if not exists test keep 36500; +use test; + +drop table if exists ad_sample; +create table if not exists ad_sample(ts timestamp, val int); + +insert into ad_sample values(1577808000000, 5); +insert into ad_sample values(1577808001000, 14); +insert into ad_sample values(1577808002000, 15); +insert into ad_sample values(1577808003000, 15); +insert into ad_sample values(1577808004000, 14); +insert into ad_sample values(1577808005000, 19); +insert into ad_sample values(1577808006000, 17); +insert into ad_sample values(1577808007000, 16); +insert into ad_sample values(1577808008000, 20); +insert into ad_sample values(1577808009000, 22); +insert into ad_sample values(1577808010000, 8); +insert into ad_sample values(1577808011000, 21); +insert into ad_sample values(1577808012000, 28); +insert into ad_sample values(1577808013000, 11); +insert into ad_sample values(1577808014000, 9); +insert into ad_sample values(1577808015000, 29); +insert into ad_sample values(1577808016000, 40); \ No newline at end of file diff --git a/tools/tdgpt/resource/sample-fc.sql b/tools/tdgpt/resource/sample-fc.sql new file mode 100644 index 0000000000..1386b67385 --- /dev/null +++ b/tools/tdgpt/resource/sample-fc.sql @@ -0,0 +1,150 @@ +create database if not exists test keep 36500; +use test; + +drop table if exists passengers; +create table if not exists passengers(ts timestamp, val int); + +insert into passengers values("1949-01-01 00:00:00",112); +insert into passengers values("1949-02-01 00:00:00",118); +insert into passengers values("1949-03-01 00:00:00",132); +insert into passengers values("1949-04-01 00:00:00",129); +insert into passengers values("1949-05-01 00:00:00",121); +insert into passengers values("1949-06-01 00:00:00",135); +insert into passengers values("1949-07-01 00:00:00",148); +insert into passengers values("1949-08-01 00:00:00",148); +insert into passengers values("1949-09-01 00:00:00",136); +insert into passengers values("1949-10-01 00:00:00",119); +insert into passengers values("1949-11-01 00:00:00",104); +insert into passengers values("1949-12-01 00:00:00",118); +insert into passengers values("1950-01-01 00:00:00",115); +insert into passengers values("1950-02-01 00:00:00",126); +insert into passengers values("1950-03-01 00:00:00",141); +insert into passengers values("1950-04-01 00:00:00",135); +insert into passengers values("1950-05-01 00:00:00",125); +insert into passengers values("1950-06-01 00:00:00",149); +insert into passengers values("1950-07-01 00:00:00",170); +insert into passengers values("1950-08-01 00:00:00",170); +insert into passengers values("1950-09-01 00:00:00",158); +insert into passengers values("1950-10-01 00:00:00",133); +insert into passengers values("1950-11-01 00:00:00",114); +insert into passengers values("1950-12-01 00:00:00",140); +insert into passengers values("1951-01-01 00:00:00",145); +insert into passengers values("1951-02-01 00:00:00",150); +insert into passengers values("1951-03-01 00:00:00",178); +insert into passengers values("1951-04-01 00:00:00",163); +insert into passengers values("1951-05-01 00:00:00",172); +insert into passengers values("1951-06-01 00:00:00",178); +insert into passengers values("1951-07-01 00:00:00",199); +insert into passengers values("1951-08-01 00:00:00",199); +insert into passengers values("1951-09-01 00:00:00",184); +insert into passengers values("1951-10-01 00:00:00",162); +insert into passengers values("1951-11-01 00:00:00",146); +insert into passengers values("1951-12-01 00:00:00",166); +insert into passengers values("1952-01-01 00:00:00",171); +insert into passengers values("1952-02-01 00:00:00",180); +insert into passengers values("1952-03-01 00:00:00",193); +insert into passengers values("1952-04-01 00:00:00",181); +insert into passengers values("1952-05-01 00:00:00",183); +insert into passengers values("1952-06-01 00:00:00",218); +insert into passengers values("1952-07-01 00:00:00",230); +insert into passengers values("1952-08-01 00:00:00",242); +insert into passengers values("1952-09-01 00:00:00",209); +insert into passengers values("1952-10-01 00:00:00",191); +insert into passengers values("1952-11-01 00:00:00",172); +insert into passengers values("1952-12-01 00:00:00",194); +insert into passengers values("1953-01-01 00:00:00",196); +insert into passengers values("1953-02-01 00:00:00",196); +insert into passengers values("1953-03-01 00:00:00",236); +insert into passengers values("1953-04-01 00:00:00",235); +insert into passengers values("1953-05-01 00:00:00",229); +insert into passengers values("1953-06-01 00:00:00",243); +insert into passengers values("1953-07-01 00:00:00",264); +insert into passengers values("1953-08-01 00:00:00",272); +insert into passengers values("1953-09-01 00:00:00",237); +insert into passengers values("1953-10-01 00:00:00",211); +insert into passengers values("1953-11-01 00:00:00",180); +insert into passengers values("1953-12-01 00:00:00",201); +insert into passengers values("1954-01-01 00:00:00",204); +insert into passengers values("1954-02-01 00:00:00",188); +insert into passengers values("1954-03-01 00:00:00",235); +insert into passengers values("1954-04-01 00:00:00",227); +insert into passengers values("1954-05-01 00:00:00",234); +insert into passengers values("1954-06-01 00:00:00",264); +insert into passengers values("1954-07-01 00:00:00",302); +insert into passengers values("1954-08-01 00:00:00",293); +insert into passengers values("1954-09-01 00:00:00",259); +insert into passengers values("1954-10-01 00:00:00",229); +insert into passengers values("1954-11-01 00:00:00",203); +insert into passengers values("1954-12-01 00:00:00",229); +insert into passengers values("1955-01-01 00:00:00",242); +insert into passengers values("1955-02-01 00:00:00",233); +insert into passengers values("1955-03-01 00:00:00",267); +insert into passengers values("1955-04-01 00:00:00",269); +insert into passengers values("1955-05-01 00:00:00",270); +insert into passengers values("1955-06-01 00:00:00",315); +insert into passengers values("1955-07-01 00:00:00",364); +insert into passengers values("1955-08-01 00:00:00",347); +insert into passengers values("1955-09-01 00:00:00",312); +insert into passengers values("1955-10-01 00:00:00",274); +insert into passengers values("1955-11-01 00:00:00",237); +insert into passengers values("1955-12-01 00:00:00",278); +insert into passengers values("1956-01-01 00:00:00",284); +insert into passengers values("1956-02-01 00:00:00",277); +insert into passengers values("1956-03-01 00:00:00",317); +insert into passengers values("1956-04-01 00:00:00",313); +insert into passengers values("1956-05-01 00:00:00",318); +insert into passengers values("1956-06-01 00:00:00",374); +insert into passengers values("1956-07-01 00:00:00",413); +insert into passengers values("1956-08-01 00:00:00",405); +insert into passengers values("1956-09-01 00:00:00",355); +insert into passengers values("1956-10-01 00:00:00",306); +insert into passengers values("1956-11-01 00:00:00",271); +insert into passengers values("1956-12-01 00:00:00",306); +insert into passengers values("1957-01-01 00:00:00",315); +insert into passengers values("1957-02-01 00:00:00",301); +insert into passengers values("1957-03-01 00:00:00",356); +insert into passengers values("1957-04-01 00:00:00",348); +insert into passengers values("1957-05-01 00:00:00",355); +insert into passengers values("1957-06-01 00:00:00",422); +insert into passengers values("1957-07-01 00:00:00",465); +insert into passengers values("1957-08-01 00:00:00",467); +insert into passengers values("1957-09-01 00:00:00",404); +insert into passengers values("1957-10-01 00:00:00",347); +insert into passengers values("1957-11-01 00:00:00",305); +insert into passengers values("1957-12-01 00:00:00",336); +insert into passengers values("1958-01-01 00:00:00",340); +insert into passengers values("1958-02-01 00:00:00",318); +insert into passengers values("1958-03-01 00:00:00",362); +insert into passengers values("1958-04-01 00:00:00",348); +insert into passengers values("1958-05-01 00:00:00",363); +insert into passengers values("1958-06-01 00:00:00",435); +insert into passengers values("1958-07-01 00:00:00",491); +insert into passengers values("1958-08-01 00:00:00",505); +insert into passengers values("1958-09-01 00:00:00",404); +insert into passengers values("1958-10-01 00:00:00",359); +insert into passengers values("1958-11-01 00:00:00",310); +insert into passengers values("1958-12-01 00:00:00",337); +insert into passengers values("1959-01-01 00:00:00",360); +insert into passengers values("1959-02-01 00:00:00",342); +insert into passengers values("1959-03-01 00:00:00",406); +insert into passengers values("1959-04-01 00:00:00",396); +insert into passengers values("1959-05-01 00:00:00",420); +insert into passengers values("1959-06-01 00:00:00",472); +insert into passengers values("1959-07-01 00:00:00",548); +insert into passengers values("1959-08-01 00:00:00",559); +insert into passengers values("1959-09-01 00:00:00",463); +insert into passengers values("1959-10-01 00:00:00",407); +insert into passengers values("1959-11-01 00:00:00",362); +insert into passengers values("1959-12-01 00:00:00",405); +insert into passengers values("1960-01-01 00:00:00",417); +insert into passengers values("1960-02-01 00:00:00",391); +insert into passengers values("1960-03-01 00:00:00",419); +insert into passengers values("1960-04-01 00:00:00",461); +insert into passengers values("1960-05-01 00:00:00",472); +insert into passengers values("1960-06-01 00:00:00",535); +insert into passengers values("1960-07-01 00:00:00",622); +insert into passengers values("1960-08-01 00:00:00",606); +insert into passengers values("1960-09-01 00:00:00",508); +insert into passengers values("1960-10-01 00:00:00",461); +insert into passengers values("1960-11-01 00:00:00",390); +insert into passengers values("1960-12-01 00:00:00",432); \ No newline at end of file diff --git a/tools/tdgpt/script/install.sh b/tools/tdgpt/script/install.sh index e5bf87740b..fd22ae3fe6 100755 --- a/tools/tdgpt/script/install.sh +++ b/tools/tdgpt/script/install.sh @@ -22,6 +22,7 @@ emailName="taosdata.com" tarName="package.tar.gz" logDir="/var/log/${PREFIX}/${PRODUCTPREFIX}" moduleDir="/var/lib/${PREFIX}/${PRODUCTPREFIX}/model" +resourceDir="/var/lib/${PREFIX}/${PRODUCTPREFIX}/resource" venvDir="/var/lib/${PREFIX}/${PRODUCTPREFIX}/venv" global_conf_dir="/etc/${PREFIX}" installDir="/usr/local/${PREFIX}/${PRODUCTPREFIX}" @@ -376,6 +377,13 @@ function install_module() { ${csudo}ln -sf ${moduleDir} ${install_main_dir}/model } +function install_resource() { + ${csudo}mkdir -p ${resourceDir} && ${csudo}chmod 777 ${resourceDir} + ${csudo}ln -sf ${resourceDir} ${install_main_dir}/resource + + ${csudo}cp ${script_dir}/resource/*.sql ${install_main_dir}/resource/ +} + function install_anode_venv() { ${csudo}mkdir -p ${venvDir} && ${csudo}chmod 777 ${venvDir} ${csudo}ln -sf ${venvDir} ${install_main_dir}/venv @@ -620,6 +628,7 @@ function updateProduct() { install_main_path install_log install_module + install_resource install_config if [ -z $1 ]; then @@ -668,6 +677,7 @@ function installProduct() { install_log install_anode_config install_module + install_resource install_bin_and_lib if ! is_container; then diff --git a/tools/tdgpt/script/release.sh b/tools/tdgpt/script/release.sh index accf9aea0a..fde15f140f 100755 --- a/tools/tdgpt/script/release.sh +++ b/tools/tdgpt/script/release.sh @@ -51,6 +51,7 @@ install_files="${script_dir}/install.sh" # make directories. mkdir -p ${install_dir} mkdir -p ${install_dir}/cfg && cp ${cfg_dir}/${configFile} ${install_dir}/cfg/${configFile} +mkdir -p ${install_dir}/resource && cp ${top_dir}/resource/* ${install_dir}/resource/ if [ -f "${cfg_dir}/${serverName}.service" ]; then cp ${cfg_dir}/${serverName}.service ${install_dir}/cfg || :