This commit is contained in:
阿丸 2025-04-10 16:22:41 +08:00 committed by GitHub
commit bf0e1dc9bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 3 deletions

View File

@ -1,7 +1,9 @@
package com.alibaba.datax.plugin.rdbms.util; package com.alibaba.datax.plugin.rdbms.util;
import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.exception.DataXException;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -206,6 +208,17 @@ public enum DataBaseType {
return result; return result;
} }
public String buildQuoteColumnFormat(List<String> columnName) {
if (null == columnName || columnName.isEmpty()) {
return StringUtils.EMPTY;
}
StringBuilder builder = new StringBuilder();
for (String column : columnName) {
builder.append(column.contains("`") ? column : quoteColumnName(column)).append(",");
}
return builder.substring(0, builder.length() - 1);
}
public String quoteTableName(String tableName) { public String quoteTableName(String tableName) {
String result = tableName; String result = tableName;

View File

@ -267,8 +267,9 @@ public class CommonRdbmsWriter {
this.taskPluginCollector = taskPluginCollector; this.taskPluginCollector = taskPluginCollector;
// 用于写入数据的时候的类型根据目的表字段类型转换 // 用于写入数据的时候的类型根据目的表字段类型转换
String quoteColumnFormat = this.dataBaseType.buildQuoteColumnFormat(this.columns);
this.resultSetMetaData = DBUtil.getColumnMetaData(connection, this.resultSetMetaData = DBUtil.getColumnMetaData(connection,
this.table, StringUtils.join(this.columns, ",")); this.table, quoteColumnFormat);
// 写数据库的SQL语句 // 写数据库的SQL语句
calcWriteRecordSql(); calcWriteRecordSql();

View File

@ -118,6 +118,8 @@ public final class WriterUtil {
String.format("您所配置的 writeMode:%s 错误. 因为DataX 目前仅支持replace,update 或 insert 方式. 请检查您的配置并作出修改.", writeMode)); String.format("您所配置的 writeMode:%s 错误. 因为DataX 目前仅支持replace,update 或 insert 方式. 请检查您的配置并作出修改.", writeMode));
} }
// && writeMode.trim().toLowerCase().startsWith("replace") // && writeMode.trim().toLowerCase().startsWith("replace")
String quoteColumnFormat = dataBaseType.buildQuoteColumnFormat(columnHolders);
String writeDataSqlTemplate; String writeDataSqlTemplate;
if (forceUseUpdate || if (forceUseUpdate ||
((dataBaseType == DataBaseType.MySql || dataBaseType == DataBaseType.Tddl) && writeMode.trim().toLowerCase().startsWith("update")) ((dataBaseType == DataBaseType.MySql || dataBaseType == DataBaseType.Tddl) && writeMode.trim().toLowerCase().startsWith("update"))
@ -125,7 +127,7 @@ public final class WriterUtil {
//update只在mysql下使用 //update只在mysql下使用
writeDataSqlTemplate = new StringBuilder() writeDataSqlTemplate = new StringBuilder()
.append("INSERT INTO %s (").append(StringUtils.join(columnHolders, ",")) .append("INSERT INTO %s (").append(quoteColumnFormat)
.append(") VALUES(").append(StringUtils.join(valueHolders, ",")) .append(") VALUES(").append(StringUtils.join(valueHolders, ","))
.append(")") .append(")")
.append(onDuplicateKeyUpdateString(columnHolders)) .append(onDuplicateKeyUpdateString(columnHolders))
@ -137,7 +139,7 @@ public final class WriterUtil {
writeMode = "replace"; writeMode = "replace";
} }
writeDataSqlTemplate = new StringBuilder().append(writeMode) writeDataSqlTemplate = new StringBuilder().append(writeMode)
.append(" INTO %s (").append(StringUtils.join(columnHolders, ",")) .append(" INTO %s (").append(quoteColumnFormat)
.append(") VALUES(").append(StringUtils.join(valueHolders, ",")) .append(") VALUES(").append(StringUtils.join(valueHolders, ","))
.append(")").toString(); .append(")").toString();
} }