You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/05/06 10:39:17 UTC
[incubator-doris] branch master updated: [feature][datax]doriswriter support timeZone (#9327)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new c1707ca388 [feature][datax]doriswriter support timeZone (#9327)
c1707ca388 is described below
commit c1707ca38873e6534e614323e45c20d15a3aae7c
Author: Lonre Wang <lo...@gmail.com>
AuthorDate: Fri May 6 18:39:10 2022 +0800
[feature][datax]doriswriter support timeZone (#9327)
---
extension/DataX/doriswriter/doc/doriswriter.md | 6 ++++++
extension/DataX/doriswriter/doc/mysql2doris.json | 1 +
.../alibaba/datax/plugin/writer/doriswriter/DorisCodec.java | 11 ++++++-----
.../datax/plugin/writer/doriswriter/DorisJsonCodec.java | 4 ++--
.../alibaba/datax/plugin/writer/doriswriter/DorisWriter.java | 2 +-
.../java/com/alibaba/datax/plugin/writer/doriswriter/Key.java | 6 ++++++
.../doriswriter/src/main/resources/plugin_job_template.json | 1 +
7 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/extension/DataX/doriswriter/doc/doriswriter.md b/extension/DataX/doriswriter/doc/doriswriter.md
index a8783909e7..777e441bae 100644
--- a/extension/DataX/doriswriter/doc/doriswriter.md
+++ b/extension/DataX/doriswriter/doc/doriswriter.md
@@ -127,6 +127,12 @@ DorisWriter 通过Doris原生支持Stream load方式导入数据, DorisWriter
- 必选:是
- 默认值:否
+* **timeZone**
+
+ - 描述:Doris 的时区。
+ - 必选:否
+ - 默认值:`+08:00`
+
* **preSql**
- 描述:写入数据到目的表前,会先执行这里的标准语句。
diff --git a/extension/DataX/doriswriter/doc/mysql2doris.json b/extension/DataX/doriswriter/doc/mysql2doris.json
index f6e9d9bda5..1422c385c5 100644
--- a/extension/DataX/doriswriter/doc/mysql2doris.json
+++ b/extension/DataX/doriswriter/doc/mysql2doris.json
@@ -27,6 +27,7 @@
"database": "db1",
"table": "t3",
"column": ["k1", "k2", "k3"],
+ "timeZone": "+08:00",
"username": "root",
"password": "12345",
"postSql": [],
diff --git a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java
index 9a364f4038..77a34266b4 100644
--- a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java
+++ b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java
@@ -20,18 +20,19 @@ package com.alibaba.datax.plugin.writer.doriswriter;
import com.alibaba.datax.common.element.Column;
import com.alibaba.datax.common.element.DateColumn;
import com.alibaba.datax.common.element.Record;
+import java.time.ZoneId;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.util.List;
import java.util.TimeZone;
public abstract class DorisCodec {
- protected static String timeZone = "GMT+8";
- protected static TimeZone timeZoner = TimeZone.getTimeZone(timeZone);
+ protected final TimeZone timeZone;
protected final List<String> fieldNames;
- public DorisCodec(final List<String> fieldNames) {
+ public DorisCodec(final List<String> fieldNames, final String timeZone) {
this.fieldNames = fieldNames;
+ this.timeZone = TimeZone.getTimeZone(ZoneId.of(timeZone));
}
public abstract String serialize(Record row);
@@ -60,9 +61,9 @@ public abstract class DorisCodec {
final DateColumn.DateType dateType = ((DateColumn) col).getSubType();
switch (dateType) {
case DATE:
- return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd", timeZoner);
+ return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd", timeZone);
case DATETIME:
- return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd HH:mm:ss", timeZoner);
+ return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd HH:mm:ss", timeZone);
default:
return col.asString();
}
diff --git a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java
index 8d4568c2d2..664b9d3629 100644
--- a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java
+++ b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java
@@ -28,8 +28,8 @@ import java.util.Map;
public class DorisJsonCodec extends DorisCodec {
private Map<String, Object> rowMap;
- public DorisJsonCodec(final List<String> fieldNames) {
- super(fieldNames);
+ public DorisJsonCodec(final List<String> fieldNames, final String timeZone) {
+ super(fieldNames, timeZone);
this.rowMap = new HashMap<>(this.fieldNames.size());
}
diff --git a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java
index 71e2d1ad7f..94a86e82dd 100644
--- a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java
+++ b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java
@@ -55,7 +55,7 @@ public class DorisWriter extends Writer {
@Override
public void init() {
this.keys = new Key(super.getPluginJobConf());
- this.rowCodec = new DorisJsonCodec(this.keys.getColumns());
+ this.rowCodec = new DorisJsonCodec(this.keys.getColumns(), this.keys.getTimeZone());
this.dorisWriterEmitter = new DorisWriterEmitter(keys);
}
diff --git a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java
index cfbef96c5e..fbf892d3ad 100644
--- a/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java
+++ b/extension/DataX/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java
@@ -34,6 +34,7 @@ public class Key implements Serializable {
public static final String DATABASE = "database";
public static final String TABLE = "table";
public static final String COLUMN = "column";
+ public static final String TIME_ZONE = "timeZone";
public static final String USERNAME = "username";
public static final String PASSWORD = "password";
@@ -54,6 +55,7 @@ public class Key implements Serializable {
private static final long DEFAULT_MAX_BATCH_BYTE_SIZE = 100 * 1024 * 1024; // 100MB
private static final String DEFAULT_LABEL_PREFIX = "datax_doris_writer_";
private static final String DEFAULT_LINE_DELIMITER = "\n";
+ private static final String DEFAULT_TIME_ZONE = "+08:00";
private static final int DEFAULT_CONNECT_TIMEOUT = -1;
public Key(final Configuration options) {
@@ -98,6 +100,10 @@ public class Key implements Serializable {
return this.options.getList(COLUMN, String.class);
}
+ public String getTimeZone() {
+ return this.options.getString(TIME_ZONE, DEFAULT_TIME_ZONE);
+ }
+
public List<String> getPreSqlList() {
return this.options.getList(PRE_SQL, String.class);
}
diff --git a/extension/DataX/doriswriter/src/main/resources/plugin_job_template.json b/extension/DataX/doriswriter/src/main/resources/plugin_job_template.json
index 152f1eeefd..9cd9bb18b6 100644
--- a/extension/DataX/doriswriter/src/main/resources/plugin_job_template.json
+++ b/extension/DataX/doriswriter/src/main/resources/plugin_job_template.json
@@ -6,6 +6,7 @@
"database": "",
"table": "",
"column": [],
+ "timeZone": "",
"preSql": [],
"postSql": [],
"jdbcUrl": "",
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org