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 18259c3c90 [Docs][Connector-V2] Improve Doris IoTDBv2 Paimon
SensorsData and StarRocks connector docs (#11796)
18259c3c90 is described below
commit 18259c3c90769b68f8a6d6869ceb9317ee75e18d
Author: Daniel Carter <[email protected]>
AuthorDate: Fri Aug 14 17:05:55 2026 +0800
[Docs][Connector-V2] Improve Doris IoTDBv2 Paimon SensorsData and StarRocks
connector docs (#11796)
Co-authored-by: DanielCarter-stack <[email protected]>
Co-authored-by: DanielCarter-stack
<[email protected]>
---
docs/en/connectors/sink/Doris.md | 105 +++++++++++++++++++++++++++--
docs/en/connectors/sink/IoTDBv2.md | 49 ++++++++++++++
docs/en/connectors/sink/Paimon.md | 113 ++++++++++++++++++++++++-------
docs/en/connectors/sink/SensorsData.md | 68 ++++++++++++++++++-
docs/en/connectors/sink/StarRocks.md | 117 ++++++++++++++++++++++++++++++---
docs/zh/connectors/sink/SensorsData.md | 2 +-
6 files changed, 413 insertions(+), 41 deletions(-)
diff --git a/docs/en/connectors/sink/Doris.md b/docs/en/connectors/sink/Doris.md
index d70c3ac2ee..5afacfc0bd 100644
--- a/docs/en/connectors/sink/Doris.md
+++ b/docs/en/connectors/sink/Doris.md
@@ -65,7 +65,7 @@ The internal implementation of Doris sink connector is cached
and imported by st
| data_save_mode | Enum | no | APPEND_DATA
| the data save mode, please refer to `data_save_mode` below
|
| save_mode_create_template | string | no | see below
| see below
|
| custom_sql | String | no | -
| When data_save_mode selects CUSTOM_PROCESSING, you should fill in the
CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be
executed. SQL will be executed before synchronization tasks.
|
-| doris.config | map | yes | -
| This option is used to support operations such as `insert`, `delete`,
and `update` when automatically generate sql,and supported formats.
|
+| doris.config | map | yes | -
| Stream Load data description parameters passed to Doris. The most
common keys are `format` (`json` or `csv`), `read_json_by_line`
(`true`/`false`), `column_separator`, and `row_delimiter`. See the Doris Stream
Load documentation for the full key set. |
## Redirect Behavior
@@ -411,7 +411,7 @@ sink {
### Use JSON format to import data
-```
+```hocon
sink {
Doris {
fenodes = "e2e_dorisdb:8030"
@@ -427,12 +427,11 @@ sink {
}
}
}
-
```
### Use CSV format to import data
-```
+```hocon
sink {
Doris {
fenodes = "e2e_dorisdb:8030"
@@ -448,6 +447,7 @@ sink {
}
}
}
+```
### Case-Sensitive Configuration
@@ -470,6 +470,95 @@ sink {
}
```
+### Custom SQL Pre-processing
+
+When `data_save_mode = "CUSTOM_PROCESSING"`, the SQL set in `custom_sql` is
executed on the target
+Doris cluster before the synchronization task reads data. This lets you
prepare, clean, or seed the
+target table out-of-band of the connector's normal write path. The connector
still writes through
+Stream Load afterwards.
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ row.num = 100
+ schema = {
+ fields {
+ F_ID = bigint
+ F_INT = int
+ F_BIGINT = bigint
+ }
+ }
+ }
+}
+
+sink {
+ Doris {
+ fenodes = "doris_e2e:8030"
+ username = root
+ password = ""
+ database = "e2e_sink"
+ table = "doris_e2e_unique_table"
+ data_save_mode = "CUSTOM_PROCESSING"
+ custom_sql = "INSERT INTO e2e_sink.doris_e2e_unique_table (F_ID, F_INT,
F_BIGINT) VALUES (1, 123, 1234567890123);"
+ sink.enable-2pc = true
+ sink.label-prefix = "test_custom_sql"
+ save_mode_create_template = """CREATE TABLE IF NOT EXISTS
`${database}`.`${table}` (${rowtype_fields}) ENGINE=OLAP UNIQUE KEY (`F_ID`)
DISTRIBUTED BY HASH (`F_ID`) PROPERTIES ("replication_allocation" =
"tag.location.default: 1")"""
+ doris.config = {
+ format = "json"
+ read_json_by_line = "true"
+ }
+ }
+}
+```
+
+### CDC With Schema Change
+
+This example shows MySQL-CDC streaming into Doris with `schema-changes.enabled
= true` so that
+column additions, type widening, and other DDL changes from the upstream MySQL
source are applied
+to the target Doris table.
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 2000
+}
+
+source {
+ MySQL-CDC {
+ server-id = 5652-5657
+ username = "st_user_source"
+ password = "mysqlpw"
+ table-names = ["shop.products"]
+ url = "jdbc:mysql://mysql_cdc_e2e:3306/shop"
+
+ schema-changes.enabled = true
+ }
+}
+
+sink {
+ Doris {
+ fenodes = "doris_cdc_e2e:8030"
+ username = "root"
+ password = ""
+ database = "shop"
+ table = "products"
+ sink.label-prefix = "test-cdc"
+ sink.enable-2pc = true
+ sink.enable-delete = true
+ doris.config {
+ format = "json"
+ read_json_by_line = "true"
+ }
+ }
+}
+```
+
### Multiple table
#### example1
@@ -599,9 +688,11 @@ Yes. Set `sink.enable-delete = "true"` to propagate DELETE
operations from CDC s
### Are Doris column names case-sensitive?
-See the case-sensitivity example above for the exact behavior. If upstream
field names still do not
-match the Doris schema, normalize them before the sink stage or align the
target schema explicitly
-instead of relying on an undocumented `column_mapping` option.
+See the case-sensitivity example above for the exact behavior. By default
(`case_sensitive = true`)
+the connector preserves the original case of `database` and `table`. Set
`case_sensitive = false`
+to fold both names to lowercase before they reach Doris. If upstream field
names still do not
+match the Doris schema, normalize them at the source stage (e.g. with a
`Rename` transform) or
+align the target schema explicitly rather than relying on undocumented options.
### What data format does Doris Stream Load use?
diff --git a/docs/en/connectors/sink/IoTDBv2.md
b/docs/en/connectors/sink/IoTDBv2.md
index 9f4ecc595b..0fc2ecc3bd 100644
--- a/docs/en/connectors/sink/IoTDBv2.md
+++ b/docs/en/connectors/sink/IoTDBv2.md
@@ -379,6 +379,55 @@ IoTDB> DESC "test_database"."0700HK";
+-----------+---------+-------+
```
+#### Case 4: Combined TAG, ATTRIBUTE, and FIELD columns
+
+This case wires all three column categories at once: a TAG column for
high-cardinality
+filterable metadata, an ATTRIBUTE column for low-cardinality profile-like
metadata, and explicit
+FIELD columns for measurements. All three are required for a fully-tagged
IoTDB-table write.
+
+```hocon
+sink {
+ IoTDBv2 {
+ node_urls = ["localhost:6667"]
+ username = "root"
+ password = "root"
+ sql_dialect = "table"
+ storage_group = "test_database"
+ key_device = "region"
+ key_timestamp = "ts"
+ key_tag_fields = ["tag"]
+ key_attribute_fields = ["model_id"]
+ key_measurement_fields = ["status", "arrival_date", "temperature"]
+ }
+}
+```
+
+The data format of IoTDB output is as follows:
+
+```shell
+IoTDB> SELECT * FROM "test_database"."0700HK";
++-----------------------------+----+--------+------+------------+-----------+
+| time| tag|model_id|status|arrival_date|temperature|
++-----------------------------+----+--------+------+------------+-----------+
+|2025-07-30T17:52:34.851+08:00|tag1| id1| true| 2024-11-12| 4.34|
+|2025-07-29T17:51:34.851+08:00|tag2| id2| false| 2024-12-01| 5.54|
+|2025-07-28T17:50:34.851+08:00|tag3| id3| false| 2024-12-22| 7.34|
++-----------------------------+----+--------+------+------------+-----------+
+```
+```shell
+IoTDB> DESC "test_database"."0700HK";
++-------------+---------+---------+
+| ColumnName| DataType| Category|
++-------------+---------+---------+
+| time|TIMESTAMP| TIME|
+| tag| STRING| TAG|
+| model_id| STRING|ATTRIBUTE|
+| status| BOOLEAN| FIELD|
+| arrival_date| DATE| FIELD|
+| temperature| DOUBLE| FIELD|
++-------------+---------+---------+
+```
+
## Changelog
<ChangeLog />
diff --git a/docs/en/connectors/sink/Paimon.md
b/docs/en/connectors/sink/Paimon.md
index 876d355b13..b8e20d9e50 100644
--- a/docs/en/connectors/sink/Paimon.md
+++ b/docs/en/connectors/sink/Paimon.md
@@ -6,7 +6,7 @@ import ChangeLog from '../changelog/connector-paimon.md';
## Description
-Sink connector for Apache Paimon. It can support cdc mode 、auto create table.
+Sink connector for Apache Paimon. It supports CDC mode and auto-create table.
### Comparison between SeaTunnel and Paimon version
@@ -116,10 +116,13 @@ sink {
When you set `checkpoint.interval` to a value greater than 0 in batch mode,
the paimon connector will commit the data to the paimon table when the
checkpoint triggers after a certain number of records have been written. At
this moment, the written data in paimon that is visible.
However, if you do not set `checkpoint.interval` in batch mode, the paimon
sink connector will commit the data after all records are written. The written
data in paimon that is not visible until the batch task completes.
-## Changelog
-You must configure the `changelog-producer=input` option to enable the
changelog producer mode of the paimon table. If you use the auto-create table
function of paimon sink, you can configure this property in
`paimon.table.write-props` or `table_options`.
+## Changelog Producer
+
+Configure `changelog-producer` to enable the changelog producer mode of the
Paimon table. If you use
+the auto-create table function of the Paimon sink, set this property in
`paimon.table.write-props`
+or `table_options`. For existing tables created out-of-band, set it on the
table itself.
-The changelog producer mode of the paimon table has [four
mode](https://paimon.apache.org/docs/master/primary-key-table/changelog-producer/)
which is `none`、`input`、`lookup` and `full-compaction`.
+The changelog producer mode of the Paimon table has [four
modes](https://paimon.apache.org/docs/master/primary-key-table/changelog-producer/):
`none`, `input`, `lookup`, and `full-compaction`.
All `changelog-producer` modes are currently supported. The default is `none`.
@@ -127,35 +130,43 @@ All `changelog-producer` modes are currently supported.
The default is `none`.
*
[`input`](https://paimon.apache.org/docs/master/primary-key-table/changelog-producer/#input)
*
[`lookup`](https://paimon.apache.org/docs/master/primary-key-table/changelog-producer/#lookup)
*
[`full-compaction`](https://paimon.apache.org/docs/master/primary-key-table/changelog-producer/#full-compaction)
-> note:
-> When you use a streaming mode to read paimon table,different mode will
produce [different results](../source/Paimon.md#changelog)。
+
+> **Note**
+>
+> When you use a streaming mode to read a Paimon table, different
`changelog-producer` modes will
+> produce [different results](../source/Paimon.md#changelog). Pick `input` for
the most faithful
+> pass-through of upstream CDC events, or `lookup` / `full-compaction` if the
upstream does not emit
+> full changelog records.
## Filesystems
-The Paimon connector supports writing data to multiple file systems.
Currently, the supported file systems are hdfs and s3.
-If you use the s3 filesystem. You can configure the
`fs.s3a.access-key`、`fs.s3a.secret-key`、`fs.s3a.endpoint`、`fs.s3a.path.style.access`、`fs.s3a.aws.credentials.provider`
properties in the `paimon.hadoop.conf` option.
-Besides, the warehouse should start with `s3a://`.
+The Paimon connector supports writing data to multiple file systems.
Currently, the supported file systems are HDFS and S3.
+If you use the S3 filesystem, configure `fs.s3a.access-key`,
`fs.s3a.secret-key`, `fs.s3a.endpoint`, `fs.s3a.path.style.access`, and
`fs.s3a.aws.credentials.provider` properties in the `paimon.hadoop.conf` option.
+The warehouse path should start with `s3a://`.
## Schema Evolution
-Cdc Ingestion supports a limited number of schema changes. Currently supported
schema changes includes:
+
+CDC ingestion supports a limited number of schema changes. The currently
supported schema changes are:
* Adding columns.
-* Modify column. More specifically, If you modify the column type, the
following changes are supported:
+* Modifying a column type. More specifically, when you modify the column type,
the following changes are supported:
- * altering from a string type (char, varchar, text) to another string type
with longer length,
- * altering from a binary type (binary, varbinary, blob) to another binary
type with longer length,
- * altering from an integer type (tinyint, smallint, int, bigint) to another
integer type with wider range,
- * altering from a floating-point type (float, double) to another
floating-point type with wider range,
-
+ * altering from a string type (`char`, `varchar`, `text`) to another string
type with longer length,
+ * altering from a binary type (`binary`, `varbinary`, `blob`) to another
binary type with longer length,
+ * altering from an integer type (`tinyint`, `smallint`, `int`, `bigint`) to
another integer type with wider range,
+ * altering from a floating-point type (`float`, `double`) to another
floating-point type with wider range.
- are supported.
- > Note:
- >
- > If {oldType} and {newType} belongs to the same type family, but old type
has higher precision than new type. Ignore this convert.
+ > **Note**
+ >
+ > If `{oldType}` and `{newType}` belong to the same type family, but the old
type has higher
+ > precision than the new type, this conversion is ignored.
-* Drop columns.
+* Dropping columns.
-* Change columns.
+* Renaming columns (optionally combined with the same type-widening /
column-position /
+ comment / nullability changes listed under "Modifying a column type" above —
the change
+ handler applies those updates and renames the column in the same step when
the name
+ differs).
## Examples
@@ -662,6 +673,64 @@ sink {
}
```
+### Truncate target table on startup with Hive catalog
+
+This example recreates the Hive-catalogued Paimon table from the upstream
schema on each job start
+(`schema_save_mode = "RECREATE_SCHEMA"`) and clears existing data so the sink
behaves as a fresh
+overwrite. Useful for full-refresh batch jobs.
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ schema = {
+ fields {
+ pk_id = bigint
+ name = string
+ score = int
+ }
+ primaryKey {
+ name = "pk_id"
+ columnNames = [pk_id]
+ }
+ }
+ rows = [
+ { kind = INSERT, fields = [1, "A", 100] }
+ { kind = INSERT, fields = [2, "B", 100] }
+ { kind = INSERT, fields = [3, "C", 100] }
+ { kind = UPDATE_BEFORE, fields = [1, "A", 100] }
+ { kind = UPDATE_AFTER, fields = [1, "A_1", 100] }
+ { kind = DELETE, fields = [2, "B", 100] }
+ ]
+ }
+}
+
+sink {
+ Paimon {
+ warehouse = "hdfs:///tmp/paimon"
+ catalog_type = "hive"
+ catalog_uri = "thrift://hadoop04:9083"
+ database = "seatunnel_namespace12"
+ table = "st_test"
+ schema_save_mode = "RECREATE_SCHEMA"
+ data_save_mode = "DROP_DATA"
+ paimon.hadoop.conf = {
+ fs.defaultFS = "hdfs://nameservice1"
+ dfs.nameservices = "nameservice1"
+ dfs.ha.namenodes.nameservice1 = "nn1,nn2"
+ dfs.namenode.rpc-address.nameservice1.nn1 = "hadoop03:8020"
+ dfs.namenode.rpc-address.nameservice1.nn2 = "hadoop04:8020"
+ dfs.client.failover.proxy.provider.nameservice1 =
"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+ dfs.client.use.datanode.hostname = "true"
+ }
+ }
+}
+```
+
## Changelog
<ChangeLog />
diff --git a/docs/en/connectors/sink/SensorsData.md
b/docs/en/connectors/sink/SensorsData.md
index 15aad0d4f7..61a9608b4f 100644
--- a/docs/en/connectors/sink/SensorsData.md
+++ b/docs/en/connectors/sink/SensorsData.md
@@ -227,6 +227,10 @@ sink {
### Profile Property Updates
+User profile records (`record_type = "users"`) update the attributes attached
to a SensorsData user
+profile. Setting `null_as_profile_unset = true` makes null properties delete
the corresponding
+profile attribute instead of leaving the previous value in place.
+
```hocon
sink {
SensorsData {
@@ -234,7 +238,7 @@ sink {
time_free = true
entity_name = users
- record_type = profile
+ record_type = users
schema = users
distinct_id_column = user_id
identity_fields = [
@@ -278,6 +282,68 @@ sink {
}
```
+### User Details (Detail Records)
+
+User detail records (`record_type = "details"`) attach a per-record identifier
to a SensorsData
+user. The `detail_id_column` provides that detail key, while
`distinct_id_column` and
+`identity_fields` identify the parent user.
+
+```hocon
+sink {
+ SensorsData {
+ consumer = console
+ server_url = "http://10.129.27.43:8106/sa?project=sditest"
+ time_free = true
+
+ record_type = details
+ schema = fund_manager
+ distinct_id_column = c_id
+ detail_id_column = c_id
+ identity_fields = [
+ { target = "$identity_distinct_id", source = c_id }
+ ]
+ property_fields = [
+ { target = c_id, source = c_id, type = STRING }
+ { target = fund_amount, source = c_int, type = INT }
+ { target = "$is_valid", source = c_boolean, type = BOOLEAN }
+ ]
+ }
+}
+```
+
+### Dynamic Event Names With Multiple Identities
+
+This example builds the event name from the data row itself (`event_name =
"${c_event}"`) and
+maps several identities at once (`$identity_login_id`,
`$identity_distinct_id`). Records that fail
+to convert are skipped via `skip_error_record = true`.
+
+```hocon
+sink {
+ SensorsData {
+ consumer = console
+ server_url = "http://10.1.136.63:8106/sa?project=default"
+ time_free = true
+
+ record_type = events
+ schema = events
+ event_name = "${c_event}"
+ time_column = c_date
+ distinct_id_column = c_bigint
+ identity_fields = [
+ { source = c_bigint, target = "$identity_login_id" }
+ { source = c_bigint, target = "$identity_distinct_id" }
+ ]
+ property_fields = [
+ { target = c_tinyint, source = c_tinyint, type = INT }
+ { target = c_bigint, source = c_bigint, type = BIGINT }
+ { target = c_int, source = c_int, type = INT }
+ { target = c_boolean, source = c_boolean, type = BOOLEAN }
+ ]
+ skip_error_record = true
+ }
+}
+```
+
### Console Output (for Testing)
```hocon
diff --git a/docs/en/connectors/sink/StarRocks.md
b/docs/en/connectors/sink/StarRocks.md
index 2d22517a64..6d6809d55a 100644
--- a/docs/en/connectors/sink/StarRocks.md
+++ b/docs/en/connectors/sink/StarRocks.md
@@ -303,7 +303,7 @@ sink {
### Use JSON format to import data
-```
+```hocon
sink {
StarRocks {
nodeUrls = ["e2e_starRocksdb:8030"]
@@ -319,12 +319,11 @@ sink {
}
}
}
-
```
### Use CSV format to import data
-```
+```hocon
sink {
StarRocks {
nodeUrls = ["e2e_starRocksdb:8030"]
@@ -345,7 +344,7 @@ sink {
### Use save_mode function
-```
+```hocon
sink {
StarRocks {
nodeUrls = ["e2e_starRocksdb:8030"]
@@ -355,7 +354,7 @@ sink {
database = "test"
table = "test_${schema_name}_${table_name}"
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
- data_save_mode="APPEND_DATA"
+ data_save_mode = "APPEND_DATA"
batch_max_rows = 10
starrocks.config = {
format = "CSV"
@@ -366,6 +365,103 @@ sink {
}
```
+### CDC With Schema Change
+
+This example shows MySQL-CDC streaming into StarRocks with
`schema-changes.enabled = true` so that
+upstream MySQL DDL changes (column additions, type widening, etc.) are applied
to the target
+StarRocks Primary Key table.
+
+```hocon
+env {
+ job.mode = "STREAMING"
+ checkpoint.interval = 2000
+}
+
+source {
+ MySQL-CDC {
+ username = "st_user_source"
+ password = "mysqlpw"
+ table-names = ["shop.products", "shop.orders", "shop.customers"]
+ url = "jdbc:mysql://mysql_cdc_e2e:3306/shop"
+
+ schema-changes.enabled = true
+ }
+}
+
+sink {
+ StarRocks {
+ nodeUrls = ["starrocks_cdc_e2e:8040"]
+ base-url = "jdbc:mysql://starrocks_cdc_e2e:9030/shop"
+ username = "root"
+ password = ""
+ database = "shop"
+ table = "${table_name}"
+ max_retries = 3
+ enable_upsert_delete = true
+ schema_save_mode = "RECREATE_SCHEMA"
+ data_save_mode = "DROP_DATA"
+ save_mode_create_template = """
+ CREATE TABLE IF NOT EXISTS shop.`${table_name}` (
+ ${rowtype_primary_key},
+ ${rowtype_fields}
+ ) ENGINE=OLAP
+ PRIMARY KEY (${rowtype_primary_key})
+ DISTRIBUTED BY HASH (${rowtype_primary_key})
+ PROPERTIES (
+ "replication_num" = "1",
+ "in_memory" = "false",
+ "enable_persistent_index" = "true",
+ "replicated_storage" = "true",
+ "compression" = "LZ4"
+ )
+ """
+ }
+}
+```
+
+### Timer Flush With MySQL-CDC
+
+This example wires `sink.flush.interval` into the streaming job so that the
StarRocks sink flushes
+its buffer every 500 ms, independent of `batch_max_rows` and `batch_max_bytes`.
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 300000
+ sink.flush.interval = 500
+}
+
+source {
+ MySQL-CDC {
+ server-id = 5670
+ username = "st_user_source"
+ password = "mysqlpw"
+ table-names = ["shop.products"]
+ url = "jdbc:mysql://mysql_starrocks_timer_flush_e2e:3306/shop"
+ }
+}
+
+sink {
+ StarRocks {
+ nodeUrls = ["starrocks_timer_flush_e2e:8030"]
+ base-url = "jdbc:mysql://starrocks_timer_flush_e2e:9030/timer_flush"
+ username = root
+ password = ""
+ database = "timer_flush"
+ table = "starrocks_timer_flush"
+ labelPrefix = "timer-flush-"
+ batch_max_rows = 100000
+ batch_max_bytes = 104857600
+ schema_save_mode = "IGNORE"
+ data_save_mode = "APPEND_DATA"
+ starrocks.config = {
+ format = "JSON"
+ }
+ }
+}
+```
+
### Multiple table
#### example1
@@ -470,9 +566,9 @@ Yes. Enable upsert and DELETE propagation by setting
`enable_upsert_delete = tru
### What is `labelPrefix` used for in StarRocks Sink?
-The current StarRocks Sink page does not list exactly-once as a supported
connector capability.
-Use `labelPrefix` to control the prefix of the Stream Load labels generated by
the sink.
-Keeping this prefix stable and unique helps reduce label collisions across
retries or job restarts:
+`labelPrefix` controls the prefix of the Stream Load labels generated by the
sink. StarRocks uses
+these labels to deduplicate ingestion requests, so keeping this prefix stable
and unique per job
+helps avoid spurious "label already exists" errors across retries or restarts:
```hocon
sink {
@@ -488,8 +584,9 @@ sink {
}
```
-For the published connector contract, follow the **Key Features** matrix and
the `labelPrefix`
-option entry on this page.
+Note that StarRocks Sink does not currently provide exactly-once delivery (see
the **Key Features**
+matrix at the top of this page). Using a stable `labelPrefix` reduces label
collisions but does not
+by itself give end-to-end exactly-once guarantees.
### Are StarRocks column names case-sensitive?
diff --git a/docs/zh/connectors/sink/SensorsData.md
b/docs/zh/connectors/sink/SensorsData.md
index 9aa6d7688a..ad2e035880 100644
--- a/docs/zh/connectors/sink/SensorsData.md
+++ b/docs/zh/connectors/sink/SensorsData.md
@@ -234,7 +234,7 @@ sink {
time_free = true
entity_name = users
- record_type = profile
+ record_type = users
schema = users
distinct_id_column = user_id
identity_fields = [