update doc

This commit is contained in:
sheyanjie-qq 2024-07-31 11:15:16 +08:00
parent b144f19ea9
commit c03fdceb79
5 changed files with 47 additions and 13 deletions

View File

@ -15,7 +15,7 @@ TDengine 对 SQL 语言提供了全面的支持,允许用户以熟悉的 SQL
## 建库和表 ## 建库和表
以智能电表为例,展示如何使用连接器执行 SQL 来创建数据库和表。 以智能电表为例,展示如何使用连接器执行 SQL 来创建数据库和表。
<Tabs defaultValue="java" groupId="create"> <Tabs defaultValue="java" groupId="lang">
<TabItem value="java" label="Java"> <TabItem value="java" label="Java">
```java ```java
@ -43,7 +43,7 @@ TDengine 对 SQL 语言提供了全面的支持,允许用户以熟悉的 SQL
## 插入数据 ## 插入数据
以智能电表为例,展示如何使用连接器执行 SQL 来插入数据。 以智能电表为例,展示如何使用连接器执行 SQL 来插入数据。
<Tabs defaultValue="java" groupId="insert"> <Tabs defaultValue="java" groupId="lang">
<TabItem value="java" label="Java"> <TabItem value="java" label="Java">
```java ```java
{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcInsertDataDemo.java:insert_data}} {{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcInsertDataDemo.java:insert_data}}
@ -74,7 +74,7 @@ NOW 为系统内部函数,默认为客户端所在计算机当前时间。 NOW
## 查询数据 ## 查询数据
以智能电表为例,展示如何使用各语言连接器执行 SQL 来查询数据,并将获取到的结果打印出来。 以智能电表为例,展示如何使用各语言连接器执行 SQL 来查询数据,并将获取到的结果打印出来。
<Tabs defaultValue="java" groupId="query"> <Tabs defaultValue="java" groupId="lang">
<TabItem label="Java" value="java"> <TabItem label="Java" value="java">
```java ```java
@ -114,7 +114,7 @@ reqId 可用于请求链路追踪reqId 就像分布式系统中的 traceId
下面是各语言连接器设置 reqId 执行 SQL 的代码样例。 下面是各语言连接器设置 reqId 执行 SQL 的代码样例。
<Tabs defaultValue="java" groupId="query"> <Tabs defaultValue="java" groupId="lang">
<TabItem label="Java" value="java"> <TabItem label="Java" value="java">
```java ```java

View File

@ -22,7 +22,7 @@ TDengine 提供了类似于消息队列产品的数据订阅和消费接口。
## 创建消费者 ## 创建消费者
TDengine 消费者的概念跟 Kafka 类似,是指使用 TDengine 数据库进行数据订阅的客户端应用程序。它通过订阅特定的主题来接收数据流,这些主题由 SQL 查询定义。消费者可以配置多种参数如连接方式、服务器地址、自动提交偏移量、消费者组标识、反序列化方法等以适应不同的数据处理需求。TDengine 支持通过 JNI 或 WebSocket 连接,提供了灵活的数据接收方式。此外,消费者还支持自动重连和数据传输压缩等高级功能,以确保数据的高效和稳定接收。 TDengine 消费者的概念跟 Kafka 类似,消费者通过订阅主题来接收数据流。消费者可以配置多种参数,如连接方式、服务器地址、自动提交 Offset 等以适应不同的数据处理需求。有的语言连接器的消费者还支持自动重连和数据传输压缩等高级功能,以确保数据的高效和稳定接收。
### 创建参数 ### 创建参数
@ -179,9 +179,9 @@ Java 连接器创建消费者的参数为 Properties 可以设置如下参数
{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java:poll_data_code_piece}} {{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java:poll_data_code_piece}}
``` ```
- `subscribe` 方法的参数含义为:订阅的主题列表(即名称),支持同时订阅多个主题。 - `subscribe` 方法的参数含义为:订阅的主题列表(即名称),支持同时订阅多个主题。
- `poll` 每次调用获取一个消息,一个消息中可能包含多个记录。 - `poll` 每次调用获取一个消息,一个消息中可能包含多个记录。
- `ResultBean` 是我们自定义的一个内部类,其字段名和数据类型与列名和数据类型一一对应,这样根据 `value.deserializer` 属性对应的反序列化类可以反序列化出 `ResultBean` 类型的对象。 - `ResultBean` 是我们自定义的一个内部类,其字段名和数据类型与列和数据类型一一对应,这样根据 `value.deserializer` 属性对应的反序列化类可以反序列化出 `ResultBean` 类型的对象。
</TabItem> </TabItem>
@ -262,7 +262,7 @@ Java 连接器创建消费者的参数为 Properties 可以设置如下参数
</Tabs> </Tabs>
## 指定订阅的 Offset ## 指定订阅的 Offset
消费者可以指定从特定 Offset 开始读取分区中的消息,这允许消费者重读消息或跳过已处理的消息。本节展示各语言连接器如何指定订阅的 Offset。 消费者可以指定从特定 Offset 开始读取分区中的消息,这允许消费者重读消息或跳过已处理的消息。下面展示各语言连接器如何指定订阅的 Offset。
### Websocket 连接 ### Websocket 连接
<Tabs defaultValue="java" groupId="lang"> <Tabs defaultValue="java" groupId="lang">
@ -385,6 +385,12 @@ void commitSync(Map<TopicPartition, OffsetAndMetadata offsets) throws SQLExcepti
void commitAsync(OffsetCommitCallback<V callback) throws SQLException; void commitAsync(OffsetCommitCallback<V callback) throws SQLException;
void commitAsync(Map<TopicPartition, OffsetAndMetadata offsets, OffsetCommitCallback<V callback) throws SQLException; void commitAsync(Map<TopicPartition, OffsetAndMetadata offsets, OffsetCommitCallback<V callback) throws SQLException;
``` ```
```java
{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java:commit_code_piece}}
```
</TabItem> </TabItem>
<TabItem label="Python" value="python"> <TabItem label="Python" value="python">

