From 0e79d1d332918afe3ad9261fe9289265ac16479f Mon Sep 17 00:00:00 2001 From: yuwan Date: Thu, 12 Nov 2020 13:50:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Drdbms=E7=9A=84=E8=A1=A8?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=B8=BA=E5=85=B3=E9=94=AE=E5=AD=97=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=86=99=E5=85=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datax/plugin/rdbms/util/DataBaseType.java | 13 +++++++++++++ .../plugin/rdbms/writer/CommonRdbmsWriter.java | 3 ++- .../datax/plugin/rdbms/writer/util/WriterUtil.java | 6 ++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java index eb82aa44..5bfc699f 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java @@ -1,7 +1,9 @@ package com.alibaba.datax.plugin.rdbms.util; 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.Pattern; @@ -160,6 +162,17 @@ public enum DataBaseType { return result; } + public String buildQuoteColumnFormat(List columnName) { + if (null == columnName || columnName.isEmpty()) { + return StringUtils.EMPTY; + } + StringBuilder builder = new StringBuilder(); + for (String column : columnName) { + builder.append(quoteColumnName(column)).append(","); + } + return builder.substring(0, builder.length() - 1); + } + public String quoteTableName(String tableName) { String result = tableName; diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java index 440aac2a..bbdae48c 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java @@ -263,8 +263,9 @@ public class CommonRdbmsWriter { this.taskPluginCollector = taskPluginCollector; // 用于写入数据的时候的类型根据目的表字段类型转换 + String quoteColumnFormat = this.dataBaseType.buildQuoteColumnFormat(this.columns); this.resultSetMetaData = DBUtil.getColumnMetaData(connection, - this.table, StringUtils.join(this.columns, ",")); + this.table, quoteColumnFormat); // 写数据库的SQL语句 calcWriteRecordSql(); diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java index 5f5f0d51..b2539b75 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java @@ -118,6 +118,8 @@ public final class WriterUtil { String.format("您所配置的 writeMode:%s 错误. 因为DataX 目前仅支持replace,update 或 insert 方式. 请检查您的配置并作出修改.", writeMode)); } // && writeMode.trim().toLowerCase().startsWith("replace") + String quoteColumnFormat = dataBaseType.buildQuoteColumnFormat(columnHolders); + String writeDataSqlTemplate; if (forceUseUpdate || ((dataBaseType == DataBaseType.MySql || dataBaseType == DataBaseType.Tddl) && writeMode.trim().toLowerCase().startsWith("update")) @@ -125,7 +127,7 @@ public final class WriterUtil { //update只在mysql下使用 writeDataSqlTemplate = new StringBuilder() - .append("INSERT INTO %s (").append(StringUtils.join(columnHolders, ",")) + .append("INSERT INTO %s (").append(quoteColumnFormat) .append(") VALUES(").append(StringUtils.join(valueHolders, ",")) .append(")") .append(onDuplicateKeyUpdateString(columnHolders)) @@ -137,7 +139,7 @@ public final class WriterUtil { writeMode = "replace"; } writeDataSqlTemplate = new StringBuilder().append(writeMode) - .append(" INTO %s (").append(StringUtils.join(columnHolders, ",")) + .append(" INTO %s (").append(quoteColumnFormat) .append(") VALUES(").append(StringUtils.join(valueHolders, ",")) .append(")").toString(); } From a42feefb46b7e41d04fc4002128f3bc6f8adf46e Mon Sep 17 00:00:00 2001 From: yuwan Date: Fri, 13 Nov 2020 11:05:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9C=89=E5=8F=8D=E5=BC=95=E5=8F=B7?= =?UTF-8?q?=E7=9A=84=E4=B8=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java index 5bfc699f..2681e55f 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java @@ -168,7 +168,7 @@ public enum DataBaseType { } StringBuilder builder = new StringBuilder(); for (String column : columnName) { - builder.append(quoteColumnName(column)).append(","); + builder.append(column.contains("`") ? column : quoteColumnName(column)).append(","); } return builder.substring(0, builder.length() - 1); }