This is an automated email from the ASF dual-hosted git repository.
davidzollo pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 582e47e671 [Docs][Connector-V2] Improve Greenplum Mqtt and SqlServer
connector docs (#11798)
582e47e671 is described below
commit 582e47e671b5b9fa83a570cd820e467de36373c6
Author: Daniel Carter <[email protected]>
AuthorDate: Fri Aug 14 17:02:56 2026 +0800
[Docs][Connector-V2] Improve Greenplum Mqtt and SqlServer connector docs
(#11798)
Co-authored-by: DanielCarter-stack
<[email protected]>
---
docs/zh/connectors/sink/Greenplum.md | 65 ++++++++-
docs/zh/connectors/source/Mqtt.md | 183 +++++++++++-------------
docs/zh/connectors/source/SqlServer.md | 253 ++++++++++++++++++---------------
3 files changed, 289 insertions(+), 212 deletions(-)
diff --git a/docs/zh/connectors/sink/Greenplum.md
b/docs/zh/connectors/sink/Greenplum.md
index 3e99f9ee21..3d82083c9e 100644
--- a/docs/zh/connectors/sink/Greenplum.md
+++ b/docs/zh/connectors/sink/Greenplum.md
@@ -26,10 +26,11 @@ import ChangeLog from '../changelog/connector-jdbc.md';
> 1. 使用 `org.postgresql.Driver` 时,请确保 [PostgreSQL JDBC
> 驱动](https://mvnrepository.com/artifact/org.postgresql/postgresql) 已放到
> `${SEATUNNEL_HOME}/lib/`。
> 2. 使用 `com.pivotal.jdbc.GreenplumDriver` 时,请自行下载 Greenplum JDBC 驱动,并放到
> `${SEATUNNEL_HOME}/lib/`。
-## 关键特性
+## 主要特性
- [ ] [精确一次](../../introduction/concepts/connector-v2-features.md)
- [ ] [变更数据捕获](../../introduction/concepts/connector-v2-features.md)
+- [x] [支持多表写入](../../introduction/concepts/connector-v2-features.md)
- [ ] [定时刷新](../../introduction/concepts/connector-v2-features.md)
:::tip
@@ -45,9 +46,28 @@ Greenplum Sink 不支持精确一次语义,因为 Greenplum 不支持 XA 事
| 使用 PostgreSQL 驱动连接 Greenplum | `org.postgresql.Driver` |
`jdbc:postgresql://localhost:5432/testdb` |
[下载](https://mvnrepository.com/artifact/org.postgresql/postgresql) |
| 使用 Greenplum 原生驱动连接 Greenplum | `com.pivotal.jdbc.GreenplumDriver` |
`jdbc:pivotal:greenplum://localhost:5432;DatabaseName=testdb` | 从 Greenplum 获取 |
+## 数据类型映射
+
+Greenplum 沿用 PostgreSQL JDBC 驱动映射。下表列出常用类型对照:
+
+| Greenplum 数据类型 | SeaTunnel 数据类型 |
+|--------------------|--------------------|
+| BOOLEAN | BOOLEAN |
+| SMALLINT / INT2 | SMALLINT |
+| INT / INT4 / SERIAL | INT |
+| BIGINT / INT8 / BIGSERIAL | BIGINT |
+| NUMERIC(p, s) / DECIMAL(p, s) / MONEY | DECIMAL(p, s) |
+| REAL / FLOAT4 | FLOAT |
+| DOUBLE PRECISION / FLOAT8 | DOUBLE |
+| CHAR / VARCHAR / TEXT / JSON / JSONB | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| TIMESTAMP / TIMESTAMPTZ | TIMESTAMP |
+| BYTEA | BYTES |
+
## 选项
-这里只列出 Greenplum 常用配置。其他 JDBC Sink 配置,例如
`batch_size`、`max_retries`、`generate_sink_sql`、`database`、`table`、`primary_keys`
和 `properties`,继承自 [Jdbc Sink](Jdbc.md)。
+这里只列出 Greenplum 常用配置。其他 JDBC Sink 配置,例如
`batch_size`、`max_retries`、`generate_sink_sql`、`database`、`table`、`primary_keys`、`connection_check_timeout_sec`、`max_commit_attempts`
等,继承自 [Jdbc Sink](Jdbc.md)。
| 名称 | 类型 | 是否必填 | 默认值 | 描述 |
|------|------|----------|--------|------|
@@ -61,12 +81,19 @@ Greenplum Sink 不支持精确一次语义,因为 Greenplum 不支持 XA 事
| generate_sink_sql | Boolean | 否 | false | 是否根据 `database` 和 `table` 自动生成插入
SQL。 |
| database | String | 否 | - | `generate_sink_sql = true` 时使用的数据库名。 |
| table | String | 否 | - | `generate_sink_sql = true` 时使用的目标表名。 |
+| primary_keys | Array | 否 | - | 自动生成 SQL 时用于 upsert 语义的主键字段列表。 |
+| connection_check_timeout_sec | Int | 否 | 30 | 验证数据库连接操作的超时时间(秒)。 |
+| max_commit_attempts | Int | 否 | 3 | 事务提交失败时的最大重试次数。 |
+| transaction_timeout_sec | Int | 否 | -1 | 事务超时时间(秒)。`-1` 表示无限制。 |
+| enable_upsert | Boolean | 否 | true | 是否启用基于主键的 upsert 写入。 |
| common-options | | 否 | - | Sink 插件通用参数,请参考 [Sink
通用选项](../common-options/sink-common-options.md)。 |
:::tip
出于许可证原因,SeaTunnel 不内置 Greenplum 原生 JDBC 驱动。如果使用
`com.pivotal.jdbc.GreenplumDriver`,请在运行任务前将 `greenplum-xxx.jar` 复制到对应引擎的依赖目录。
+Greenplum 不支持 XA 事务,因此 Sink 端无法保证精确一次语义。如果你需要端到端一致,请结合外部存储(例如
Kafka、Hudi)使用幂等批写。
+
:::
## 任务示例
@@ -149,6 +176,40 @@ sink {
}
```
+### CDC 数据流写入
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 10000
+}
+
+source {
+ MySQL-CDC {
+ username = "cdc_user"
+ password = "cdc_pass"
+ table-list = ["cdc_test.orders"]
+ base-url = "jdbc:mysql://localhost:3306/cdc_test"
+ startup.mode = "initial"
+ }
+}
+
+sink {
+ Jdbc {
+ driver = "org.postgresql.Driver"
+ url = "jdbc:postgresql://localhost:5432/testdb"
+ username = "tester"
+ password = "pivotal"
+ generate_sink_sql = true
+ database = "testdb"
+ table = "orders"
+ primary_keys = ["id"]
+ enable_upsert = true
+ }
+}
+```
+
## 变更日志
<ChangeLog />
diff --git a/docs/zh/connectors/source/Mqtt.md
b/docs/zh/connectors/source/Mqtt.md
index f6624aa725..b3b129a9e6 100644
--- a/docs/zh/connectors/source/Mqtt.md
+++ b/docs/zh/connectors/source/Mqtt.md
@@ -37,104 +37,29 @@ import ChangeLog from '../changelog/connector-mqtt.md';
## 选项
-| 参数名 | 类型 | 必须 | 默认值 |
-|-------------------|---------|----|------|
-| url | string | 是 | - |
-| topic | string | 是 | - |
-| schema | config | 是 | - |
-| username | string | 否 | - |
-| password | string | 否 | - |
-| qos | int | 否 | 1 |
-| format | string | 否 | json |
-| field_delimiter | string | 否 | , |
-| client_id | string | 否 | - |
-| clean_session | boolean | 否 | true |
-| connection_timeout | int | 否 | 30 |
-| keep_alive_interval | int | 否 | 60 |
-| reconnect_timeout | int | 否 | 120 |
-| max_queue_size | int | 否 | 1000 |
-| common-options | | 否 | - |
+| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
+|--------|------|----------|--------|------|
+| url | String | 是 | - | MQTT broker 连接 URL,必须包含协议、主机和端口,例如
`tcp://broker.example.com:1883`。MQTT over TLS/SSL 请使用
`ssl://broker.example.com:8883`。 |
+| topic | String | 是 | - | 要订阅消息的 MQTT topic,例如 `iot/sensors/temperature`。 |
+| schema | Config | 是 | - | 上游数据的 schema 字段,详见 [Schema
特性](../../introduction/concepts/schema-feature.md)。 |
+| username | String | 否 | - | MQTT broker 认证用户名,匿名访问时可不填。 |
+| password | String | 否 | - | MQTT broker 认证密码,匿名访问时可不填。 |
+| qos | Int | 否 | 1 | 订阅 topic 时使用的 MQTT QoS 等级。支持 `0`(QoS 0)或 `1`(QoS
1)。该设置只控制 MQTT broker 和 client 之间的交付,不提供 SeaTunnel 端到端保证。 |
+| format | String | 否 | json | 输入消息的反序列化格式。支持 `json`(将每条消息反序列化为 JSON 对象)或
`text`(按 `field_delimiter` 切分为纯文本)。 |
+| field_delimiter | String | 否 | `,` | 当 `format=text` 时使用的字段分隔符,例如
`,`、`\|`、`\t`。 |
+| client_id | String | 否 | - | MQTT client id。当 `clean_session=true`
且未配置该选项时,连接器会生成随机 client id。`clean_session=false` 时必须配置稳定的 `client_id`。 |
+| clean_session | Boolean | 否 | true | 是否使用 clean MQTT session。`true` 时 broker
丢弃之前的会话状态;`false` 时 broker 可以保留会话状态和订阅,需要稳定的 `client_id`。 |
+| connection_timeout | Int | 否 | 30 | MQTT 连接建立超时时间,单位为秒。 |
+| keep_alive_interval | Int | 否 | 60 | MQTT keep alive 间隔,单位为秒。 |
+| reconnect_timeout | Int | 否 | 120 | 等待 MQTT 自动重连的最长时间,单位为秒。如果 MQTT
客户端断开连接的时间超过该超时时间,源任务会失败,避免无限期静默等待。 |
+| max_queue_size | Int | 否 | 1000 | 反序列化之前在内存中缓存的 MQTT 消息最大数量。 |
+| common-options | | 否 | - | 源插件通用参数,详情请参考
[源通用选项](../common-options/source-common-options.md)。 |
+
+:::tip
+
+该连接器当前只支持单个 topic 订阅,多 topic 拆分请使用多个 MQTT source。MQTT 5.0 特性(如共享订阅、消息属性)暂未启用。
-### url [string]
-
-MQTT broker 连接 URL。必须包含协议、主机和端口。
-
-示例:`tcp://broker.example.com:1883`
-
-### topic [string]
-
-要订阅消息的 MQTT topic。
-
-示例:`iot/sensors/temperature`
-
-### schema [config]
-
-上游数据的 schema 字段。更多详情请参考 [Schema
特性](../../introduction/concepts/schema-feature.md)。
-
-### username [string]
-
-MQTT broker 认证用户名。匿名访问时可以不配置。
-
-### password [string]
-
-MQTT broker 认证密码。匿名访问时可以不配置。
-
-### qos [int]
-
-订阅 topic 时使用的 MQTT Quality of Service 等级。
-
-该设置只控制 MQTT broker 和 MQTT client 之间的交付,不提供 SeaTunnel 端到端交付保证。
-
-支持的值:
-
-- `0` — MQTT QoS 0
-- `1` — MQTT QoS 1
-
-### format [string]
-
-输入消息的反序列化格式。支持的值:
-
-- `json` — 将每条消息反序列化为 JSON 对象(默认)
-- `text` — 将每条消息按分隔符反序列化为纯文本(分隔符由 `field_delimiter` 控制)
-
-### field_delimiter [string]
-
-当 `format` 设置为 `text` 时使用的字段分隔符。默认值为 `,`。
-
-示例:`,`, `|`, `\t`
-
-### client_id [string]
-
-MQTT client id。当 `clean_session=true` 且未配置该选项时,连接器会生成随机 client id。
-
-当 `clean_session=false` 时必须配置该选项,因为 MQTT 持久会话需要稳定的 client id。
-
-### clean_session [boolean]
-
-是否使用 clean MQTT session。默认值为 `true`。
-
-- `true` — broker 丢弃之前的会话状态,适合无状态运行。
-- `false` — broker 可以保留会话状态,包括订阅信息。需要稳定的 `client_id`。
-
-### connection_timeout [int]
-
-MQTT 连接建立超时时间,单位为秒。
-
-### keep_alive_interval [int]
-
-MQTT keep alive 间隔,单位为秒。
-
-### reconnect_timeout [int]
-
-等待 MQTT 自动重连的最长时间,单位为秒。如果 MQTT 客户端断开连接的时间超过该超时时间,`pollNext()`
会使源任务失败,避免无限期静默等待。
-
-### max_queue_size [int]
-
-反序列化之前在内存中缓存的 MQTT 消息最大数量。
-
-### common options
-
-源插件通用参数,详情请参考 [源通用选项](../common-options/source-common-options.md)。
+:::
## 示例
@@ -200,6 +125,70 @@ sink {
}
```
+### TLS/SSL 接入
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+
+source {
+ MQTT {
+ url = "ssl://broker.example.com:8883"
+ topic = "factory/line-1/status"
+ username = "seatunnel"
+ password = "broker-token"
+ client_id = "seatunnel-mqtt-tls"
+ qos = 1
+ connection_timeout = 30
+ keep_alive_interval = 60
+ reconnect_timeout = 180
+ format = "json"
+ schema = {
+ fields {
+ device_id = string
+ status = string
+ ts = bigint
+ }
+ }
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### 文本分隔源
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+
+source {
+ MQTT {
+ url = "tcp://broker.example.com:1883"
+ topic = "factory/line-2/log"
+ format = "text"
+ field_delimiter = "|"
+ schema = {
+ fields {
+ device_id = string
+ level = string
+ message = string
+ }
+ }
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
## 变更日志
<ChangeLog />
diff --git a/docs/zh/connectors/source/SqlServer.md
b/docs/zh/connectors/source/SqlServer.md
index e7c781b95d..6c13959aec 100644
--- a/docs/zh/connectors/source/SqlServer.md
+++ b/docs/zh/connectors/source/SqlServer.md
@@ -38,105 +38,106 @@ import ChangeLog from '../changelog/connector-jdbc.md';
## 描述
-通过 JDBC 读取外部数据源数据。
+通过 JDBC 读取外部数据源数据。SQL Server 的更多通用选项请参考 [Jdbc 连接器](Jdbc.md)。
## 支持的数据源信息
-| 数据源 | 支持版本 | 驱动 |
url | maven
|
-|------------|-------------------------|----------------------------------------------|---------------------------------|-----------------------------------------------------------------------------------|
-| SQL Server | 支持版本 >= 2008 |
com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433
| [下载](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) |
+| 数据源 | 支持版本 | 驱动 | url | maven |
+|--------|----------|------|-----|-------|
+| SQL Server | 支持版本 >= 2008 | `com.microsoft.sqlserver.jdbc.SQLServerDriver` |
`jdbc:sqlserver://localhost:1433` |
[下载](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) |
## 数据库依赖
-> 请下载对应 'Maven' 的支持列表,并将其复制到 '$SEATUNNEL_HOME/plugins/jdbc/lib/' 工作目录<br/>
-> 例如 SQL Server 数据源:cp mssql-jdbc-xxx.jar $SEATUNNEL_HOME/plugins/jdbc/lib/
+> 请下载对应 'Maven' 的支持列表,并将其复制到 `$SEATUNNEL_HOME/plugins/jdbc/lib/` 工作目录。<br/>
+> 例如 SQL Server 数据源:`cp mssql-jdbc-xxx.jar $SEATUNNEL_HOME/plugins/jdbc/lib/`
## 数据类型映射
-| SQLserver 数据类型 | Seatunnel
数据类型 |
-|----------------------------------------------------------------------|---------------------|
-| BIT |
BOOLEAN |
-| TINYINT<br/>SMALLINT |
SMALLINT |
-| INTEGER<br/>INT | INT
|
-| BIGINT |
BIGINT |
-| NUMERIC(p,s)<br/>DECIMAL(p,s)<br/>MONEY<br/>SMALLMONEY |
DECIMAL(p,s) |
-| FLOAT(1~24)<br/>REAL | FLOAT
|
-| DOUBLE<br/>FLOAT(>24) |
DOUBLE |
-| CHAR<br/>NCHAR<br/>VARCHAR<br/>NTEXT<br/>NVARCHAR<br/>TEXT<br/>XML |
STRING |
-| DATE | DATE
|
-| TIME(s) |
TIME(s) |
-| DATETIME(s)<br/>DATETIME2(s)<br/>DATETIMEOFFSET(s)<br/>SMALLDATETIME |
TIMESTAMP(s) |
-| BINARY<br/>VARBINARY<br/>IMAGE | BYTES
|
+| SQL Server 数据类型 | SeaTunnel 数据类型 |
+|---------------------|---------------------|
+| BIT | BOOLEAN |
+| TINYINT / SMALLINT | SMALLINT |
+| INTEGER / INT | INT |
+| BIGINT | BIGINT |
+| NUMERIC(p,s) / DECIMAL(p,s) / MONEY / SMALLMONEY | DECIMAL(p,s) |
+| FLOAT(1~24) / REAL | FLOAT |
+| DOUBLE / FLOAT(>24) | DOUBLE |
+| CHAR / NCHAR / VARCHAR / NTEXT / NVARCHAR / TEXT / XML | STRING |
+| DATE | DATE |
+| TIME(s) | TIME(s) |
+| DATETIME / DATETIME2 / DATETIMEOFFSET / SMALLDATETIME | TIMESTAMP(s) |
+| BINARY / VARBINARY / IMAGE | BYTES |
## 数据源参数
-| 名称 | 类型 | 是否必填 | 默认值 | 描述
|
-| ------------------------------------------ | ------- | -------- |
--------------- |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-| url | String | 是 | -
| JDBC 连接的 URL。参见示例:jdbc:sqlserver://127.0.0.1:1434;database=TestDB
|
-| driver | String | 是 | -
| 用于连接远程数据源的 jdbc 类名,<br/>如果使用 SQLserver,值为
`com.microsoft.sqlserver.jdbc.SQLServerDriver`。
|
-| username | String | 否 | -
| 连接实例的用户名
|
-| password | String | 否 | -
| 连接实例的密码
|
-| query | String | 否 | -
| 查询语句。当未配置 `table_path` 和 `table_list` 时必填。
|
-| connection_check_timeout_sec | Int | 否 | 30
| 等待用于验证连接的数据库操作完成的时间(秒)
|
-| partition_column | String | 否 | -
| 用于并行度分区的列名,仅支持数值类型。
|
-| partition_lower_bound | Long | 否 | -
| partition_column 扫描的最小值,如果未设置,SeaTunnel 将查询数据库获取最小值。
|
-| partition_upper_bound | Long | 否 | -
| partition_column 扫描的最大值,如果未设置,SeaTunnel 将查询数据库获取最大值。
|
-| partition_num | Int | 否 | job
parallelism | 分区数量,仅支持正整数。默认值为作业并行度
|
-| fetch_size | Int | 否 | 0
|
对于返回大量对象的查询,你可以配置<br/>查询中使用的行获取大小来提高性能,<br/>通过减少满足选择条件所需的数据库命中次数。<br/>零表示使用
jdbc 默认值。
|
-| properties | Map | 否 | -
| 额外的连接配置参数,当 properties 和 URL 具有相同参数时,优先级由<br/>驱动的具体实现决定。例如,在 MySQL
中,properties 优先于 URL。
|
-| use_regex | Boolean | 否 | false
| 控制 table_path 的正则表达式匹配。当设置为 `true` 时,table_path 将被视为正则表达式模式。当设置为 `false`
或未指定时,table_path 将被视为精确路径(不进行正则匹配)。
|
-| table_path | String | 否 | -
| 表的完整路径,您可以使用此配置代替 `query`。<br/>示例:<br/>"testdb.test_schema.table1"
|
-| table_list | Array | 否 | -
| 要读取的表列表,您可以使用此配置代替 `table_path`。示例:```[{ table_path = "testdb.table1"},
{table_path = "testdb.table2", query = "select id, name from
testdb.table2"}]```
|
-| where_condition | String | 否 | -
| 所有表/查询的通用行过滤条件,必须以 `where` 开头。例如 `where id > 100`
|
-| split.size | Int | 否 | 8096
| 表的分割大小(行数),读取表时,捕获的表会被分割为多个分割。
|
-| split.even-distribution.factor.lower-bound | Double | 否 | 0.05
| 分块键分布因子的下界。此因子用于确定表数据是否均匀分布。如果计算的分布因子大于或等于此下界(即,(MAX(id) - MIN(id) + 1) /
行数),表分块将被优化以实现均匀分布。否则,如果分布因子较小,如果估计的分片数超过 `sample-sharding.threshold`
指定的值,表将被视为不均匀分布并使用基于采样的分片策略。默认值为 0.05。 |
-| split.even-distribution.factor.upper-bound | Double | 否 | 100
| 分块键分布因子的上界。此因子用于确定表数据是否均匀分布。如果计算的分布因子小于或等于此上界(即,(MAX(id) - MIN(id) + 1) /
行数),表分块将被优化以实现均匀分布。否则,如果分布因子较大,如果估计的分片数超过 `sample-sharding.threshold`
指定的值,表将被视为不均匀分布并使用基于采样的分片策略。默认值为 100.0。 |
-| split.sample-sharding.threshold | Int | 否 | 1000
| 此配置指定了触发采样分片策略的估计分片数阈值。当分布因子超出
`chunk-key.even-distribution.factor.upper-bound` 和
`chunk-key.even-distribution.factor.lower-bound` 指定的范围,并且估计的分片数(计算为近似行数 /
分块大小)超过此阈值时,将使用采样分片策略。这可以帮助更有效地处理大型数据集。默认值为 1000 分片。 |
-| split.allow-sampling | Boolean | 否 | true
| 是否允许对分布不均匀的分片键使用采样分片策略。设置为 `false` 时,SeaTunnel 会退回到迭代式不均匀分片。
|
-| use_select_count | Boolean | 否 | false
| 是否使用 `select count(*)` 在分片前估算表行数。
|
-| skip_analyze | Boolean | 否 | false
| 是否跳过分片前的表行数分析。
|
-| split.inverse-sampling.rate | Int | 否 | 1000
| 采样分片策略中使用的采样率的倒数。例如,如果此值设置为 1000,则意味着在采样过程中应用 1/1000
的采样率。此选项提供了控制采样粒度的灵活性,从而影响最终的分片数量。对于非常大的数据集,首选较低的采样率时,此选项特别有用。默认值为 1000。
|
-| common-options | | 否 | -
| 源插件通用参数,请参考 [源通用选项](../common-options/source-common-options.md) 获取详细信息
|
+| 名称 | 类型 | 是否必填 | 默认值 | 描述 |
+|------|------|----------|--------|------|
+| url | String | 是 | - | JDBC 连接的 URL,例如
`jdbc:sqlserver://127.0.0.1:1434;database=TestDB`。 |
+| driver | String | 是 | - | 用于连接远程数据源的 JDBC 类名,SQL Server 使用
`com.microsoft.sqlserver.jdbc.SQLServerDriver`。 |
+| username | String | 否 | - | 连接实例的用户名。 |
+| password | String | 否 | - | 连接实例的密码。 |
+| query | String | 否 | - | 查询语句。当未配置 `table_path` 和 `table_list` 时必填。 |
+| connection_check_timeout_sec | Int | 否 | 30 | 等待用于验证连接的数据库操作完成的时间(秒)。 |
+| partition_column | String | 否 | - | 用于并行度分区的列名,仅支持数值类型。 |
+| partition_lower_bound | Long | 否 | - | `partition_column`
扫描的最小值,如果未设置,SeaTunnel 将查询数据库获取最小值。 |
+| partition_upper_bound | Long | 否 | - | `partition_column`
扫描的最大值,如果未设置,SeaTunnel 将查询数据库获取最大值。 |
+| partition_num | Int | 否 | job parallelism | 分区数量,仅支持正整数。默认值为作业并行度。 |
+| fetch_size | Int | 否 | 0 | 查询使用的行获取大小。`0` 表示使用 JDBC 默认值。增大可减少对数据库的命中次数。 |
+| properties | Map | 否 | - | 额外的连接配置参数。当 properties 与 URL
含相同参数时,由驱动的具体实现决定优先级。 |
+| use_regex | Boolean | 否 | false | 控制 `table_path` 的正则匹配。`true`
时按正则匹配,`false`(默认)时按精确路径匹配。 |
+| table_path | String | 否 | - | 表的完整路径,可用于替代
`query`。示例:`testdb.test_schema.table1`。 |
+| table_list | Array | 否 | - | 要读取的表列表,可替代 `table_path`。示例:`[{ table_path =
"testdb.table1"}, {table_path = "testdb.table2", query = "select id, name from
testdb.table2"}]`。 |
+| where_condition | String | 否 | - | 所有表/查询的通用行过滤条件,必须以 `where` 开头。例如 `where
id > 100`。 |
+| split.size | Int | 否 | 8096 | 表的分割大小(行数),读取表时会被分割为多个 split。 |
+| split.even-distribution.factor.lower-bound | Double | 否 | 0.05 |
分块键分布因子的下界。`(MAX(id) - MIN(id) + 1) / 行数` 大于等于该下界时认为表分布均匀;否则进入采样分片路径。 |
+| split.even-distribution.factor.upper-bound | Double | 否 | 100 |
分块键分布因子的上界。上界取值的逻辑与下界对称。 |
+| split.sample-sharding.threshold | Int | 否 | 1000 | 触发采样分片策略的估算分片数阈值。 |
+| split.allow-sampling | Boolean | 否 | true | 是否允许对分布不均匀的分片键使用采样分片策略。`false`
时退回到迭代式不均匀分片。 |
+| use_select_count | Boolean | 否 | false | 是否在分片前用 `select count(*)` 估算表行数。 |
+| skip_analyze | Boolean | 否 | false | 是否跳过分片前的表行数分析。 |
+| split.inverse-sampling.rate | Int | 否 | 1000 | 采样分片策略中采样率的倒数。`1000` 表示
1/1000 的采样率。 |
+| common-options | | 否 | - | 源插件通用参数,请参考
[源通用选项](../common-options/source-common-options.md)。 |
## 并行读取器
-JDBC 源连接器支持从表中并行读取数据。SeaTunnel 将使用某些规则来分割表中的数据,然后将其交给读取器进行读取。读取器的数量由
`parallelism` 选项决定。
+JDBC 源连接器支持从表中并行读取数据。SeaTunnel 将使用某些规则来分割表中的数据,然后交给读取器进行读取。读取器的数量由
`parallelism` 选项决定。
**分割键规则:**
1. 如果 `partition_column` 不为空,将使用它来计算分割。该列必须在 **支持的分割数据类型** 中。
-2. 如果 `partition_column` 为空,seatunnel 将从表中读取模式并获取主键和唯一索引。如果主键和唯一索引中有多个列,则将使用
**支持的分割数据类型** 中的第一列来分割数据。例如,表具有主键(nn guid, name varchar),因为 `guid` 不在
**支持的分割数据类型** 中,所以将使用 `name` 列来分割数据。
+2. 如果 `partition_column` 为空,SeaTunnel 将从表中读取模式并获取主键和唯一索引。如果主键和唯一索引中有多个列,则将使用
**支持的分割数据类型** 中的第一列来分割数据。
**支持的分割数据类型:**
+
* String
-* Number(int, bigint, decimal, ...)
+* Number(int、bigint、decimal 等)
* Date
-### 与分割相关的选项
+### 分割相关选项
#### split.size
-一个分割中有多少行,读取表时,捕获的表会被分割为多个分割。
+一个 split 中包含多少行。表被读入时会被分割为多个 split。
#### split.even-distribution.factor.lower-bound
> 不推荐使用
-分块键分布因子的下界。此因子用于确定表数据是否均匀分布。如果计算的分布因子大于或等于此下界(即,(MAX(id) - MIN(id) + 1) /
行数),表分块将被优化以实现均匀分布。否则,如果分布因子较小,如果估计的分片数超过 `sample-sharding.threshold`
指定的值,表将被视为不均匀分布并使用基于采样的分片策略。默认值为 0.05。
+分块键分布因子的下界。`(MAX(id) - MIN(id) + 1) / 行数` 大于等于该下界时认为表分布均匀;否则进入采样分片路径。默认值为 0.05。
#### split.even-distribution.factor.upper-bound
> 不推荐使用
-分块键分布因子的上界。此因子用于确定表数据是否均匀分布。如果计算的分布因子小于或等于此上界(即,(MAX(id) - MIN(id) + 1) /
行数),表分块将被优化以实现均匀分布。否则,如果分布因子较大,如果估计的分片数超过 `sample-sharding.threshold`
指定的值,表将被视为不均匀分布并使用基于采样的分片策略。默认值为 100.0。
+分块键分布因子的上界。逻辑与下界对称。默认值为 100.0。
#### split.sample-sharding.threshold
-此配置指定了触发采样分片策略的估计分片数阈值。当分布因子超出
`chunk-key.even-distribution.factor.upper-bound` 和
`chunk-key.even-distribution.factor.lower-bound` 指定的范围,并且估计的分片数(计算为近似行数 /
分块大小)超过此阈值时,将使用采样分片策略。这可以帮助更有效地处理大型数据集。默认值为 1000 分片。
+触发采样分片策略的估算分片数阈值。默认值为 1000。
#### split.inverse-sampling.rate
-采样分片策略中使用的采样率的倒数。例如,如果此值设置为 1000,则意味着在采样过程中应用 1/1000
的采样率。此选项提供了控制采样粒度的灵活性,从而影响最终的分片数量。对于非常大的数据集,首选较低的采样率时,此选项特别有用。默认值为 1000。
+采样分片策略中采样率的倒数。默认值为 1000(1/1000 的采样率)。
#### partition_column [string]
@@ -144,23 +145,23 @@ JDBC 源连接器支持从表中并行读取数据。SeaTunnel 将使用某些
#### partition_upper_bound [BigDecimal]
-partition_column 扫描的最大值,如果未设置,SeaTunnel 将查询数据库获取最大值。
+`partition_column` 扫描的最大值。如果未设置,SeaTunnel 将查询数据库获取最大值。
#### partition_lower_bound [BigDecimal]
-partition_column 扫描的最小值,如果未设置,SeaTunnel 将查询数据库获取最小值。
+`partition_column` 扫描的最小值。如果未设置,SeaTunnel 将查询数据库获取最小值。
#### partition_num [int]
> 不推荐使用,正确的方法是通过 `split.size` 控制分割数量
-我们需要分割为多少个分割,仅支持正整数。默认值为作业并行度。
+需要分割为多少个 split,仅支持正整数。默认值为作业并行度。
## 提示
-> 如果表无法分割(例如,表没有主键或唯一索引,且未设置 `partition_column`),将以单个并发运行。
+> 如果表无法分割(例如,表没有主键或唯一索引,且未设置 `partition_column`),将以单并发运行。
>
-> 使用 `table_path` 替代 `query` 进行单表读取。如果需要读取多个表,请使用 `table_list`。
+> 单表读取可使用 `table_path` 替代 `query`,多表读取请使用 `table_list`。
## 任务示例
@@ -168,106 +169,132 @@ partition_column 扫描的最小值,如果未设置,SeaTunnel 将查询数
> 读取数据表的简单单个任务
-```
-# 定义运行时环境
+```hocon
env {
parallelism = 1
job.mode = "BATCH"
}
-source{
- Jdbc {
- driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
- url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
- username = SA
- password = "Y.sa123456"
- query = "select * from full_types_jdbc"
- }
+
+source {
+ Jdbc {
+ driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ username = "SA"
+ password = "Y.sa123456"
+ query = "select * from full_types_jdbc"
+ }
}
transform {
- # 如果你想了解更多关于如何配置 seatunnel 的信息,并查看转换插件的完整列表,
- # 请前往 https://seatunnel.apache.org/docs/transforms/sql
+ # 如果你想了解更多关于如何配置 seatunnel 的信息,并查看转换插件的完整列表,
+ # 请前往 https://seatunnel.apache.org/docs/transforms/sql
}
sink {
- Console {}
+ Console {}
}
```
### 并行示例
-> 使用您配置的分片字段并行读取查询表和分片数据。如果您想读取整个表,可以这样做
+> 使用您配置的分区字段并行读取数据。如果需要读取整张表,可以结合 `query` 或 `table_path` 使用。
-```
+```hocon
env {
parallelism = 10
job.mode = "BATCH"
}
source {
- Jdbc {
- driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
- url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
- username = SA
- password = "Y.sa123456"
- # 根据需要定义查询逻辑
- query = "select * from full_types_jdbc"
- # 并行分片读取字段
- partition_column = "id"
- # 分片数量
- partition_num = 10
- }
+ Jdbc {
+ driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ username = "SA"
+ password = "Y.sa123456"
+ query = "select * from full_types_jdbc"
+ partition_column = "id"
+ partition_num = 10
+ }
}
transform {
- # If you would like to get more information about how to configure
seatunnel and see full list of transform plugins,
- # please go to https://seatunnel.apache.org/docs/transforms/sql
+ # 如果你想了解更多关于如何配置 seatunnel 的信息,并查看转换插件的完整列表,
+ # 请前往 https://seatunnel.apache.org/docs/transforms/sql
}
sink {
- Console {}
+ Console {}
}
-
```
-### 分片并行读取简单示例
-
-> 这是一个快速并行读取数据的分片
+### 整库多表读取
-```
+```hocon
env {
- # 您可以在这里设置引擎配置
- parallelism = 10
+ parallelism = 4
+ job.mode = "BATCH"
}
source {
- # 这是一个示例源插件 **仅用于测试和演示源插件功能**
Jdbc {
- driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
- username = SA
+ username = "SA"
password = "Y.sa123456"
- query = "select * from column_type_test.dbo.full_types_jdbc"
- # 并行分片读取字段
- partition_column = "id"
- # 分片数量
- partition_num = 10
+ table_list = [
+ { table_path = "column_type_test.dbo.full_types_jdbc" }
+ { table_path = "column_type_test.dbo.orders", query = "select id, name,
status from column_type_test.dbo.orders" }
+ ]
+ where_condition = "where id > 0"
+ split.size = 10000
+ }
+}
+transform {
+ Sql {
+ plugin_input = "Jdbc"
+ plugin_output = "tmp_id_name"
+ query = "select id, name from full_types_jdbc"
}
- # 如果你想了解更多关于如何配置 seatunnel 的信息,并查看源插件的完整列表,
- # 请前往 https://seatunnel.apache.org/docs/connectors/source/Jdbc
}
+sink {
+ Console {}
+}
+```
+
+### 自定义列裁剪示例
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Jdbc {
+ driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ username = "SA"
+ password = "Y.sa123456"
+ table_path = "column_type_test.dbo.full_types_jdbc"
+ query = "select id, name from column_type_test.dbo.full_types_jdbc"
+ }
+}
transform {
- # 如果你想了解更多关于如何配置 seatunnel 的信息,并查看转换插件的完整列表,
- # 请前往 https://seatunnel.apache.org/docs/transforms/sql
}
sink {
- Console {}
- # 如果你想了解更多关于如何配置 seatunnel 的信息,并查看汇插件的完整列表,
- # 请前往 https://seatunnel.apache.org/docs/connectors/sink/Jdbc
+ Jdbc {
+ driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ username = "SA"
+ password = "Y.sa123456"
+ generate_sink_sql = true
+ database = "column_type_test"
+ table = "dbo.full_types_jdbc"
+ }
}
```