未验证 提交 d86e5f20 编写于 作者: W wade zhang 提交者: GitHub

Merge pull request #11774 from taosdata/docs/dingbo/TD-15063

docs: adjust sidebar structure
```c title="本地连接" ```c title="原生连接"
{{#include docs-examples/c/connect_example.c}} {{#include docs-examples/c/connect_example.c}}
``` ```
```csharp title="本地连接" ```csharp title="原生连接"
{{#include docs-examples/csharp/ConnectExample.cs}} {{#include docs-examples/csharp/ConnectExample.cs}}
``` ```
:::info :::info
C# 连接器目前只支持本地连接。 C# 连接器目前只支持原生连接。
::: :::
\ No newline at end of file
#### 使用数据库访问统一接口 #### 使用数据库访问统一接口
```go title="本地连接" ```go title="原生连接"
{{#include docs-examples/go/connect/cgoexample/main.go}} {{#include docs-examples/go/connect/cgoexample/main.go}}
``` ```
```go title="RESTful 连接" ```go title="REST 连接"
{{#include docs-examples/go/connect/restexample/main.go}} {{#include docs-examples/go/connect/restexample/main.go}}
``` ```
#### 使用高级封装 #### 使用高级封装
也可以使用 driver-go 的 af 包建立连接。这个模块封装了 TDengine 的高级功能, 如:动态绑定、订阅等。 也可以使用 driver-go 的 af 包建立连接。这个模块封装了 TDengine 的高级功能, 如:动态绑定、订阅等。
```go title="使用 af 包建立本地连接" ```go title="使用 af 包建立原生连接"
{{#include docs-examples/go/connect/afconn/main.go}} {{#include docs-examples/go/connect/afconn/main.go}}
``` ```
......
```java title="本地连接" ```java title="原生连接"
{{#include docs-examples/java/src/main/java/com/taos/example/JNIConnectExample.java}} {{#include docs-examples/java/src/main/java/com/taos/example/JNIConnectExample.java}}
``` ```
```java title="RESTful 连接" ```java title="REST 连接"
{{#include docs-examples/java/src/main/java/com/taos/example/RESTConnectExample.java:main}} {{#include docs-examples/java/src/main/java/com/taos/example/RESTConnectExample.java:main}}
``` ```
使用RESTful 连接时,如果查询数据量比较大,还可开启批量拉取功能。 使用REST 连接时,如果查询数据量比较大,还可开启批量拉取功能。
```java title="开启批量拉取功能" {4} ```java title="开启批量拉取功能" {4}
{{#include docs-examples/java/src/main/java/com/taos/example/WSConnectExample.java:main}} {{#include docs-examples/java/src/main/java/com/taos/example/WSConnectExample.java:main}}
``` ```
......
```js title="本地连接" ```js title="原生连接"
{{#include docs-examples/node/nativeexample/connect.js}} {{#include docs-examples/node/nativeexample/connect.js}}
``` ```
```js title="RESTful 连接" ```js title="REST 连接"
{{#include docs-examples/node/restexample/connect.js}} {{#include docs-examples/node/restexample/connect.js}}
``` ```
\ No newline at end of file
```python title="本地连接" ```python title="原生连接"
{{#include docs-examples/python/connect_exmaple.py}} {{#include docs-examples/python/connect_exmaple.py}}
``` ```
\ No newline at end of file
```r title="本地连接" ```r title="原生连接"
{{#include docs-examples/R/connect_native.r:demo}} {{#include docs-examples/R/connect_native.r:demo}}
``` ```
\ No newline at end of file
```rust title="本地连接/RESTful 连接" ```rust title="原生连接/REST 连接"
{{#include docs-examples/rust/nativeexample/examples/connect.rs}} {{#include docs-examples/rust/nativeexample/examples/connect.rs}}
``` ```
:::note :::note
......
--- ---
title: 建立连接 title: 建立连接
--- description: "本节介绍如何使用连接器建立与 TDengine 的连接,给出连接器安装、连接的简单说明。"
---
import Tabs from "@theme/Tabs"; import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem"; import TabItem from "@theme/TabItem";
...@@ -12,29 +13,30 @@ import ConnPythonNative from "./_connect_python.mdx"; ...@@ -12,29 +13,30 @@ import ConnPythonNative from "./_connect_python.mdx";
import ConnCSNative from "./_connect_cs.mdx"; import ConnCSNative from "./_connect_cs.mdx";
import ConnC from "./_connect_c.mdx"; import ConnC from "./_connect_c.mdx";
import ConnR from "./_connect_r.mdx"; import ConnR from "./_connect_r.mdx";
import InstallOnWindows from "../14-reference/03-connector/_linux_install.mdx"; import InstallOnWindows from "../../14-reference/03-connector/_linux_install.mdx";
import InstallOnLinux from "../14-reference/03-connector/_windows_install.mdx"; import InstallOnLinux from "../../14-reference/03-connector/_windows_install.mdx";
import VerifyLinux from "../14-reference/03-connector/_verify_linux.mdx"; import VerifyLinux from "../../14-reference/03-connector/_verify_linux.mdx";
import VerifyWindows from "../14-reference/03-connector/_verify_windows.mdx"; import VerifyWindows from "../../14-reference/03-connector/_verify_windows.mdx";
TDengine 提供 RESTful 接口,容许在任何平台的任何应用程序通过它访问TDengine运行实例,详细介绍请看 [REST API](/reference/rest-api/)。除 REST API 之外,TDengine 还提供多种编程语言的连接器方便用户开发应用程序,其中包括 C/C++、Java、Python、Go、Node.js、C# 等。 本节介绍如何使用连接器建立与 TDengine 的连接,给出连接器安装、连接的简单说明。关于各连接器的详细功能说明,请查看[连接器](https://docs.taosdata.com/reference/connector/) TDengine 提供 REST API,容许在任何平台的任何应用程序通过它访问 TDengine 运行实例,详细介绍请看 [REST API](/reference/rest-api/)。除 REST API 之外,TDengine 还提供多种编程语言的连接器方便用户开发应用程序,其中包括 C/C++、Java、Python、Go、Node.js、C# 等。 本节介绍如何使用连接器建立与 TDengine 的连接,给出连接器安装、连接的简单说明。关于各连接器的详细功能说明,请查看[连接器](https://docs.taosdata.com/reference/connector/)
## 连接器建立连接的方式 ## 连接器建立连接的方式
连接器建立连接的方式,TDengine提供两种: 连接器建立连接的方式,TDengine 提供两种:
1. 通过 taosAdapter 组件提供的 REST API 建立与 taosd 的连接,这种连接方式下文中简称"RESTful 连接“
2. 通过客户端驱动程序 taosc 直接与服务端程序 taosd 建立连接,这种连接方式下文中简称“本地连接”。 1. 通过 taosAdapter 组件提供的 REST API 建立与 taosd 的连接,这种连接方式下文中简称"REST 连接“
2. 通过客户端驱动程序 taosc 直接与服务端程序 taosd 建立连接,这种连接方式下文中简称“原生连接”。
无论使用何种方式建立连接,连接器都提供了相同或相似的 API 操作数据库,都可以执行 SQL 语句,只是初始化连接的方式稍有不同,用户在使用上不会感到什么差别。 无论使用何种方式建立连接,连接器都提供了相同或相似的 API 操作数据库,都可以执行 SQL 语句,只是初始化连接的方式稍有不同,用户在使用上不会感到什么差别。
关键不同点在于: 关键不同点在于:
1. 使用 RESTful 连接,用户无需安装客户端驱动程序 taosc,具有跨平台易用的优势,但性能要下降30%左右。
2. 使用本地连接可以体验 TDengine 的全部功能,如[原生接口写入](/reference/connector/cpp#参数绑定-api)[订阅](reference/connector/cpp#数据订阅接口)等等。
1. 使用 REST 连接,用户无需安装客户端驱动程序 taosc,具有跨平台易用的优势,但性能要下降 30%左右。
2. 使用原生连接可以体验 TDengine 的全部功能,如[原生接口写入](/reference/connector/cpp#参数绑定-api)[订阅](reference/connector/cpp#数据订阅接口)等等。
## 安装客户端驱动 taosc ## 安装客户端驱动 taosc
如果选择本地连接,而且应用程序不在 TDengine 同一台服务器上运行,你需要先安装客户端驱动,否则可以跳过此一步。为避免客户端驱动和服务端不兼容,请使用一致的版本。 如果选择原生连接,而且应用程序不在 TDengine 同一台服务器上运行,你需要先安装客户端驱动,否则可以跳过此一步。为避免客户端驱动和服务端不兼容,请使用一致的版本。
### 安装步骤 ### 安装步骤
...@@ -79,10 +81,13 @@ TDengine 提供 RESTful 接口,容许在任何平台的任何应用程序通 ...@@ -79,10 +81,13 @@ TDengine 提供 RESTful 接口,容许在任何平台的任何应用程序通
<TabItem label="Python" value="python"> <TabItem label="Python" value="python">
使用 `pip` 从 PyPI 安装: 使用 `pip` 从 PyPI 安装:
``` ```
pip install taospy pip install taospy
``` ```
从 Git URL 安装: 从 Git URL 安装:
``` ```
pip install git+https://github.com/taosdata/taos-connector-python.git pip install git+https://github.com/taosdata/taos-connector-python.git
``` ```
...@@ -91,6 +96,7 @@ pip install git+https://github.com/taosdata/taos-connector-python.git ...@@ -91,6 +96,7 @@ pip install git+https://github.com/taosdata/taos-connector-python.git
<TabItem label="Go" value="go"> <TabItem label="Go" value="go">
编辑 `go.mod` 添加 `driver-go` 依赖即可。 编辑 `go.mod` 添加 `driver-go` 依赖即可。
```go-mod title=go.mod ```go-mod title=go.mod
module goexample module goexample
...@@ -98,6 +104,7 @@ go 1.17 ...@@ -98,6 +104,7 @@ go 1.17
require github.com/taosdata/driver-go/v2 develop require github.com/taosdata/driver-go/v2 develop
``` ```
:::note :::note
driver-go 使用 cgo 封装了 taosc 的 API。cgo 需要使用 gcc 编译 C 的源码。因此需要确保你的系统上有 gcc。 driver-go 使用 cgo 封装了 taosc 的 API。cgo 需要使用 gcc 编译 C 的源码。因此需要确保你的系统上有 gcc。
...@@ -107,12 +114,15 @@ driver-go 使用 cgo 封装了 taosc 的 API。cgo 需要使用 gcc 编译 C 的 ...@@ -107,12 +114,15 @@ driver-go 使用 cgo 封装了 taosc 的 API。cgo 需要使用 gcc 编译 C 的
<TabItem label="Rust" value="rust"> <TabItem label="Rust" value="rust">
编辑 `Cargo.toml` 添加 `libtaos` 依赖即可。 编辑 `Cargo.toml` 添加 `libtaos` 依赖即可。
```toml title=Cargo.toml ```toml title=Cargo.toml
[dependencies] [dependencies]
libtaos = { version = "0.4.2"} libtaos = { version = "0.4.2"}
``` ```
:::info :::info
Rust 连接器通过不同的特性区分不同的连接方式。如果要建立 RESTful 连接,需要开启 `rest` 特性: Rust 连接器通过不同的特性区分不同的连接方式。如果要建立 REST 连接,需要开启 `rest` 特性:
```toml ```toml
libtaos = { version = "*", features = ["rest"] } libtaos = { version = "*", features = ["rest"] }
``` ```
...@@ -124,18 +134,20 @@ libtaos = { version = "*", features = ["rest"] } ...@@ -124,18 +134,20 @@ libtaos = { version = "*", features = ["rest"] }
Node.js 连接器通过不同的包提供不同的连接方式。 Node.js 连接器通过不同的包提供不同的连接方式。
1. 安装 Node.js 本地连接器 1. 安装 Node.js 原生连接器
```
npm i td2.0-connector
```
:::note
推荐Node版本大于等于 `node-v12.8.0` 小于 `node-v13.0.0`
::: ```
2. 安装 Node.js RESTful 连接器 npm i td2.0-connector
``` ```
npm i td2.0-rest-connector
``` :::note
推荐 Node 版本大于等于 `node-v12.8.0` 小于 `node-v13.0.0`
::: 2. 安装 Node.js REST 连接器
```
npm i td2.0-rest-connector
```
</TabItem> </TabItem>
<TabItem label="C#" value="csharp"> <TabItem label="C#" value="csharp">
...@@ -159,12 +171,15 @@ Node.js 连接器通过不同的包提供不同的连接方式。 ...@@ -159,12 +171,15 @@ Node.js 连接器通过不同的包提供不同的连接方式。
</Project> </Project>
``` ```
也可通过 dotnet 命令添加: 也可通过 dotnet 命令添加:
``` ```
dotnet add package TDengine.Connector dotnet add package TDengine.Connector
``` ```
:::note
以下示例代码,均基于 dotnet6.0,如果使用其它版本,可能需要做适当调整。 :::note
以下示例代码,均基于 dotnet6.0,如果使用其它版本,可能需要做适当调整。
::: :::
...@@ -173,9 +188,11 @@ dotnet add package TDengine.Connector ...@@ -173,9 +188,11 @@ dotnet add package TDengine.Connector
1. 下载 [taos-jdbcdriver-version-dist.jar](https://repo1.maven.org/maven2/com/taosdata/jdbc/taos-jdbcdriver/2.0.38/) 1. 下载 [taos-jdbcdriver-version-dist.jar](https://repo1.maven.org/maven2/com/taosdata/jdbc/taos-jdbcdriver/2.0.38/)
2. 安装 R 的依赖包`RJDBC` 2. 安装 R 的依赖包`RJDBC`
```R ```R
install.packages("RJDBC") install.packages("RJDBC")
``` ```
</TabItem> </TabItem>
<TabItem label="C" value="c"> <TabItem label="C" value="c">
...@@ -185,10 +202,9 @@ install.packages("RJDBC") ...@@ -185,10 +202,9 @@ install.packages("RJDBC")
</TabItem> </TabItem>
</Tabs> </Tabs>
## 建立连接 ## 建立连接
在执行这一步之前,请确保有一个正在运行的,且可以访问到的 TDengine,而且服务端的FQDN配置正确。以下示例代码,都假设 TDengine 安装在本机,且 FQDN(默认 localhost) 和 serverPort(默认 6030) 都使用默认配置。 在执行这一步之前,请确保有一个正在运行的,且可以访问到的 TDengine,而且服务端的 FQDN 配置正确。以下示例代码,都假设 TDengine 安装在本机,且 FQDN(默认 localhost) 和 serverPort(默认 6030) 都使用默认配置。
<Tabs groupId="lang" defaultValue="java"> <Tabs groupId="lang" defaultValue="java">
<TabItem label="Java" value="java"> <TabItem label="Java" value="java">
...@@ -218,8 +234,6 @@ install.packages("RJDBC") ...@@ -218,8 +234,6 @@ install.packages("RJDBC")
</Tabs> </Tabs>
:::tip :::tip
如果建立连接失败,大部分情况下是FQDN或防火墙的配置不正确,详细的排查方法请看[《常见问题及反馈》](https://docs.taosdata.com/train-fqa/faq)中的“遇到错误Unable to establish connection, 我怎么办?” 如果建立连接失败,大部分情况下是 FQDN 或防火墙的配置不正确,详细的排查方法请看[《常见问题及反馈》](https://docs.taosdata.com/train-fqa/faq)中的“遇到错误 Unable to establish connection, 我怎么办?”
::: :::
...@@ -15,7 +15,7 @@ TDengine 采用类关系型数据模型,需要建库、建表。因此对于 ...@@ -15,7 +15,7 @@ TDengine 采用类关系型数据模型,需要建库、建表。因此对于
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1; CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1;
``` ```
上述语句将创建一个名为 power 的库,这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据。详细的语法及参数请见 [数据库管理](/reference/taos-sql/database) 章节。 上述语句将创建一个名为 power 的库,这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据。详细的语法及参数请见 [数据库管理](/taos-sql/database) 章节。
创建库之后,需要使用 SQL 命令 `USE` 将当前库切换过来,例如: 创建库之后,需要使用 SQL 命令 `USE` 将当前库切换过来,例如:
...@@ -45,7 +45,7 @@ CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAG ...@@ -45,7 +45,7 @@ CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAG
这一指令中的 STABLE 关键字,在 2.0.15 之前的版本中需写作 TABLE 。 这一指令中的 STABLE 关键字,在 2.0.15 之前的版本中需写作 TABLE 。
::: :::
与创建普通表一样,创建超级表时,需要提供表名(示例中为 meters),表结构 Schema,即数据列的定义。第一列必须为时间戳(示例中为 ts),其他列为采集的物理量(示例中为 current, voltage, phase),数据类型可以为整型、浮点型、字符串等。除此之外,还需要提供标签的 schema (示例中为 location, groupId),标签的数据类型可以为整型、浮点型、字符串等。采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组 ID、管理员 ID 等等。标签的 schema 可以事后增加、删除、修改。具体定义以及细节请见 [TAOS SQL 的超级表管理](/reference/taos-sql/stable) 章节。 与创建普通表一样,创建超级表时,需要提供表名(示例中为 meters),表结构 Schema,即数据列的定义。第一列必须为时间戳(示例中为 ts),其他列为采集的物理量(示例中为 current, voltage, phase),数据类型可以为整型、浮点型、字符串等。除此之外,还需要提供标签的 schema (示例中为 location, groupId),标签的数据类型可以为整型、浮点型、字符串等。采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组 ID、管理员 ID 等等。标签的 schema 可以事后增加、删除、修改。具体定义以及细节请见 [TAOS SQL 的超级表管理](/taos-sql/stable) 章节。
每一种类型的数据采集点需要建立一个超级表,因此一个物联网系统,往往会有多个超级表。对于电网,我们就需要对智能电表、变压器、母线、开关等都建立一个超级表。在物联网中,一个设备就可能有多个数据采集点(比如一台风力发电的风机,有的采集点采集电流、电压等电参数,有的采集点采集温度、湿度、风向等环境参数),这个时候,对这一类型的设备,需要建立多张超级表。 每一种类型的数据采集点需要建立一个超级表,因此一个物联网系统,往往会有多个超级表。对于电网,我们就需要对智能电表、变压器、母线、开关等都建立一个超级表。在物联网中,一个设备就可能有多个数据采集点(比如一台风力发电的风机,有的采集点采集电流、电压等电参数,有的采集点采集温度、湿度、风向等环境参数),这个时候,对这一类型的设备,需要建立多张超级表。
...@@ -59,7 +59,7 @@ TDengine 对每个数据采集点需要独立建表。与标准的关系型数 ...@@ -59,7 +59,7 @@ TDengine 对每个数据采集点需要独立建表。与标准的关系型数
CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2); CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);
``` ```
其中 d1001 是表名,meters 是超级表的表名,后面紧跟标签 Location 的具体标签值 ”Beijing.Chaoyang",标签 groupId 的具体标签值 2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 [TAOS SQL 的表管理](/reference/taos-sql/table) 章节。 其中 d1001 是表名,meters 是超级表的表名,后面紧跟标签 Location 的具体标签值 ”Beijing.Chaoyang",标签 groupId 的具体标签值 2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 [TAOS SQL 的表管理](/taos-sql/table) 章节。
:::warning :::warning
目前 TDengine 没有从技术层面限制使用一个 database (db1) 的超级表作为模板建立另一个 database (db2) 的子表,后续会禁止这种用法,不建议使用这种方法建表。 目前 TDengine 没有从技术层面限制使用一个 database (db1) 的超级表作为模板建立另一个 database (db2) 的子表,后续会禁止这种用法,不建议使用这种方法建表。
...@@ -78,7 +78,7 @@ INSERT INTO d1001 USING meters TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 21 ...@@ -78,7 +78,7 @@ INSERT INTO d1001 USING meters TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 21
上述 SQL 语句将记录`(now, 10.2, 219, 0.32)`插入表 d1001。如果表 d1001 还未创建,则使用超级表 meters 做模板自动创建,同时打上标签值 `"Beijing.Chaoyang", 2`。 上述 SQL 语句将记录`(now, 10.2, 219, 0.32)`插入表 d1001。如果表 d1001 还未创建,则使用超级表 meters 做模板自动创建,同时打上标签值 `"Beijing.Chaoyang", 2`。
关于自动建表的详细语法请参见 [插入记录时自动建表](reference/taos-sql/insert#插入记录时自动建表) 章节。 关于自动建表的详细语法请参见 [插入记录时自动建表](/taos-sql/insert#插入记录时自动建表) 章节。
## 多列模型 vs 单列模型 ## 多列模型 vs 单列模型
......
...@@ -46,7 +46,7 @@ TDengine 也支持一次向多个表写入数据,比如下面这条命令就 ...@@ -46,7 +46,7 @@ TDengine 也支持一次向多个表写入数据,比如下面这条命令就
INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) d1002 VALUES (1538548696800, 12.3, 221, 0.31); INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) d1002 VALUES (1538548696800, 12.3, 221, 0.31);
``` ```
详细的 SQL INSERT 语法规则参考 [TAOS SQL 的数据写入](/reference/taos-sql/insert)。 详细的 SQL INSERT 语法规则参考 [TAOS SQL 的数据写入](/taos-sql/insert)。
:::info :::info
...@@ -101,7 +101,7 @@ INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, ...@@ -101,7 +101,7 @@ INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6,
TDengine 也提供了支持参数绑定的 Prepare API,与 MySQL 一样,这些 API 目前也仅支持用问号 `?` 来代表待绑定的参数。文档中有时也会把此功能称为“原生接口写入”。从 2.1.1.0 和 2.1.2.0 版本开始,TDengine 大幅改进了参数绑定接口对数据写入(INSERT)场景的支持。这样在通过参数绑定接口写入数据时,就避免了 SQL 语法解析的资源消耗,从而在绝大多数情况下显著提升写入性能。 TDengine 也提供了支持参数绑定的 Prepare API,与 MySQL 一样,这些 API 目前也仅支持用问号 `?` 来代表待绑定的参数。文档中有时也会把此功能称为“原生接口写入”。从 2.1.1.0 和 2.1.2.0 版本开始,TDengine 大幅改进了参数绑定接口对数据写入(INSERT)场景的支持。这样在通过参数绑定接口写入数据时,就避免了 SQL 语法解析的资源消耗,从而在绝大多数情况下显著提升写入性能。
需要注意的是,只有使用本地连接的连接器,才能使用动态绑定功能。 需要注意的是,只有使用原生连接的连接器,才能使用动态绑定功能。
<Tabs defaultValue="java" groupId="lang"> <Tabs defaultValue="java" groupId="lang">
<TabItem label="Java" value="java"> <TabItem label="Java" value="java">
......
--- ---
slug: /query-data slug: /query-data
title: 查询数据 title: 查询数据
description: "主要查询功能,通过连接器执行同步查询和异步查询"
--- ---
import Tabs from "@theme/Tabs"; import Tabs from "@theme/Tabs";
...@@ -19,7 +20,7 @@ import CAsync from "./_c_async.mdx"; ...@@ -19,7 +20,7 @@ import CAsync from "./_c_async.mdx";
## 主要查询功能 ## 主要查询功能
TDengine 采用 SQL 作为查询语言。应用程序可以通过RESTful接口或连接器发送 SQL 语句,用户还可以通过 TDengine 命令行工具 taos 手动执行 SQL 即席查询(Ad-Hoc Query)。TDengine 支持如下查询功能: TDengine 采用 SQL 作为查询语言。应用程序可以通过 REST API 或连接器发送 SQL 语句,用户还可以通过 TDengine 命令行工具 taos 手动执行 SQL 即席查询(Ad-Hoc Query)。TDengine 支持如下查询功能:
- 单列、多列数据查询 - 单列、多列数据查询
- 标签和数值的多种过滤条件:>, <, =, <\>, like 等 - 标签和数值的多种过滤条件:>, <, =, <\>, like 等
...@@ -41,7 +42,7 @@ Query OK, 2 row(s) in set (0.001100s) ...@@ -41,7 +42,7 @@ Query OK, 2 row(s) in set (0.001100s)
为满足物联网场景的需求,TDengine 支持几个特殊的函数,比如 twa(时间加权平均),spread (最大值与最小值的差),last_row(最后一条记录)等,更多与物联网场景相关的函数将添加进来。TDengine 还支持连续查询。 为满足物联网场景的需求,TDengine 支持几个特殊的函数,比如 twa(时间加权平均),spread (最大值与最小值的差),last_row(最后一条记录)等,更多与物联网场景相关的函数将添加进来。TDengine 还支持连续查询。
具体的查询语法请看 [TAOS SQL 的数据查询](/reference/taos-sql/select) 章节。 具体的查询语法请看 [TAOS SQL 的数据查询](/taos-sql/select) 章节。
### 多表聚合查询 ### 多表聚合查询
...@@ -61,6 +62,7 @@ Query OK, 2 row(s) in set (0.002136s) ...@@ -61,6 +62,7 @@ Query OK, 2 row(s) in set (0.002136s)
``` ```
#### 示例二 #### 示例二
在 TAOS shell, 查找 groupId 为 2 的所有智能电表过去 24 小时的记录条数,电流的最大值。 在 TAOS shell, 查找 groupId 为 2 的所有智能电表过去 24 小时的记录条数,电流的最大值。
``` ```
...@@ -71,7 +73,7 @@ taos> SELECT count(*), max(current) FROM meters where groupId = 2 and ts > now - ...@@ -71,7 +73,7 @@ taos> SELECT count(*), max(current) FROM meters where groupId = 2 and ts > now -
Query OK, 1 row(s) in set (0.002136s) Query OK, 1 row(s) in set (0.002136s)
``` ```
TDengine 仅容许对属于同一个超级表的表之间进行聚合查询,不同超级表之间的聚合查询不支持。在 [TAOS SQL 的数据查询](/reference/taos-sql/select) 一章,查询类操作都会注明是否支持超级表。 TDengine 仅容许对属于同一个超级表的表之间进行聚合查询,不同超级表之间的聚合查询不支持。在 [TAOS SQL 的数据查询](/taos-sql/select) 一章,查询类操作都会注明是否支持超级表。
### 降采样查询、插值 ### 降采样查询、插值
...@@ -118,13 +120,13 @@ Query OK, 5 row(s) in set (0.001521s) ...@@ -118,13 +120,13 @@ Query OK, 5 row(s) in set (0.001521s)
如果一个时间间隔里,没有采集的数据,TDengine 还提供插值计算的功能。 如果一个时间间隔里,没有采集的数据,TDengine 还提供插值计算的功能。
语法规则细节请见 [TAOS SQL 的按时间窗口切分聚合](/reference/taos-sql/interval) 章节。 语法规则细节请见 [TAOS SQL 的按时间窗口切分聚合](/taos-sql/interval) 章节。
## 示例代码 ## 示例代码
### 查询数据 ### 查询数据
在 [SQL 写入](/insert-data/sql-writing) 一章,我们创建了 power 数据库,并向 meters 表写入了一些数据,以下示例代码展示如何查询这个表的数据。 在 [SQL 写入](/develop/insert-data/sql-writing) 一章,我们创建了 power 数据库,并向 meters 表写入了一些数据,以下示例代码展示如何查询这个表的数据。
<Tabs defaultValue="java" groupId="lang"> <Tabs defaultValue="java" groupId="lang">
<TabItem label="Java" value="java"> <TabItem label="Java" value="java">
...@@ -152,7 +154,7 @@ Query OK, 5 row(s) in set (0.001521s) ...@@ -152,7 +154,7 @@ Query OK, 5 row(s) in set (0.001521s)
:::note :::note
1. 无论是使用 RESTful 连接还是本地连接的连接器,以上示例代码都能正常工作。 1. 无论是使用 REST 连接还是原生连接的连接器,以上示例代码都能正常工作。
2. 唯一需要注意的是:由于 RESTful 接口无状态, 不能使用 `use db` 语句来切换数据库。 2. 唯一需要注意的是:由于 RESTful 接口无状态, 不能使用 `use db` 语句来切换数据库。
::: :::
...@@ -161,7 +163,7 @@ Query OK, 5 row(s) in set (0.001521s) ...@@ -161,7 +163,7 @@ Query OK, 5 row(s) in set (0.001521s)
除同步查询 API 之外,TDengine 还提供性能更高的异步调用 API 处理数据插入、查询操作。在软硬件环境相同的情况下,异步 API 处理数据插入的速度比同步 API 快 2-4 倍。异步 API 采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步 API 在网络延迟严重的情况下,优点尤为突出。 除同步查询 API 之外,TDengine 还提供性能更高的异步调用 API 处理数据插入、查询操作。在软硬件环境相同的情况下,异步 API 处理数据插入的速度比同步 API 快 2-4 倍。异步 API 采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步 API 在网络延迟严重的情况下,优点尤为突出。
需要注意的是,只有使用本地连接的连接器,才能使用异步查询功能。 需要注意的是,只有使用原生连接的连接器,才能使用异步查询功能。
<Tabs defaultValue="python" groupId="lang"> <Tabs defaultValue="python" groupId="lang">
<TabItem label="Python" value="python"> <TabItem label="Python" value="python">
......
--- ---
sidebar_label: 连续查询 sidebar_label: 连续查询
description: "连续查询是一个按照预设频率自动执行的查询功能,提供按照时间窗口的聚合查询能力,是一种简化的时间驱动流式计算。"
title: "连续查询(Continuous Query)"
--- ---
# 连续查询(Continuous Query)
连续查询是 TDengine 定期自动执行的查询,采用滑动窗口的方式进行计算,是一种简化的时间驱动的流式计算。针对库中的表或超级表,TDengine 可提供定期自动执行的连续查询,用户可让 TDengine 推送查询的结果,也可以将结果再写回到 TDengine 中。每次执行的查询是一个时间窗口,时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口(time window, 参数 interval)大小和每次前向增量时间(forward sliding times, 参数 sliding)。 连续查询是 TDengine 定期自动执行的查询,采用滑动窗口的方式进行计算,是一种简化的时间驱动的流式计算。针对库中的表或超级表,TDengine 可提供定期自动执行的连续查询,用户可让 TDengine 推送查询的结果,也可以将结果再写回到 TDengine 中。每次执行的查询是一个时间窗口,时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口(time window, 参数 interval)大小和每次前向增量时间(forward sliding times, 参数 sliding)。
TDengine 的连续查询采用时间驱动模式,可以直接使用 TAOS SQL 进行定义,不需要额外的操作。使用连续查询,可以方便快捷地按照时间窗口生成结果,从而对原始采集数据进行降采样(down sampling)。用户通过 TAOS SQL 定义连续查询以后,TDengine 自动在最后的一个完整的时间周期末端拉起查询,并将计算获得的结果推送给用户或者写回 TDengine。 TDengine 的连续查询采用时间驱动模式,可以直接使用 TAOS SQL 进行定义,不需要额外的操作。使用连续查询,可以方便快捷地按照时间窗口生成结果,从而对原始采集数据进行降采样(down sampling)。用户通过 TAOS SQL 定义连续查询以后,TDengine 自动在最后的一个完整的时间周期末端拉起查询,并将计算获得的结果推送给用户或者写回 TDengine。
......
--- ---
sidebar_label: 数据订阅 sidebar_label: 数据订阅
description: "轻量级的数据订阅与推送服务。连续写入到 TDengine 中的时序数据能够被自动推送到订阅客户端。"
title: 数据订阅
--- ---
# 数据订阅
import Tabs from "@theme/Tabs"; import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem"; import TabItem from "@theme/TabItem";
import Java from "./_sub_java.mdx"; import Java from "./_sub_java.mdx";
......
--- ---
sidebar_label: 缓存 sidebar_label: 缓存
title: 缓存 title: 缓存
description: "提供写驱动的缓存管理机制,将每个表最近写入的一条记录持续保存在缓存中,可以提供高性能的最近状态查询。"
--- ---
TDengine 采用时间驱动缓存管理策略(First-In-First-Out,FIFO),又称为写驱动的缓存管理机制。这种策略有别于读驱动的数据缓存模式(Least-Recent-Used,LRU),直接将最近写入的数据保存在系统的缓存中。当缓存达到临界值的时候,将最早的数据批量写入磁盘。一般意义上来说,对于物联网数据的使用,用户最为关心最近产生的数据,即当前状态。TDengine 充分利用了这一特性,将最近到达的(当前状态)数据保存在缓存中。 TDengine 采用时间驱动缓存管理策略(First-In-First-Out,FIFO),又称为写驱动的缓存管理机制。这种策略有别于读驱动的数据缓存模式(Least-Recent-Used,LRU),直接将最近写入的数据保存在系统的缓存中。当缓存达到临界值的时候,将最早的数据批量写入磁盘。一般意义上来说,对于物联网数据的使用,用户最为关心最近产生的数据,即当前状态。TDengine 充分利用了这一特性,将最近到达的(当前状态)数据保存在缓存中。
......
--- ---
sidebar_label: 用户定义函数 sidebar_label: 用户定义函数
title: UDF(用户定义函数) title: UDF(用户定义函数)
description: "支持用户编码的聚合函数和标量函数,在查询中嵌入并使用用户定义函数,拓展查询的能力和功能。"
--- ---
在有些应用场景中,应用逻辑需要的查询无法直接使用系统内置的函数来表示。利用 UDF 功能,TDengine 可以插入用户编写的处理代码并在查询中使用它们,就能够很方便地解决特殊应用场景中的使用需求。 UDF 通常以数据表中的一列数据做为输入,同时支持以嵌套子查询的结果作为输入。 在有些应用场景中,应用逻辑需要的查询无法直接使用系统内置的函数来表示。利用 UDF 功能,TDengine 可以插入用户编写的处理代码并在查询中使用它们,就能够很方便地解决特殊应用场景中的使用需求。 UDF 通常以数据表中的一列数据做为输入,同时支持以嵌套子查询的结果作为输入。
......
label: 开发指南
link:
slug: /develop
type: generated-index
\ No newline at end of file
---
title: 高级功能
---
本章介绍以下TDengine中的高级功能。
## 连续查询
连续查询是一个按照预设频率自动执行的查询功能,提供按照时间窗口的聚合查询能力,是一种简化的时间驱动流式计算。
## 订阅
轻量级的数据订阅与推送服务。连续写入到 TDengine 中的时序数据能够被自动推送到订阅客户端。
## 缓存
提供写驱动的缓存管理机制,将每个表最近写入的一条记录持续保存在缓存中,可以提供高性能的最近状态查询。
## 用户定义函数
支持用户编码的聚合函数和标量函数,在查询中嵌入并使用用户定义函数,拓展查询的能力和功能。
---
sidebar_label: 流计算
---
# 流计算
label: 高级功能
\ No newline at end of file
...@@ -34,7 +34,7 @@ SHOW VARIABLES; ...@@ -34,7 +34,7 @@ SHOW VARIABLES;
USE db_name; USE db_name;
``` ```
使用/切换数据库(在 RESTful 连接方式下无效)。 使用/切换数据库(在 REST 连接方式下无效)。
## 删除数据库 ## 删除数据库
......
...@@ -93,7 +93,7 @@ SELECT function_list FROM stb_name ...@@ -93,7 +93,7 @@ SELECT function_list FROM stb_name
::: :::
时间聚合也常被用于连续查询场景,可以参考文档 [连续查询(Continuous Query)](/advance-feature/continuous-query) 时间聚合也常被用于连续查询场景,可以参考文档 [连续查询(Continuous Query)](/develop/continuous-query)
## 示例 ## 示例
......
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册