diff --git a/pom.xml b/pom.xml
index 1d298eb6..f9ec42ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,7 +72,8 @@
streamreader
mongodbreader
- tdenginereader
+ tdengine20reader
+ tdengine30reader
gdbreader
tsdbreader
opentsdbreader
@@ -109,7 +110,8 @@
elasticsearchwriter
mongodbwriter
- tdenginewriter
+ tdengine20writer
+ tdengine30writer
ocswriter
tsdbwriter
gdbwriter
diff --git a/tdenginereader/doc/tdenginereader-CN.md b/tdengine20reader/doc/tdenginereader-CN.md
similarity index 100%
rename from tdenginereader/doc/tdenginereader-CN.md
rename to tdengine20reader/doc/tdenginereader-CN.md
diff --git a/tdengine20reader/pom.xml b/tdengine20reader/pom.xml
new file mode 100644
index 00000000..075a2789
--- /dev/null
+++ b/tdengine20reader/pom.xml
@@ -0,0 +1,123 @@
+
+
+
+ datax-all
+ com.alibaba.datax
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ tdenginereader
+
+
+ 8
+ 8
+
+
+
+
+ com.alibaba.datax
+ datax-common
+ ${datax-project-version}
+
+
+ slf4j-log4j12
+ org.slf4j
+
+
+
+
+
+ com.alibaba.datax.tdenginewriter
+ tdenginewriter
+ 0.0.1-SNAPSHOT
+ compile
+
+
+
+ com.taosdata.jdbc
+ taos-jdbcdriver
+ 2.0.39
+
+
+
+ junit
+ junit
+ ${junit-version}
+ test
+
+
+ com.alibaba.datax
+ plugin-rdbms-util
+ 0.0.1-SNAPSHOT
+ compile
+
+
+
+ com.alibaba.datax
+ datax-core
+ 0.0.1-SNAPSHOT
+ test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ ${jdk-version}
+ ${jdk-version}
+ ${project-sourceEncoding}
+
+
+
+ maven-assembly-plugin
+
+
+ src/main/assembly/package.xml
+
+ datax
+
+
+
+ dwzip
+ package
+
+ single
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.12.4
+
+
+
+ **/*Test.java
+
+
+
+
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tdenginereader/src/main/assembly/package.xml b/tdengine20reader/src/main/assembly/package.xml
similarity index 100%
rename from tdenginereader/src/main/assembly/package.xml
rename to tdengine20reader/src/main/assembly/package.xml
diff --git a/tdengine20reader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdengine20reader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java
new file mode 100644
index 00000000..4ec42d9e
--- /dev/null
+++ b/tdengine20reader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java
@@ -0,0 +1,266 @@
+package com.alibaba.datax.plugin.reader;
+
+import com.alibaba.datax.common.element.*;
+import com.alibaba.datax.common.exception.DataXException;
+import com.alibaba.datax.common.plugin.RecordSender;
+import com.alibaba.datax.common.spi.Reader;
+import com.alibaba.datax.common.util.Configuration;
+import com.alibaba.datax.plugin.writer.tdenginewriter.Key;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.UnsupportedEncodingException;
+import java.sql.*;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+public class TDengineReader extends Reader {
+
+ private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+ public static class Job extends Reader.Job {
+ private static final Logger LOG = LoggerFactory.getLogger(Job.class);
+ private Configuration originalConfig;
+
+ @Override
+ public void init() {
+ this.originalConfig = super.getPluginJobConf();
+ // check username
+ String username = this.originalConfig.getString(Key.USERNAME);
+ if (StringUtils.isBlank(username))
+ throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE,
+ "The parameter [" + Key.USERNAME + "] is not set.");
+
+ // check password
+ String password = this.originalConfig.getString(Key.PASSWORD);
+ if (StringUtils.isBlank(password))
+ throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE,
+ "The parameter [" + Key.PASSWORD + "] is not set.");
+
+ // check connection
+ List connectionList = this.originalConfig.getListConfiguration(Key.CONNECTION);
+ if (connectionList == null || connectionList.isEmpty())
+ throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE,
+ "The parameter [" + Key.CONNECTION + "] is not set.");
+ for (int i = 0; i < connectionList.size(); i++) {
+ Configuration conn = connectionList.get(i);
+ // check jdbcUrl
+ List