This is an automated email from the ASF dual-hosted git repository.

lzwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 7b5d1bfadb [INLONG-8302][Dashboard] Data synchronization source and 
sink type optimization (#8303)
7b5d1bfadb is described below

commit 7b5d1bfadb81438f99f04b801941baf5272dcc91
Author: Lizhen <[email protected]>
AuthorDate: Thu Jun 29 20:11:20 2023 +0800

    [INLONG-8302][Dashboard] Data synchronization source and sink type 
optimization (#8303)
---
 inlong-dashboard/src/plugins/RenderRow.ts          |   6 +-
 .../src/plugins/sinks/common/SinkDefaultInfo.ts    |  17 +-
 .../src/plugins/sinks/defaults/ClickHouse.ts       |  17 +-
 .../src/plugins/sinks/defaults/Doris.ts            |  12 +-
 .../src/plugins/sinks/defaults/Elasticsearch.ts    |  10 +-
 .../src/plugins/sinks/defaults/Greenplum.ts        |   8 +-
 .../src/plugins/sinks/defaults/HBase.ts            |  10 +-
 .../src/plugins/sinks/defaults/Hive.ts             |  12 +-
 .../src/plugins/sinks/defaults/Hudi.ts             |  11 +-
 .../src/plugins/sinks/defaults/Iceberg.ts          |   9 +-
 .../src/plugins/sinks/defaults/Kafka.ts            |   7 +-
 .../src/plugins/sinks/defaults/Kudu.ts             |   8 +-
 .../src/plugins/sinks/defaults/MySQL.ts            |   6 +-
 .../src/plugins/sinks/defaults/Oracle.ts           |   8 +-
 .../src/plugins/sinks/defaults/PostgreSQL.ts       |   9 +-
 .../src/plugins/sinks/defaults/Redis.ts            |  18 +-
 .../src/plugins/sinks/defaults/SQLServer.ts        |  11 +-
 .../src/plugins/sinks/defaults/StarRocks.ts        |  10 +-
 .../src/plugins/sinks/defaults/TDSQLPostgreSQL.ts  |   9 +-
 .../plugins/sources/common/SourceDefaultInfo.ts    |  42 ++-
 .../src/plugins/sources/defaults/Hudi.ts           |   9 +-
 .../src/plugins/sources/defaults/MQTT.ts           |   9 +-
 .../src/plugins/sources/defaults/Mongodb.ts        |   8 +-
 .../src/plugins/sources/defaults/MySQLBinlog.ts    |  11 +-
 .../src/plugins/sources/defaults/Oracle.ts         |  12 +-
 .../src/plugins/sources/defaults/PostgreSQL.ts     |  11 +-
 .../src/plugins/sources/defaults/Redis.ts          |  13 +-
 .../src/plugins/sources/defaults/SQLServer.ts      |  12 +-
 .../src/plugins/sources/defaults/index.ts          |   3 +
 inlong-dashboard/src/plugins/types.ts              |   1 +
 .../src/ui/components/FieldList/DetailModal.tsx    |   6 +-
 .../src/ui/components/FieldList/FieldTypeConf.tsx  | 404 +++++++++++++++++++++
 .../SynchronizeDetail/SyncSink/DetailModal.tsx     |   2 +-
 .../ui/pages/SynchronizeDetail/SyncSink/index.tsx  |  17 +-
 .../SynchronizeDetail/SyncSources/DetailModal.tsx  |   2 +-
 .../pages/SynchronizeDetail/SyncSources/index.tsx  |  17 +-
 36 files changed, 731 insertions(+), 46 deletions(-)

diff --git a/inlong-dashboard/src/plugins/RenderRow.ts 
b/inlong-dashboard/src/plugins/RenderRow.ts
index 7a5cf5e135..c9f78d50d2 100644
--- a/inlong-dashboard/src/plugins/RenderRow.ts
+++ b/inlong-dashboard/src/plugins/RenderRow.ts
@@ -22,7 +22,7 @@ import merge from 'lodash/merge';
 
 export abstract class RenderRow {
   static FieldList: FieldItemType[] = [];
-  static LightFieldSet = new Set<string>();
+  static SyncFieldSet = new Set<string>();
 
   static FieldDecorator(config: FieldItemType): PropertyDecorator {
     return (target: any, propertyKey: string) => {
@@ -47,9 +47,9 @@ export abstract class RenderRow {
     };
   }
 
-  static LightField(): PropertyDecorator {
+  static SyncField(): PropertyDecorator {
     return (target: any, propertyKey: string) => {
-      target.constructor.LightFieldSet.add(propertyKey);
+      target.constructor.SyncFieldSet.add(propertyKey);
     };
   }
 
diff --git a/inlong-dashboard/src/plugins/sinks/common/SinkDefaultInfo.ts 
b/inlong-dashboard/src/plugins/sinks/common/SinkDefaultInfo.ts
index 689e203963..d662c76391 100644
--- a/inlong-dashboard/src/plugins/sinks/common/SinkDefaultInfo.ts
+++ b/inlong-dashboard/src/plugins/sinks/common/SinkDefaultInfo.ts
@@ -26,14 +26,14 @@ import { statusList, genStatusTag } from './status';
 import { sinks, defaultValue } from '..';
 
 const { I18nMap, I18n } = DataWithBackend;
-const { FieldList, FieldDecorator, LightField, LightFieldSet } = RenderRow;
+const { FieldList, FieldDecorator, SyncField, SyncFieldSet } = RenderRow;
 const { ColumnList, ColumnDecorator } = RenderList;
 
 export class SinkDefaultInfo implements DataWithBackend, RenderRow, RenderList 
{
   static I18nMap = I18nMap;
   static FieldList = FieldList;
   static ColumnList = ColumnList;
-  static LightFieldSet = LightFieldSet;
+  static SyncFieldSet = SyncFieldSet;
 
   readonly id: number;
 
@@ -42,6 +42,7 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
     type: 'text',
     hidden: true,
   })
+  @SyncField()
   @I18n('inlongGroupId')
   readonly inlongGroupId: string;
 
@@ -49,6 +50,7 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
     type: 'text',
     hidden: true,
   })
+  @SyncField()
   @I18n('inlongStreamId')
   readonly inlongStreamId: string;
 
@@ -72,7 +74,7 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
   @ColumnDecorator({
     render: type => sinks.find(c => c.value === type)?.label || type,
   })
-  @LightField()
+  @SyncField()
   @I18n('meta.Sinks.SinkType')
   sinkType: string;
 
@@ -92,6 +94,7 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
     visible: values => Boolean(values.sinkType),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.SinkName')
   sinkName: string;
 
@@ -103,6 +106,7 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
     },
     visible: values => Boolean(values.sinkType),
   })
+  @SyncField()
   @I18n('meta.Sinks.Description')
   description: string;
 
@@ -118,6 +122,7 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
   @ColumnDecorator({
     render: text => genStatusTag(text),
   })
+  @SyncField()
   @I18n('basic.Status')
   readonly status: string;
 
@@ -138,10 +143,10 @@ export class SinkDefaultInfo implements DataWithBackend, 
RenderRow, RenderList {
     return data;
   }
 
-  renderLightRow() {
+  renderSyncRow() {
     const constructor = this.constructor as typeof SinkDefaultInfo;
-    const { FieldList, LightFieldSet } = constructor;
-    return FieldList.filter(item => LightFieldSet.has(item.name as string));
+    const { FieldList, SyncFieldSet } = constructor;
+    return FieldList.filter(item => SyncFieldSet.has(item.name as string));
   }
 
   renderRow() {
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts
index 780f61da5b..0d22639d07 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts
@@ -27,7 +27,7 @@ import { sourceFields } from '../common/sourceFields';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const clickHouseTargetTypes = [
@@ -57,6 +57,7 @@ export default class ClickHouseSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ClickHouse.DbName')
   dbName: string;
 
@@ -68,6 +69,7 @@ export default class ClickHouseSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ClickHouse.TableName')
   tableName: string;
 
@@ -102,6 +104,8 @@ export default class ClickHouseSink
     }),
   })
   @I18n('meta.Sinks.DataNodeName')
+  @SyncField()
+  @ColumnDecorator()
   dataNodeName: string;
 
   @FieldDecorator({
@@ -115,6 +119,7 @@ export default class ClickHouseSink
     suffix: i18n.t('meta.Sinks.ClickHouse.FlushIntervalUnit'),
   })
   @I18n('meta.Sinks.ClickHouse.FlushInterval')
