@@ -129,7 +129,9 @@ public TableResult execute(Executor executor) {
129129 String tableName = schemaTableName .split ("\\ ." )[1 ];
130130 table .setColumns (driver .listColumnsSortByPK (realSchemaName , tableName ));
131131 schemaList .add (schema );
132-
132+ Driver sinkRealDriver = getDriver (config , schemaName );
133+ final List <Table > sinkTables = getSinkTables (config , schemaName );
134+ setSinkTable (table , sinkTables , sinkBuilder , sinkRealDriver );
133135 if (null != sinkDriver ) {
134136 final String createTableOptions = config .getSink ().get (FlinkCDCConfig .AUTO_CREATE_OPTIONS );
135137 Table sinkTable = (Table ) table .clone ();
@@ -151,6 +153,8 @@ public TableResult execute(Executor executor) {
151153 Driver driver = Driver .build (confMap .get ("name" ), confMap .get ("type" ), JsonUtils .toMap (confMap ));
152154
153155 final List <Table > tables = driver .listTables (schemaName );
156+ Driver sinkRealDriver = getDriver (config , schemaName );
157+ final List <Table > sinkTables = getSinkTables (config , schemaName );
154158 for (Table table : tables ) {
155159 if (!Asserts .isEquals (table .getType (), "VIEW" )) {
156160 if (Asserts .isNotNullCollection (tableRegList )) {
@@ -160,13 +164,15 @@ public TableResult execute(Executor executor) {
160164 table .setColumns (driver .listColumnsSortByPK (schemaName , table .getName ()));
161165 schema .getTables ().add (table );
162166 schemaTableNameList .add (table .getSchemaTableName ());
167+ setSinkTable (table , sinkTables , sinkBuilder , sinkRealDriver );
163168 break ;
164169 }
165170 }
166171 } else {
167172 table .setColumns (driver .listColumnsSortByPK (schemaName , table .getName ()));
168173 schemaTableNameList .add (table .getSchemaTableName ());
169174 schema .getTables ().add (table );
175+ setSinkTable (table , sinkTables , sinkBuilder , sinkRealDriver );
170176 }
171177 }
172178 }
@@ -223,19 +229,70 @@ public TableResult execute(Executor executor) {
223229 return tableResultBuilder .build ();
224230 }
225231
232+ private static void setSinkTable (Table table , List <Table > sinkTables , SinkBuilder sinkBuilder , Driver sinkRealDriver ) {
233+ String sinkTableName = sinkBuilder .getSinkTableName (table );
234+ for (Table sinkTable : sinkTables ) {
235+ String sinkTableSchema = sinkTable .getSchema ();
236+ String sinkTableSchemaTableName = sinkTable .getSchemaTableName ();
237+ String currentSinkTableName = sinkTableSchemaTableName ;
238+ if (Asserts .isContainsString (sinkTableSchemaTableName , "." )) {
239+ currentSinkTableName = sinkTableSchemaTableName .split ("\\ ." )[1 ];
240+ }
241+ if (sinkTableName .equals (currentSinkTableName )) {
242+ if (null != sinkRealDriver ) {
243+ sinkTable .setColumns (sinkRealDriver .listColumnsSortByPK (sinkTableSchema , currentSinkTableName ));
244+ }
245+ table .setSinkTable (sinkTable );
246+ break ;
247+ }
248+ }
249+ }
250+
251+ private List <Table > getSinkTables (FlinkCDCConfig config , String schemaName ) throws Exception {
252+ List <Table > sinkTables ;
253+ Driver sinkDriver = getDriver (config , schemaName );
254+ if (null == sinkDriver ) {
255+ return new ArrayList <>();
256+ }
257+ Map <String , String > sink = config .getSink ();
258+ String schema = schemaName ;
259+ String sinkDb = sink .get (FlinkCDCConfig .SINK_DB );
260+ if (Asserts .isNotNullString (sinkDb )) {
261+ schema = SqlUtil .replaceAllParam (sinkDb , "schemaName" , schemaName );
262+ }
263+ sinkTables = sinkDriver .listTables (schema );
264+ return sinkTables ;
265+ }
266+
226267 private Driver checkAndCreateSinkSchema (FlinkCDCConfig config , String schemaName ) throws Exception {
227268 Map <String , String > sink = config .getSink ();
228269 String autoCreate = sink .get (FlinkCDCConfig .AUTO_CREATE );
229270 if (!Asserts .isEqualsIgnoreCase (autoCreate , "true" ) || Asserts .isNullString (schemaName )) {
230271 return null ;
231272 }
232- String url = sink .get ("url" );
273+ return getDriver (config , schemaName );
274+ }
275+
276+ private Driver getDriver (FlinkCDCConfig config , String schemaName ) throws Exception {
277+ Map <String , String > sink = config .getSink ();
278+ String connector = sink .get ("connector" );
279+ String url ;
280+ if (Asserts .isEquals (connector , "starrocks" )) {
281+ url = sink .get ("jdbc-url" );
282+ } else if (Asserts .isEqualsIgnoreCase (connector , "doris" )) {
283+ url = "jdbc:mysql://" + sink .get ("fenodes" );
284+ } else if (Asserts .isEqualsIgnoreCase (connector , "jdbc" )) {
285+ url = sink .get ("url" );
286+ } else {
287+ return null ;
288+ }
233289 String schema = schemaName ;
234290 String sinkDb = sink .get (FlinkCDCConfig .SINK_DB );
235291 if (Asserts .isNotNullString (sinkDb )) {
236292 schema = SqlUtil .replaceAllParam (sinkDb , "schemaName" , schemaName );
237293 }
238- Driver driver = Driver .build (sink .get ("connector" ), url , sink .get ("username" ), sink .get ("password" ));
294+
295+ Driver driver = Driver .build (connector , url , sink .get ("username" ), sink .get ("password" ));
239296 if (null != driver && !driver .existSchema (schema )) {
240297 driver .createSchema (schema );
241298 }
0 commit comments