diff --git a/hbase20xsqlreader/doc/hbase20xsqlreader.md b/hbase20xsqlreader/doc/hbase20xsqlreader.md
new file mode 100644
index 00000000..9df020cc
--- /dev/null
+++ b/hbase20xsqlreader/doc/hbase20xsqlreader.md
@@ -0,0 +1,164 @@
+# hbase20xsqlreader 插件文档
+
+
+___
+
+
+
+## 1 快速介绍
+
+hbase20xsqlreader插件实现了从Phoenix(HBase SQL)读取数据,对应版本为HBase2.X和Phoenix5.X。
+
+## 2 实现原理
+
+简而言之,hbase20xsqlreader通过Phoenix轻客户端去连接Phoenix QueryServer,并根据用户配置信息生成查询SELECT 语句,然后发送到QueryServer读取HBase数据,并将返回结果使用DataX自定义的数据类型拼装为抽象的数据集,最终传递给下游Writer处理。
+
+## 3 功能说明
+
+### 3.1 配置样例
+
+* 配置一个从Phoenix同步抽取数据到本地的作业:
+
+```
+{
+ "job": {
+ "content": [
+ {
+ "reader": {
+ "name": "hbase20xsqlreader", //指定插件为hbase20xsqlreader
+ "parameter": {
+ "queryServerAddress": "http://127.0.0.1:8765", //填写连接Phoenix QueryServer地址
+ "serialization": "PROTOBUF", //QueryServer序列化格式
+ "table": "TEST", //读取表名
+ "column": ["ID", "NAME"], //所要读取列名
+ "splitKey": "ID" //切分列,必须是表主键
+ }
+ },
+ "writer": {
+ "name": "streamwriter",
+ "parameter": {
+ "encoding": "UTF-8",
+ "print": true
+ }
+ }
+ }
+ ],
+ "setting": {
+ "speed": {
+ "channel": "3"
+ }
+ }
+ }
+}
+```
+
+
+### 3.2 参数说明
+
+* **queryServerAddress**
+
+ * 描述:hbase20xsqlreader需要通过Phoenix轻客户端去连接Phoenix QueryServer,因此这里需要填写对应QueryServer地址。
+
+ * 必选:是
+
+ * 默认值:无
+
+* **serialization**
+
+ * 描述:QueryServer使用的序列化协议
+
+ * 必选:否
+
+ * 默认值:PROTOBUF
+
+* **table**
+
+ * 描述:所要读取表名
+
+ * 必选:是
+
+ * 默认值:无
+
+* **schema**
+
+ * 描述:表所在的schema
+
+ * 必选:否
+
+ * 默认值:无
+
+* **column**
+
+ * 描述:填写需要从phoenix表中读取的列名集合,使用JSON的数组描述字段信息,空值表示读取所有列。
+
+ * 必选: 否
+
+ * 默认值:全部列
+
+* **splitKey**
+
+ * 描述:读取表时对表进行切分并行读取,切分时有两种方式:1.根据该列的最大最小值按照指定channel个数均分,这种方式仅支持整形和字符串类型切分列;2.根据设置的splitPoint进行切分
+
+ * 必选:是
+
+ * 默认值:无
+
+* **splitPoints**
+
+ * 描述:由于根据切分列最大最小值切分时不能保证避免数据热点,splitKey支持用户根据数据特征动态指定切分点,对表数据进行切分。建议切分点根据Region的startkey和endkey设置,保证每个查询对应单个Region
+
+ * 必选: 否
+
+ * 默认值:无
+
+* **where**
+
+ * 描述:支持对表查询增加过滤条件,每个切分都会携带该过滤条件。
+
+ * 必选: 否
+
+ * 默认值:无
+
+* **querySql**
+
+ * 描述:支持指定多个查询语句,但查询列类型和数目必须保持一致,用户可根据实际情况手动输入表查询语句或多表联合查询语句,设置该参数后,除queryserverAddress参数必须设置外,其余参数将失去作用或可不设置。
+
+ * 必选: 否
+
+ * 默认值:无
+
+
+### 3.3 类型转换
+
+目前hbase20xsqlreader支持大部分Phoenix类型,但也存在部分个别类型没有支持的情况,请注意检查你的类型。
+
+下面列出MysqlReader针对Mysql类型转换列表:
+
+
+| DataX 内部类型| Phoenix 数据类型 |
+| -------- | ----- |
+| String |CHAR, VARCHAR|
+| Bytes |BINARY, VARBINARY|
+| Bool |BOOLEAN |
+| Long |INTEGER, TINYINT, SMALLINT, BIGINT |
+| Double |FLOAT, DECIMAL, DOUBLE, |
+| Date |DATE, TIME, TIMESTAMP |
+
+
+
+## 4 性能报告
+
+略
+
+## 5 约束限制
+
+* 切分表时切分列仅支持单个列,且该列必须是表主键
+* 不设置splitPoint默认使用自动切分,此时切分列仅支持整形和字符型
+* 表名和SCHEMA名及列名大小写敏感,请与Phoenix表实际大小写保持一致
+* 仅支持通过Phoenix QeuryServer读取数据,因此您的Phoenix必须启动QueryServer服务才能使用本插件
+
+## 6 FAQ
+
+***
+
+
diff --git a/hbase20xsqlreader/pom.xml b/hbase20xsqlreader/pom.xml
new file mode 100644
index 00000000..2df9a1a2
--- /dev/null
+++ b/hbase20xsqlreader/pom.xml
@@ -0,0 +1,116 @@
+
+
+
+ datax-all
+ com.alibaba.datax
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ hbase20xsqlreader
+ 0.0.1-SNAPSHOT
+ jar
+
+
+ 5.0.0-HBase-2.0
+
+
+
+
+ com.alibaba.datax
+ datax-common
+ ${datax-project-version}
+
+
+ slf4j-log4j12
+ org.slf4j
+
+
+
+
+
+ org.apache.phoenix
+ phoenix-queryserver
+ ${phoenix.version}
+
+
+ servlet-api
+ javax.servlet
+
+
+
+
+
+
+ junit
+ junit
+ test
+
+
+ org.mockito
+ mockito-core
+ 2.0.44-beta
+ test
+
+
+ com.alibaba.datax
+ datax-core
+ ${datax-project-version}
+
+
+ com.alibaba.datax
+ datax-service-face
+
+
+ test
+
+
+ com.alibaba.datax
+ plugin-rdbms-util
+ 0.0.1-SNAPSHOT
+ compile
+
+
+
+
+
+
+ src/main/java
+
+ **/*.properties
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ 1.6
+ 1.6
+ ${project-sourceEncoding}
+
+
+
+ maven-assembly-plugin
+
+
+ src/main/assembly/package.xml
+
+ datax
+
+
+
+ dwzip
+ package
+
+ single
+
+
+
+
+
+
+
diff --git a/hbase20xsqlreader/src/main/assembly/package.xml b/hbase20xsqlreader/src/main/assembly/package.xml
new file mode 100644
index 00000000..c6ade25f
--- /dev/null
+++ b/hbase20xsqlreader/src/main/assembly/package.xml
@@ -0,0 +1,35 @@
+
+
+
+ dir
+
+ false
+
+
+ src/main/resources
+
+ plugin.json
+ plugin_job_template.json
+
+ plugin/reader/hbase20xsqlreader
+
+
+ target/
+
+ hbase20xsqlreader-0.0.1-SNAPSHOT.jar
+
+ plugin/reader/hbase20xsqlreader
+
+
+
+
+
+ false
+ plugin/reader/hbase20xsqlreader/libs
+ runtime
+
+
+
diff --git a/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/Constant.java b/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/Constant.java
new file mode 100644
index 00000000..0190125f
--- /dev/null
+++ b/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/Constant.java
@@ -0,0 +1,28 @@
+package com.alibaba.datax.plugin.reader.hbase20xsqlreader;
+
+public class Constant {
+ public static final String PK_TYPE = "pkType";
+
+ public static final Object PK_TYPE_STRING = "pkTypeString";
+
+ public static final Object PK_TYPE_LONG = "pkTypeLong";
+
+ public static final String DEFAULT_SERIALIZATION = "PROTOBUF";
+
+ public static final String CONNECT_STRING_TEMPLATE = "jdbc:phoenix:thin:url=%s;serialization=%s";
+
+ public static final String CONNECT_DRIVER_STRING = "org.apache.phoenix.queryserver.client.Driver";
+
+ public static final String SELECT_COLUMNS_TEMPLATE = "SELECT COLUMN_NAME, COLUMN_FAMILY FROM SYSTEM.CATALOG WHERE TABLE_NAME='%s' AND COLUMN_NAME IS NOT NULL";
+
+ public static String QUERY_SQL_TEMPLATE_WITHOUT_WHERE = "select %s from %s ";
+
+ public static String QUERY_SQL_TEMPLATE = "select %s from %s where (%s)";
+
+ public static String QUERY_MIN_MAX_TEMPLATE = "SELECT MIN(%s),MAX(%s) FROM %s";
+
+ public static String QUERY_COLUMN_TYPE_TEMPLATE = "SELECT %s FROM %s LIMIT 1";
+
+ public static String QUERY_SQL_PER_SPLIT = "querySqlPerSplit";
+
+}
diff --git a/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java b/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java
new file mode 100644
index 00000000..f2d880af
--- /dev/null
+++ b/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java
@@ -0,0 +1,403 @@
+package com.alibaba.datax.plugin.reader.hbase20xsqlreader;
+
+import com.alibaba.datax.common.exception.DataXException;
+import com.alibaba.datax.common.util.Configuration;
+import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode;
+import com.alibaba.datax.plugin.rdbms.util.RdbmsRangeSplitWrap;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigInteger;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class HBase20SQLReaderHelper {
+ private static final Logger LOG = LoggerFactory.getLogger(HBase20SQLReaderHelper.class);
+
+ private Configuration configuration;
+
+ private Connection connection;
+ private List querySql;
+ private String fullTableName;
+ private List columnNames;
+ private String splitKey;
+ private List