+  @ColumnDecorator()
   flushInterval: number;
 
   @FieldDecorator({
@@ -128,6 +133,7 @@ export default class ClickHouseSink
     suffix: i18n.t('meta.Sinks.ClickHouse.FlushRecordUnit'),
   })
   @I18n('meta.Sinks.ClickHouse.FlushRecord')
+  @ColumnDecorator()
   flushRecord: number;
 
   @FieldDecorator({
@@ -141,6 +147,7 @@ export default class ClickHouseSink
     suffix: i18n.t('meta.Sinks.ClickHouse.RetryTimesUnit'),
   })
   @I18n('meta.Sinks.ClickHouse.RetryTimes')
+  @ColumnDecorator()
   retryTime: number;
 
   @FieldDecorator({
@@ -162,6 +169,7 @@ export default class ClickHouseSink
     rules: [{ required: true }],
   })
   @I18n('meta.Sinks.ClickHouse.IsDistributed')
+  @ColumnDecorator()
   isDistributed: number;
 
   @FieldDecorator({
@@ -188,6 +196,7 @@ export default class ClickHouseSink
     visible: values => values.isDistributed,
   })
   @I18n('meta.Sinks.ClickHouse.PartitionStrategy')
+  @ColumnDecorator()
   partitionStrategy: string;
 
   @FieldDecorator({
@@ -199,6 +208,7 @@ export default class ClickHouseSink
     }),
   })
   @I18n('meta.Sinks.ClickHouse.PartitionFields')
+  @ColumnDecorator()
   partitionFields: string;
 
   @FieldDecorator({
@@ -224,6 +234,7 @@ export default class ClickHouseSink
     }),
   })
   @I18n('meta.Sinks.ClickHouse.Engine')
+  @ColumnDecorator()
   engine: string;
 
   @FieldDecorator({
@@ -242,6 +253,7 @@ export default class ClickHouseSink
     }),
   })
   @I18n('meta.Sinks.ClickHouse.PartitionBy')
+  @ColumnDecorator()
   partitionBy: string;
 
   @FieldDecorator({
@@ -251,6 +263,7 @@ export default class ClickHouseSink
     }),
   })
   @I18n('meta.Sinks.ClickHouse.PrimaryKey')
+  @SyncField()
   primaryKey: string;
 
   @FieldDecorator({
@@ -260,6 +273,7 @@ export default class ClickHouseSink
     }),
   })
   @I18n('meta.Sinks.ClickHouse.Cluster')
+  @ColumnDecorator()
   cluster: string;
 
   @FieldDecorator({
@@ -313,6 +327,7 @@ export default class ClickHouseSink
     }),
   })
   @I18n('Time To Live')
