Просмотр исходного кода

docs: refactor zh and rewrite connectors chapter (#2229)

Signed-off-by: LenaLenaPan <hilena.pan@gmail.com>
LenaLenaPan 1 год назад
Родитель
Сommit
298d6a1811

Разница между файлами не показана из-за своего большого размера
+ 1390 - 1421
docs/directory.json


+ 5 - 11
docs/en_US/guide/sources/builtin/edgex.md

@@ -86,12 +86,10 @@ Users can specify the global EdgeX configurations here. The configuration items
   - `nats-jetstream`
   - `nats-core`
 
-- `messageType`: The EdgeX message model type. If connected to the topic of EdgeX application service, the message model is an "event".
-  Otherwise, if connected to the topic of EdgeX message bus directly to receive the message from device service or core
-  data, the message is a "request". There are two available types of messageType property:
-
-  - `event`: The message will be decoded as a `dtos.Event` type. This is the default.
-  - `request`: The message will be decoded as a `requests.AddEventRequest` type.
+- `messageType`: The EdgeX message model type.
+  
+  - `event`:  If connected to the topic of EdgeX application service, the message model is an "event". The message will be decoded as a `dtos.Event` type. This is the default.
+  - `request`: If connected to the topic of EdgeX message bus directly to receive the message from device service or core data, the message is a "request". The message will be decoded as a `requests.AddEventRequest` type.
 
 ### Optional Configuration (Specifically for MQTT)
 
@@ -199,13 +197,9 @@ When eKuiper processes events from EdgeX, it automatically manages data type con
 - If no match is found, the original value remains unchanged.
 - If a conversion fails, the value is dropped, and a warning logs in the system.
 
-The types defined in readings will be converted into related [data types](../../../sqls/streams.md) that are supported in eKuiper.
-
 #### Boolean
 
-If `ValueType` value of the reading is `Bool`, then eKuiper tries to convert to `boolean` type.
-
-**Boolean Conversion:**
+If `ValueType` value of the reading is `Bool`, then eKuiper tries to convert it to `boolean` type.
 
 - Converted to `true`: "1", "t", "T", "true", "TRUE", "True"
 - Converted to `false`: "0", "f", "F", "false", "FALSE", "False"

Разница между файлами не показана из-за своего большого размера
+ 4 - 4
docs/en_US/guide/sources/builtin/file.md


+ 5 - 5
docs/en_US/guide/sources/builtin/http_pull.md

@@ -78,7 +78,7 @@ Use can specify the global HTTP pull settings here. The configuration items spec
 - `timeout`: The timeout for http request, time unit is ms.
 - `body`: The body of request, such as `'{"data": "data", "method": 1}'`
 - `bodyType`: Body type, it could be none|text|json|html|xml|javascript|format.
-  headers: The HTTP request headers that you want to send along with the HTTP request.
+- `headers`: The HTTP request headers that you want to send along with the HTTP request.
 - `responseType`: Define how to parse the HTTP response. There are two types defined:
   - `code`: To check the response status from the HTTP status code.
   - `body`: To check the response status from the response body. The body must be "application/json" content type and contains a "code" field.
@@ -138,8 +138,8 @@ For HTTP services that allow time-based filtering, `PullTime` and `LastPullTime`
 
 ::: v-pre
 
-- For URL parameters: `http://localhost:9090/pull?start={{.LastPullTime}}&end={{.PullTime}}`.
-- For body parameters: `{"start": {{.LastPullTime}}, "end": {{.PullTime}}`.
+- From URL parameters: `http://localhost:9090/pull?start={{.LastPullTime}}&end={{.PullTime}}`.
+- From body parameters: `{"start": {{.LastPullTime}}, "end": {{.PullTime}}`.
 
 :::
 
@@ -190,7 +190,7 @@ Example
 {"sql":"create stream http_stream () WITH (FORMAT="json", TYPE="http_pull"}
 ```
 
-For a comprehensive guide, refer to [Streams Management with REST API](https://chat.openai.com/api/restapi/streams.md).
+For a comprehensive guide, refer to [Streams Management with REST API](../../../api/restapi/streams.md).
 
 ### Use CLI
 
@@ -208,4 +208,4 @@ If you favor a more hands-on approach, the Command Line Interface (CLI) offers d
    bin/kuiper create stream http_stream '() WITH (FORMAT="json", TYPE="http_pull")'
    ```
 
-For a step-by-step guide, check [Streams Management with CLI](https://chat.openai.com/api/cli/streams.md).
+For a step-by-step guide, check [Streams Management with CLI](../../../api/cli/streams.md).

+ 1 - 1
docs/en_US/guide/sources/builtin/http_push.md

@@ -9,7 +9,7 @@ When configured as an HTTP Push source, eKuiper exposes an HTTP endpoint so devi
 
 The connector in eKuiper can be configured with [environment variables](../../../configuration/configuration.md#environment-variable-syntax), [rest API](../../../api/restapi/configKey.md), or configuration file. This section focuses on configuring eKuiper connectors with the configuration file.
 
-## Basic Configuration
+## Server Configuration
 
 To set up eKuiper as an HTTP endpoint, configure the server settings in `etc/sources/httppush.yaml`.
 

+ 5 - 5
docs/en_US/guide/sources/builtin/mqtt.md

@@ -3,9 +3,9 @@
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 
-MQTT (Message Queuing Telemetry Transport) is a protocol optimized for the low bandwidth scenarios. In eKuiper, the MQTT connector can function as both a source connector (ingesting data from MQTT brokers) and a [sink connector](../../sinks/builtin/mqtt.md) (publishing data to MQTT brokers). This section specifically focuses on its role as a source connector.
+MQTT (Message Queuing Telemetry Transport) is a protocol optimized for low bandwidth scenarios. Using the MQTT source stream, eKuiper subscribes to messages from the MQTT broker and channels them into its processing pipeline. This integration allows for real-time data processing directly from specified MQTT topics.
 
-Using the MQTT source stream, eKuiper subscribes to messages from the MQTT broker and channels them into its processing pipeline. This integration allows for real-time data processing directly from specified MQTT topics.
+ In eKuiper, the MQTT connector can function as both a source connector (ingesting data from MQTT brokers) and a [sink connector](../../sinks/builtin/mqtt.md) (publishing data to MQTT brokers). This section specifically focuses on its role as a source connector.
 
 ## Configurations
 
@@ -55,13 +55,13 @@ Users can specify the global MQTT configurations here. The configuration items s
 - `certificationPath`:  Specifies the path to the certificate, for example: `d3807d9fa5-certificate.pem`. This can be an absolute or relative path. The base path for a relative address depends on where the `kuiperd` command is executed.
   - If executed as `bin/kuiperd` from `/var/kuiper`, the base is `/var/kuiper`.
   - If executed as `./kuiperd` from `/var/kuiper/bin`, the base is `/var/kuiper/bin`.
-- `privateKeyPath`: The location of the private key path, for example:  `d3807d9fa5-private.pem.key`. It can be an absolute path or a relative path.  For more detailed information, please refer to `certificationPath`.
+- `privateKeyPath`: The location of the private key path, for example `d3807d9fa5-private.pem.key`. It can be an absolute path or a relative path.  For more detailed information, see `certificationPath`.
 - `rootCaPath`: The location of root ca path. It can be an absolute path, or a relative path.
-- `insecureSkipVerify`: Controls whether to skip certificate verification. If set to `true`, verification is skipped; otherwise, the certificate is verified."
+- `insecureSkipVerify`: Controls whether to skip certificate verification. If set to `true`, verification is skipped; otherwise, the certificate is verified.
 
 ### **Connection Reusability**
 
-- `connectionSelector`: Specify the stream to reuse the connection to the MQTT brokertion.yaml`. For a detailed explanation of the connection selection, see [Connection Selector](../../connector.md#connection-selector). For example, `mqtt.localConnection` in the below example.
+- `connectionSelector`: Specify the stream to reuse the connection to the MQTT broker, for example, `mqtt.localConnection` in the below example.  Note: The connection profile is located in `connections/connection.yaml`tion.yaml`. For a detailed explanation of the connection selection, see [Connection Selector](../../connector.md#connection-selector).
 
   ```yaml
   #Global MQTT configurations

+ 3 - 3
docs/en_US/guide/sources/builtin/redis.md

@@ -14,7 +14,7 @@ Currently, the Redis source can only be used as a [lookup table](../../tables/lo
 
 Before using the Redis Source Connector, it's essential to configure the connection settings and other relevant parameters. Here are the available configuration options:
 
-The configuration file for the Redis source is located at */etc/sources/redis.yaml*, where you can specify the path to the file.
+The configuration file for the Redis source is located at */etc/sources/redis.yaml*.
 
 ```yaml
 default:
@@ -35,7 +35,7 @@ With this configuration, the table will refer to database 0 in the Redis instanc
 - **`username`**: The username for accessing the Redis server, only needed if authentication is enabled on the server.
 - **`password`**: The password for accessing the Redis server, only needed if authentication is enabled on the server.
 
-## Create a Stream Source
+## Create a Lookup Table Source
 
 To utilize the Redis Source Connector in eKuiper streams, define a stream specifying the Redis source, its configuration, and the data format.
 
@@ -63,7 +63,7 @@ For users who prefer a hands-on approach, the Command Line Interface (CLI) provi
    cd path_to_eKuiper_directory/bin
    ```
 
-2. Use the `create` command to define a stream for the Neuron source connector:
+2. Use the `create` command to define a stream for the Redis source connector:
 
    ```bash
    ./kuiper create stream neuron_stream ' WITH (DATASOURCE="0", FORMAT="json", TYPE="redis", KIND="lookup")'

+ 2 - 0
docs/zh_CN/api/cli/overview.md

@@ -1,3 +1,5 @@
+# 命令行工具
+
 eKuiper CLI (命令行界面)工具提供流和规则管理。
 
 eKuiper CLI 可以作为 eKuiper 服务器的客户端。eKuiper 服务器运行引擎执行流或规则查询,包括处理流或规则定义、管理规则状态和 io。

+ 6 - 0
docs/zh_CN/example/overview.md

@@ -0,0 +1,6 @@
+# 案例集锦
+
+本章主要介绍如何通过 eKuiper 来解决物联网场景中的一些常见问题:
+
+- **[基于 eKuiper 管理台界面执行数据分析](howto.md)**:本节将深入解释如何通过 eKuiper 的管理控制台界面进行数据分析,包括数据预处理、示例执行以及查看结果等步骤。
+- **[物联网场景下的数据融合](./data_merge/merge_single_stream.md)**:本节将以在单个数据流中整合不同采集频率的传感器数据为例,介绍如何通过 eKuiper 实现物联网场景下的数据融合。

+ 1 - 1
docs/zh_CN/extension/portable/overview.md

@@ -14,7 +14,7 @@
 
 ## 开发
 
-与原生插件不同,portable 插件可以捆绑多个 *Symbol*。每个 Symbol 代表源、或功能的扩展。一个符号的实现就是实现类似于原生插件的 source、sink 或者 function 的接口。在 portable 插件模式下,就是用选择的语言来实现接口。
+与原生插件不同,portable 插件可以捆绑多个 *Symbol*。每个 Symbol 代表源、Sink 或功能的扩展。一个符号的实现就是实现类似于原生插件的 source、sink 或者 function 的接口。在 portable 插件模式下,就是用选择的语言来实现接口。
 然后,用户需要创建一个主程序来定义和服务所有的符号。启动插件时将运行主程序。开发因语言而异,详情请查看 [go SDK](go_sdk.md) 和 [python SDK](python_sdk.md)。
 
 ### 调试

+ 160 - 0
docs/zh_CN/guide/connector.md

@@ -0,0 +1,160 @@
+# 数据连接
+
+在流式数据处理中,与数据源和目标端点的无缝集成能力非常关键。作为一款轻量级的边缘流处理引擎,eKuiper通过**连接器**实现了与外部系统的数据交互,如数据库、消息中间件等。
+
+eKuiper 内置各类连接器并支持用户以插件的形式扩展连接器,因此能从各种来源获取数据,对其进行实时处理,并将处理结果推送至指定系统(数据 Sink),因此能够轻松融入从 IoT 边缘设备到云计算基础设施的各种场景。
+
+eKuiper 连接器主要分两类:
+
+- **数据源连接器**:负责从各类外部数据源中导入数据至 eKuiper。
+- **数据 Sink 连接器**:负责将 eKuiper 处理后的数据输出至外部系统。
+
+本章将介绍 eKuiper 中各类连接器的配置、使用以及最佳实践。
+
+## 数据源连接器
+
+eKuiper [数据源连接器](./sources/overview.md)旨在从各种外部源导入数据到平台。在 eKuiper 中,用户只需将这些数据源集成到他们的数据流或表中,即可将相关数据导入 eKuiper 并执行查询或数据转换等操作。eKuiper 还提供了丰富的配置选项,方便满足用户的各类数据处理需求。
+
+**内置源连接器:**
+
+eKuiper 内置以下数据源连接器:
+
+- [MQTT 源](./sources/builtin/mqtt.md):从 MQTT 主题读取数据。
+- [Neuron 源](./sources/builtin/neuron.md):从本地 Neuron 实例读取数据。
+- [EdgeX 源](./sources/builtin/edgex.md):从 EdgeX foundry 读取数据。
+- [HTTP Pull 源](./sources/builtin/http_pull.md):从 HTTP 服务器中拉取数据。
+- [HTTP Push 源](./sources/builtin/http_push.md):通过 HTTP 推送数据到 eKuiper。
+- [文件源](./sources/builtin/file.md):从文件中读取数据,通常用作表格。
+- [内存源](./sources/builtin/memory.md):从 eKuiper 内存主题读取数据,常用于构建[规则管道](./rules/rule_pipeline.md)。
+
+- [Redis 源](./sources/builtin/redis.md):从 Redis 中查询数据,用作查询表。
+
+**插件式源连接器**
+对于需要自定义数据源或与特定第三方集成的场景,eKuiper 提供了基于插件的拓展源连接器:
+
+- [SQL 源](./sources/plugin/sql.md):定期从关系数据库中拉取数据。
+- [视频源](./sources/plugin/video.md):用于查询视频流。
+- [Random 源](./sources/plugin/random.md):用于生成随机数据的源,用于测试。
+- [Zero MQ 源](./sources/plugin/zmq.md):从 Zero MQ 读取数据。
+
+## 数据 Sink 连接器
+
+eKuiper Sink 连接器负责将 eKuiper 处理后的数据发送到各种目标端点或系统,可直接与 MQTT、Neuron、EdgeX 等平台对接,并提供缓存机制以应对网络中断场景,确保数据的一致性。此外,用户还可通过动态属性和资源重用来定制接收行为,简化集成并提高可伸缩性。
+
+与源连接器类似,Sink 连接器也分为内置和插件式两种。
+
+**内置 Sink 连接器**
+
+以下是 eKuiper 提供的内置 Sink 连接器:
+
+- [MQTT Sink](./sinks/builtin/mqtt.md):输出到外部 MQTT 服务。
+- [Neuron Sink](./sinks/builtin/neuron.md):输出到本地的 Neuron 实例。
+- [EdgeX Sink](./sinks/builtin/edgex.md):输出到 EdgeX Foundry。此动作仅在启用 edgex 编译标签时存在。
+- [Rest Sink](./sinks/builtin/rest.md):输出到外部 HTTP 服务器。
+- [Redis Sink](./sinks/builtin/redis.md):写入 Redis 。
+- [File Sink](./sinks/builtin/file.md):写入文件。
+- [Memory Sink](./sinks/builtin/memory.md):输出到 eKuiper 内存主题,,常用于构建[规则管道](./rules/rule_pipeline.md)。
+- [Log Sink](./sinks/builtin/log.md):写入日志,通常只用于调试。
+- [Nop Sink](./sinks/builtin/nop.md):不输出,用于性能测试。
+
+**插件式 Sink 连接器**
+
+对于特殊的数据分发或特定平台集成需求,eKuiper 支持基于插件的 Sink 连接器:
+
+- [InfluxDB Sink](./sinks/plugin/influx.md):输出到 Influx DB `v1.x`。
+- [InfluxDBV2 Sink](./sinks/plugin/influx2.md):输出到 Influx DB `v2.x`。
+- [TDengine Sink](./sinks/plugin/tdengine.md):输出到 Tdengine。
+- [Image Sink](./sinks/plugin/image.md):输出到一个图像文件。仅用于处理二进制结果。
+- [Zero MQ Sink](./sinks/plugin/zmq.md):输出到 ZeroMQ。
+- [Kafka Sink](./sinks/plugin/kafka.md):输出到 Kafka。
+
+### 数据模板
+
+eKuiper [数据模板](./sinks/data_template.md) 支持用户对分析结果进行"二次处理",以满足不同接收系统的多样化格式要求。利用 Golang 模板系统,eKuiper 提供了动态数据转换、条件输出和迭代处理的机制,确保了与各种接收器的兼容性和精确格式化。
+
+## 连接器的重用
+
+eKuiper 支持通过 `connectionSelector` 配置项对连接器进行重用,用户只需一次定义即可在多个配置中重用,提升连接管理效率,简化配置流程。
+
+**配置**
+
+以 MQTT 数据源为例,您可首先在连接配置文件 `connections/connection.yaml` 中定义 MQTT 全局连接信息,例如  `mqtt.localConnection` 和 `mqtt.cloudConnection`。
+
+```yaml
+mqtt:
+  localConnection: #connection key
+    server: "tcp://127.0.0.1:1883"
+    username: ekuiper
+    password: password
+    #certificationPath: /var/kuiper/xyz-certificate.pem
+    #privateKeyPath: /var/kuiper/xyz-private.pem.ke
+    #insecureSkipVerify: false
+    #protocolVersion: 3
+    clientid: ekuiper
+  cloudConnection: #connection key
+    server: "tcp://broker.emqx.io:1883"
+    username: user1
+    password: password
+    #certificationPath: /var/kuiper/xyz-certificate.pem
+    #privateKeyPath: /var/kuiper/xyz-private.pem.ke
+    #insecureSkipVerify: false
+    #protocolVersion: 3
+```
+
+在配置 MQTT 源(`$ekuiper/etc/mqtt_source.yaml`)时,可通过 `connectionSelector` 引用以上连接配置,例如`demo_conf` 和 `demo2_conf` 都将引用 `mqtt.localConnection` 的连接配置。
+
+```yaml
+#Override the global configurations
+demo_conf: #Conf_key
+  qos: 0
+  connectionSelector: mqtt.localConnection
+  servers: [tcp://10.211.55.6:1883, tcp://127.0.0.1]
+
+#Override the global configurations
+demo2_conf: #Conf_key
+  qos: 0
+  connentionSelector: mqtt.localConnection
+  servers: [tcp://10.211.55.6:1883, tcp://127.0.0.1]
+```
+
+基于 `demo_conf` 和 `demo2_conf` 分别创建两个数据流 `demo` 和 `demo2`:
+
+```text
+demo (
+    ...
+  ) WITH (DATASOURCE="test/", FORMAT="JSON", CONF_KEY="demo_conf");
+
+demo2 (
+    ...
+  ) WITH (DATASOURCE="test2/", FORMAT="JSON", CONF_KEY="demo2_conf");
+
+```
+
+当相应的规则分别引用以上数据流时,规则之间的源部分将共享连接。在这里 `DATASOURCE` 对应 mqtt 订阅的 topic,配置项中的 `qos` 将用作订阅时的 `Qos`。在以上示例配置中,`demo` 以 Qos 0 订阅 topic `test/`,`demo2` 以 Qos 0 订阅 topic `test2/` 。
+
+::: tip
+
+对于MQTT源,如果两个流具有相同的 `DATASOURCE` 但 `qos` 值不同,则只有先启动的规则才会触发订阅。
+
+:::
+
+## 批量配置
+
+eKuiper 提供了 Memory、File、MQTT 等多种数据连接器。为进一步简化用户的配置流程,eKuiper 通过 REST API 引入了批量配置功能,支持用户同时导入或导出多个配置。
+
+示例
+
+```json
+{
+    "streams": { ... },
+    "tables": { ... },
+    "rules": { ... },
+    "nativePlugins": { ... },
+    "portablePlugins": { ... },
+    "sourceConfig": { ... },
+    "sinkConfig": { ... },
+    ...
+}
+```
+
+具体操作步骤,可参考 [数据导入导出管理](../api/restapi/data.md)。

+ 152 - 131
docs/zh_CN/guide/sources/builtin/edgex.md

@@ -1,200 +1,221 @@
-# EdgeX 源
+# EdgeX 数据
 
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 
-eKuiper 提供了内置的 EdgeX 源支持,它可以被用来订阅来自于 [EdgeX 消息总线](https://github.com/edgexfoundry/go-mod-messaging)的数据,并将数据放入 eKuiper 数据处理流水线中。
+eKuiper 内置支持 EdgeX 数据源,支持订阅来自于 [EdgeX 消息总线](https://github.com/edgexfoundry/go-mod-messaging)的数据,并将数据放入 eKuiper 数据处理流水线中。用户可直接通过 EdgeX 数据源消费 EdgeX 中的事件,[无需任何手动模式定义](#拓展阅读-edgex-中的流定义)。
 
-## EdgeX 流定义
+在 eKuiper 中,EdgeX 连接器可以作为源连接器(从 EdgeX 获取数据)或 [Sink 连接器](../../sinks/builtin/mqtt.md)(将数据发布到 EdgeX),本节重点介绍 EdgeX 源连接器。
 
-EdgeX 在 [readings](https://docs.edgexfoundry.org/2.0/microservices/core/data/Ch-CoreData/#events-and-readings) 已经定义了数据类型,因此在 eKuiper 中建议采用 schema-less 方式的 EdgeX 流式定义,如下所示。
+## Configurations
 
-```shell
-# cd $eKuiper_base
-# bin/kuiper CREATE STREAM demo'() with(format="json", datasource="demo" type="edgex")'
+eKuiper 连接器可以通过[环境变量](../../../configuration/configuration.md#environment-variable-syntax)、[REST API](../../../api/restapi/configKey.md) 或配置文件进行配置,本节将介绍配置文件的使用方法。
+
+EdgeX 源连接器的配置文件位于: `$ekuiper/etc/sources/edgex.yaml`,其中:
+
+- default:对应全局连接配置。
+- 自定义部分:适用于需要自定义连接参数的场景,该部分的配置将覆盖全局连接配置。
+- 连接器重用:eKuiper 还支持通过  [`connectionSelector`](../../connector.md#connection-selector)  配置项在不同的配置中复用某个连接配置。
+
+以下示例包括一个全局配置和自定义配置 `demo1`:
+
+```yaml
+#全局 Edgex 配置
+default:
+  protocol: tcp
+  server: localhost
+  port: 5573
+  topic: rules-events
+  messageType: event
+#  optional:
+#    ClientId: client1
+#    Username: user1
+#    Password: password
+
+#覆盖全局配置
+demo1: #Conf_key
+  protocol: tcp
+  server: 10.211.55.6
+  port: 5571
+  topic: rules-events
 ```
 
-EdgeX 源会试图取得某个字段的类型,
+## 全局配置
 
-- 如果在 reading 的值类型中可找到其数据类型,就将其转换为对应类型;
-- 如果在 reading 的值类型中可找不到到其数据类型,将保留原值;
-- 如果类型转换失败,该值将被**丢弃**,并在日志上打印一条告警消息;
+用户可在 `default` 部分指定全局设置。
 
-在 readings 中定义的数据类型,将被转换为 eKuiper 中相应支持的[数据类型](../../../sqls/streams.md)。
+### 连接相关配置
 
-### Boolean
+- `protocol`:连接到 EdgeX 消息总线的协议,缺省为 `tcp`
+- `server`:EdgeX 消息总线的地址,缺省为 `localhost`
+- `port`:EdgeX 消息总线的端口,缺省为 `5573`
 
-如果 `reading` 中  `ValueType` 的值为 `Bool` ,那么 eKuiper 会试着将其转换为 `boolean` 类型,以下的值将被转化为 `true`。
+### 连接重用
 
-- "1", "t", "T", "true", "TRUE", "True"
+- `connectionSelector`:重用 EdgeX 数据源连接,如下方配置示例中的 `edgex.redisMsgBus`。注意:连接配置文件位于 `connections/connection.yaml`。有关连接重用的详细解释,见[连接器的重用](../../connector.md#连接器的重用)。
 
-以下值将被转换为 `false`。
+  ```yaml
+  #全局 Edgex 配置
+  default:
+  protocol: tcp
+  server: localhost
+  port: 5573
+  connectionSelector: edgex.redisMsgBus
+  topic: rules-events
+  messageType: event
+  #  optional:
+  #    ClientId: client1
+  #    Username: user1
+  #    Password: password
+  ```
 
-- "0", "f", "F", "false", "FALSE", "False"
+   ::: tip
 
-### Bigint
+  指定 `connectionSelector` 参数后,所有关于连接的参数都会被忽略,包括 `protocol`、`server` 和 `port` 配置。本例中,`protocol: tcp | server: localhost | port: 5573`的值都将被忽略。
 
-如果 `reading` 中  `ValueType` 的值为 `INT8` , `INT16`, `INT32`,  `INT64` , `UINT8` , `UINT16` ,  `UINT32` , `UINT64` 那么 eKuiper 会试着将其转换为 `Bigint` 类型。
+   :::
 
-### Float
+### 主题和消息配置
 
-如果 `reading` 中  `ValueType` 的值为 `FLOAT32`, `FLOAT64` ,那么 eKuiper 会试着将其转换为 `Float` 类型。
+- `topic`:EdgeX 消息总线上监听的主题名称,缺省为 `rules-events`。用户可以直接连接到 EdgeX 消息总线上的主题也可以连接到 application service 暴露的主题。需要注意的是,两种主题的消息数据类型不同,需要设置正确的 messageType 类型。
 
-### String
+- `type`:EdgeX 消息总线类型,目前支持三种消息总线。如果指定的消息总线类型不支持,将使用缺省 `zero` 类型。
 
-如果 `reading` 中  `ValueType` 的值为 `String`,那么 eKuiper 会试着将其转换为 `String` 类型。
+  - `zero`:使用 ZeroMQ 类型的消息总线。
+  - `mqtt`:使用 MQTT 服务器作为消息总线,如选择 MQTT 总线类型,eKuiper 支持更多的 MQTT 配置项,具体请查看 [其他配置(MQTT 相关配置)](#其他配置-mqtt-相关配置)。
+  - `redis`:使用 Redis 服务器作为消息总线。使用 EdgeX docker compose 启动时,type 参数会默认设置为该类型。
 
-### Boolean 数组
+  EdgeX Levski 引入了两种信息消息总线类型,eKuiper 从 1.7.1 开始支持这两种新的类型,分别为
 
-EdgeX 中的 `Bool` 数组类型会被转换为 `boolean` 数组。
+  - `nats-jetstream`
+  - `nats-core`
 
-### Bigint 数组
+- `messageType`:EdgeX 消息模型类型。该参数支持两种类型:
+  
+  - `event`:如果连接到 EdgeX application service 的主题、则消息为 "event" 类型;消息将会解码为 `dtos.Event` 类型。该选项为默认值。
+  - `request`:如果直接连接到消息总线的主题,接收 device service 或者 core data 发出的数据,则消息类型为 "request"。消息将会解码为 `requests.AddEventRequest` 类型。
 
-EdgeX 中所有的 `INT8`,`INT16`,`INT32`,`INT64`,`UINT8`,`UINT16`,`UINT32`,`UINT64` 数组类型会被转换为 `Bigint` 数组。
+### 其他配置(MQTT 相关配置)
 
-### Float 数组
+如使用 MQTT 消息总线,eKuiper 还支持其他一些可选配置项。请注意,所有可选配置都应为**字符类型**,`KeepAlive: "5000"` ,有关各配置项的详细解释,可参考 MQTT 协议。
 
-EdgeX 中所有的 `FLOAT32`,`FLOAT64` 数组类型会被转换为 `Float` 数组。
+- `ClientId`
 
-## 全局配置
+- `Username`
+- `Password`
+- `Qos`
+- `KeepAlive`
+- `Retained`
+- `ConnectionPayload`
+- `CertFile`
+- `KeyFile`
+- `CertPEMBlock`
+- `KeyPEMBlock`
+- `SkipCertVerify`
 
-EdgeX 源配置文件为 `$ekuiper/etc/sources/edgex.yaml`,以下配置文件内容。
+## 自定义配置
+
+对于需要自定义某些连接参数的场景,eKuiper 支持用户创建自定义模块来实现全局配置的重载。
+
+**配置示例**
 
 ```yaml
-#Global Edgex configurations
-default:
+#覆盖全局配置
+demo1: #Conf_key
   protocol: tcp
-  server: localhost
-  port: 5573
+  server: 10.211.55.6
+  port: 5571
   topic: rules-events
-  messageType: event
-#  optional:
-#    ClientId: client1
-#    Username: user1
-#    Password: password
 ```
 
-用户可以在此指定全局的 EdgeX 配置。在 `default` 部分中指定的配置将作为所有 EdgeX 源的缺省配置
+定义  `demo1`  配置组后,如希望在创建流时使用此配置,可通过 `CONF_KEY` 选项并指定配置名称,此时,在自定义配置中定义的参数将覆盖 `default` 配置中的相应参数。详细步骤,可参考 [流语句](../../../sqls/streams.md)。
 
-## protocol
+**示例**
 
-连接到 EdgeX 消息总线的协议,缺省为 `tcp`
-
-## server
+```sql
+create stream demo1() WITH (FORMAT="JSON"、type="edgex"、CONF_KEY="demo1");
+```
 
-EdgeX 消息总线的地址,缺省为 `localhost`
+## 创建流类型源
 
-## port
+完成连接器的配置后,后续可通过创建流将其与 eKuiper 规则集成。EdgeX 源连接器可以作为[流类型](../../streams/overview.md)或[扫描表类型数据源](../../tables/scan.md)使用,本节将以流类型源为例进行说明。
 
-EdgeX 消息总线的端口,缺省为 `5573`
+### 通过 REST API 创建
 
-## connectionSelector
+REST API 为 eKuiper 提供了一种可编程的交互方式,适用于自动化或需要将 eKuiper 集成到其他系统中的场景。
 
-重用 EdgeX 源连接。连接配置信息位于 `connections/connection.yaml`。
+**示例**
 
-```yaml
-edgex:
-  redisMsgBus: #connection key
-    protocol: redis
-    server: 127.0.0.1
-    port: 6379
-    type: redis
-    #  Below is optional configurations settings for mqtt
-    #  type: mqtt
-    #  optional:
-    #    ClientId: client1
-    #    Username: user1
-    #    Password: password
-    #    Qos: 1
-    #    KeepAlive: 5000
-    #    Retained: true/false
-    #    ConnectionPayload:
-    #    CertFile:
-    #    KeyFile:
-    #    CertPEMBlock:
-    #    KeyPEMBlock:
-    #    SkipCertVerify: true/false
+```sql
+create stream demo1() WITH (FORMAT="JSON"、type="edgex"、CONF_KEY="demo1");
 ```
 
-对于 EdgeX 连接,这里有一个配置组。用户应该使用 `edgex.redisMsgBus` 来作为参数。举例如下:
+详细操作步骤及命令解释,可参考 [通过 REST API 进行流管理](../../../api/restapi/streams.md)。
 
-```yaml
-#Global Edgex configurations
-default:
-  protocol: tcp
-  server: localhost
-  port: 5573
-  connectionSelector: edgex.redisMsgBus
-  topic: rules-events
-  messageType: event
-```
+### 通过 CLI 创建
 
-*注意*: 相应配置组一旦指定 connectionSelector 参数,所有关于连接的参数都会被忽略. 上面例子中,`protocol: tcp | server: localhost | port: 5573` 会被忽略
+用户也可以通过命令行界面(CLI)直接访问 eKuiper。
 
-## topic
+1. 进入 eKuiper `bin` 目录:
 
-EdgeX 消息总线上监听的主题名称,缺省为 `rules-events`。用户可以直接连接到 EdgeX 消息总线上的主题也可以连接到 application service 暴露的主题。需要注意的是,两种主题的消息数据类型不同,需要设置正确的
-messageType 类型。
+   ```bash
+   cd path_to_eKuiper_directory/bin
+   ```
 
-## type
+2. 使用 `create` 命令创建规则,指定 EdgeX 连接器为数据源,例如:
 
-EdgeX 消息总线类型,目前支持三种消息总线。如果指定了错误的消息总线类型,那么会使用缺省 `zero` 类型。
+   ```bash
+   bin/kuiper CREATE STREAM demo'() with(format="json"、datasource="demo" type="edgex")'
+   ```
 
-- `zero`:使用 ZeroMQ 类型的消息总线
-- `mqtt`:使用 MQTT 服务器作为消息总线
-- `redis`: 使用 Redis 服务器作为消息总线。使用 EdgeX docker compose 启动时,type参数会默认设置为该类型。
+详细操作步骤及命令解释,可参考 [通过 CLI 进行流管理](../../../api/cli/streams.md)。
 
-EdgeX Levski 引入了两种信息消息总线类型,eKuiper 从 1.7.1 开始支持这两种新的类型,分别为
+### 拓展阅读:EdgeX 中的流定义
 
-- `nats-jetstream`
-- `nats-core`
+EdgeX 在 [reading objects](https://docs.edgexfoundry.org/2.0/microservices/core/data/Ch-CoreData/#events-and-readings) 已经定义了数据类型,因此在 eKuiper 中建议采用 [schema-less 方式](../../streams/overview.md#schema)的 EdgeX 流式定义,如下所示:
 
-### messageType
+```shell
+# cd $eKuiper_base
+# bin/kuiper CREATE STREAM demo'() with(format="json"、datasource="demo" type="edgex")'
+```
 
-EdgeX 消息模型类型。如果连接到 EdgeX application service 的 topic, 则消息为 "event" 类型。否则,如果直接连接到消息总线的 topic,接收到 device service 或者 core
-data 发出的数据,则消息类型为 "request"。该参数支持两种类型:
+### 自动数据类型转换
 
-- `event`: 消息将会解码为 `dtos.Event` 类型。该选项为默认值。
-- `request`: 消息将会解码为 `requests.AddEventRequest` 类型。
+eKuiper 在处理 EdgeX 事件时,会根据 EdgeX  `ValueType` 字段自动管理数据类型转换。
 
-## optional
+**数据转换原则:**
 
-如果使用了 MQTT 消息总线,还可以指定别的一些可选配置项。请注意,所有在可选的配置项里指定的值都必须为**<u>字符类型</u>**,因此这里出现的所有的配置应该是字符类型的 - 例如 `KeepAlive: "5000"`
-。以下为支持的可选的配置列表,您可以参考 MQTT 协议规范来获取更详尽的信息。
+- 如果在 reading 的值类型中可以找到支持的数据类型,执行数据类型转换;guas
+- 如果在 reading 的值类型中找不到支持的数据类型,将保留原值;
+- 如果类型转换失败,该值将被**丢弃**,并在日志上打印一条告警消息;
 
-- ClientId
+#### Boolean
 
-- Username
-- Password
-- Qos
-- KeepAlive
-- Retained
-- ConnectionPayload
-- CertFile
-- KeyFile
-- CertPEMBlock
-- KeyPEMBlock
-- SkipCertVerify
+如果 `reading` 中 `ValueType` 的值为 `Bool` ,那么 eKuiper 会试着将其转换为 `boolean` 类型:
 
-## 重载缺省设置
+- 转换为 `true`: "1"、"t"、"T"、"true"、"TRUE"、"True"
+- 转换为 `false`:"0"、"f"、"F"、"false"、"FALSE"、"False"
 
-在某些情况下,你可能想消费来自于多个主题的数据。eKuiper 支持指定别的配置,并且在创建流定义的时候使用 `CONF_KEY` 来指定新的配置。
+#### Bigint
 
-```yaml
-#覆盖全局配置
-demo1: #Conf_key
-  protocol: tcp
-  server: 10.211.55.6
-  port: 5571
-  topic: rules-events
-```
+如果 `reading` 中 `ValueType` 的值为 `INT8`、`INT16`、`INT32`、`INT64`、`UINT8`、`UINT16`、`UINT32`、`UINT64` 那么 eKuiper 会试着将其转换为 `Bigint` 类型。
 
-如果你有个特定的源需要覆盖缺省的设置,你可以定义一个自定义的配置段。在上面的例子中,我们创建了一个新的配置 `demo1`,然后你在创建流定义的时候可以使用选项 `CONF_KEY` 来使用新的配置 (参考 [流定义规范](../../../sqls/streams.md) 获取更多详细信息)。
+#### Float
 
-**例子**
+如果 `reading` 中 `ValueType` 的值为 `FLOAT32`、`FLOAT64` ,那么 eKuiper 会试着将其转换为 `Float` 类型。
 
-```sql
-create stream demo1() WITH (FORMAT="JSON", type="edgex", CONF_KEY="demo1");
-```
+#### String
+
+如果 `reading` 中 `ValueType` 的值为 `String`,那么 eKuiper 会试着将其转换为 `String` 类型。
+
+#### Boolean 数组
+
+EdgeX 中的 `Bool` 数组类型会被转换为 `boolean` 数组。
 
-在自定义的配置中,能够使用的配置项与 `default` 部分的是一样的,任何在自定义段中设置的值将覆盖 `default` 部分里的配置。
+#### Bigint 数组
+
+EdgeX 中所有的 `INT8`,`INT16`,`INT32`,`INT64`,`UINT8`,`UINT16`,`UINT32`,`UINT64` 数组类型会被转换为 `Bigint` 数组。
+
+#### Float 数组
+
+EdgeX 中所有的 `FLOAT32`,`FLOAT64` 数组类型会被转换为 `Float` 数组。

+ 147 - 31
docs/zh_CN/guide/sources/builtin/file.md

@@ -1,22 +1,89 @@
-## 文件源
+# 文件数据
 
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 
-eKuiper 提供了内置支持,可将文件内容读入 eKuiper 处理管道。 文件源通常用作[表格](../../../sqls/tables.md), 并且采用 create
-table 语句的默认类型。文件源也支持作为用作流,此时通常需要设置 `interval` 参数以定时拉取更新。
+eKuiper 内置支持文件数据源,可将文件内容读入 eKuiper 处理管道,适用于需要对数据进行批量处理或需要对文件进行实时处理的场景。
 
-```sql
-CREATE TABLE table1 (
-    name STRING,
-    size BIGINT,
-    id BIGINT
-) WITH (DATASOURCE="lookup.json", FORMAT="json", TYPE="file");
+eKuiper 支持  JSON、CSV 或以行分隔的文件:
+
+- JSON:标准 JSON 数组格式文件。
+- CSV:支持逗号或其他自定义分隔符的 CSV 文件。
+- lines:以行分隔的文件。
+
+**注意**:文件源支持监控文件或文件夹。如果被监控的位置是一个文件夹,那么该文件夹中的所有文件必须是同一类型。当监测一个文件夹时,它将按照文件名的字母顺序来读取文件。
+
+:::: tabs type:card
+
+::: tab JSON
+
+**描述**:标准 JSON 数组格式文件。
+
+**示例**
+
+```json
+[
+  {"id": 1, "name": "John Doe"},
+  {"id": 2, "name": "Jane Smith"}
+]
+```
+
+**注意**:如果文件格式是一个以行分隔的 JSON 字符串,则需要定义为 `lines` 格式。
+
+:::
+
+::: tab csv
+
+**描述**:包含逗号分隔符的(CSV)文件。
+
+**示例**
+
+```csv
+id,name,age
+1,John Doe,30
+2,Jane Smith,25
+```
+
+**自定义分隔符**:eKuiper 也支持自定义分隔符,如空格:
+
+```csv
+id name age
+1 John Doe 30
+2 Jane Smith 25
+```
+
+:::
+
+::: tab lines
+
+**描述**:以行分隔的文件。
+
+**示例**
+
+```text
+{"id": 1, "name": "John Doe"}
+{"id": 2, "name": "Jane Smith"}
 ```
 
-您可以使用 [cli](../../../api/cli/tables.md) 或 [rest api](../../../api/restapi/tables.md) 来管理表。
+**提示**:lines 文件类型可以与任何格式相结合。例如,如果你将格式设置为 protobuf,并且配置模式,它可以用来解析包含多个 Protobuf 编码行的数据
 
-文件源的配置文件是 */etc/sources/file.yaml* ,可以在其中指定文件的路径。
+:::
+
+::::
+
+::: tip
+
+在处理具有元数据或非标准内容的文件时,您可以利用 `ignoreStartLines` 和 `ignoreEndLines` 参数来删除非标准的开头和结尾的非标准部分,以便正确解析相关内容。
+
+:::
+
+## 配置
+
+eKuiper 连接器可以通过[环境变量](../../../configuration/configuration.md#environment-variable-syntax)、[REST API](../../../api/restapi/configKey.md) 或配置文件进行配置,本节将介绍配置文件的使用方法。
+
+文件数据源连接器的配置文件位于 `/etc/sources/file.yaml`。
+
+**示例**
 
 ```yaml
 default:
@@ -25,7 +92,7 @@ default:
   # 文件以 eKuiper 为根目录的目录或文件的绝对路径。
   # 请勿在此处包含文件名。文件名应在流数据源中定义
   path: data
-  # 读取文件的时间间隔,单位为ms。 如果只读取一次,则将其设置为 0
+  # 读取文件的时间间隔,单位为ms。如果只读取一次,则将其设置为 0
   interval: 0
   # 读取后,两条数据发送的间隔时间
   sendInterval: 0
@@ -46,29 +113,74 @@ default:
   ignoreStartLines: 0
   # 忽略结尾多少行的内容。最后的空行不计算在内。
   ignoreEndLines: 0
-  # 使用指定的压缩方法解压缩文件。现在支持`gzip`、`zstd` 方法。                                                                                                                                                                                                                                         |
+  # 使用指定的压缩方法解压缩文件。现在支持`gzip`、`zstd` 方法。
   decompression: ""
 ```
 
-### 文件源
+### 文件类型和路径
+
+- **`fileType`**:定义文件的类型,可选值为 `json`、`csv` 和 `lines`。
+- **`path`**:指定文件的目录,相对于 eKuiper 根目录的相对路径或绝对路径。注意:这里不要包含文件名,文件名应在流数据源中定义。
 
-文件源支持监控文件或文件夹。如果被监控的位置是一个文件夹,那么该文件夹中的所有文件必须是同一类型。当监测一个文件夹时,它将按照文件名的字母顺序来读取文件。
+### 读取和发送间隔
 
-支持的文件类型有:
+- **`interval`**:设置文件读取之间的间隔,单位为毫秒。如果设置为0,文件只读取一次。
+- **`sendInterval`**:读取后,两条数据发送的间隔时间,单位为毫秒。
 
-- json:标准的JSON数组格式文件。见[例子](https://github.com/lf-edge/ekuiper/tree/master/internal/io/file/test/test.json)。如果文件格式是一个以行分隔的JSON字符串,它需要以 `lines` 格式定义。
-- csv:支持逗号分隔的 csv 文件,也支持自定义分隔符。
-- lines:以行分隔的文件。每行的解码方法可以通过流定义中的 `format` 参数来定义。例如,对于一个按行分隔的 JSON 字符串文件,文件类型应设置为 `lines`,格式应设置为 `json`,表示单行的格式为 json。
+### 并行处理
 
-有些文件可能有大部分数据是标准格式,但在文件的开头和结尾行有一些元数据。用户可以使用 `ignoreStartLines` 和 `ignoreEndLines` 参数来删除非标准的开头和结尾的非标准部分,这样上述文件类型就可以被解析了
+- **`parallel`**:确定目录中的文件是否应并行读取。如果设置为 `true`,目录中的文件将并行读取。
 
-### 示例
+### 读后操作
 
-文件源涉及对文件内容的解析,同时解析格式与数据流中的格式定义相关。我们用一些例子来描述如何结合文件类型和格式设置来解析文件源。
+- `actionAfterRead`:确定读取文件后的操作:
+  - `0`:保留文件。
+  - `1`:删除文件。
+  - `2`:将文件移至`moveTo`指定的位置。
+- **`moveTo`**:指定读取后将文件移至的路径。仅在`actionAfterRead`设置为 `2` 时有效。
 
-#### 读取自定义分隔符的 CSV 文件
+### 文件内容配置 (CSV 格式)
 
-标准的 csv 文件,分隔符是一个逗号,但是有大量的文件使用类 csv 格式,但使用自定义的分隔符。另外,一些类 csv 的文件在第一行定义了列名,而不是数据,如下例所示。
+- **`hasHeader`**:指定文件是否有表头行。
+- **`columns`**:定义列名,特别适用于CSV文件。例如,`columns: [id, name]`。
+- **`ignoreStartLines`**:指定文件开始处要忽略的行数。空行将被忽略且不计算在内。
+- **`ignoreEndLines`**:指定文件末尾要忽略的行数。同样,空行将被忽略且不计算在内。
+
+### 解压缩
+
+- **`decompression`**:允许解压缩文件。目前支持 `gzip` 及 `zstd`。
+
+## 创建表式数据源
+
+完成连接器的配置后,后续可通过创建流将其与 eKuiper 规则集成。文件数据源连接器可以作为 [流式](../../streams/overview.md)或[扫描表类数据源](../../tables/scan.md)使用。当作为流式数据源时,此时通常需要设置 `interval` 参数以定时拉取更新。但文件源更常用作[表格](../../../sqls/tables.md), 并且采用 create table 语句的默认类型。
+
+您可通过 [REST API](../../../api/restapi/streams.md) 或 [CLI](../../../api/cli/streams.md) 工具在 eKuiper 中创建文件数据源。本节将以表类数据源为例进行说明。
+
+例如,要创建一个名为 `table1` 的表,其中包含三列(`name`、`size`和 `id`),并使用 `lookup.json` 文件作为数据源:
+
+```sql
+create table table1 (
+    name STRING,
+    size BIGINT,
+    id BIGINT
+) WITH (DATASOURCE="lookup.json", FORMAT="json", TYPE="file");
+```
+
+创建完成后,您可将其与 eKuiper 规则集成以处理数据。
+
+```sql
+CREATE RULE rule1 AS SELECT * FROM fileDemo WHERE temperature > 50 INTO mySink;
+```
+
+根据设定规则,我们将选择 `fileDemo` 数据流中所有温度超过 50 的数据,并将其发送到  `mySink`。
+
+## 教程:解析文件源
+
+文件源涉及对文件内容的解析,同时解析格式与数据流中的格式定义相关。本节将通过一些示例来描述如何结合文件类型和格式设置来解析文件源。
+
+### 读取自定义分隔符的 CSV 文件
+
+标准的 csv 文件会采用逗号作为分隔符,但也存在使用自定义分隔符的情况。此外,一些类 csv 的文件会在第一行定义列名,而非数据,如下例所示:
 
 ```csv
 id name age
@@ -76,7 +188,7 @@ id name age
 2 Jane 34
 ```
 
-该文件第一行为文件头,定义了文件的列名。读取这样的文件时,配置文件如下,需要指定文件有一个头。
+因此,我们需要进行如下配置,指定其类型并告知表头信息,在本例中,我们可按如下示例修改 `/etc/sources/file.yaml` 文件:
 
 ```yaml
 csv:
@@ -84,14 +196,18 @@ csv:
   hasHeader: true
 ```
 
-在流定义中,将流数据设置为 `DELIMITED` 格式,用 `DELIMITER` 参数指定分隔符为空格。
+以上配置表明文件是 `csv` 类型,并且有表头。
+
+在定义流时,需要采用 `DELIMITED`格式。`DELIMITER`参数支持我们指定自定义分隔符,即本例中的空格。
 
 ```SQL
 create
 stream cscFileDemo () WITH (FORMAT="DELIMITED", DATASOURCE="abc.csv", TYPE="file", DELIMITER=" ", CONF_KEY="csv"
 ```
 
-#### 读取多行 JSON 数据
+通过以上命令,我们创建了一个名为 `csvFileDemo` 的流,该流将从 `abc.csv` 文件中读取数据,预期分隔符为空格。
+
+### 读取多行 JSON 数据
 
 对于一个标准的 JSON 文件,整个文件应该是一个 JSON 对象或一个数组。在实践中,我们经常需要解析包含多个 JSON 对象的文件。这些文件实际上本身不是合法的 JSON 格式,但每行都是合法的 JSON 格式,可认为是多行JSON数据。
 
@@ -101,17 +217,17 @@ stream cscFileDemo () WITH (FORMAT="DELIMITED", DATASOURCE="abc.csv", TYPE="file
 {"id": 3, "name": "John Smith"}
 ```
 
-读取这种格式的文件时,配置中的文件类型设置为 `lines`。
+读取这种格式的文件时,应在 `/etc/sources/file.yaml`  文件中进行如下配置:
 
 ```yaml
 jsonlines:
   fileType: lines
 ```
 
-在流定义中,设置流数据为`JSON`格式。
+在定义流时,设置流数据为 `JSON`格式。
 
 ```SQL
-create stream linesFileDemo () WITH (FORMAT="JSON", TYPE="file", CONF_KEY="jsonlines"
+create stream linesFileDemo () WITH (FORMAT="JSON", TYPE="file", CONF_KEY="jsonlines")
 ```
 
-此外,lines 文件类型可以与任何格式相结合。例如,如果你将格式设置为 protobuf,并且配置模式,它可以用来解析包含多个 Protobuf 编码行的数据。
+此命令将创建一个名为 `linesFileDemo` 的流,并从源文件拉取以行分隔的 JSON 数据。

+ 99 - 69
docs/zh_CN/guide/sources/builtin/http_pull.md

@@ -1,9 +1,20 @@
-# HTTP 提取
+# HTTP Pull 数据
 
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 
-eKuiper 为提取 HTTP 源流提供了内置支持,该支持可从 HTTP 服务器代理提取消息并输入 eKuiper 处理管道。HTTP 提取源的配置文件位于 `etc/sources/httppull.yaml` 中。 以下是文件格式。
+eKuiper 内置支持 HTTP 数据源。通过 HTTP Pull 数据源连接器,eKuiper 可从外部 HTTP 服务器检索数据,并支持基于指定间隔或由特定条件触发拉取数据。
+
+## 配置
+
+eKuiper 连接器可以通过[环境变量](../../../configuration/configuration.md#environment-variable-syntax)、[REST API](../../../api/restapi/configKey.md) 或配置文件进行配置,本节将介绍配置文件的使用方法。
+
+HTTP Pull 源连接器的配置文件位于:`$ekuiper/etc/sources/http_pull.yaml`,其中:
+
+- default:对应全局连接配置。
+- 自定义部分:对于需要自定义某些连接参数的场景,该部分的配置将覆盖全局连接配置。
+
+以下示例包括一个全局配置和自定义配置 `application_conf`:
 
 ```yaml
 #全局 httppull 配置
@@ -21,7 +32,7 @@ default:
   incremental: false
   # 请求正文,例如'{"data": "data", "method": 1}'
   body: '{}'
-  # 正文类型, none|text|json|html|xml|javascript|form
+  # 正文类型, none、text、json、html、xml、javascript、form
   bodyType: json
   # 请求所需的HTTP标头
   headers:
@@ -55,118 +66,137 @@ application_conf: #Conf_key
   url: http://localhost:9090/pull
 ```
 
-## 全局HTTP提取配置
+## 全局配置
 
-用户可以在此处指定全局 HTTP 提取设置。 `default` 部分中指定的配置项将用作所有 HTTP 连接的默认设置。
+用户可在 `default` 部分指定全局设置。
 
-### url
+### **HTTP 请求配置**
 
-获取结果的 URL。
+- `url`:获取结果的 URL。
+- `method`:HTTP 方法,支持 post、get、put 和 delete。
+- `interval`:请求之间的间隔时间,单位为 ms。
+- `timeout`:HTTP 请求的超时时间,单位为 ms。
+- `body`:请求的正文,例如 `{"data": "data", "method": 1}`
+- `bodyType`:正文类型,可选值 none、text、json、html、xml、javascript、format.
+- `headers`:需要与 HTTP 请求一起发送的 HTTP 请求标头。
+- `responseType`:定义如何解析 HTTP 响应。目前支持两种方式:
+  - `code`:通过 HTTP 响应码判断响应状态。
+  - `body`:通过 HTTP 响应正文判断响应状态。要求响应正文为 JSON 格式且其中包含 code 字段。
 
-### method
+### 安全配置
 
-HTTP 方法,它可以是 post、get、put 和 delete。
+#### 证书路径
 
-### interval
+- `certificationPath`:  证书路径,示例值:`d3807d9fa5-certificate.pem`。可以是绝对路径,也可以是相对路径。如指定相对路径,那么父目录为执行 `kuiperd` 命令的路径,例如:
+  - 如果在 `/var/kuiper` 中运行 `bin/kuiperd` ,那么父目录为 `/var/kuiper`。
+  - 如果运行从`/var/kuiper/bin`中运行`./kuiperd`,那么父目录为 `/var/kuiper/bin`。
+- `privateKeyPath`:私钥路径,示例值:`d3807d9fa5-private.pem.key`。可以是绝对路径,也可以是相对路径,具体可参考 `certificationPath`。
+- `rootCaPath`:根证书路径。可以是绝对路径,也可以是相对路径。
+- `insecureSkipVerify`:是否跳过证书验证。如设置为 `true`,TLS 接受服务器提供的任何证书以及该证书中的任何主机名。注意:此时,TLS 容易受到中间人攻击。默认值:`false`。
 
-请求之间的间隔时间,单位为 ms。
+#### OAuth 认证
 
-### timeout
+OAuth 2.0 是一个授权协议,让 API 客户端有限度地访问网络服务器上的用户数据。oAuth 最常见的流程是授权代码,大多用于服务器端和移动网络应用。在这个流程中,用户使用他们的账户登录到网络应用中,认证码会返回给应用。之后,应用程序可以使用认证码来请求访问令牌,并可能在到期后通过刷新令牌来刷新令牌。
 
-http 请求的超时时间,单位为 ms
+以下配置假设已经获取认证码,用户只需指定令牌申请,该过程可能需要该认证码或只是密码(OAuth 的变体)
 
-### incremental
+`OAuth`:定义类 OAuth 的认证流程。其他的认证方式如 apikey 可以直接在 headers 设置密钥,不需要使用这个配置。
 
-如果将其设置为 true,则将与最后的结果进行比较; 如果两个请求的响应相同,则将跳过发送结果。
+- `access`
 
-### body
+  - `url`:获取访问码的网址,将始终使用 POST 方法访问。
 
-请求的正文, 例如 `{"data": "data", "method": 1}`
+  - `body`:获取访问令牌的请求主体。通常需要授权码。
 
-### bodyType
+  - `expire`:令牌的过期时间,单位:秒,允许使用模板,因此必须是字符串。
 
-正文类型,可以是 none|text|json|html|xml|javascript|form。
+- `refresh`
 
-### certificationPath
+  - `url`:刷新令牌的网址,将始终使用 POST 方法访问。
 
-证书路径。可以为绝对路径,也可以为相对路径。如果指定的是相对路径,那么父目录为执行 `kuiperd` 命令的路径。比如,如果你在 `/var/kuiper` 中运行 `bin/kuiperd` ,那么父目录为 `/var/kuiper`; 如果运行从`/var/kuiper/bin`中运行`./kuiperd`,那么父目录为 `/var/kuiper/bin`。 比如  `d3807d9fa5-certificate.pem`
+  - `headers`:用于刷新令牌的请求头。通常把令牌放在这里,用于授权
 
-### privateKeyPath
+  - `body`:刷新令牌的请求主体。当使用头文件来传递刷新令牌时,可能不需要配置此选项。
 
-私钥路径。可以为绝对路径,也可以为相对路径。更详细的信息,请参考 `certificationPath`,比如 `d3807d9fa5-private.pem.key`。
+### 数据处理配置
 
-### rootCaPath
+#### 增量数据处理
 
-根证书路径。可以为绝对路径,也可以为相对路径
+`incremental`:如设置为 `true`,则将与上次的结果进行比较;如果两次请求的响应相同,则将跳过发送结果
 
-### insecureSkipVerify
+#### 动态属性
 
-控制是否跳过证书认证。如果被设置为 `true`,那么跳过证书认证;否则进行证书验证。缺省为 `true`
+动态属性是指在运行时会动态更新的属性。您可以使用动态属性来指定 HTTP 请求的 URL、正文和标头。其语法基于[数据模板](../../sinks/data_template.md)格式的动态属性。
 
-### headers
+可使用的动态属性包括:
 
-需要与 HTTP 请求一起发送的 HTTP 请求标头。
+- `PullTime`:本次拉取的 int64 格式时间戳。
+- `LastPullTime`:上次拉取的 int64 格式时间戳。
 
-### 响应类型
+若目标 HTTP 服务支持过滤开始和结束时间,可以使用这两个属性来实现增量拉取。
 
-定义如何解析 HTTP 响应。目前支持两种方式:
+::: v-pre
 
-- code:通过 HTTP 响应码判断响应状态。
-- body:通过 HTTP 响应正文判断响应状态。要求响应正文为 JSON 格式且其中包含 code
- 字段。
+- 通过 URL 参数传递开始和结束时间:`http://localhost:9090/pull?start={{.LastPullTime}}&end={{.PullTime}}`.
+- 通过 body 参数传递开始和结束时间:{"start": {{.LastPullTime}}, "end": {{.PullTime}}`.
 
-### OAuth
+:::
 
-定义类 OAuth 的认证流程。其他的认证方式如 apikey 可以直接在 headers 设置密钥,不需要使用这个配置
+## 自定义配置
 
-OAuth 2.0 是一个授权协议,让 API 客户端有限度地访问网络服务器上的用户数据。oAuth 最常见的流程是授权代码,大多用于服务器端和移动网络应用。在这个流程中,用户使用他们的账户登录到网络应用中,认证码会返回给应用。之后,应用程序可以使用认证码来请求访问令牌,并可能在到期后通过刷新令牌来刷新令牌
+对于需要自定义某些连接参数的场景,eKuiper 支持用户创建自定义模块来实现全局配置的重载
 
-在这个配置中,我们假设认证码已经获取了,用户只需指定令牌申请的过程,该过程可能需要该认证码或只是密码(OAuth 的变体)。
+**配置示例**
 
-需要配置两个部分:用于获取访问代码的 access 配置和用于令牌刷新的 refresh 配置。其中,refresh 配置是可选的,只有存在单独的刷新流程时才需要配置。
+```yaml
+#覆盖全局配置
+application_conf: #Conf_key
+  incremental: true
+  url: http://localhost:9090/pull
+```
 
-#### access
+定义  `application_conf`  配置组后,如希望在创建流时使用此配置,可通过 `CONF_KEY` 选项并指定配置名称,此时,在自定义配置中定义的参数将覆盖 `default` 配置中的相应参数。详细步骤,可参考 [流语句](../../../sqls/streams.md)。
 
-- url:获取访问码的网址,总是使用POST方法访问。
-- body:获取访问令牌的请求主体。通常情况下,可在这里提供授权码。
-- expire:令牌的过期时间,时间单位是秒,允许使用模板,所以必须是一个字符串。
+**示例**
 
-#### refresh
+```json
+demo (
+    ...
+  ) WITH (DATASOURCE="test/", FORMAT="JSON", TYPE="httppull", KEY="USERID", CONF_KEY="application_conf");
+```
 
-- url:刷新令牌的网址,总是使用POST方式请求。
-- headers:用于刷新令牌的请求头。通常把令牌放在这里,用于授权。
-- body:刷新令牌的请求主体。当使用头文件来传递刷新令牌时,可能不需要配置此选项。
+## 创建流类型源
 
-## 动态属性
+完成连接器的配置后,后续可通过创建流将其与 eKuiper 规则集成。HTTP Pull 数据源连接器可以作为[流式](../../streams/overview.md)或[扫描表类数据源](../../tables/scan.md)使用,本节将以流类型源为例进行说明。
 
-动态属性是指在运行时会动态更新的属性。 您可以使用动态属性来指定 HTTP 请求的
-URL、正文和标头。其语法基于[数据模板](../../sinks/data_template.md)格式的动态属性。可使用的动态属性包括:
+您可通过 REST API 或 CLI 工具在 eKuiper 中创建 HTTP Pull 数据源。
 
-- PullTime: 本次拉取的 int64 格式时间戳。
-- LastPullTime: 上次拉取的 int64 格式时间戳。
+### 通过 REST API 创建
 
-若目标 HTTP 服务支持过滤开始和结束时间,可以使用这两个属性来实现增量拉取
+REST API 为 eKuiper 提供了一种可编程的交互方式,适用于自动化或需要将 eKuiper 集成到其他系统中的场景
 
-::: v-pre
+**示例**
+
+```sql
+{"sql":"create stream http_stream () WITH (FORMAT="json", TYPE="http_pull"}
+```
 
-- 目标 HTTP 服务通过 url 参数传递开始和结束时间,则可配置
-  URL,例如 `http://localhost:9090/pull?start={{.LastPullTime}}&end={{.PullTime}}` 。
-- 目标 HTTP 服务通过 body 参数传递开始和结束时间,则可配置
-  body,例如 `{"start": {{.LastPullTime}}, "end": {{.PullTime}}}`。
+详细操作步骤及命令解释,可参考 [通过 REST API 进行流管理](../../../api/restapi/streams.md)。
 
-:::
+### 通过 CLI 创建
 
-## 重载默认设置
+用户也可以通过命令行界面(CLI)直接访问 eKuiper。
 
-如果您有特定的连接需要重载默认设置,则可以创建一个自定义部分。 在上一个示例中,我们创建了一个名为 `application_conf` 的特定设置。
-然后,您可以在创建流定义时使用选项 `CONF_KEY` 指定配置(有关更多信息,请参见 [流规格](../../../sqls/streams.md))。
+1. 进入 eKuiper `bin` 目录:
 
-**样例**
+   ```bash
+   cd path_to_eKuiper_directory/bin
+   ```
 
-```text
-demo (
-    ...
-  ) WITH (DATASOURCE="test/", FORMAT="JSON", TYPE="httppull", KEY="USERID", CONF_KEY="application_conf");
-```
+2. 使用 `create` 命令创建规则,指定 HTTP Pull 数据源,如:
+
+   ```bash
+   bin/kuiper create stream http_stream '() WITH (FORMAT="json", TYPE="http_pull")'
+   ```
 
-这些特定设置所使用的配置键与 `default` 设置中的配置键相同,在特定设置中指定的任何值都将重载 `default` 部分中的值
+详细操作步骤及命令解释,可参考 [通过 CLI 进行流管理](../../../api/cli/streams.md)

+ 71 - 18
docs/zh_CN/guide/sources/builtin/http_push.md

@@ -1,15 +1,13 @@
-# HTTP push 
+# HTTP Push 数据
 
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 
-eKuiper 提供了内置的 HTTP 源,它作为一个 HTTP 服务器,可以接收来自 HTTP 客户端的消息。所有的 HTTP 推送源共用单一的全局 HTTP 数据服务器。每个源可以有自己的 URL,这样就可以支持多个端点。
+eKuiper 提供了内置的 HTTP 源。此时,eKuiper 将作为一个 HTTP 服务器来接收 HTTP 客户端的消息。所有的 HTTP 推送源共用单一的全局 HTTP 数据服务器。每个源可以有自己的 URL,这样就可以支持多个端点。
 
-## 配置
+eKuiper 连接器可以通过[环境变量](../../../configuration/configuration.md#environment-variable-syntax)、[REST API](../../../api/restapi/configKey.md) 或配置文件进行配置,本节将介绍配置文件的使用方法。
 
-配置分成两个部分:全局服务器配置和源配置。
-
-### 服务器配置
+## 服务器配置
 
 服务器配置在 `etc/kuiper.yaml` 中的 `source` 部分。
 
@@ -27,23 +25,20 @@ source:
 
 用户可以指定以下属性:
 
-- httpServerIp:用于绑定 http 数据服务器的IP。
-- httpServerPort:用于绑定 http 数据服务器的端口。
-- httpServerTls: http 服务器 TLS 的配置。
-
-一旦有任何需要 httppush 源的规则启动,全局服务器就会启动。一旦所有引用的规则都关闭,它就会关闭。
+- `httpServerIp`:用于绑定 HTTP 数据服务器的 IP。
+- `httpServerPort`:用于绑定 HTTP 数据服务器的端口。
+- `httpServerTls`:HTTP 服务器 TLS 的配置。
 
-### 源配置
+当任何需要 HTTP Push 源的规则被启动时,全局服务器的设置会初始化。所有关联的规则被关闭后,它就会终止。
 
-每个流可以配置它的 URL 端点和 http 请求方法。端点属性被映射到创建流语句中的 `datasource` 属性。
+## 数据源配置
 
-在以下示例中,源被绑定到 `/api/data` 端点。此时,在默认的服务器配置下,它将监听`http://localhost:10081/api/data` 。
+HTTP Push 源配置文件位于 `etc/sources/httppush.yaml`,其中:
 
-```sql
-CREATE STREAM httpDemo() WITH (DATASOURCE="/api/data", FORMAT="json", TYPE="httppush")
-```
+- default:对应全局连接配置。
+- 自定义部分:对于需要自定义某些连接参数的场景,该部分的配置将覆盖全局连接配置。
 
-HTTP 推送源的配置文件在 `etc/sources/httppush.yaml` 。目前仅一个属性 `method` ,用于配置 HTTP 监听的请求方法。
+以下示例包括一个全局配置和自定义配置 `application_conf`:
 
 ```yaml
 #Global httppush configurations
@@ -55,3 +50,61 @@ default:
 application_conf: #Conf_key
   server: "PUT"
 ```
+
+::: tip
+
+注意:目前只有 `method` 属性可用于配置要监听的 HTTP 方法。
+
+:::
+
+此外,每个[流](../../streams/overview.md)可以配置自己的 URL 端点和 HTTP 请求方法。端点属性被映射到创建流语句中的 `datasource` 属性。
+
+## 创建流数据源
+
+完成连接器的配置后,后续可通过创建流将其与 eKuiper 规则集成。HTTP Push 源连接器可以作为[流式](../../streams/overview.md)或[扫描表类数据源](../../tables/scan.md)使用,本节将以流类型源为例进行说明。
+
+您可通过 REST API 或 CLI 工具在 eKuiper 中创建 HTTP Push 数据源。
+
+### 通过 REST API 创建
+
+REST API 为 eKuiper 提供了一种可编程的交互方式,适用于自动化或需要将 eKuiper 集成到其他系统中的场景。
+
+**示例**
+
+```sql
+CREATE STREAM httpDemo() WITH (FORMAT="json", TYPE="httppush")
+```
+
+**使用自定义配置**
+
+您可以使用 `endpoint` 属性,该属性对应于流创建语句中的
+
+创建流时,您可通过 `datasource` 配置项对应  `endpoint` 属性,如下所示:
+
+**示例**
+
+```sql
+CREATE STREAM httpDemo() WITH (DATASOURCE="/api/data", FORMAT="json", TYPE="httppush")
+```
+
+在以上示例中,我们将源绑定到 `/api/data` 端点。因此,它将监听 `http://localhost:10081/api/data`。
+
+详细操作步骤及命令解释,可参考 [通过 REST API 进行流管理](../../../api/restapi/streams.md)。
+
+### 通过 CLI 创建
+
+用户也可以通过命令行界面(CLI)直接访问 eKuiper。
+
+1. 进入 eKuiper `bin` 目录:
+
+   ```bash
+   cd path_to_eKuiper_directory/bin
+   ```
+
+2. 使用 `create` 命令创建规则,指定 HTTP Push 数据源,如:
+
+   ```bash
+   bin/kuiper CREATE STREAM demo'() with(format="json", datasource="/api/data type="httppush")'
+   ```
+
+详细操作步骤及命令解释,可参考 [通过 CLI 进行流管理](../../../api/cli/streams.md)。

+ 52 - 19
docs/zh_CN/guide/sources/builtin/memory.md

@@ -1,41 +1,74 @@
-# 内存源
+# 内存数据
 
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 <span style="background:green;color:white">lookup table source</span>
 
-内存源通过主题消费由 [内存目标](../../sinks/builtin/memory.md) 生成的事件。该主题类似于 pubsub 主题,例如 mqtt,因此可能有多个内存目标发布到同一主题,也可能有多个内存源订阅同一主题。 内存动作的典型用途是形成[规则管道](../../rules/rule_pipeline.md)。内存动作和内存源之间的数据传输采用内部格式,不经过编解码以提高效率。因此,内存源的 `format` 属性会被忽略。
+内存源通过主题消费由 [内存 Sink](../../sinks/builtin/memory.md) 生成的事件,适用于需要快速数据检索而无需磁盘或外部服务读取开销的场景,它的典型使用场景是形成[规则管道](../../rules/rule_pipeline.md)。
 
-主题没有配置属性,由流数据源属性指定,如以下示例所示:
+使用内存数据源时,无需额外配置,支持作为流式数据源、扫描表数据源或查找表数据源来使用。
 
-```text
-CREATE STREAM table1 (
+## 创建流式数据源
+
+当作为[流数据源](../../streams/overview.md)时,内存连接器会持续从指定的内存主题中提取数据,因此非常适合实时数据处理。
+
+**示例**:
+
+```sql
+CREATE STREAM stream1 (
     name STRING,
     size BIGINT,
     id BIGINT
-) WITH (DATASOURCE="devices/result", TYPE="memory");
+) WITH (DATASOURCE="devices/result", FORMAT="json", TYPE="memory");
 ```
 
-## 主题通配符
+在此示例中,我们定义了一个内存流数据源,用于连续从 `devices/result` 内存主题中提取数据。
 
-内存源也支持主题通配符,与 mqtt 主题类似。 目前,支持两种通配符。
+## 创建扫描表数据源
 
-**+** : 单级通配符替换一个主题等级。
-**#**: 多级通配符涵盖多个主题级别,只能在结尾使用。
+在需要分析静态数据集时,内存源连接器可以作为[扫描表数据源](../../tables/scan.md)来使用。
 
-示例:
+**示例**
 
-1. `home/device1/+/sensor1`
-2. `home/device1/#`
+```sql
+CREATE TABLE memoryTableDemo () WITH (DATASOURCE="topicB", FORMAT="JSON", TYPE="memory");
+```
+
+在这个示例中,`memoryTableDemo` 数据源表可查询 `topicB` 内存主题下的 JSON 数据。
+
+## 创建查找表数据源
 
-## 查询表
+内存源支持用作查询表,此时,主要具备如下优势:
 
-内存源支持查询表。下面是一个针对内存主题 "topicName" 创建查询表的例子。注意,作为查询表使用时,`KEY` 属性是必须的,它将作为虚拟表的主键来加速查询。
+- **独立性**:内存查找表独立于任何规则操作。即使规则被修改或删除,内存查找表中的数据也不受影响。
+- **数据共享**:如果多个规则引用相同的表,或者存在具有相同主题/键对的多个内存表,则它们全部共享相同的数据集,确保了不同规则之间的一致性,简化了数据访问。
+- **与内存 Sink 集成**:内存查找表可通过与[可更新的内存 Sink](../../sinks/builtin/memory.md#updatable-sink) 集成,保证内容的实时性。
+- **规则管道**:内存查找表可以作为多个规则之间的桥梁,类似于规则管道的概念。它使一个流能够将历史数据存储在内存中,其他流可以访问和利用这些数据,因此适用于需要结合历史数据和实时数据进行决策的场景。
 
-```text
-CREATE TABLE alertTable() WITH (DATASOURCE="topicName", TYPE="memory", KIND="lookup", KEY="id")
+**示例:**
+
+```sql
+CREATE TABLE memoryLookupTableDemo () WITH (DATASOURCE="topicC", FORMAT="JSON", TYPE="memory");
 ```
 
-在创建一个内存查询表后,它将开始积累由键字段索引的内存主题的数据。它将一直独立于规则运行。每个主题和键对将有一个虚拟表的内存拷贝。所有引用同一表或具有相同主题/键对的内存表的规则将共享同一数据副本。
+注意,作为查询表使用时,还应配置 `KEY` 属性,它将作为虚拟表的主键来加速查询。创建完成后,内存查找表将开始从指定的内存主题累积数据,并通过  `KEY`  字段进行索引,允许快速检索。
+
+## 内存数据源中的主题
+
+内存数据源中的“主题”表示不同的内存数据通道。当定义流或表时,用户可以使用 `DATASOURCE` 属性来锁定希望访问的内存主题。
+
+### 主题通配符
+
+与 MQTT 主题类似,内存源也支持主题通配符:
+
+- **+** : 单级通配符替换一个主题等级。
+- **#**: 多级通配符涵盖多个主题级别,只能在结尾使用。
+
+示例:
+
+1. `home/device1/+/sensor1`
+2. `home/device1/#`
+
+## 通过内存源构建规则管道
 
-内存查询表可以像多个规则之间的管道一样使用,这与[规则管道](../../rules/rule_pipeline.md)的概念类似。它可以在内存中存储任何流类型的历史,以便其他流可以与之合作。通过与[可更新的内存动作](../../sinks/builtin/memory.md#更新)一起工作,表格内容可以被更新。
+内存源的典型用途在于构建[规则管道](../../rules/rule_pipeline.md)。这样的管道允许将多个规则链接起来,使得一个规则的输出成为另一个规则的输入。此外,内存动作和内存源之间的数据传输采用内部格式,不经过编解码以提高效率。因此,内存源的 `format` 属性会被忽略

+ 115 - 143
docs/zh_CN/guide/sources/builtin/mqtt.md

@@ -1,12 +1,26 @@
-# MQTT源
+# MQTT 数据
 
 <span style="background:green;color:white;">stream source</span>
 <span style="background:green;color:white">scan table source</span>
 
-eKuiper 为 MQTT 源流提供了内置支持,流可以订阅来自 MQTT 代理的消息并输入 eKuiper 处理管道。 MQTT 源的配置文件位于 `$ekuiper/etc/mqtt_source.yaml`。 以下是文件格式。
+MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在物联网设备之间进行可靠的消息传递。eKuiper 内置 MQTT 连接器,方便订阅来自 MQTT 代理的消息并输入 eKuiper 处理管道,实现对指定 MQTT 主题的实时数据处理。
+
+在 eKuiper 中,MQTT 连接器可以作为源连接器(从 MQTT 代理获取数据)或 [Sink 连接器](../../sinks/builtin/mqtt.md)(将数据发布到 MQTT 代理),本节重点介绍 MQTT 源连接器。
+
+## 配置
+
+eKuiper 连接器可以通过[环境变量](../../../configuration/configuration.md#environment-variable-syntax)、[REST API](../../../api/restapi/configKey.md) 或配置文件进行配置,本节将介绍配置文件的使用方法。
+
+MQTT 源连接器的配置文件位于:`$ekuiper/etc/mqtt_source.yaml`,其中:
+
+- default:对应全局连接配置。
+- 自定义部分:适用于需要自定义连接参数的场景,该部分的配置将覆盖全局连接配置。
+- 连接器重用:eKuiper 还支持通过  [`connectionSelector`](../../connector.md#connection-selector)  配置项在不同的配置中复用某个连接配置。
+
+以下示例包括一个全局配置和自定义配置 `demo_conf`:
 
 ```yaml
-#全局MQTT配置
+#全局 MQTT 配置
 default:
   qos: 1
   server: "tcp://127.0.0.1:1883"
@@ -14,199 +28,157 @@ default:
   #password: password
   #certificationPath: /var/kuiper/xyz-certificate.pem
   #privateKeyPath: /var/kuiper/xyz-private.pem.key
-  kubeedgeVersion: "1.0"
-  kubeedgeModelFile: "mqtt_model.json"
-  # 使用指定的压缩方法解压缩。现在支持`gzip`、`zstd` 。                                                                                                                                                                                                                                       
+  #rootCaPath: /var/kuiper/xyz-rootca.pem
+  #insecureSkipVerify: true
+  #connectionSelector: mqtt.mqtt_conf1
+  # 使用指定的压缩方法解压缩。现在支持`gzip`、`zstd`
   # decompression: ""
 
 
-#重载全局配置
-demo: #Conf_key
+#覆盖全局配置
+demo_conf: #Conf_key
   qos: 0
   server: "tcp://10.211.55.6:1883"
 ```
 
-## 全局 MQTT 配置
+## 全局配置
 
-用户可以在此处指定全局 MQTT 设置。`default` 部分中指定的配置项将用作所有MQTT 连接的默认设置。
+用户可在 `default` 部分指定全局设置。
 
-### qos
+### 连接相关配置
 
-默认订阅QoS级别。
+- `qos`:默认订阅 QoS 级别。
+- `server`:MQTT 服务器。
+- `username`:MQTT 连接用户名。
+- `password`:MQTT 连接密码。
+- `protocolVersion`:MQTT 协议版本。可选值:3.1 (MQTT 3) 或 3.1.1 (也被称为 MQTT 4)。如未指定,则将使用缺省值:3.1。
+- `clientid`:MQTT 连接的客户端 ID。如未指定,将使用 uuid。
 
-### server
+### 安全和认证配置
 
-MQTT 消息代理的服务器。
+- `certificationPath`:  证书路径,示例值:`d3807d9fa5-certificate.pem`。可以是绝对路径,也可以是相对路径。如指定相对路径,那么父目录为执行 `kuiperd` 命令的路径,例如:
+  - 如果在 `/var/kuiper` 中运行 `bin/kuiperd` ,那么父目录为 `/var/kuiper`。
+  - 如果运行从`/var/kuiper/bin`中运行`./kuiperd`,那么父目录为 `/var/kuiper/bin`。
+- `privateKeyPath`:私钥路径,示例值:`d3807d9fa5-private.pem.key`。可以是绝对路径,也可以是相对路径,具体可参考 `certificationPath`。
+- `rootCaPath`:根证书路径。可以是绝对路径,也可以是相对路径。
+- `insecureSkipVerify`:是否跳过证书验证。如设置为 `true`,TLS 接受服务器提供的任何证书以及该证书中的任何主机名。注意:此时,TLS 容易受到中间人攻击。默认值:`false`。
 
-### username
+### 连接重用
 
-MQTT 连接用户名。
+- `connectionSelector`: 重用 MQTT 数据源连接,如下方配置示例中的 `mqtt.localConnection`。注意:连接配置文件位于 `connections/connection.yaml`。有关连接重用的详细解释,见[连接器的重用](../../connector.md#连接器的重用)
 
-### password
-
-MQTT 连接密码。
-
-### decompression
-
-使用指定的压缩方法解压缩。现在支持 `gzip`、`zstd`。
-
-### protocolVersion
-
-MQTT 协议版本。3.1 (也被称为 MQTT 3) 或者 3.1.1 (也被称为 MQTT 4)。 如果未指定,缺省值为 3.1。
+  ```yaml
+  #全局 MQTT 连接
+  default:
+    qos: 1
+    server: "tcp://127.0.0.1:1883"
+    #username: user1
+    #password: password
+    #certificationPath: /var/kuiper/xyz-certificate.pem
+    #privateKeyPath: /var/kuiper/xyz-private.pem.key
+    connectionSelector: mqtt.localConnection
+  ```
 
-### clientid
+  ::: tip
 
-MQTT 连接的客户端 ID。 如果未指定,将使用一个 uuid
+  指定 `connectionSelector` 参数后,所有关于连接的参数都会被忽略,例如上例中的 `server:"tcp://127.0.0.1:1883"`
 
-### certificationPath
+  :::
 
-证书路径。可以为绝对路径,也可以为相对路径。如果指定的是相对路径,那么父目录为执行 `kuiperd` 命令的路径。比如,如果你在 `/var/kuiper` 中运行 `bin/kuiperd` ,那么父目录为 `/var/kuiper`; 如果运行从`/var/kuiper/bin`中运行`./kuiperd`,那么父目录为 `/var/kuiper/bin`。 比如  `d3807d9fa5-certificate.pem`。
+### **负载相关配置**
 
-### privateKeyPath
+- `decompression`:使用指定的压缩方法解压缩,支持 `gzip`、`zstd`。
+- `bufferLength`:指定最大缓存消息数目。该参数主要用于防止内存溢出。实际内存用量会根据当前缓存消息数目动态变化。增大该参数不会增加初始内存分配量,因此建议设为较大的数值。默认值为102400;如果每条消息为100字节,则默认情况下,缓存最大占用内存量为102400 * 100B ~= 10MB.
 
-私钥路径。可以为绝对路径,也可以为相对路径。更详细的信息,请参考 `certificationPath`,比如 `d3807d9fa5-private.pem.key`。
+### **KubeEdge 集成**
 
-### rootCaPath
+- `kubeedgeVersion`:KubeEdge 版本号,不同的版本号对应的文件内容不同。
 
-根证书路径。可以为绝对路径,也可以为相对路径。
+- `kubeedgeModelFile`:KubeEdge 模版文件名,文件路径为:`etc/sources`,样例格式如下:
 
-### insecureSkipVerify
+  ```yaml
+  {
+    "deviceModels": [{
+      "name": "device1",
+      "properties": [{
+        "name": "temperature",
+        "dataType": "int"
+      }, {
+        "name": "temperature-enable",
+        "dataType": "string"
+      }]
+    }]
+  }
+  ```
 
-如果 InsecureSkipVerify 设置为 true,TLS 接受服务器提供的任何证书以及该证书中的任何主机名。 在这种模式下,TLS容易受到中间人攻击。默认值为false。配置项只能用于 TLS 连接
+  其中,
 
-### connectionSelector
+  - `deviceModels.name`:设备名称,与订阅主题中的字段匹配,为第三和第四个“/”之间的内容。例如:$ke/events/device/device1/data/update,设备名称为 `device1`。
+  - `properties.name`:字段名称。
+  - `properties.dataType`:预期字段类型。
 
-重用 MQTT 源连接。连接配置信息位于 `connections/connection.yaml`.
+## 自定义配置
 
-```yaml
-mqtt:
-  localConnection: #connection key
-    server: "tcp://127.0.0.1:1883"
-    username: ekuiper
-    password: password
-    #certificationPath: /var/kuiper/xyz-certificate.pem
-    #privateKeyPath: /var/kuiper/xyz-private.pem.ke
-    #insecureSkipVerify: false
-    #protocolVersion: 3
-    clientid: ekuiper
-  cloudConnection: #connection key
-    server: "tcp://broker.emqx.io:1883"
-    username: user1
-    password: password
-    #certificationPath: /var/kuiper/xyz-certificate.pem
-    #privateKeyPath: /var/kuiper/xyz-private.pem.ke
-    #insecureSkipVerify: false
-    #protocolVersion: 3
-```
+对于需要自定义某些连接参数的场景,eKuiper 支持用户创建自定义模块来实现全局配置的重载。
 
-对于 MQTT 连接,这里有两个配置组。用户应该使用 `mqtt.localConnection` 或者 `mqtt.cloudConnection` 来作为参数。举例如下:
+**配置示例**
 
 ```yaml
-#Global MQTT configurations
-default:
-  qos: 1
-  server: "tcp://127.0.0.1:1883"
-  #username: user1
-  #password: password
-  #certificationPath: /var/kuiper/xyz-certificate.pem
-  #privateKeyPath: /var/kuiper/xyz-private.pem.key
-  connectionSelector: mqtt.localConnection
+#覆盖全局配置
+demo_conf: #Conf_key
+  qos: 0
+  server: "tcp://10.211.55.6:1883"
 ```
 
-*注意*: 相应配置组一旦指定 connectionSelector 参数,所有关于连接的参数都会被忽略. 上面例子中,``server: "tcp://127.0.0.1:1883"`` 会被忽略。
-
-### bufferLength
-
-指定最大缓存消息数目。该参数主要用于防止内存溢出。实际内存用量会根据当前缓存消息数目动态变化。增大该参数不会增加初始内存分配量,因此设置较大的数值是安全的。该参数默认值为102400;如果每条消息为100字节,则默认情况下,缓存最大占用内存量为102400 * 100B ~= 10MB.
-
-### kubeedgeVersion
-
-kubeedge 版本号,不同的版本号对应的文件内容不同。
-
-### kubeedgeModelFile
+定义  `demo_conf`  配置组后,如希望在创建流时使用此配置,可通过 `CONF_KEY` 选项并指定配置名称,此时,在自定义配置中定义的参数将覆盖 `default` 配置中的相应参数。详细步骤,可参考 [流语句](../../../sqls/streams.md)。
 
-kubeedge 模版文件名,文件指定放在 etc/sources 文件夹中,样例格式如下:
+**示例**
 
-```json
-{
-  "deviceModels": [{
-    "name": "device1",
-    "properties": [{
-      "name": "temperature",
-      "dataType": "int"
-    }, {
-      "name": "temperature-enable",
-      "dataType": "string"
-    }]
-  }]
-}
+```sql
+demo (
+    ...
+  ) WITH (DATASOURCE="test/", FORMAT="JSON", KEY="USERID", CONF_KEY="demo_conf");
 ```
 
-#### deviceModels.name
-
-设备名称,与订阅主题中的字段匹配,位于第三和第四个“/”之间的内容。例如:$ke/events/device/device1/data/update
-
-#### properties.name
-
-字段名称
+## 创建流类型源
 
-#### properties.dataType
+完成连接器的配置后,后续可通过创建流将其与 eKuiper 规则集成。MQTT 源连接器可以作为[流式](../../streams/overview.md)或[扫描表数据源](../../tables/scan.md)使用,本节将以流类型源为例进行说明。
 
-期望的字段类型
+您可通过 REST API 或 CLI 工具在 eKuiper 中创建 MQTT 数据源。
 
-## 重载默认设置
+### 通过 REST API 创建
 
-如果您有一个特定连接需要重载默认设置,则可以创建一个自定义模块。 在上一个示例中,我们创建一个名为 `demo` 的特定设置。 然后,您可以在创建流定义时使用选项 `CONF_KEY` 指定配置(有关更多信息,请参见 [stream specs](../../../sqls/streams.md) )
+REST API 为 eKuiper 提供了一种可编程的交互方式,适用于自动化或需要将 eKuiper 集成到其他系统中的场景
 
 **示例**
 
-```text
-demo (
-    ...
-  ) WITH (DATASOURCE="test/", FORMAT="JSON", KEY="USERID", CONF_KEY="demo");
+```sql
+{"sql":"create stream my_stream (id bigint, name string, score float) WITH ( datasource = \"topic/temperature\", FORMAT = \"json\", KEY = \"id\")"}
 ```
 
-这些特定设置使用的配置键与 `default` 设置中的配置键相同,在特定设置中指定的任何值都将覆盖 `default` 部分中的值。
-
-## 在多个配置块中引用同一个 connectionSelector
-
-如下所示,用户创建了两个配置项
+详细操作步骤及命令解释,可参考 [通过 REST API 进行流管理](../../../api/restapi/streams.md)。
 
-```yaml
-#Override the global configurations
-demo_conf: #Conf_key
-  qos: 0
-  connectionSelector: mqtt.localConnection
-  servers: [tcp://10.211.55.6:1883, tcp://127.0.0.1]
+### 通过 CLI 创建
 
-#Override the global configurations
-demo2_conf: #Conf_key
-  qos: 0
-  connentionSelector: mqtt.localConnection
-  servers: [tcp://10.211.55.6:1883, tcp://127.0.0.1]
-```
+用户也可以通过命令行界面(CLI)直接访问 eKuiper。
 
-基于以上配置,创建了两个数据流
+1. 进入 eKuiper `bin` 目录:
 
-```text
-demo (
-    ...
-  ) WITH (DATASOURCE="test/", FORMAT="JSON", CONF_KEY="demo_conf");
+   ```bash
+   cd path_to_eKuiper_directory/bin
+   ```
 
-demo2 (
-    ...
-  ) WITH (DATASOURCE="test2/", FORMAT="JSON", CONF_KEY="demo2_conf");
+2. 使用 `create` 命令创建规则,指定 MQTT 数据源,如:
 
-```
+   ```bash
+   bin/kuiper create stream my_stream '(id bigint, name string, score float) WITH ( datasource = "topic/temperature", FORMAT = "json", KEY = "id")'
+   ```
 
-当相应的规则分别引用以上数据流时,规则之间的源部分将共享连接。
-在这里 `DATASOURCE` 对应 mqtt 订阅的 topic,配置项中的 `qos` 将用作订阅时的 `Qos`.
-在这个例子中,`demo` 以 Qos 0 订阅 topic `test/`,`demo2` 以 Qos 0 订阅 topic `test2/`
-值得注意的是如果两个规则订阅的 `topic` 完全一样而 `Qos` 不同,那么只会订阅一次并以首先启动的规则订阅为准。
+详细操作步骤及命令解释,可参考 [通过 CLI 进行流管理](../../../api/cli/streams.md)。
 
 ## 迁移指南
 
-从 1.5.0 开始,eKuiper 将 mqtt 源地址配置从 `servers` 更改为 `server`,用户只能配置一个 mqtt 源地址而不是一个地址数组。
-使用之前版本并把 mqtt broker 作为数据源的用户,想要迁移到 1.5.0 或更高版本,需要确保 ``etc/mqtt_source.yaml`` 文件 ``server`` 的配置是正确的。
-使用环境变量配置 mqtt 源地址的用户需要成功更改配置,假设其地址为 ``tcp://broker.emqx.io:1883``。他们需要将环境变量 从
-``MQTT_SOURCE__DEFAULT__SERVERS=[tcp://broker.emqx.io:1883]`` 改为 ``MQTT_SOURCE__DEFAULT__SERVER="tcp://broker.emqx.io:1883"``
+从 eKuiper 1.5.0 开始,eKuiper 将 MQTT 源地址配置从 `servers` 更改为 `server`,即用户只能配置一个 MQTT 源地址而不是一个地址数组。对需要进行版本升级的用户:
+
+- 如希望通过配置文件配置,请确保 `etc/mqtt_source.yaml` 文件内的 `server` 已正确配置。
+- 如希望通过环境变量配置,例如针对 `tcp://broker.emqx.io:1883` 地址,配置命令应从 `MQTT_SOURCE__DEFAULT__SERVERS=[tcp://broker.emqx.io:1883]` 改为 `MQTT_SOURCE__DEFAULT__SERVER="tcp://broker.emqx.io:1883"`

Разница между файлами не показана из-за своего большого размера
+ 68 - 6
docs/zh_CN/guide/sources/builtin/neuron.md


+ 49 - 8
docs/zh_CN/guide/sources/builtin/redis.md

@@ -1,16 +1,14 @@
-## Redis 源
+## Redis 数据
 
 <span style="background:green;color:white">lookup table source</span>
 
-eKuiper 提供了对 redis 中数据查询的内置支持。请注意,现在 redis 源只能作为一个查询表使用。不支持流和扫描表
+eKuiper 内置支持 Redis 数据源,支持在 Redis 中进行数据查询。注意,现在 Redis 源只能作为一个[查询表](../../tables/lookup.md),不支持作为流和扫描表类数据源
 
-```text
-create table table1 () WITH (DATASOURCE="0", FORMAT="json", TYPE="redis", KIND="lookup");
-```
+## 配置
 
-您可以使用 [cli](../../../api/cli/tables.md) 或 [rest api](../../../api/restapi/tables.md) 来管理表
+在使用连接器连接 Redis 数据源之前,应先完成连接和其他相关参数配置。
 
-Redis 源的配置文件是 */etc/sources/redis.yaml* ,可以在其中指定 redis 的连接信息等属性。
+Redis 源的配置文件位于 */etc/sources/redis.yaml*,您可以在其中指定 Redis 的连接信息等属性。
 
 ```yaml
 default:
@@ -22,4 +20,47 @@ default:
 #  password: ""
 ```
 
-在这个 yaml 文件的配置中,表将引用的 redis 实例地址是127.0.0.1:6379。值的类型是 "string"。
+按照以上配置,eKuiper 将引用的 Redis 实例地址是127.0.0.1:6379。值的类型是 "string"。
+
+**配置项**
+
+- **`addr`**:指定 Redis 服务器的地址,格式为 `hostname:port` 或 `IP_address:port` 的字符串。
+- **`datatype`**:确定连接器应从 Redis 键中预期的数据类型。目前仅支持 `string` 和 `list`。
+- **`username`**:设置用于访问 Redis 服务器的用户名,只有在服务器启用身份验证时需要配置。
+- **`password`**:设置用于访问 Redis 服务器的密码,只有在服务器启用身份验证时需要配置。
+
+## 创建查询表数据源
+
+完成连接器的配置后,后续可通过创建流将其与 eKuiper 规则集成。我们可以定义一个流指定 Redis 的源、配置及数据格式。
+
+您可通过 REST API 或 CLI 工具进行配置。
+
+### 通过 REST API 创建
+
+REST API 为 eKuiper 提供了一种可编程的交互方式,适用于自动化或需要将 eKuiper 集成到其他系统中的场景。
+
+**示例**
+
+```sql
+create table table1 () WITH (DATASOURCE="0", FORMAT="json", TYPE="redis", KIND="lookup");
+```
+
+详细操作步骤及命令解释,可参考 [通过 REST API 进行流管理](../../../api/restapi/streams.md)。
+
+### 通过 CLI 创建
+
+用户也可以通过命令行界面(CLI)直接访问 eKuiper。
+
+1. 进入 eKuiper `bin` 目录:
+
+   ```bash
+   cd path_to_eKuiper_directory/bin
+   ```
+
+2. 使用 `create` 命令创建规则,指定 Redis 数据源,如:
+
+   ```bash
+   ./kuiper create stream neuron_stream ' WITH (DATASOURCE="0", FORMAT="json", TYPE="redis", KIND="lookup")'
+   ```
+
+详细操作步骤及命令解释,可参考 [通过 CLI 进行流管理](../../../api/cli/streams.md)。

+ 1 - 1
docs/zh_CN/integrations/kubeedge/overview.md

@@ -6,6 +6,6 @@
 
 作为一个兼容 kubernetes 的系统,KubeEdge 能够实现 eKuiper 实例的容器化部署。请查看 [installation](../../installation.md#通过-helm-安装k8sk3s)了解如何在类 k8s 系统中安装 eKuiper。
 
-KubeEdge 的边缘部分使用 MQTT 在 deviceTwin 和设备之间进行通信。为了在双 mqtt 或外部模式下使用KubeEdge,用户可以将 MQTT 消息服务器配置为边缘节点的 NanoMQ。
+KubeEdge 的边缘部分使用 MQTT 在 deviceTwin 和设备之间进行通信。为了在双 MQTT 或外部模式下使用KubeEdge,用户可以将 MQTT 消息服务器配置为边缘节点的 NanoMQ。
 
 eKuiper 可以从 MQTT 订阅设备数据,并为 KubeEdge 组件提供多功能的分析能力,以实现边缘的低延迟计算。

+ 9 - 0
docs/zh_CN/integrations/overview.md

@@ -0,0 +1,9 @@
+# 集成
+
+除丰富的数据处理功能外,eKuiper 还支持与各大平台的无缝集成。本章将介绍 eKuiper 与各生态系统的集成。
+
+- **[云边协同](./edge_cloud/overview.md)**:本节将介绍如何基于 eKuiper 等开源产品建立一个边云协作解决方案,应用于 IIoT(工业物联网)、IoV(车联网)和其他物联网应用,如智慧城市等。
+- **[Edgex Foundry](../edgex/edgex_rule_engine_tutorial.md)**:作为 Edgex Foundry 的实时流处理模块,eKuiper 与 Edgex Foundry  的集成进一步提升该物联网边缘计算开源平台的模块功能。
+- **[Neuron](./neuron/neuron_integration_tutorial.md)**:eKuiper 与 Neuron 的整合,使得用户无需配置即可在 eKuiper 中对 Neuron 采集到的数据进行计算;显著降低了边缘计算解决方案对资源的使用要求,降低使用门槛。
+- **[KubeEdge](./kubeedge/overview.md)**:KubeEdge 帮助实现 eKuiper 实例的容器化部署,eKuiper 可以从 MQTT 订阅设备数据,并为 KubeEdge 组件提供多功能的分析能力,以实现边缘的低延迟计算。
+- **[Integration with OpenYurt](deploy/openyurt_tutorial.md)**:本节将展示如何在 OpenYurt 集群中部署 eKuiper ,并利用 yurt 隧道实现从云到边缘的管理。

+ 7 - 0
docs/zh_CN/usecases/overview.md

@@ -0,0 +1,7 @@
+# 应用场景
+
+本章将介绍 eKuiper 在多个行业中的真实运用场景。
+
+- **[工业物联网(IIoT)](iiot.md)**:在全球工业转型的新浪潮中,智能制造获得了巨大的发展机遇。作为一个轻量级的流处理引擎,eKuiper 可以部署在靠近数据源的边缘侧,做实时分析和智能决策。
+- **[车联网(IoV)](iov.md)**:随着车联网和 5G 技术的融合以及车辆智能化的发展,车联网的数据采集需求呈爆发式增长。基于大量的车联网用户案例和经验,EMQ 推出了基于 eKuiper 和 QUIC 协议的车云系统解决方案,实现了车联网数据采集的易部署性和可移植性。
+- **[公共数据分析](public_data_analysis.md)**:在大数据时代下,有许多随处可见的公共数据分享平台,借助 eKuiper,我们可以从中清晰地抽取有价值的信息。