View File

@ -224,7 +224,7 @@ TDengine 的 JDBC URL 规范格式为:
JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。
**使用 TDengine 客户端驱动配置文件建立连接 ** **使用 TDengine 客户端驱动配置文件建立连接**
当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。 此时在 JDBC url 中不指定 `hostname` 和 `port`。 当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。 此时在 JDBC url 中不指定 `hostname` 和 `port`。
配置如 `jdbc:TAOS://:/power?user=root&password=taosdata`。 配置如 `jdbc:TAOS://:/power?user=root&password=taosdata`。
@ -235,7 +235,7 @@ TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可
##### Websocket 和 REST 连接 ##### Websocket 和 REST 连接
使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: 使用 JDBC Websocket 或 REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要:
1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver” 1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”
2. jdbcUrl 以“jdbc:TAOS-RS://”开头; 2. jdbcUrl 以“jdbc:TAOS-RS://”开头;

View File

@ -74,6 +74,33 @@ try {
// ANCHOR_END: poll_data_code_piece // ANCHOR_END: poll_data_code_piece
} }
public void commitCodePiece() throws SQLException {
// ANCHOR: commit_code_piece
try {
consumer.subscribe(topics);
while (!shutdown.get()) {
ConsumerRecords<ResultBean> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<ResultBean> record : records) {
ResultBean bean = record.value();
// process your data here
process(bean);
}
if (!records.isEmpty()) {
// after processing the data, commit the offset manually
consumer.commitSync();
}
}
} catch (Exception ex){
// handle exception
System.out.println("SQLException: " + ex.getMessage());
} finally {
consumer.close();
shutdownLatch.countDown();
}
// ANCHOR_END: commit_code_piece
}
public void unsubscribeCodePiece() throws SQLException { public void unsubscribeCodePiece() throws SQLException {
// ANCHOR: unsubscribe_data_code_piece // ANCHOR: unsubscribe_data_code_piece
try { try {

View File

@ -96,9 +96,10 @@ aStmt.close();
String sql = "SELECT * FROM meters limit 2;"; String sql = "SELECT * FROM meters limit 2;";
// ANCHOR: jdbc_exception // ANCHOR: jdbc_exception
try (Statement statement = connection.createStatement()) { try (Statement statement = connection.createStatement();
// executeQuery // executeQuery
ResultSet tempResultSet = statement.executeQuery(sql); ResultSet tempResultSet = statement.executeQuery(sql)) {
// print result // print result
printResult(tempResultSet); printResult(tempResultSet);
} catch (SQLException e) { } catch (SQLException e) {