+  @ColumnDecorator()
   ttl: number;
 
   @FieldDecorator({
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts
index cf2b9c8136..973bb5b7c2 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts
@@ -26,7 +26,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import { sourceFields } from '../common/sourceFields';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const dorisTargetTypes = [
@@ -62,6 +62,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Doris.HttpAddress')
+  @SyncField()
   feNodes: string;
 
   @FieldDecorator({
@@ -72,6 +73,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @I18n('meta.Sinks.Username')
+  @SyncField()
   username: string;
 
   @FieldDecorator({
@@ -82,6 +84,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @I18n('meta.Sinks.Password')
+  @SyncField()
   password: string;
 
   @FieldDecorator({
@@ -93,6 +96,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Doris.TableIdentifier')
+  @SyncField()
   tableIdentifier: string;
 
   @FieldDecorator({
@@ -103,6 +107,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Doris.LabelPrefix')
   labelPrefix: string;
 
@@ -114,6 +119,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Doris.PrimaryKey')
   primaryKey: string;
 
@@ -136,6 +142,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @I18n('meta.Sinks.Doris.SinkMultipleEnable')
+  @SyncField()
   sinkMultipleEnable: boolean;
 
   @FieldDecorator({
@@ -147,6 +154,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Doris.SinkMultipleFormat')
+  @SyncField()
   sinkMultipleFormat: string;
 
   @FieldDecorator({
@@ -157,6 +165,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Doris.DatabasePattern')
   databasePattern: string;
 
@@ -168,6 +177,7 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Doris.TablePattern')
   tablePattern: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts
index 5d19d7dce9..b71048a9d9 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts
@@ -27,7 +27,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const esTypes = [
@@ -61,6 +61,7 @@ export default class ElasticsearchSink
     }),
   })
   @I18n('meta.Sinks.DataNodeName')
+  @SyncField()
   dataNodeName: string;
 
   @FieldDecorator({
@@ -72,6 +73,7 @@ export default class ElasticsearchSink
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.ES.IndexName')
+  @SyncField()
   indexName: string;
 
   @FieldDecorator({
@@ -83,6 +85,7 @@ export default class ElasticsearchSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ES.PrimaryKey')
   primaryKey: string;
 
@@ -94,6 +97,7 @@ export default class ElasticsearchSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ES.DocumentType')
   documentType: string;
 
@@ -117,6 +121,7 @@ export default class ElasticsearchSink
     }),
   })
   @I18n('meta.Sinks.EnableCreateResource')
+  @SyncField()
   enableCreateResource: number;
 
   @FieldDecorator({
@@ -130,6 +135,7 @@ export default class ElasticsearchSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ES.FlushRecord')
   flushRecord: number;
 
@@ -144,6 +150,7 @@ export default class ElasticsearchSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ES.RetryTimes')
   retryTime: number;
 
@@ -157,6 +164,7 @@ export default class ElasticsearchSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.ES.EsVersion')
   esVersion: number;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts
index dde187f908..fb15f7c92f 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts
@@ -24,7 +24,7 @@ import { sourceFields } from '../common/sourceFields';
 import { SinkInfo } from '../common/SinkInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const fieldTypesConf = {
@@ -76,6 +76,7 @@ export default class GreenplumSink
   })
   @ColumnDecorator()
   @I18n('JDBC URL')
+  @SyncField()
   jdbcUrl: string;
 
   @FieldDecorator({
@@ -86,6 +87,7 @@ export default class GreenplumSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Greenplum.TableName')
   tableName: string;
 
@@ -97,6 +99,7 @@ export default class GreenplumSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Greenplum.PrimaryKey')
   primaryKey: string;
 
@@ -119,6 +122,7 @@ export default class GreenplumSink
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.EnableCreateResource')
   enableCreateResource: number;
 
@@ -130,6 +134,7 @@ export default class GreenplumSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Username')
   username: string;
 
@@ -141,6 +146,7 @@ export default class GreenplumSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Password')
   password: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts
index fa9b71e5d0..c134ad264f 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts
@@ -24,7 +24,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import { sourceFields } from '../common/sourceFields';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const hbaseFieldTypes = [
@@ -51,6 +51,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.Namespace')
   namespace: string;
 
@@ -62,6 +63,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.TableName')
   tableName: string;
 
@@ -73,6 +75,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.RowKey')
   rowKey: string;
 
@@ -85,6 +88,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.ZkQuorum')
   zkQuorum: string;
 
@@ -97,6 +101,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.ZkNodeParent')
   zkNodeParent: string;
 
@@ -110,6 +115,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.BufferFlushMaxSize')
   bufferFlushMaxSize: number;
 
@@ -123,6 +129,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.BufferFlushMaxRows')
   bufferFlushMaxRows: number;
 
@@ -137,6 +144,7 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.HBase.BufferFlushInterval')
   bufferFlushInterval: number;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts
index 99548215cc..10936b82a1 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts
@@ -27,7 +27,7 @@ import { sourceFields } from '../common/sourceFields';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const hiveFieldTypes = [
@@ -61,6 +61,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hive.DbName')
   dbName: string;
 
@@ -72,6 +73,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hive.TableName')
   tableName: string;
 
@@ -94,6 +96,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.EnableCreateResource')
   enableCreateResource: number;
 
@@ -105,6 +108,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.Username')
+  @SyncField()
   username: string;
 
   @FieldDecorator({
@@ -115,6 +119,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.Password')
+  @SyncField()
   password: string;
 
   @FieldDecorator({
@@ -126,6 +131,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.DataNodeName')
+  @SyncField()
   dataNodeName: string;
 
   @FieldDecorator({
@@ -163,6 +169,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.Hive.FileFormat')
+  @SyncField()
   fileFormat: string;
 
   @FieldDecorator({
@@ -184,6 +191,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     rules: [{ required: true }],
   })
   @I18n('meta.Sinks.Hive.DataEncoding')
+  @SyncField()
   dataEncoding: string;
 
   @FieldDecorator({
@@ -236,6 +244,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     ],
   })
   @I18n('meta.Sinks.Hive.DataSeparator')
+  @SyncField()
   dataSeparator: string;
 
   @FieldDecorator({
@@ -292,6 +301,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     },
   })
   @I18n('meta.Sinks.Hive.PartitionFieldList')
+  @SyncField()
   partitionFieldList: Record<string, unknown>[];
 }
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts
index f0b2056322..1e8ca6f2b4 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts
@@ -27,7 +27,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const hudiFieldTypes = [
@@ -115,6 +115,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hudi.DbName')
   dbName: string;
 
@@ -127,6 +128,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Hudi.TableName')
+  @SyncField()
   tableName: string;
 
   @FieldDecorator({
@@ -149,6 +151,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.EnableCreateResource')
+  @SyncField()
   enableCreateResource: number;
 
   @FieldDecorator({
@@ -160,6 +163,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.DataNodeName')
+  @SyncField()
   dataNodeName: string;
 
   @FieldDecorator({
@@ -186,6 +190,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Hudi.FileFormat')
+  @SyncField()
   fileFormat: string;
 
   @FieldDecorator({
@@ -214,6 +219,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hudi.ExtList')
   extList: string;
 
@@ -237,6 +243,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hudi.DataConsistency')
   dataConsistency: string;
 
@@ -261,6 +268,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hudi.PrimaryKey')
   primaryKey: string;
 
@@ -273,6 +281,7 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Hudi.PartitionKey')
   partitionKey: string;
 }
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts
index 2a1b29a146..d6b24c252a 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts
@@ -27,7 +27,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const icebergFieldTypes = [
@@ -118,6 +118,7 @@ export default class IcebergSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Iceberg.DbName')
   dbName: string;
 
@@ -129,6 +130,7 @@ export default class IcebergSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Iceberg.TableName')
   tableName: string;
 
@@ -152,6 +154,7 @@ export default class IcebergSink
     }),
   })
   @I18n('meta.Sinks.EnableCreateResource')
+  @SyncField()
   enableCreateResource: number;
 
   @FieldDecorator({
@@ -163,6 +166,7 @@ export default class IcebergSink
     }),
   })
   @I18n('meta.Sinks.DataNodeName')
+  @SyncField()
   dataNodeName: string;
 
   @FieldDecorator({
@@ -188,6 +192,7 @@ export default class IcebergSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Iceberg.FileFormat')
   fileFormat: string;
 
@@ -215,6 +220,7 @@ export default class IcebergSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Iceberg.ExtList')
   extList: string;
 
@@ -238,6 +244,7 @@ export default class IcebergSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Iceberg.DataConsistency')
   dataConsistency: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Kafka.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Kafka.ts
index 119a019e65..747ffc4ad8 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Kafka.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Kafka.ts
@@ -23,7 +23,7 @@ import { RenderList } from '@/plugins/RenderList';
 import { SinkInfo } from '../common/SinkInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class KafkaSink extends SinkInfo implements DataWithBackend, 
RenderRow, RenderList {
@@ -37,6 +37,7 @@ export default class KafkaSink extends SinkInfo implements 
DataWithBackend, Rend
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Kafka.Server')
+  @SyncField()
   bootstrapServers: string;
 
   @FieldDecorator({
@@ -48,6 +49,7 @@ export default class KafkaSink extends SinkInfo implements 
DataWithBackend, Rend
   })
   @ColumnDecorator()
   @I18n('Topic')
+  @SyncField()
   topicName: string;
 
   @FieldDecorator({
@@ -74,6 +76,7 @@ export default class KafkaSink extends SinkInfo implements 
DataWithBackend, Rend
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Kafka.SerializationType')
+  @SyncField()
   serializationType: string;
 
   @FieldDecorator({
@@ -87,6 +90,7 @@ export default class KafkaSink extends SinkInfo implements 
DataWithBackend, Rend
     rules: [{ required: true }],
   })
   @I18n('meta.Sinks.Kafka.PartitionNum')
+  @SyncField()
   partitionNum: number;
 
   @FieldDecorator({
@@ -112,5 +116,6 @@ export default class KafkaSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @I18n('meta.Sinks.Kafka.AutoOffsetReset')
+  @SyncField()
   autoOffsetReset: string;
 }
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts
index 5ab325174b..815c18615f 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts
@@ -27,7 +27,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const kuduFieldTypes = [
@@ -82,6 +82,7 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.DataNodeName')
+  @SyncField()
   dataNodeName: string;
 
   @FieldDecorator({
@@ -93,6 +94,7 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Kudu.TableName')
+  @SyncField()
   tableName: string;
 
   @FieldDecorator({
@@ -115,6 +117,7 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.EnableCreateResource')
+  @SyncField()
   enableCreateResource: number;
 
   @FieldDecorator({
@@ -128,6 +131,7 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Kudu.buckets')
+  @SyncField()
   buckets: number;
 
   @FieldDecorator({
@@ -156,6 +160,7 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Kudu.ExtList')
   extList: string;
 
@@ -179,6 +184,7 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Kudu.DataConsistency')
   dataConsistency: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts
index 98d9184fb3..fbb92eab1b 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts
@@ -25,7 +25,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const fieldTypesConf = {
@@ -73,6 +73,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.MySQL.DatabaseName')
+  @SyncField()
   databaseName: string;
 
   @FieldDecorator({
@@ -84,6 +85,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.MySQL.TableName')
+  @SyncField()
   tableName: string;
 
   @FieldDecorator({
@@ -95,6 +97,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.MySQL.PrimaryKey')
+  @SyncField()
   primaryKey: string;
 
   @FieldDecorator({
@@ -117,6 +120,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @I18n('meta.Sinks.EnableCreateResource')
+  @SyncField()
   enableCreateResource: number;
 
   @FieldDecorator({
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts
index 4f7c9baa1d..a6a145d395 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts
@@ -24,7 +24,7 @@ import { sourceFields } from '../common/sourceFields';
 import EditableTable from '@/ui/components/EditableTable';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const fieldTypesConf = {
@@ -69,6 +69,7 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
   })
   @ColumnDecorator()
   @I18n('JDBC URL')
+  @SyncField()
   jdbcUrl: string;
 
   @FieldDecorator({
@@ -79,6 +80,7 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Oracle.TableName')
   tableName: string;
 
@@ -91,6 +93,7 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Oracle.PrimaryKey')
+  @SyncField()
   primaryKey: string;
 
   @FieldDecorator({
@@ -113,6 +116,7 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
     }),
   })
   @I18n('meta.Sinks.EnableCreateResource')
+  @SyncField()
   enableCreateResource: number;
 
   @FieldDecorator({
@@ -124,6 +128,7 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
   })
   @ColumnDecorator()
   @I18n('meta.Sinks.Username')
+  @SyncField()
   username: string;
 
   @FieldDecorator({
@@ -134,6 +139,7 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Password')
   password: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts
index 6159eda722..dcda0d2aac 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts
@@ -24,7 +24,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import { sourceFields } from '../common/sourceFields';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const fieldTypesConf = {
@@ -72,6 +72,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('JDBC URL')
   jdbcUrl: string;
 
@@ -83,6 +84,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.PostgreSQL.DbName')
   dbName: string;
 
@@ -94,6 +96,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.PostgreSQL.TableName')
   tableName: string;
 
@@ -105,6 +108,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.PostgreSQL.PrimaryKey')
   primaryKey: string;
 
@@ -127,6 +131,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.EnableCreateResource')
   enableCreateResource: number;
 
@@ -138,6 +143,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Username')
   username: string;
 
@@ -149,6 +155,7 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Password')
   password: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts
index 0d89d644b8..930efdf682 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts
@@ -27,7 +27,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const redisTargetTypes = [
@@ -77,6 +77,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       nodeType: 'Redis',
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.DataNodeName')
   dataNodeName: string;
 
@@ -103,6 +104,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Redis.DataType')
   dataType: string;
 
@@ -115,6 +117,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Redis.SchemaMapMode')
   schemaMapMode: string;
 
@@ -145,6 +148,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
     rules: [{ required: true }],
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.FormatDataType')
   formatDataType: string;
 
@@ -167,6 +171,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.FormatIgnoreParseError')
   formatIgnoreParseError: boolean;
 
@@ -189,6 +194,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
     rules: [{ required: true }],
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.FormatDataEncoding')
   formatDataEncoding: string;
 
@@ -241,6 +247,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       },
     ],
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.FormatDataSeparator')
   formatDataSeparator: string;
 
@@ -254,6 +261,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.Redis.Database')
   database: number;
 
@@ -267,6 +275,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     rules: [{ required: false }],
     suffix: i18n.t('meta.Sinks.Redis.TtlUnit'),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.Ttl')
   ttl: number;
 
@@ -306,6 +315,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.ExtList')
   properties: string;
 
@@ -319,6 +329,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
     suffix: i18n.t('meta.Sinks.Redis.TimeoutUnit'),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.Timeout')
   timeout: number;
 
@@ -332,6 +343,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
     }),
     suffix: i18n.t('meta.Sinks.Redis.SoTimeoutUnit'),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.SoTimeout')
   soTimeout: number;
 
@@ -344,6 +356,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.MaxTotal')
   maxTotal: number;
 
@@ -356,6 +369,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.MaxIdle')
   maxIdle: number;
 
@@ -368,6 +382,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.MinIdle')
   minIdle: number;
 
@@ -381,6 +396,7 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       min: 1,
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Redis.MaxRetries')
   maxRetries: number;
 }
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts
index f5e696a2fc..88a917f98f 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts
@@ -24,7 +24,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import { sourceFields } from '../common/sourceFields';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const fieldTypesConf = {
@@ -76,6 +76,7 @@ export default class SqlServerSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('JDBC URL')
   jdbcUrl: string;
 
@@ -87,6 +88,7 @@ export default class SqlServerSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.SQLServer.SchemaName')
   schemaName: string;
 
@@ -99,6 +101,7 @@ export default class SqlServerSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.SQLServer.ServerTimezone')
   serverTimezone: string;
 
@@ -111,6 +114,7 @@ export default class SqlServerSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.SQLServer.TableName')
   tableName: string;
 
@@ -123,6 +127,7 @@ export default class SqlServerSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.SQLServer.PrimaryKey')
   primaryKey: string;
 
@@ -145,6 +150,7 @@ export default class SqlServerSink
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.EnableCreateResource')
   enableCreateResource: number;
 
@@ -166,6 +172,7 @@ export default class SqlServerSink
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.SQLServer.AllMigration')
   allMigration: boolean;
 
@@ -176,6 +183,7 @@ export default class SqlServerSink
       disabled: [110, 130].includes(values?.status),
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Username')
   username: string;
 
@@ -186,6 +194,7 @@ export default class SqlServerSink
       disabled: [110, 130].includes(values?.status),
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Password')
   password: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts
index eaa754d193..6798c23c35 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts
@@ -25,7 +25,7 @@ import { SinkInfo } from '../common/SinkInfo';
 import NodeSelect from '@/ui/components/NodeSelect';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const fieldTypesConf = {
@@ -69,6 +69,7 @@ export default class StarRocksSink
       nodeType: 'STARROCKS',
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.DataNodeName')
   dataNodeName: string;
 
@@ -80,6 +81,7 @@ export default class StarRocksSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.DatabaseName')
   databaseName: string;
 
@@ -91,6 +93,7 @@ export default class StarRocksSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.TableName')
   tableName: string;
 
@@ -102,6 +105,7 @@ export default class StarRocksSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.PrimaryKey')
   primaryKey: string;
 
@@ -123,6 +127,7 @@ export default class StarRocksSink
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.SinkMultipleEnable')
   sinkMultipleEnable: boolean;
 
@@ -135,6 +140,7 @@ export default class StarRocksSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.SinkMultipleFormat')
   sinkMultipleFormat: string;
 
@@ -147,6 +153,7 @@ export default class StarRocksSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.DatabasePattern')
   databasePattern: string;
 
@@ -159,6 +166,7 @@ export default class StarRocksSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.StarRocks.TablePattern')
   tablePattern: string;
 
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts
index 244b854dab..9690179bc5 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts
@@ -24,7 +24,7 @@ import { sourceFields } from '../common/sourceFields';
 import { SinkInfo } from '../common/SinkInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 const tdsqlPostgreSQLFieldTypes = [
@@ -69,6 +69,7 @@ export default class TDSQLPostgreSQLSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('JDBC URL')
   jdbcUrl: string;
 
@@ -80,6 +81,7 @@ export default class TDSQLPostgreSQLSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.TDSQLPostgreSQL.SchemaName')
   schemaName: string;
 
@@ -91,6 +93,7 @@ export default class TDSQLPostgreSQLSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.TDSQLPostgreSQL.TableName')
   tableName: string;
 
@@ -102,6 +105,7 @@ export default class TDSQLPostgreSQLSink
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sinks.TDSQLPostgreSQL.PrimaryKey')
   primaryKey: string;
 
@@ -124,6 +128,7 @@ export default class TDSQLPostgreSQLSink
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.EnableCreateResource')
   enableCreateResource: number;
 
@@ -134,6 +139,7 @@ export default class TDSQLPostgreSQLSink
       disabled: [110, 130].includes(values?.status),
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Username')
   username: string;
 
@@ -144,6 +150,7 @@ export default class TDSQLPostgreSQLSink
       disabled: [110, 130].includes(values?.status),
     }),
   })
+  @SyncField()
   @I18n('meta.Sinks.Password')
   password: string;
 
diff --git a/inlong-dashboard/src/plugins/sources/common/SourceDefaultInfo.ts 
b/inlong-dashboard/src/plugins/sources/common/SourceDefaultInfo.ts
index 7321838694..b119c086bd 100644
--- a/inlong-dashboard/src/plugins/sources/common/SourceDefaultInfo.ts
+++ b/inlong-dashboard/src/plugins/sources/common/SourceDefaultInfo.ts
@@ -26,13 +26,14 @@ import { sources, defaultValue } from '..';
 import i18n from '@/i18n';
 
 const { I18nMap, I18n } = DataWithBackend;
-const { FieldList, FieldDecorator } = RenderRow;
+const { FieldList, FieldDecorator, SyncField, SyncFieldSet } = RenderRow;
 const { ColumnList, ColumnDecorator } = RenderList;
 
 export class SourceDefaultInfo implements DataWithBackend, RenderRow, 
RenderList {
   static I18nMap = I18nMap;
   static FieldList = FieldList;
   static ColumnList = ColumnList;
+  static SyncFieldSet = SyncFieldSet;
 
   readonly id: number;
 
@@ -41,6 +42,7 @@ export class SourceDefaultInfo implements DataWithBackend, 
RenderRow, RenderList
     type: 'text',
     hidden: true,
   })
+  @SyncField()
   @I18n('inlongGroupId')
   readonly inlongGroupId: string;
 
@@ -48,6 +50,7 @@ export class SourceDefaultInfo implements DataWithBackend, 
RenderRow, RenderList
     type: 'text',
     hidden: true,
   })
+  @SyncField()
   @I18n('inlongStreamId')
   readonly inlongStreamId: string;
 
@@ -69,6 +72,7 @@ export class SourceDefaultInfo implements DataWithBackend, 
RenderRow, RenderList
   @ColumnDecorator({
     render: type => sources.find(c => c.value === type)?.label || type,
   })
+  @SyncField()
   @I18n('meta.Sources.Type')
   sourceType: string;
 
@@ -88,6 +92,7 @@ export class SourceDefaultInfo implements DataWithBackend, 
RenderRow, RenderList
     visible: values => Boolean(values.sourceType),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Name')
   sourceName: string;
 
@@ -103,6 +108,7 @@ export class SourceDefaultInfo implements DataWithBackend, 
RenderRow, RenderList
   @ColumnDecorator({
     render: text => genStatusTag(text),
   })
+  @SyncField()
   @I18n('basic.Status')
   readonly status: string;
 
@@ -114,8 +120,42 @@ export class SourceDefaultInfo implements DataWithBackend, 
RenderRow, RenderList
     return data;
   }
 
+  renderSyncRow() {
+    const constructor = this.constructor as typeof SourceDefaultInfo;
+    const { FieldList, SyncFieldSet } = constructor;
+    return FieldList.filter(item => {
+      if (item.name === 'sourceType') {
+        item.props = values => ({
+          disabled: Boolean(values.id),
+          dropdownMatchSelectWidth: false,
+          options: sources
+            .filter(item => item.useSync !== false)
+            .map(item => ({
+              label: item.label,
+              value: item.value,
+            })),
+        });
+      }
+      return SyncFieldSet.has(item.name as string);
+    });
+  }
+
   renderRow() {
     const constructor = this.constructor as typeof SourceDefaultInfo;
+    constructor.FieldList.map(item => {
+      if (item.name === 'sourceType') {
+        item.props = values => ({
+          disabled: Boolean(values.id),
+          dropdownMatchSelectWidth: false,
+          options: sources
+            .filter(item => item.value)
+            .map(item => ({
+              label: item.label,
+              value: item.value,
+            })),
+        });
+      }
+    });
     return constructor.FieldList;
   }
 
diff --git a/inlong-dashboard/src/plugins/sources/defaults/Hudi.ts 
b/inlong-dashboard/src/plugins/sources/defaults/Hudi.ts
index aecc542551..c88773cad6 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/Hudi.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/Hudi.ts
@@ -25,7 +25,7 @@ import i18n from '@/i18n';
 import EditableTable from '@/ui/components/EditableTable';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class HudiSource
@@ -40,6 +40,7 @@ export default class HudiSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Hudi.DbName')
   dbName: string;
 
@@ -51,6 +52,7 @@ export default class HudiSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Hudi.TableName')
   tableName: string;
 
@@ -63,6 +65,7 @@ export default class HudiSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('Catalog URI')
   catalogUri: string;
 
@@ -75,6 +78,7 @@ export default class HudiSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Hudi.Warehouse')
   warehouse: string;
 
@@ -98,6 +102,7 @@ export default class HudiSource
     tooltip: i18n.t('meta.Sources.Hudi.ReadStreamingSkipCompactionHelp'),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Hudi.ReadStreamingSkipCompaction')
   readStreamingSkipCompaction: boolean;
 
@@ -111,6 +116,7 @@ export default class HudiSource
     tooltip: i18n.t('meta.Sources.Hudi.ReadStartCommitHelp'),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Hudi.ReadStartCommit')
   readStartCommit: string;
 
@@ -140,6 +146,7 @@ export default class HudiSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Hudi.ExtList')
   extList: string;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/MQTT.ts 
b/inlong-dashboard/src/plugins/sources/defaults/MQTT.ts
index 970b73d079..1ef65436b2 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/MQTT.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/MQTT.ts
@@ -23,7 +23,7 @@ import { RenderList } from '@/plugins/RenderList';
 import { SourceInfo } from '../common/SourceInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 
 export default class MQTTSource
   extends SourceInfo
@@ -37,6 +37,7 @@ export default class MQTTSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('Server URI')
   serverURI: string;
 
@@ -47,6 +48,7 @@ export default class MQTTSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.MQTT.Username')
   username: string;
 
@@ -57,6 +59,7 @@ export default class MQTTSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.MQTT.Password')
   password: string;
 
@@ -67,6 +70,7 @@ export default class MQTTSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('Topic')
   topic: string;
 
@@ -77,6 +81,7 @@ export default class MQTTSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('Client ID')
   clientId: string;
 
@@ -89,6 +94,7 @@ export default class MQTTSource
       max: 2,
     }),
   })
+  @SyncField()
   @I18n('QoS')
   qos: number;
 
@@ -98,6 +104,7 @@ export default class MQTTSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.MQTT.MqttVersion')
   mqttVersion: string;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/Mongodb.ts 
b/inlong-dashboard/src/plugins/sources/defaults/Mongodb.ts
index 34f4bb0f75..442b1e91f4 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/Mongodb.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/Mongodb.ts
@@ -23,7 +23,7 @@ import { RenderList } from '@/plugins/RenderList';
 import { SourceInfo } from '../common/SourceInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class MongodbSource
@@ -39,6 +39,7 @@ export default class MongodbSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Mongodb.Hosts')
   hosts: string;
 
@@ -50,6 +51,7 @@ export default class MongodbSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Mongodb.Username')
   username: string;
 
@@ -60,6 +62,7 @@ export default class MongodbSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Mongodb.Password')
   password: string;
 
@@ -70,6 +73,7 @@ export default class MongodbSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Mongodb.Database')
   database: string;
 
@@ -80,6 +84,7 @@ export default class MongodbSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Mongodb.Collection')
   collection: string;
 
@@ -89,6 +94,7 @@ export default class MongodbSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Mongodb.PrimaryKey')
   primaryKey: string;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/MySQLBinlog.ts 
b/inlong-dashboard/src/plugins/sources/defaults/MySQLBinlog.ts
index c765a2a216..517bd57a2d 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/MySQLBinlog.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/MySQLBinlog.ts
@@ -24,7 +24,7 @@ import i18n from '@/i18n';
 import { SourceInfo } from '../common/SourceInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class TubeMqSource
@@ -38,6 +38,7 @@ export default class TubeMqSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @ColumnDecorator()
   @I18n('meta.Sources.Db.Server')
   hostname: string;
@@ -52,6 +53,7 @@ export default class TubeMqSource
       max: 65535,
     }),
   })
+  @SyncField()
   @ColumnDecorator()
   @I18n('meta.Sources.Db.Port')
   port: number;
@@ -63,6 +65,7 @@ export default class TubeMqSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Db.User')
   user: string;
 
@@ -73,6 +76,7 @@ export default class TubeMqSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Db.Password')
   password: string;
 
@@ -131,6 +135,7 @@ export default class TubeMqSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Db.AllMigration')
   allMigration: boolean;
 
@@ -143,17 +148,19 @@ export default class TubeMqSource
     }),
     visible: values => !values?.allMigration,
   })
+  @SyncField()
   @I18n('meta.Sources.Db.TableWhiteList')
   tableWhiteList: boolean;
 
   @FieldDecorator({
     type: 'input',
+    rules: [{ required: true }],
     tooltip: i18n.t('meta.Sources.Db.DatabaseWhiteListHelp'),
     props: values => ({
       disabled: values?.status === 101,
     }),
-    visible: values => values?.allMigration,
   })
+  @SyncField()
   @I18n('meta.Sources.Db.DatabaseWhiteList')
   databaseWhiteList: string;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/Oracle.ts 
b/inlong-dashboard/src/plugins/sources/defaults/Oracle.ts
index 0e87bd9257..aa05728f67 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/Oracle.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/Oracle.ts
@@ -24,7 +24,7 @@ import { SourceInfo } from '../common/SourceInfo';
 import i18n from '@/i18n';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class OracleSource
@@ -39,6 +39,7 @@ export default class OracleSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Oracle.Hostname')
   hostname: string;
 
@@ -53,6 +54,7 @@ export default class OracleSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Oracle.Port')
   port: number;
 
@@ -64,6 +66,7 @@ export default class OracleSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Oracle.Username')
   username: string;
 
@@ -74,6 +77,7 @@ export default class OracleSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.Password')
   password: string;
 
@@ -84,6 +88,7 @@ export default class OracleSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.Database')
   database: string;
 
@@ -94,6 +99,7 @@ export default class OracleSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.SchemaName')
   schemaName: string;
 
@@ -104,6 +110,7 @@ export default class OracleSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.TableName')
   tableName: string;
 
@@ -125,6 +132,7 @@ export default class OracleSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.AllMigration')
   allMigration: boolean;
 
@@ -146,6 +154,7 @@ export default class OracleSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.ScanStartupMode')
   scanStartupMode: string;
 
@@ -155,6 +164,7 @@ export default class OracleSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Oracle.PrimaryKey')
   primaryKey: string;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/PostgreSQL.ts 
b/inlong-dashboard/src/plugins/sources/defaults/PostgreSQL.ts
index a2b8ac0993..4c60c8a40f 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/PostgreSQL.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/PostgreSQL.ts
@@ -24,7 +24,7 @@ import { SourceInfo } from '../common/SourceInfo';
 import i18n from '@/i18n';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class PostgreSQLSource
@@ -39,6 +39,7 @@ export default class PostgreSQLSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.Hostname')
   hostname: string;
 
@@ -53,6 +54,7 @@ export default class PostgreSQLSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.Port')
   port: number;
 
@@ -63,6 +65,7 @@ export default class PostgreSQLSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.Database')
   database: string;
 
@@ -73,6 +76,7 @@ export default class PostgreSQLSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.SchemaName')
   schema: string;
 
@@ -83,6 +87,7 @@ export default class PostgreSQLSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @ColumnDecorator()
   @I18n('meta.Sources.PostgreSQL.Username')
   username: string;
@@ -94,6 +99,7 @@ export default class PostgreSQLSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.Password')
   password: string;
 
@@ -105,6 +111,7 @@ export default class PostgreSQLSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.TableName')
   tableNameList: string;
 
@@ -114,6 +121,7 @@ export default class PostgreSQLSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.PrimaryKey')
   primaryKey: string;
 
@@ -150,6 +158,7 @@ export default class PostgreSQLSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.PostgreSQL.decodingPluginName')
   decodingPluginName: string;
 
diff --git a/inlong-dashboard/src/plugins/sources/defaults/Redis.ts 
b/inlong-dashboard/src/plugins/sources/defaults/Redis.ts
index 1798dd310d..715c294971 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/Redis.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/Redis.ts
@@ -23,7 +23,7 @@ import { RenderList } from '@/plugins/RenderList';
 import { SourceInfo } from '../common/SourceInfo';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class RedisSource
@@ -38,6 +38,7 @@ export default class RedisSource
       min: 0,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.Database')
   database: number;
 
@@ -49,6 +50,7 @@ export default class RedisSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Redis.Username')
   username: string;
 
@@ -59,6 +61,7 @@ export default class RedisSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.Password')
   password: string;
 
@@ -88,6 +91,7 @@ export default class RedisSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.RedisCommand')
   redisCommand: string;
 
@@ -112,6 +116,7 @@ export default class RedisSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.RedisMode')
   redisMode: string;
 
@@ -123,6 +128,7 @@ export default class RedisSource
       placeholder: '127.0.0.1:6379,127.0.0.1:6378',
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.ClusterNodes')
   clusterNodes: string;
 
@@ -143,6 +149,7 @@ export default class RedisSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.AdditionalKey')
   additionalKey: string;
 
@@ -154,6 +161,7 @@ export default class RedisSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Redis.Hostname')
   host: string;
 
@@ -168,6 +176,7 @@ export default class RedisSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.Redis.Port')
   port: number;
 
@@ -177,6 +186,7 @@ export default class RedisSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.PrimaryKey')
   primaryKey: string;
 
@@ -187,6 +197,7 @@ export default class RedisSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.Redis.Timeout')
   timeout: number;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/SQLServer.ts 
b/inlong-dashboard/src/plugins/sources/defaults/SQLServer.ts
index b33b642af8..d2c691cd9a 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/SQLServer.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/SQLServer.ts
@@ -24,7 +24,7 @@ import { SourceInfo } from '../common/SourceInfo';
 import i18n from '@/i18n';
 
 const { I18n } = DataWithBackend;
-const { FieldDecorator } = RenderRow;
+const { FieldDecorator, SyncField } = RenderRow;
 const { ColumnDecorator } = RenderList;
 
 export default class SQLServerSource
@@ -39,6 +39,7 @@ export default class SQLServerSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.SQLServer.Hostname')
   hostname: string;
 
@@ -53,6 +54,7 @@ export default class SQLServerSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.SQLServer.Port')
   port: number;
 
@@ -64,6 +66,7 @@ export default class SQLServerSource
     }),
   })
   @ColumnDecorator()
+  @SyncField()
   @I18n('meta.Sources.SQLServer.Username')
   username: string;
 
@@ -74,6 +77,7 @@ export default class SQLServerSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.Password')
   password: string;
 
@@ -84,6 +88,7 @@ export default class SQLServerSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.Database')
   database: string;
 
@@ -105,6 +110,7 @@ export default class SQLServerSource
       ],
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.AllMigration')
   allMigration: boolean;
 
@@ -116,6 +122,7 @@ export default class SQLServerSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.ServerTimezone')
   serverTimezone: string;
 
@@ -126,6 +133,7 @@ export default class SQLServerSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.SchemaName')
   schemaName: string;
 
@@ -136,6 +144,7 @@ export default class SQLServerSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.TableName')
   tableName: string;
 
@@ -145,6 +154,7 @@ export default class SQLServerSource
       disabled: values?.status === 101,
     }),
   })
+  @SyncField()
   @I18n('meta.Sources.SQLServer.PrimaryKey')
   primaryKey: string;
 }
diff --git a/inlong-dashboard/src/plugins/sources/defaults/index.ts 
b/inlong-dashboard/src/plugins/sources/defaults/index.ts
index 6e4d912b9e..4d9ef7b974 100644
--- a/inlong-dashboard/src/plugins/sources/defaults/index.ts
+++ b/inlong-dashboard/src/plugins/sources/defaults/index.ts
@@ -24,16 +24,19 @@ export const allDefaultSources: 
MetaExportWithBackendList<SourceMetaType> = [
   {
     label: 'ALL',
     value: '',
+    useSync: false,
     LoadEntity: () => import('../common/SourceInfo').then(r => ({ default: 
r.SourceInfo })),
   },
   {
     label: 'Auto-Push',
     value: 'AUTO_PUSH',
+    useSync: false,
     LoadEntity: () => import('./AutoPush'),
   },
   {
     label: 'File',
     value: 'FILE',
+    useSync: false,
     LoadEntity: () => import('./File'),
   },
   {
diff --git a/inlong-dashboard/src/plugins/types.ts 
b/inlong-dashboard/src/plugins/types.ts
index a20310c903..a1a06da6d6 100644
--- a/inlong-dashboard/src/plugins/types.ts
+++ b/inlong-dashboard/src/plugins/types.ts
@@ -26,6 +26,7 @@ export type MetaExportStaticList<T> = {
 export type MetaExportWithBackendList<T> = {
   label: string;
   value: string;
+  useSync?: boolean;
   LoadEntity: () => Promise<{ default: T }>;
 }[];
 
diff --git a/inlong-dashboard/src/ui/components/FieldList/DetailModal.tsx 
b/inlong-dashboard/src/ui/components/FieldList/DetailModal.tsx
index 13d9b86d8b..a4324d2b61 100644
--- a/inlong-dashboard/src/ui/components/FieldList/DetailModal.tsx
+++ b/inlong-dashboard/src/ui/components/FieldList/DetailModal.tsx
@@ -27,6 +27,7 @@ import { useDefaultMeta, useLoadMeta, TransformMetaType } 
from '@/plugins';
 import request from '@/core/utils/request';
 import EditableTable, { ColumnsItemProps } from '../EditableTable';
 import i18n from '@/i18n';
+import { fieldAllTypes } from './FieldTypeConf';
 
 export interface Props extends ModalProps {
   // When editing, use the ID to call the interface for obtaining details
@@ -114,10 +115,10 @@ const Comp: React.FC<Props> = ({
       title: i18n.t('meta.Stream.FieldType'),
       dataIndex: 'fieldType',
       type: 'select',
-      initialValue: fieldTypes[0].value,
+      initialValue: '',
       props: (text, record) => ({
         disabled: record.id,
-        options: fieldTypes,
+        options: isSource === true ? fieldTypes : fieldAllTypes[sinkType],
       }),
       rules: [{ required: true }],
     },
@@ -170,6 +171,7 @@ const Comp: React.FC<Props> = ({
     if (inlongStreamId) {
       getData(inlongStreamId);
       getSinkData();
+      setSinkType(sinkData?.list[0]?.sinkType);
     }
   }, [getData, getSinkData, inlongStreamId]);
 
diff --git a/inlong-dashboard/src/ui/components/FieldList/FieldTypeConf.tsx 
b/inlong-dashboard/src/ui/components/FieldList/FieldTypeConf.tsx
new file mode 100644
index 0000000000..aa0b8d92da
--- /dev/null
+++ b/inlong-dashboard/src/ui/components/FieldList/FieldTypeConf.tsx
@@ -0,0 +1,404 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { ColumnsType } from 'antd/es/table';
+
+export interface Props {
+  inlongGroupId: string;
+  inlongStreamId?: string;
+  isSource: boolean;
+  columns: ColumnsType;
+  //   readonly?: string;
+}
+
+const clickhouseFieldType = [
+  'String',
+  'Int8',
+  'Int16',
+  'Int32',
+  'Int64',
+  'Float32',
+  'Float64',
+  'DateTime',
+  'Date',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const dorisFieldTypes = [
+  'NULL_TYPE',
+  'BOOLEAN',
+  'TINYINT',
+  'SMALLINT',
+  'INT',
+  'BIGINT',
+  'FLOAT',
+  'DOUBLE',
+  'DATE',
+  'DATETIME',
+  'DECIMAL',
+  'CHAR',
+  'LARGEINT',
+  'VARCHAR',
+  'DECIMALV2',
+  'TIME',
+  'HLL',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const esFieldTypes = [
+  'text',
+  'keyword',
+  'date',
+  'boolean',
+  'long',
+  'integer',
+  'short',
+  'byte',
+  'double',
+  'float',
+  'half_float',
+  'scaled_float',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const hbaseFieldTypes = [
+  'int',
+  'short',
+  'long',
+  'float',
+  'double',
+  'byte',
+  'bytes',
+  'string',
+  'boolean',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const hiveFieldTypes = [
+  'string',
+  'varchar',
+  'char',
+  'tinyint',
+  'smallint',
+  'int',
+  'bigint',
+  'float',
+  'double',
+  'decimal',
+  'numeric',
+  'boolean',
+  'binary',
+  'timestamp',
+  'date',
+  // 'interval',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const hudiFieldTypes = [
+  'int',
+  'long',
+  'string',
+  'float',
+  'double',
+  'date',
+  'timestamp',
+  'time',
+  'boolean',
+  'decimal',
+  'timestamptz',
+  'binary',
+  'fixed',
+  'uuid',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const icebergFieldTypes = [
+  'string',
+  'boolean',
+  'int',
+  'long',
+  'float',
+  'double',
+  'decimal',
+  'date',
+  'time',
+  'timestamp',
+  'timestamptz',
+  'binary',
+  'fixed',
+  'uuid',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const kuduFieldTypes = [
+  'int',
+  'long',
+  'string',
+  'float',
+  'double',
+  'date',
+  'timestamp',
+  'time',
+  'boolean',
+  'decimal',
+  'timestamptz',
+  'binary',
+  'fixed',
+  'uuid',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const redisFieldTypes = [
+  'int',
+  'long',
+  'string',
+  'float',
+  'double',
+  'date',
+  'timestamp',
+  'time',
+  'boolean',
+  'timestamptz',
+  'binary',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const tdsqlPgFieldTypes = [
+  'SMALLINT',
+  'SMALLSERIAL',
+  'INT2',
+  'SERIAL2',
+  'INTEGER',
+  'SERIAL',
+  'BIGINT',
+  'BIGSERIAL',
+  'REAL',
+  'FLOAT4',
+  'FLOAT8',
+  'DOUBLE',
+  'NUMERIC',
+  'DECIMAL',
+  'BOOLEAN',
+  'DATE',
+  'TIME',
+  'TIMESTAMP',
+  'CHAR',
+  'CHARACTER',
+  'VARCHAR',
+  'TEXT',
+  'BYTEA',
+].map(item => ({
+  label: item,
+  value: item,
+}));
+
+const greenplumTypesConf = {
+  SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  INT2: () => '',
+  SMALLSERIAL: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  SERIAL: (m, d) => (1 <= m && m <= 11 ? '' : '1 <= M <= 11'),
+  SERIAL2: () => '',
+  INTEGER: (m, d) => (1 <= m && m <= 11 ? '' : '1 <= M <= 11'),
+  BIGINT: (m, d) => (1 <= m && m <= 20 ? '' : '1 <= M <= 20'),
+  BIGSERIAL: (m, d) => (1 <= m && m <= 20 ? '' : '1 <= M <= 20'),
+  REAL: () => '',
+  FLOAT4: () => '',
+  FLOAT8: () => '',
+  DOUBLE: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  NUMERIC: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  DECIMAL: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  BOOLEAN: () => '',
+  DATE: () => '',
+  TIME: () => '',
+  TIMESTAMP: () => '',
+  CHAR: (m, d) => (1 <= m && m <= 255 ? '' : '1 <= M <= 255'),
+  CHARACTER: (m, d) => (1 <= m && m <= 255 ? '' : '1 <= M <= 255'),
+  VARCHAR: (m, d) => (1 <= m && m <= 255 ? '' : '1 <= M <= 255'),
+  TEXT: () => '',
+  BYTEA: () => '',
+};
+
+const mysqlTypesConf = {
+  TINYINT: (m, d) => (1 <= m && m <= 4 ? '' : '1<=M<=4'),
+  SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1<=M<=6'),
+  MEDIUMINT: (m, d) => (1 <= m && m <= 9 ? '' : '1<=M<=9'),
+  INT: (m, d) => (1 <= m && m <= 11 ? '' : '1<=M<=11'),
+  FLOAT: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  BIGINT: (m, d) => (1 <= m && m <= 20 ? '' : '1<=M<=20'),
+  DOUBLE: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  NUMERIC: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  DECIMAL: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  BOOLEAN: () => '',
+  DATE: () => '',
+  TIME: () => '',
+  DATETIME: () => '',
+  CHAR: (m, d) => (1 <= m && m <= 255 ? '' : '1<=M<=255'),
+  VARCHAR: (m, d) => (1 <= m && m <= 255 ? '' : '1<=M<=255'),
+  TEXT: () => '',
+  BINARY: (m, d) => (1 <= m && m <= 64 ? '' : '1<=M<=64'),
+  VARBINARY: (m, d) => (1 <= m && m <= 64 ? '' : '1<=M<=64'),
+  BLOB: () => '',
+};
+
+const oracleTypesConf = {
+  BINARY_FLOAT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  BINARY_DOUBLE: (m, d) => (1 <= m && m <= 10 ? '' : '1 <= M <= 10'),
+  SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  FLOAT: (m, d) => (1 <= m && m <= 126 ? '' : '1 <= M <= 126'),
+  FLOAT4: () => '',
+  FLOAT8: () => '',
+  DOUBLE: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  REAL: () => '',
+  NUMBER: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  NUMERIC: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  DATE: () => '',
+  DECIMAL: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  BOOLEAN: () => '',
+  TIMESTAMP: () => '',
+  CHAR: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  VARCHAR: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  CLOB: () => '',
+  RAW: (m, d) => (1 <= m && m <= 2000 ? '' : ' 1 <= M <= 2000'),
+  BLOB: () => '',
+};
+
+const pgTypesConf = {
+  SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  INT2: (m, d) => (1 <= m && m <= 11 ? '' : '1 <= M <= 11'),
+  SMALLSERIAL: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  SERIAL2: () => '',
+  INTEGER: (m, d) => (1 <= m && m <= 11 ? '' : '1 <= M <= 11'),
+  SERIAL: (m, d) => (1 <= m && m <= 11 ? '' : '1 <= M <= 11'),
+  BIGINT: (m, d) => (1 <= m && m <= 20 ? '' : '1 <= M <= 20'),
+  BIGSERIAL: (m, d) => (1 <= m && m <= 20 ? '' : '1 <= M <= 20'),
+  REAL: (m, d) => (1 <= m && m <= 24 ? '' : '1 <= M <= 24'),
+  FLOAT4: (m, d) => (1 <= m && m <= 24 ? '' : '1 <= M <= 24'),
+  FLOAT8: (m, d) => (24 < m && m <= 53 ? '' : '24 < M <= 53'),
+  DOUBLE: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  NUMERIC: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  DECIMAL: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  BOOLEAN: () => '',
+  DATE: () => '',
+  TIME: () => '',
+  TIMESTAMP: () => '',
+  CHAR: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  CHARACTER: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  VARCHAR: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  TEXT: () => '',
+  BYTEA: () => '',
+};
+
+const sqlServerTypesConf = {
+  CHAR: (m, d) => (1 <= m && m <= 8000 ? '' : '1 <= M <= 8000'),
+  VARCHAR: (m, d) => (1 <= m && m <= 8000 ? '' : '1 <= M<= 8000'),
+  NCHAR: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  NVARCHAR: (m, d) => (1 <= m && m <= 4000 ? '' : '1 <= M <= 4000'),
+  TEXT: () => '',
+  NTEXT: () => '',
+  XML: () => '',
+  BIGINT: (m, d) => (1 <= m && m <= 20 ? '' : '1 <= M <= 20'),
+  BIGSERIAL: (m, d) => (1 <= m && m <= 20 ? '' : '1 <= M <= 20'),
+  DECIMAL: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D < M'),
+  MONEY: (m, d) => (1 <= m && m <= 15 && 1 <= d && d <= 4 ? '' : '1 <= M <= 
15, 1 <= D <= 4'),
+  SMALLMONEY: (m, d) => (1 <= m && m <= 7 && 1 <= d && d <= 4 ? '' : '1 <= M 
<= 7, 1 <= D <= 4'),
+  NUMERIC: (m, d) => (1 <= m && m <= 38 && 0 <= d && d < m ? '' : '1 <= M <= 
38, 0 <= D <= M'),
+  FLOAT: (m, d) => (1 <= m && m <= 24 ? '' : '1 <= M <= 24'),
+  REAL: (m, d) => (1 <= m && m <= 24 ? '' : '1 <= M <= 24'),
+  BIT: (m, d) => (1 <= m && m <= 64 ? '' : '1 <= M <= 64'),
+  INT: (m, d) => (1 <= m && m <= 11 ? '' : '1 <= M <= 11'),
+  TINYINT: (m, d) => (1 <= m && m <= 4 ? '' : '1 <= M <= 4'),
+  SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
+  TIME: () => '',
+  DATETIME: () => '',
+  DATETIME2: () => '',
+  SMALLDATETIME: () => '',
+  DATETIMEOFFSET: () => '',
+};
+
+const starRocksTypesConf = {
+  CHAR: (m, d) => (1 <= m && m <= 255 ? '' : '1<=M<=255'),
+  VARCHAR: (m, d) => (1 <= m && m <= 255 ? '' : '1<=M<=255'),
+  DATE: () => '',
+  TINYINT: (m, d) => (1 <= m && m <= 4 ? '' : '1<=M<=4'),
+  SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1<=M<=6'),
+  INT: (m, d) => (1 <= m && m <= 11 ? '' : '1<=M<=11'),
+  BIGINT: (m, d) => (1 <= m && m <= 20 ? '' : '1<=M<=20'),
+  LARGEINT: () => '',
+  STRING: () => '',
+  DATETIME: () => '',
+  FLOAT: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  DOUBLE: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  DECIMAL: (m, d) =>
+    1 <= m && m <= 255 && 1 <= d && d <= 30 && d <= m - 2 ? '' : 
'1<=M<=255,1<=D<=30,D<=M-2',
+  BOOLEAN: () => '',
+};
+
+const getFieldTypes = fieldTypesConf => {
+  return Object.keys(fieldTypesConf).reduce(
+    (acc, key) =>
+      acc.concat({
+        label: key,
+        value: key,
+      }),
+    [],
+  );
+};
+
+export const fieldAllTypes = {
+  CLICKHOUSE: clickhouseFieldType,
+  DORIS: dorisFieldTypes,
+  ELASTICSEARCH: esFieldTypes,
+  GREENPLUM: getFieldTypes(greenplumTypesConf),
+  HIVE: hiveFieldTypes,
+  HBASE: hbaseFieldTypes,
+  ICEBERG: icebergFieldTypes,
+  HUDI: hudiFieldTypes,
+  MYSQL: getFieldTypes(mysqlTypesConf),
+  ORACLE: getFieldTypes(oracleTypesConf),
+  POSTGRESQL: getFieldTypes(pgTypesConf),
+  SQLSERVER: getFieldTypes(sqlServerTypesConf),
+  STARROCKS: getFieldTypes(starRocksTypesConf),
+  TDSQLPOSTGRESQL: tdsqlPgFieldTypes,
+  REDIS: redisFieldTypes,
+  KUDU: kuduFieldTypes,
+};
diff --git 
a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/DetailModal.tsx 
b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/DetailModal.tsx
index 1f458cce5b..872cb6564b 100644
--- a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/DetailModal.tsx
+++ b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/DetailModal.tsx
@@ -94,7 +94,7 @@ const Comp: React.FC<DetailModalProps> = ({
 
   const formContent = useMemo(() => {
     if (Entity) {
-      const row = new Entity().renderRow();
+      const row = new Entity().renderSyncRow();
       return row.map(item => ({
         ...item,
         col: item.name === 'sinkType' || item.type === EditableTable ? 24 : 12,
diff --git a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/index.tsx 
b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/index.tsx
index a3c3bdea70..1044704400 100644
--- a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/index.tsx
+++ b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSink/index.tsx
@@ -18,7 +18,7 @@
  */
 
 import React, { useState, useMemo, forwardRef, useCallback } from 'react';
-import { Badge, Button, Card, Modal, List, Tag, Segmented, message } from 
'antd';
+import { Badge, Button, Card, Modal, List, Tag, Segmented, message, 
PaginationProps } from 'antd';
 import { PaginationConfig } from 'antd/lib/pagination';
 import {
   UnorderedListOutlined,
@@ -127,6 +127,10 @@ const Comp = ({ inlongGroupId, inlongStreamId, readonly }: 
Props, ref) => {
     size: 'small',
   };
 
+  const onChangeList: PaginationProps['onChange'] = page => {
+    setOptions({ pageSize: defaultSize, pageNum: page, sinkType: defaultValue 
});
+  };
+
   const { Entity } = useLoadMeta<SinkMetaType>('sink', options.sinkType);
 
   const entityColumns = useMemo(() => {
@@ -134,7 +138,7 @@ const Comp = ({ inlongGroupId, inlongStreamId, readonly }: 
Props, ref) => {
   }, [Entity]);
 
   const entityFields = useMemo(() => {
-    return Entity ? new Entity().renderRow() : [];
+    return Entity ? new Entity().renderSyncRow() : [];
   }, [Entity]);
 
   const getFilterFormContent = useCallback(
@@ -222,7 +226,14 @@ const Comp = ({ inlongGroupId, inlongStreamId, readonly }: 
Props, ref) => {
             size="small"
             loading={loading}
             dataSource={data?.list as Record<string, any>[]}
-            pagination={pagination}
+            pagination={{
+              pageSize: defaultSize,
+              current: options.pageNum,
+              total: data?.total,
+              simple: true,
+              size: 'small',
+              onChange: onChangeList,
+            }}
             renderItem={item => (
               <List.Item
                 actions={[
diff --git 
a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/DetailModal.tsx 
b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/DetailModal.tsx
index 2389bc6627..d90830cc47 100644
--- 
a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/DetailModal.tsx
+++ 
b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/DetailModal.tsx
@@ -108,7 +108,7 @@ const Comp: React.FC<Props> = ({
   }, [modalProps.open]);
 
   const formContent = useMemo(() => {
-    return Entity ? new Entity().renderRow() : [];
+    return Entity ? new Entity().renderSyncRow() : [];
   }, [Entity]);
 
   return (
diff --git 
a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/index.tsx 
b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/index.tsx
index 9d327d5c31..ca4ddfbb5a 100644
--- a/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/index.tsx
+++ b/inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncSources/index.tsx
@@ -18,7 +18,7 @@
  */
 
 import React, { useState, forwardRef, useMemo, useCallback } from 'react';
-import { Badge, Button, Card, Modal, List, Tag, Segmented, message } from 
'antd';
+import { Badge, Button, Card, Modal, List, Tag, Segmented, message, 
PaginationProps } from 'antd';
 import { PaginationConfig } from 'antd/lib/pagination';
 import {
   UnorderedListOutlined,
@@ -170,6 +170,10 @@ const Comp = ({ inlongGroupId, inlongStreamId, readonly }: 
Props, ref) => {
     size: 'small',
   };
 
+  const onChangeList: PaginationProps['onChange'] = page => {
+    setOptions({ pageSize: defaultSize, pageNum: page, sourceType: 
defaultValue });
+  };
+
   const { Entity } = useLoadMeta<SourceMetaType>('source', options.sourceType);
 
   const entityColumns = useMemo(() => {
@@ -177,7 +181,7 @@ const Comp = ({ inlongGroupId, inlongStreamId, readonly }: 
Props, ref) => {
   }, [Entity]);
 
   const entityFields = useMemo(() => {
-    return Entity ? new Entity().renderRow() : [];
+    return Entity ? new Entity().renderSyncRow() : [];
   }, [Entity]);
 
   const getFilterFormContent = useCallback(
@@ -277,7 +281,14 @@ const Comp = ({ inlongGroupId, inlongStreamId, readonly }: 
Props, ref) => {
             size="small"
             loading={loading}
             dataSource={data?.list as Record<string, any>[]}
-            pagination={pagination}
+            pagination={{
+              pageSize: defaultSize,
+              current: options.pageNum,
+              total: data?.total,
+              simple: true,
+              size: 'small',
+              onChange: onChangeList,
+            }}
             split={true}
             renderItem={item => (
               <List.Item

Reply via email to