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

diwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-flink-connector.git


The following commit(s) were added to refs/heads/master by this push:
     new f8743b80 [Fix] Fix the ora-12733 issue when there are many sync tables 
(#532)
f8743b80 is described below

commit f8743b802cf016e4a8287aafa3c14dabc853d596
Author: wudi <[email protected]>
AuthorDate: Thu Jan 2 11:23:32 2025 +0800

    [Fix] Fix the ora-12733 issue when there are many sync tables (#532)
---
 .../org/apache/doris/flink/tools/cdc/DatabaseSync.java    | 11 ++++++++++-
 .../doris/flink/tools/cdc/oracle/OracleDatabaseSync.java  | 15 +++++----------
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/DatabaseSync.java
 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/DatabaseSync.java
index 701bd967..0c1b860a 100644
--- 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/DatabaseSync.java
+++ 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/DatabaseSync.java
@@ -42,6 +42,7 @@ import org.apache.doris.flink.sink.writer.WriteMode;
 import org.apache.doris.flink.sink.writer.serializer.DorisRecordSerializer;
 import 
org.apache.doris.flink.sink.writer.serializer.JsonDebeziumSchemaSerializer;
 import org.apache.doris.flink.table.DorisConfigOptions;
+import org.apache.doris.flink.tools.cdc.oracle.OracleDatabaseSync;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,6 +59,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 import static 
org.apache.flink.cdc.debezium.utils.JdbcUrlUtils.PROPERTIES_PREFIX;
 
@@ -359,7 +361,14 @@ public abstract class DatabaseSync {
 
     protected String getSyncTableList(List<String> syncTables) {
         if (!singleSink) {
-            return String.format("(%s)\\.(%s)", getTableListPrefix(), 
String.join("|", syncTables));
+            if (this instanceof OracleDatabaseSync) {
+                return syncTables.stream()
+                        .map(v -> getTableListPrefix() + "\\." + v)
+                        .collect(Collectors.joining("|"));
+            } else {
+                return String.format(
+                        "(%s)\\.(%s)", getTableListPrefix(), String.join("|", 
syncTables));
+            }
         } else {
             // includingTablePattern and ^excludingPattern
             if (includingTables == null) {
diff --git 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/oracle/OracleDatabaseSync.java
 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/oracle/OracleDatabaseSync.java
index 1a6a4187..e529fe48 100644
--- 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/oracle/OracleDatabaseSync.java
+++ 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/tools/cdc/oracle/OracleDatabaseSync.java
@@ -164,16 +164,11 @@ public class OracleDatabaseSync extends DatabaseSync {
         Preconditions.checkNotNull(databaseName, "database-name in oracle is 
required");
         Preconditions.checkNotNull(schemaName, "schema-name in oracle is 
required");
         String tableName = config.get(OracleSourceOptions.TABLE_NAME);
-        // When debezium incrementally reads (refer 
LogMinerQueryBuilder.listOfPatternsToSql),
-        // it will be judged based on regexp_like. When the regular length 
exceeds 512, an error
-        // will be reported, like ORA-12733: regular expression too long
-        if (tableName.length() > 450) {
-            // REGEXP_LIKE('^SCHEMA.(TBL1|TBL2)$')
-            if (StringUtils.isNullOrWhitespaceOnly(excludingTables)
-                    && (StringUtils.isNullOrWhitespaceOnly(includingTables)
-                            || ".*".equals(includingTables))) {
-                tableName = ".*";
-            }
+        // LogMinerQueryBuilder.buildTablePredicate is separated by commas to 
avoid
+        // the error ORA-12733 when the regexp_like regular expression exceeds 
512 characters
+        if (!singleSink && tableName.length() > 256) {
+            // todo: Make the length of a single regular expression as long as 
possible.
+            tableName = tableName.replace("|", ",");
         }
 
         String url = config.get(OracleSourceOptions.URL);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to