From ad7a0cce6bb0f0f9f9c0f59d3107d8ee6298d1af Mon Sep 17 00:00:00 2001 From: caoliang <245623257@qq.com> Date: Thu, 11 Jan 2024 12:01:57 +0800 Subject: [PATCH] Supports importing bitmap and other types --- .../writer/selectdbwriter/CopySQLBuilder.java | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/selectdbwriter/src/main/java/com/alibaba/datax/plugin/writer/selectdbwriter/CopySQLBuilder.java b/selectdbwriter/src/main/java/com/alibaba/datax/plugin/writer/selectdbwriter/CopySQLBuilder.java index 62910d5d..f37c6dbe 100644 --- a/selectdbwriter/src/main/java/com/alibaba/datax/plugin/writer/selectdbwriter/CopySQLBuilder.java +++ b/selectdbwriter/src/main/java/com/alibaba/datax/plugin/writer/selectdbwriter/CopySQLBuilder.java @@ -6,6 +6,11 @@ import java.util.StringJoiner; public class CopySQLBuilder { private final static String COPY_SYNC = "copy.async"; + private final static String FIELD_DELIMITER_KEY = "file.column_separator"; + private final static String FIELD_DELIMITER_DEFAULT = "\t"; + private final static String LINE_DELIMITER_KEY = "file.line_delimiter"; + private final static String LINE_DELIMITER_DEFAULT = "\n"; + private final static String COLUMNS = "columns"; private final String fileName; private final Keys options; private Map properties; @@ -21,18 +26,38 @@ public class CopySQLBuilder { public String buildCopySQL(){ StringBuilder sb = new StringBuilder(); sb.append("COPY INTO ") - .append(options.getDatabase() + "." + options.getTable()) - .append(" FROM @~('").append(fileName).append("') ") - .append("PROPERTIES ("); + .append(options.getDatabase() + "." + options.getTable()); + + if (properties.get(COLUMNS) != null && !properties.get(COLUMNS).equals("")) { + sb.append(" FROM ( SELECT ").append(properties.get(COLUMNS)) + .append(" FROM @~('").append(fileName).append("') ) ") + .append("PROPERTIES ("); + } else { + sb.append(" FROM @~('").append(fileName).append("') ") + .append("PROPERTIES ("); + } //copy into must be sync properties.put(COPY_SYNC,false); StringJoiner props = new StringJoiner(","); for(Map.Entry entry : properties.entrySet()){ String key = String.valueOf(entry.getKey()); - String value = String.valueOf(entry.getValue()); - String prop = String.format("'%s'='%s'",key,value); - props.add(prop); + String value = ""; + switch (key){ + case FIELD_DELIMITER_KEY: + value = DelimiterParser.parse(String.valueOf(entry.getValue()),FIELD_DELIMITER_DEFAULT); + break; + case LINE_DELIMITER_KEY: + value = DelimiterParser.parse(String.valueOf(entry.getValue()),LINE_DELIMITER_DEFAULT); + break; + default: + value = String.valueOf(entry.getValue()); + break; + } + if(!key.equals(COLUMNS)){ + String prop = String.format("'%s'='%s'", key, value); + props.add(prop); + } } sb.append(props).append(" )"); return sb.toString();