This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 0df5247512e Revise #24536 (#24599)
0df5247512e is described below

commit 0df5247512e08c64ab33326ef5e7f2980f57ce7d
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Mar 14 21:15:16 2023 +0800

    Revise #24536 (#24599)
---
 .../proxy/backend/hbase/bean/HBaseOperation.java   |   3 +
 .../proxy/backend/hbase/context/HBaseContext.java  |   2 +-
 .../hbase/context/HBaseRegionWarmUpContext.java    |   1 -
 .../converter/HBaseDatabaseDeleteConverter.java    |  79 ----------
 .../converter/HBaseDatabaseSelectConverter.java    | 162 ---------------------
 .../converter/HBaseDatabaseUpdateConverter.java    |  97 ------------
 ...Converter.java => HBaseOperationConverter.java} |   2 +-
 ...ry.java => HBaseOperationConverterFactory.java} |  40 +++--
 ...erterAdapter.java => HBaseRowKeyExtractor.java} |  30 +++-
 .../HBaseDeleteOperation.java}                     |  15 +-
 .../HBaseInsertOperation.java}                     |  13 +-
 .../HBaseRegionReloadOperation.java}               |  21 +--
 .../HBaseSelectOperation.java}                     |  15 +-
 .../HBaseUpdateOperation.java}                     |  15 +-
 .../type/HBaseDeleteOperationConverter.java        |  69 +++++++++
 .../HBaseInsertOperationConverter.java}            |  31 ++--
 .../HBaseRegionReloadOperationConverter.java}      |  33 +----
 .../type/HBaseSelectOperationConverter.java        | 134 +++++++++++++++++
 .../type/HBaseUpdateOperationConverter.java        |  85 +++++++++++
 .../HBaseDatabaseBackendUpdateHandler.java         |  13 +-
 .../backend/hbase/result/HBaseQueryCallback.java   |   1 -
 .../query/HBaseDatabaseDescribeResultSet.java      |   3 +-
 .../result/query/HBaseDatabaseGetResultSet.java    |  14 +-
 .../result/query/HBaseDatabaseQueryResultSet.java  |   2 +-
 .../result/update/HBaseDatabaseDeleteUpdater.java  |  17 +--
 .../result/update/HBaseDatabaseInsertUpdater.java  |  21 +--
 .../result/update/HBaseDatabaseUpdateUpdater.java  |  21 +--
 .../hbase/result/update/HBaseDatabaseUpdater.java  |   5 +-
 .../result/update/HBaseRegionReloadUpdater.java    |  21 +--
 ...eneousUtil.java => HBaseHeterogeneousUtil.java} |  25 ++--
 ...ava => HBaseOperationConverterFactoryTest.java} |  32 ++--
 ...pterTest.java => HBaseRowKeyExtractorTest.java} |  25 ++--
 .../HBaseDeleteOperationConverterTest.java}        |  25 ++--
 .../HBaseUpdateOperationConverterTest.java}        |  31 ++--
 .../hbase/result/HBaseSupportedSQLStatement.java   |   2 +-
 .../AbstractHBaseDatabaseQueryResultSetTest.java   |  42 ++----
 .../query/HBaseDatabaseDescribeResultSetTest.java  |  28 ++--
 .../query/HBaseDatabaseListResultSetTest.java      |  15 +-
 .../HBaseDatabaseBackendUpdateHandlerTest.java     |   8 +-
 ...ilTest.java => HBaseHeterogeneousUtilTest.java} |   9 +-
 40 files changed, 565 insertions(+), 642 deletions(-)

diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
index c56d98b81c1..11809d7b25c 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
@@ -21,6 +21,9 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Operation;
 
+/**
+ * HBase operation.
+ */
 @RequiredArgsConstructor
 @Getter
 public final class HBaseOperation {
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
index db7be27505c..065ad11a7fe 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
@@ -71,7 +71,7 @@ public final class HBaseContext implements AutoCloseable {
     /**
      * Get instance of HBase context.
      *
-     * @return instance of HBase context
+     * @return got instance
      */
     public static HBaseContext getInstance() {
         return INSTANCE;
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
index 8e4deba5a5e..e36b3608c90 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
@@ -152,5 +152,4 @@ public final class HBaseRegionWarmUpContext {
         tableCount.set(0);
         executeCount.set(0);
     }
-    
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverter.java
deleted file mode 100644
index b95d3bc697b..00000000000
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
-
-import com.google.common.base.Preconditions;
-import lombok.RequiredArgsConstructor;
-import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementContext;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * HBase database delete converter.
- */
-@RequiredArgsConstructor
-public final class HBaseDatabaseDeleteConverter extends 
HBaseDatabaseRowKeysConverterAdapter implements HBaseDatabaseConverter {
-    
-    private final SQLStatementContext<?> sqlStatementContext;
-    
-    /**
-     * Convert SQL statement to HBase operation.
-     *
-     * @return HBase operation
-     */
-    @Override
-    public HBaseOperation convert() {
-        DeleteStatementContext context = (DeleteStatementContext) 
sqlStatementContext;
-        if (context.getWhereSegments().stream().findFirst().isPresent() && 
context.getWhereSegments().stream().findFirst().get().getExpr() instanceof 
InExpression) {
-            return createDeleteOperationByUseIn(context);
-        } else {
-            return createDeleteOperationByOneRowKey(context);
-        }
-    }
-    
-    private HBaseOperation createDeleteOperationByOneRowKey(final 
DeleteStatementContext context) {
-        String tableName = 
context.getTablesContext().getTableNames().iterator().next();
-        
Preconditions.checkArgument(context.getWhereSegments().stream().findFirst().isPresent(),
 "where segment is absent");
-        String rowKey = 
getRowKeyFromWhereSegment(context.getWhereSegments().stream().findFirst().get().getExpr());
-        return new HBaseOperation(tableName, getDeleteByRowKey(rowKey));
-    }
-    
-    private HBaseOperation createDeleteOperationByUseIn(final 
DeleteStatementContext context) {
-        String tableName = 
context.getTablesContext().getTableNames().iterator().next();
-        List<String> rowKeys = getRowKeysFromWhereSegmentByIn((InExpression) 
context.getWhereSegments().stream().findFirst().get().getExpr());
-        List<Delete> deletes = 
rowKeys.stream().map(this::getDeleteByRowKey).collect(Collectors.toList());
-        return new HBaseOperation(tableName, new 
HBaseDeleteOperationAdapter(tableName, deletes));
-    }
-    
-    private Delete getDeleteByRowKey(final String rowKey) {
-        return new Delete(Bytes.toBytes(rowKey));
-    }
-    
-    private String getRowKeyFromWhereSegment(final ExpressionSegment 
expressionSegment) {
-        BinaryOperationExpression expression = (BinaryOperationExpression) 
expressionSegment;
-        return String.valueOf(((LiteralExpressionSegment) 
expression.getRight()).getLiterals());
-    }
-}
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseSelectConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseSelectConverter.java
deleted file mode 100644
index da2f2bc41e8..00000000000
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseSelectConverter.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.Query;
-import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import org.apache.shardingsphere.proxy.backend.hbase.util.HeterogeneousUtil;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.PaginationValueSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.NumberLiteralLimitValueSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-/**
- * HBase database select converter.
- */
-@RequiredArgsConstructor
-@Slf4j
-public final class HBaseDatabaseSelectConverter extends 
HBaseDatabaseRowKeysConverterAdapter implements HBaseDatabaseConverter {
-    
-    private final SQLStatementContext<?> sqlStatementContext;
-    
-    /**
-     * Convert SQL statement to HBase operation.
-     *
-     * @return HBase operation
-     */
-    @Override
-    public HBaseOperation convert() {
-        SelectStatementContext context = (SelectStatementContext) 
sqlStatementContext;
-        if (isUseGetRequest(context)) {
-            return createGetRequest(context);
-        } else {
-            return createScanRequest(context);
-        }
-    }
-    
-    private boolean isUseGetRequest(final SelectStatementContext context) {
-        return context.getWhereSegments().stream().findFirst().isPresent()
-                && 
(context.getWhereSegments().stream().findFirst().get().getExpr() instanceof 
BinaryOperationExpression
-                        || 
context.getWhereSegments().stream().findFirst().get().getExpr() instanceof 
InExpression);
-    }
-    
-    private List<String> getRowKeyFromWhereSegment(final ExpressionSegment 
expressionSegment) {
-        if (expressionSegment instanceof InExpression) {
-            InExpression expression = (InExpression) expressionSegment;
-            return getRowKeysFromWhereSegmentByIn(expression);
-        } else {
-            BinaryOperationExpression expression = (BinaryOperationExpression) 
expressionSegment;
-            return new 
ArrayList<>(Collections.singleton(String.valueOf(((LiteralExpressionSegment) 
expression.getRight()).getLiterals())));
-        }
-    }
-    
-    private HBaseOperation createGetRequest(final SelectStatementContext 
context) {
-        ExpressionSegment expression = 
context.getWhereSegments().stream().findFirst().get().getExpr();
-        List<Get> gets = 
getRowKeyFromWhereSegment(expression).stream().map(this::getGetByRowKey).collect(Collectors.toList());
-        if (!HeterogeneousUtil.isUseShorthandProjection(context)) {
-            for (Get each : gets) {
-                decorateWithColumns(each, context);
-            }
-        }
-        if (expression instanceof InExpression) {
-            return new 
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
-                    new 
HBaseSelectOperationAdapter(context.getTablesContext().getTableNames().iterator().next(),
 gets));
-        }
-        return new 
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(), 
gets.get(0));
-    }
-    
-    private Get getGetByRowKey(final String rowKey) {
-        return new Get(Bytes.toBytes(rowKey));
-    }
-    
-    private void decorateWithColumns(final Query query, final 
SelectStatementContext statementContext) {
-        Collection<ColumnSegment> columns = 
statementContext.getColumnSegments();
-        
-        if (query instanceof Get) {
-            columns.forEach(each -> ((Get) 
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
-        } else {
-            columns.forEach(each -> ((Scan) 
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
-        }
-    }
-    
-    private void decoratedWithLimit(final Scan scan, final 
SelectStatementContext statementContext) {
-        MySQLSelectStatement selectStatement = (MySQLSelectStatement) 
statementContext.getSqlStatement();
-        if (selectStatement.getLimit().isPresent()) {
-            Optional<PaginationValueSegment> paginationValueSegment = 
selectStatement.getLimit().get().getRowCount();
-            paginationValueSegment.ifPresent(valueSegment -> 
scan.setLimit((int) ((NumberLiteralLimitValueSegment) 
valueSegment).getValue()));
-        }
-    }
-    
-    private HBaseOperation createScanRequest(final SelectStatementContext 
context) {
-        Scan scan = new Scan();
-        Optional<WhereSegment> whereSegment = 
context.getWhereSegments().stream().findFirst();
-        if (whereSegment.isPresent() && whereSegment.get().getExpr() 
instanceof BetweenExpression) {
-            decorateScanOperationWithBetweenExpression(scan, 
whereSegment.get().getExpr(), false);
-        }
-        if (!HeterogeneousUtil.isUseShorthandProjection(context)) {
-            decorateWithColumns(scan, context);
-        }
-        decoratedWithLimit(scan, context);
-        return new 
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(), 
scan);
-    }
-    
-    private void decorateScanOperationWithBetweenExpression(final Scan scan, 
final ExpressionSegment expressionSegment, final boolean reversed) {
-        BetweenExpression betweenExpression = (BetweenExpression) 
expressionSegment;
-        LiteralExpressionSegment betweenExpr = (LiteralExpressionSegment) 
betweenExpression.getBetweenExpr();
-        LiteralExpressionSegment andExpr = (LiteralExpressionSegment) 
betweenExpression.getAndExpr();
-        String startRowKey = betweenExpr.getLiterals().toString();
-        String stopRowKey = andExpr.getLiterals().toString();
-        if (null != startRowKey && null != stopRowKey) {
-            if (reversed) {
-                scan.withStopRow(calBytes(startRowKey, 0), true);
-                // refer: 
<https://github.com/apache/hbase/blob/master/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupSystemTable.java#L1853>
-                scan.withStartRow(calBytes(stopRowKey + "~", 0), true);
-            } else {
-                scan.withStartRow(calBytes(startRowKey, 0), true);
-                scan.withStopRow(calBytes(stopRowKey + "~", 0), true);
-            }
-        }
-    }
-    
-    private byte[] calBytes(final String row, final int step) {
-        byte[] rowByte = Bytes.toBytes(row);
-        byte[] result = Arrays.copyOf(rowByte, rowByte.length);
-        result[result.length - 1] = (byte) (result[result.length - 1] + step);
-        return result;
-    }
-}
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverter.java
deleted file mode 100644
index 15009668e6a..00000000000
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
-
-import com.google.common.base.Preconditions;
-import lombok.RequiredArgsConstructor;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * HBase database update converter.
- */
-@RequiredArgsConstructor
-public final class HBaseDatabaseUpdateConverter extends 
HBaseDatabaseRowKeysConverterAdapter implements HBaseDatabaseConverter {
-    
-    private final SQLStatementContext<?> sqlStatementContext;
-    
-    /**
-     * Convert SQL statement to HBase operation.
-     *
-     * @return HBase operation
-     */
-    @Override
-    public HBaseOperation convert() {
-        UpdateStatementContext context = (UpdateStatementContext) 
sqlStatementContext;
-        
Preconditions.checkArgument(context.getWhereSegments().stream().findFirst().isPresent(),
 "Where segment is not present");
-        if (context.getWhereSegments().stream().findFirst().get().getExpr() 
instanceof InExpression) {
-            return createHBasePutsOperation(context);
-        }
-        return new 
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(), 
createHBaseRequest(context));
-    }
-    
-    private HBaseOperation createHBasePutsOperation(final 
UpdateStatementContext context) {
-        List<String> rowKeys = getRowKeysFromWhereSegmentByIn((InExpression) 
context.getWhereSegments().stream().findFirst().get().getExpr());
-        List<Put> puts = 
rowKeys.stream().map(this::getPutByRowKey).collect(Collectors.toList());
-        for (Put put : puts) {
-            addPutColumn(context, put);
-        }
-        return new 
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
-                new 
HBaseUpdateOperationAdapter(context.getTablesContext().getTableNames().iterator().next(),
 puts));
-    }
-    
-    private Put getPutByRowKey(final String rowKey) {
-        return new Put(Bytes.toBytes(rowKey));
-    }
-    
-    private Put createHBaseRequest(final UpdateStatementContext context) {
-        String rowKey = 
getRowKeyFromWhereSegment(context.getWhereSegments().stream().findFirst().get().getExpr());
-        Put result = getPutByRowKey(rowKey);
-        addPutColumn(context, result);
-        return result;
-    }
-    
-    private void addPutColumn(final UpdateStatementContext context, final Put 
put) {
-        for (AssignmentSegment segment : getAssignmentSegments(context)) {
-            String column = 
segment.getColumns().iterator().next().getIdentifier().getValue();
-            LiteralExpressionSegment literalExpressionSegment = 
(LiteralExpressionSegment) segment.getValue();
-            String value = 
String.valueOf(literalExpressionSegment.getLiterals());
-            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes(column), 
Bytes.toBytes(value));
-        }
-    }
-    
-    private Collection<AssignmentSegment> getAssignmentSegments(final 
UpdateStatementContext context) {
-        return context.getSqlStatement().getSetAssignment().getAssignments();
-    }
-    
-    private String getRowKeyFromWhereSegment(final ExpressionSegment 
expressionSegment) {
-        BinaryOperationExpression expression = (BinaryOperationExpression) 
expressionSegment;
-        return String.valueOf(((LiteralExpressionSegment) 
expression.getRight()).getLiterals());
-    }
-}
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverter.java
similarity index 96%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverter.java
index 8d86e260cbb..c2a42a4ba62 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverter.java
@@ -22,7 +22,7 @@ import 
org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
 /**
  * Convert SQL statement to HBase operation.
  */
-public interface HBaseDatabaseConverter {
+public interface HBaseOperationConverter {
     
     /**
      * Convert SQL statement to HBase operation.
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactory.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactory.java
similarity index 52%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactory.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactory.java
index 4094b02fd56..c9bbbf947fc 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactory.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactory.java
@@ -25,33 +25,41 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementConte
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseDeleteOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseInsertOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseSelectOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseUpdateOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseRegionReloadOperationConverter;
 import 
org.apache.shardingsphere.proxy.backend.hbase.exception.HBaseOperationException;
 
 /**
- * HBase database converter factory.
+ * HBase operation converter factory.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class HBaseDatabaseConverterFactory {
+public final class HBaseOperationConverterFactory {
     
     /**
-     * Create new instance of HBase database converter.
+     * Create new instance of HBase operation converter.
      *
-     * @param sqlStatementContext sql statement context
+     * @param sqlStatementContext SQL statement context
      * @return instance of converter
      */
-    public static HBaseDatabaseConverter newInstance(final 
SQLStatementContext<?> sqlStatementContext) {
+    public static HBaseOperationConverter newInstance(final 
SQLStatementContext<?> sqlStatementContext) {
         if (sqlStatementContext instanceof SelectStatementContext) {
-            return new HBaseDatabaseSelectConverter(sqlStatementContext);
-        } else if (sqlStatementContext instanceof InsertStatementContext) {
-            return new HBaseDatabaseInsertConverter(sqlStatementContext);
-        } else if (sqlStatementContext instanceof DeleteStatementContext) {
-            return new HBaseDatabaseDeleteConverter(sqlStatementContext);
-        } else if (sqlStatementContext instanceof UpdateStatementContext) {
-            return new HBaseDatabaseUpdateConverter(sqlStatementContext);
-        } else if (sqlStatementContext instanceof FlushStatementContext) {
-            return new HBaseRegionReloadConverter(sqlStatementContext);
-        } else {
-            throw new HBaseOperationException("Can't found converter");
+            return new HBaseSelectOperationConverter(sqlStatementContext);
         }
+        if (sqlStatementContext instanceof InsertStatementContext) {
+            return new HBaseInsertOperationConverter(sqlStatementContext);
+        }
+        if (sqlStatementContext instanceof DeleteStatementContext) {
+            return new HBaseDeleteOperationConverter(sqlStatementContext);
+        }
+        if (sqlStatementContext instanceof UpdateStatementContext) {
+            return new HBaseUpdateOperationConverter(sqlStatementContext);
+        }
+        if (sqlStatementContext instanceof FlushStatementContext) {
+            return new 
HBaseRegionReloadOperationConverter(sqlStatementContext);
+        }
+        throw new HBaseOperationException("Can not find HBase converter.");
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractor.java
similarity index 59%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractor.java
index 1dda4dde1b8..15c6598a868 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractor.java
@@ -17,23 +17,39 @@
 
 package org.apache.shardingsphere.proxy.backend.hbase.converter;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+
 import java.util.List;
 import java.util.stream.Collectors;
 
 /**
- * HBase database row keys converter adapter.
+ * HBase row key extractor.
  */
-public class HBaseDatabaseRowKeysConverterAdapter {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class HBaseRowKeyExtractor {
     
-    protected List<String> getRowKeysFromWhereSegmentByIn(final InExpression 
expression) {
-        return ((ListExpression) 
expression.getRight()).getItems().stream().map(this::getValueByExpressionSegment).collect(Collectors.toList());
+    /**
+     * Get row keys from binary operation expression.
+     * 
+     * @param expr binary operation expression
+     * @return row keys
+     */
+    public static String getRowKey(final BinaryOperationExpression expr) {
+        return String.valueOf(((LiteralExpressionSegment) 
expr.getRight()).getLiterals());
     }
     
-    protected String getValueByExpressionSegment(final ExpressionSegment item) 
{
-        return String.valueOf(((LiteralExpressionSegment) item).getLiterals());
+    /**
+     * Get row keys from in expression.
+     * 
+     * @param expr in expression
+     * @return row keys
+     */
+    public static List<String> getRowKeys(final InExpression expr) {
+        return ((ListExpression) expr.getRight()).getItems().stream().map(each 
-> String.valueOf(((LiteralExpressionSegment) 
each).getLiterals())).collect(Collectors.toList());
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDeleteOperationAdapter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseDeleteOperation.java
similarity index 80%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDeleteOperationAdapter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseDeleteOperation.java
index d532cbbe0fb..477a4066429 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDeleteOperationAdapter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseDeleteOperation.java
@@ -15,34 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Operation;
+
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 /**
- * HBase database delete converter.
+ * HBase delete operation.
  */
 @RequiredArgsConstructor
 @Getter
-public final class HBaseDeleteOperationAdapter extends Operation {
-    
-    private final String tableName;
+public final class HBaseDeleteOperation extends Operation {
     
     private final List<Delete> deletes;
     
     @Override
     public Map<String, Object> getFingerprint() {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
     
     @Override
     public Map<String, Object> toMap(final int i) {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseInsertOperation.java
similarity index 82%
copy from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
copy to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseInsertOperation.java
index 1c4231f591a..f5a8d67409c 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseInsertOperation.java
@@ -15,32 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Operation;
 import org.apache.hadoop.hbase.client.Put;
+
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 /**
- * HBase database insert operation adapter.
+ * HBase insert operation.
  */
 @RequiredArgsConstructor
 @Getter
-public final class HBaseInsertOperationAdapter extends Operation {
+public final class HBaseInsertOperation extends Operation {
     
     private final List<Put> puts;
     
     @Override
     public Map<String, Object> getFingerprint() {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
     
     @Override
     public Map<String, Object> toMap(final int i) {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseRegionReloadOperation.java
similarity index 69%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseRegionReloadOperation.java
index 1c4231f591a..d9d5c6cbcd4 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseRegionReloadOperation.java
@@ -15,32 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Operation;
-import org.apache.hadoop.hbase.client.Put;
-import java.util.List;
+
+import java.util.Collections;
 import java.util.Map;
-import java.util.TreeMap;
 
 /**
- * HBase database insert operation adapter.
+ * HBase region reload operation.
  */
-@RequiredArgsConstructor
-@Getter
-public final class HBaseInsertOperationAdapter extends Operation {
-    
-    private final List<Put> puts;
+public final class HBaseRegionReloadOperation extends Operation {
     
     @Override
     public Map<String, Object> getFingerprint() {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
     
     @Override
     public Map<String, Object> toMap(final int i) {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseSelectOperationAdapter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseSelectOperation.java
similarity index 80%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseSelectOperationAdapter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseSelectOperation.java
index 367c75f48f3..5d0448047ed 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseSelectOperationAdapter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseSelectOperation.java
@@ -15,34 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.Operation;
+
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 /**
- * HBase database select operation adapter.
+ * HBase select operation.
  */
 @RequiredArgsConstructor
 @Getter
-public final class HBaseSelectOperationAdapter extends Operation {
-    
-    private final String tableName;
+public final class HBaseSelectOperation extends Operation {
     
     private final List<Get> gets;
     
     @Override
     public Map<String, Object> getFingerprint() {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
     
     @Override
     public Map<String, Object> toMap(final int i) {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseUpdateOperationAdapter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseUpdateOperation.java
similarity index 80%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseUpdateOperationAdapter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseUpdateOperation.java
index c9fbf888cb9..99b45fc2731 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseUpdateOperationAdapter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseUpdateOperation.java
@@ -15,34 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Operation;
 import org.apache.hadoop.hbase.client.Put;
+
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 /**
- * HBase database update operation adapter.
+ * HBase update operation.
  */
 @RequiredArgsConstructor
 @Getter
-public final class HBaseUpdateOperationAdapter extends Operation {
-    
-    private final String tableName;
+public final class HBaseUpdateOperation extends Operation {
     
     private final List<Put> puts;
     
     @Override
     public Map<String, Object> getFingerprint() {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
     
     @Override
     public Map<String, Object> toMap(final int i) {
-        return new TreeMap<>();
+        return Collections.emptyMap();
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverter.java
new file mode 100644
index 00000000000..f3ec58b69f8
--- /dev/null
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverter.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementContext;
+import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseDeleteOperation;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * HBase delete operation converter.
+ */
+@RequiredArgsConstructor
+public final class HBaseDeleteOperationConverter implements 
HBaseOperationConverter {
+    
+    private final SQLStatementContext<?> sqlStatementContext;
+    
+    @Override
+    public HBaseOperation convert() {
+        DeleteStatementContext deleteStatementContext = 
(DeleteStatementContext) sqlStatementContext;
+        Optional<WhereSegment> whereSegment = 
deleteStatementContext.getWhereSegments().stream().findFirst();
+        Preconditions.checkArgument(whereSegment.isPresent(), "Where segment 
is absent.");
+        return whereSegment.get().getExpr() instanceof InExpression
+                ? createDeleteMultipleRowKeysOperation(deleteStatementContext, 
whereSegment.get())
+                : createDeleteSingleRowKeyOperation(deleteStatementContext, 
whereSegment.get());
+    }
+    
+    private HBaseOperation createDeleteMultipleRowKeysOperation(final 
DeleteStatementContext deleteStatementContext, final WhereSegment whereSegment) 
{
+        String tableName = 
deleteStatementContext.getTablesContext().getTableNames().iterator().next();
+        List<String> rowKeys = HBaseRowKeyExtractor.getRowKeys((InExpression) 
whereSegment.getExpr());
+        List<Delete> deletes = rowKeys.stream().map(each -> new 
Delete(Bytes.toBytes(each))).collect(Collectors.toList());
+        return new HBaseOperation(tableName, new 
HBaseDeleteOperation(deletes));
+    }
+    
+    private HBaseOperation createDeleteSingleRowKeyOperation(final 
DeleteStatementContext deleteStatementContext, final WhereSegment whereSegment) 
{
+        String tableName = 
deleteStatementContext.getTablesContext().getTableNames().iterator().next();
+        String rowKey = 
HBaseRowKeyExtractor.getRowKey((BinaryOperationExpression) 
whereSegment.getExpr());
+        Delete delete = new Delete(Bytes.toBytes(rowKey));
+        return new HBaseOperation(tableName, delete);
+    }
+}
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseInsertConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseInsertOperationConverter.java
similarity index 70%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseInsertConverter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseInsertOperationConverter.java
index 725878a8d1f..bb63dcaabbb 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseInsertConverter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseInsertOperationConverter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.hadoop.hbase.client.Put;
@@ -25,32 +25,33 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
 import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseInsertOperation;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
 import java.util.List;
 import java.util.stream.Collectors;
 
 /**
- * HBase database insert converter.
+ * HBase insert operation converter.
  */
 @RequiredArgsConstructor
-public final class HBaseDatabaseInsertConverter implements 
HBaseDatabaseConverter {
+public final class HBaseInsertOperationConverter implements 
HBaseOperationConverter {
     
     private final SQLStatementContext<?> sqlStatementContext;
     
-    /**
-     * Convert SQL statement to HBase operation.
-     *
-     * @return HBase operation
-     */
     @Override
     public HBaseOperation convert() {
-        InsertStatementContext context = (InsertStatementContext) 
sqlStatementContext;
-        String tableName = 
context.getTablesContext().getTableNames().iterator().next();
-        return new HBaseOperation(tableName, new 
HBaseInsertOperationAdapter(createHBaseRequest(context)));
+        InsertStatementContext insertStatementContext = 
(InsertStatementContext) sqlStatementContext;
+        String tableName = 
insertStatementContext.getTablesContext().getTableNames().iterator().next();
+        return new HBaseOperation(tableName, new 
HBaseInsertOperation(createHBaseRequest(insertStatementContext)));
     }
     
-    private Put generateHBaseRequest(final InsertStatementContext context, 
final InsertValueContext insertValueContext) {
-        List<String> columns = context.getInsertColumnNames();
+    private List<Put> createHBaseRequest(final InsertStatementContext 
insertStatementContext) {
+        return 
insertStatementContext.getInsertValueContexts().stream().map(each -> 
generateHBaseRequest(insertStatementContext, 
each)).collect(Collectors.toList());
+    }
+    
+    private Put generateHBaseRequest(final InsertStatementContext 
insertStatementContext, final InsertValueContext insertValueContext) {
+        List<String> columns = insertStatementContext.getInsertColumnNames();
         List<Object> values = 
insertValueContext.getValueExpressions().stream().map(each -> 
((LiteralExpressionSegment) each).getLiterals()).collect(Collectors.toList());
         Put result = new Put(Bytes.toBytes(String.valueOf(values.get(0))));
         for (int i = 1; i < columns.size(); i++) {
@@ -58,8 +59,4 @@ public final class HBaseDatabaseInsertConverter implements 
HBaseDatabaseConverte
         }
         return result;
     }
-    
-    private List<Put> createHBaseRequest(final InsertStatementContext context) 
{
-        return context.getInsertValueContexts().stream().map(each -> 
generateHBaseRequest(context, each)).collect(Collectors.toList());
-    }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRegionReloadConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseRegionReloadOperationConverter.java
similarity index 59%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRegionReloadConverter.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseRegionReloadOperationConverter.java
index 26b3347c458..cc60c2dcd18 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRegionReloadConverter.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseRegionReloadOperationConverter.java
@@ -15,46 +15,29 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.hadoop.hbase.client.Operation;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dal.FlushStatementContext;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseRegionReloadOperation;
+
 import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
 import java.util.stream.Collectors;
 
 /**
- * HBase database region reload converter.
+ * HBase region reload operation converter.
  */
 @RequiredArgsConstructor
-public final class HBaseRegionReloadConverter implements 
HBaseDatabaseConverter {
+public final class HBaseRegionReloadOperationConverter implements 
HBaseOperationConverter {
     
     private final SQLStatementContext<?> sqlStatementContext;
     
-    private Operation getOperation() {
-        return new Operation() {
-            
-            @Override
-            public Map<String, Object> getFingerprint() {
-                return new TreeMap<>();
-            }
-            
-            @Override
-            public Map<String, Object> toMap(final int i) {
-                return new TreeMap<>();
-            }
-        };
-    }
-    
     @Override
     public HBaseOperation convert() {
-        List<String> tables = ((FlushStatementContext) 
sqlStatementContext).getAllTables()
-                .stream().map(simpleTableSegment -> 
simpleTableSegment.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
-        
-        return new HBaseOperation(String.join(",", tables), getOperation());
+        List<String> tables = ((FlushStatementContext) 
sqlStatementContext).getAllTables().stream().map(each -> 
each.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
+        return new HBaseOperation(String.join(",", tables), new 
HBaseRegionReloadOperation());
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseSelectOperationConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseSelectOperationConverter.java
new file mode 100644
index 00000000000..55ae33450bc
--- /dev/null
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseSelectOperationConverter.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.Query;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseSelectOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.util.HBaseHeterogeneousUtil;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.NumberLiteralLimitValueSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * HBase select operation converter.
+ */
+@RequiredArgsConstructor
+@Slf4j
+public final class HBaseSelectOperationConverter implements 
HBaseOperationConverter {
+    
+    private final SQLStatementContext<?> sqlStatementContext;
+    
+    @Override
+    public HBaseOperation convert() {
+        SelectStatementContext selectStatementContext = 
(SelectStatementContext) sqlStatementContext;
+        Optional<WhereSegment> whereSegment = 
selectStatementContext.getWhereSegments().stream().findFirst();
+        Preconditions.checkArgument(whereSegment.isPresent(), "Where segment 
is absent.");
+        return whereSegment.get().getExpr() instanceof 
BinaryOperationExpression || whereSegment.get().getExpr() instanceof 
InExpression
+                ? createGetOperation(selectStatementContext, 
whereSegment.get())
+                : createScanOperation(selectStatementContext, 
whereSegment.get());
+    }
+    
+    private HBaseOperation createGetOperation(final SelectStatementContext 
selectStatementContext, final WhereSegment whereSegment) {
+        ExpressionSegment expr = whereSegment.getExpr();
+        List<Get> gets = getRowKeys(expr).stream().map(each -> new 
Get(Bytes.toBytes(each))).collect(Collectors.toList());
+        if 
(!HBaseHeterogeneousUtil.isUseShorthandProjection(selectStatementContext)) {
+            for (Get each : gets) {
+                appendColumns(each, selectStatementContext);
+            }
+        }
+        String tableName = 
selectStatementContext.getTablesContext().getTableNames().iterator().next();
+        return expr instanceof InExpression ? new HBaseOperation(tableName, 
new HBaseSelectOperation(gets)) : new HBaseOperation(tableName, gets.get(0));
+    }
+    
+    private List<String> getRowKeys(final ExpressionSegment expr) {
+        return expr instanceof InExpression ? 
HBaseRowKeyExtractor.getRowKeys((InExpression) expr) : 
Collections.singletonList(HBaseRowKeyExtractor.getRowKey((BinaryOperationExpression)
 expr));
+    }
+    
+    private HBaseOperation createScanOperation(final SelectStatementContext 
selectStatementContext, final WhereSegment whereSegment) {
+        Scan scan = new Scan();
+        if (whereSegment.getExpr() instanceof BetweenExpression) {
+            appendBetween(scan, whereSegment.getExpr(), false);
+        }
+        if 
(!HBaseHeterogeneousUtil.isUseShorthandProjection(selectStatementContext)) {
+            appendColumns(scan, selectStatementContext);
+        }
+        appendLimit(scan, selectStatementContext);
+        return new 
HBaseOperation(selectStatementContext.getTablesContext().getTableNames().iterator().next(),
 scan);
+    }
+    
+    private void appendColumns(final Query query, final SelectStatementContext 
selectStatementContext) {
+        if (query instanceof Get) {
+            selectStatementContext.getColumnSegments().forEach(each -> ((Get) 
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
+        } else {
+            selectStatementContext.getColumnSegments().forEach(each -> ((Scan) 
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
+        }
+    }
+    
+    private void appendBetween(final Scan scan, final ExpressionSegment 
expressionSegment, final boolean reversed) {
+        BetweenExpression betweenExpr = (BetweenExpression) expressionSegment;
+        String startRowKey = ((LiteralExpressionSegment) 
betweenExpr.getBetweenExpr()).getLiterals().toString();
+        String stopRowKey = ((LiteralExpressionSegment) 
betweenExpr.getAndExpr()).getLiterals().toString();
+        if (null != startRowKey && null != stopRowKey) {
+            if (reversed) {
+                scan.withStopRow(calBytes(startRowKey, 0), true);
+                // refer: 
<https://github.com/apache/hbase/blob/master/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupSystemTable.java#L1853>
+                scan.withStartRow(calBytes(stopRowKey + "~", 0), true);
+            } else {
+                scan.withStartRow(calBytes(startRowKey, 0), true);
+                scan.withStopRow(calBytes(stopRowKey + "~", 0), true);
+            }
+        }
+    }
+    
+    private byte[] calBytes(final String row, final int step) {
+        byte[] rowByte = Bytes.toBytes(row);
+        byte[] result = Arrays.copyOf(rowByte, rowByte.length);
+        result[result.length - 1] = (byte) (result[result.length - 1] + step);
+        return result;
+    }
+    
+    private void appendLimit(final Scan scan, final SelectStatementContext 
selectStatementContext) {
+        // TODO consider about other dialect
+        MySQLSelectStatement selectStatement = (MySQLSelectStatement) 
selectStatementContext.getSqlStatement();
+        if (selectStatement.getLimit().isPresent()) {
+            selectStatement.getLimit().get().getRowCount().ifPresent(optional 
-> scan.setLimit((int) ((NumberLiteralLimitValueSegment) optional).getValue()));
+        }
+    }
+}
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java
new file mode 100644
index 00000000000..b404141e731
--- /dev/null
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
+import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * HBase update operation converter.
+ */
+@RequiredArgsConstructor
+public final class HBaseUpdateOperationConverter implements 
HBaseOperationConverter {
+    
+    private final SQLStatementContext<?> sqlStatementContext;
+    
+    @Override
+    public HBaseOperation convert() {
+        UpdateStatementContext updateStatementContext = 
(UpdateStatementContext) sqlStatementContext;
+        Optional<WhereSegment> whereSegment = 
updateStatementContext.getWhereSegments().stream().findFirst();
+        Preconditions.checkArgument(whereSegment.isPresent(), "Where segment 
is absent.");
+        return whereSegment.get().getExpr() instanceof InExpression
+                ? createUpdateMultipleRowKeysOperation(updateStatementContext, 
whereSegment.get())
+                : createUpdateSingleRowKeyOperation(updateStatementContext, 
whereSegment.get());
+    }
+    
+    private HBaseOperation createUpdateMultipleRowKeysOperation(final 
UpdateStatementContext updateStatementContext, final WhereSegment whereSegment) 
{
+        String tableName = 
updateStatementContext.getTablesContext().getTableNames().iterator().next();
+        List<Put> puts = HBaseRowKeyExtractor.getRowKeys((InExpression) 
whereSegment.getExpr()).stream().map(each -> new 
Put(Bytes.toBytes(each))).collect(Collectors.toList());
+        for (Put each : puts) {
+            addPutColumn(updateStatementContext, each);
+        }
+        return new HBaseOperation(tableName, new HBaseUpdateOperation(puts));
+    }
+    
+    private HBaseOperation createUpdateSingleRowKeyOperation(final 
UpdateStatementContext updateStatementContext, final WhereSegment whereSegment) 
{
+        String tableName = 
updateStatementContext.getTablesContext().getTableNames().iterator().next();
+        return new HBaseOperation(tableName, 
createOperationRequest(updateStatementContext, whereSegment));
+    }
+    
+    private Put createOperationRequest(final UpdateStatementContext 
updateStatementContext, final WhereSegment whereSegment) {
+        Put result = new 
Put(Bytes.toBytes(HBaseRowKeyExtractor.getRowKey((BinaryOperationExpression) 
whereSegment.getExpr())));
+        addPutColumn(updateStatementContext, result);
+        return result;
+    }
+    
+    private void addPutColumn(final UpdateStatementContext 
updateStatementContext, final Put put) {
+        for (AssignmentSegment each : 
updateStatementContext.getSqlStatement().getSetAssignment().getAssignments()) {
+            String columnName = 
each.getColumns().iterator().next().getIdentifier().getValue();
+            String value = String.valueOf(((LiteralExpressionSegment) 
each.getValue()).getLiterals());
+            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes(columnName), 
Bytes.toBytes(value));
+        }
+    }
+}
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/impl/HBaseDatabaseBackendUpdateHandler.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/handler/HBaseDatabaseBackendUpdateHandler.java
similarity index 85%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/impl/HBaseDatabaseBackendUpdateHandler.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/handler/HBaseDatabaseBackendUpdateHandler.java
index 4bc59263455..97696795182 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/impl/HBaseDatabaseBackendUpdateHandler.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/handler/HBaseDatabaseBackendUpdateHandler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.impl;
+package org.apache.shardingsphere.proxy.backend.hbase.handler;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -23,12 +23,12 @@ import 
org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
 import 
org.apache.shardingsphere.proxy.backend.handler.data.DatabaseBackendHandler;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverter;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverterFactory;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.update.HBaseDatabaseUpdater;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
 import java.util.Collection;
 
 /**
@@ -50,9 +50,8 @@ public final class HBaseDatabaseBackendUpdateHandler 
implements DatabaseBackendH
     @Override
     public UpdateResponseHeader execute() {
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        HBaseOperation hbaseOperation = converter.convert();
-        Collection<UpdateResult> updateResults = 
updater.executeUpdate(hbaseOperation);
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        Collection<UpdateResult> updateResults = 
updater.executeUpdate(converter.convert());
         return new UpdateResponseHeader(sqlStatement, updateResults);
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
index 774ec60617d..c4a300e9d1d 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
@@ -33,7 +33,6 @@ public interface HBaseQueryCallback<T> {
      * @param table table
      * @return execute result
      * @throws IOException IO exception
-     * 
      */
     T executeInHBase(Table table) throws IOException;
     
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
index f3dde4300d0..5899009ae22 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
@@ -61,8 +61,7 @@ public final class HBaseDatabaseDescribeResultSet implements 
HBaseDatabaseQueryR
      */
     @Override
     public Collection<String> getColumnNames() {
-        return Arrays.asList("Name", "TableAttributes", 
"FlushPolicyClassName", "MaxFileSize", "MemStoreFlushSize",
-                "Priority", "RegionReplication", "RegionSplitPolicyClassName", 
"CustomizedValues");
+        return Arrays.asList("Name", "TableAttributes", 
"FlushPolicyClassName", "MaxFileSize", "MemStoreFlushSize", "Priority", 
"RegionReplication", "RegionSplitPolicyClassName", "CustomizedValues");
     }
     
     /**
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
index c1007fff26b..f161b047366 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
@@ -28,10 +28,10 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverterFactory;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseSelectOperationAdapter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseSelectOperation;
 import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
 import org.apache.shardingsphere.proxy.backend.hbase.props.HBasePropertyKey;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
@@ -79,13 +79,13 @@ public final class HBaseDatabaseGetResultSet implements 
HBaseDatabaseQueryResult
     @Override
     public void init(final SQLStatementContext<?> sqlStatementContext) {
         statementContext = (SelectStatementContext) sqlStatementContext;
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
         HBaseOperation hbaseOperation = converter.convert();
         initResultNum(sqlStatementContext);
         final long startMill = System.currentTimeMillis();
         if (hbaseOperation.getOperation() instanceof Get) {
             executeGetRequest(hbaseOperation);
-        } else if (hbaseOperation.getOperation() instanceof 
HBaseSelectOperationAdapter) {
+        } else if (hbaseOperation.getOperation() instanceof 
HBaseSelectOperation) {
             executeGetsRequest(hbaseOperation);
         } else {
             executeScanRequest(hbaseOperation);
@@ -130,7 +130,7 @@ public final class HBaseDatabaseGetResultSet implements 
HBaseDatabaseQueryResult
     }
     
     private void executeGetsRequest(final HBaseOperation hbaseOperation) {
-        List<Result> results = 
Arrays.asList(HBaseExecutor.executeQuery(hbaseOperation.getTableName(), table 
-> table.get(((HBaseSelectOperationAdapter) 
hbaseOperation.getOperation()).getGets())));
+        List<Result> results = 
Arrays.asList(HBaseExecutor.executeQuery(hbaseOperation.getTableName(), table 
-> table.get(((HBaseSelectOperation) 
hbaseOperation.getOperation()).getGets())));
         results = results.stream().filter(result -> result.rawCells().length > 
0).collect(Collectors.toList());
         orderResults(results);
         iterator = results.iterator();
@@ -157,7 +157,7 @@ public final class HBaseDatabaseGetResultSet implements 
HBaseDatabaseQueryResult
     
     private void executeScanRequest(final HBaseOperation hbaseOperation) {
         Scan scan = (Scan) hbaseOperation.getOperation();
-        scan.setLimit(new Long(maxLimitResultSize).intValue());
+        scan.setLimit(Long.valueOf(maxLimitResultSize).intValue());
         ResultScanner resultScanner = 
HBaseExecutor.executeQuery(hbaseOperation.getTableName(), table -> 
table.getScanner(scan));
         iterator = resultScanner.iterator();
         setColumns(iterator);
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
index cc5c9b58551..d5e94ad61c7 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
@@ -22,7 +22,7 @@ import 
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
 import java.util.Collection;
 
 /**
- * Result set for HBase databases.
+ * Query result set for HBase databases.
  */
 public interface HBaseDatabaseQueryResultSet extends TypedSPI {
     
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
index 5b550161407..04628529237 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.hbase.result.update;
 
 import org.apache.hadoop.hbase.client.Delete;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDeleteOperationAdapter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseDeleteOperation;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
 import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLDeleteStatement;
@@ -32,15 +32,14 @@ import java.util.Collections;
 public final class HBaseDatabaseDeleteUpdater implements HBaseDatabaseUpdater {
     
     @Override
-    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
hbaseOperation) {
-        if (hbaseOperation.getOperation() instanceof 
HBaseDeleteOperationAdapter) {
-            int deleteAffectedSize = ((HBaseDeleteOperationAdapter) 
hbaseOperation.getOperation()).getDeletes().size();
-            HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table 
-> table.delete(((HBaseDeleteOperationAdapter) 
hbaseOperation.getOperation()).getDeletes()));
-            return Collections.singletonList(new 
UpdateResult(deleteAffectedSize, 0));
-        } else {
-            HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table 
-> table.delete((Delete) hbaseOperation.getOperation()));
-            return Collections.singletonList(new UpdateResult(1, 0));
+    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
operation) {
+        if (operation.getOperation() instanceof HBaseDeleteOperation) {
+            int deleteAffectedSize = ((HBaseDeleteOperation) 
operation.getOperation()).getDeletes().size();
+            HBaseExecutor.executeUpdate(operation.getTableName(), table -> 
table.delete(((HBaseDeleteOperation) operation.getOperation()).getDeletes()));
+            return Collections.singleton(new UpdateResult(deleteAffectedSize, 
0));
         }
+        HBaseExecutor.executeUpdate(operation.getTableName(), table -> 
table.delete((Delete) operation.getOperation()));
+        return Collections.singleton(new UpdateResult(1, 0));
     }
     
     @Override
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
index 0024b71317b..75202611177 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
@@ -19,10 +19,11 @@ package 
org.apache.shardingsphere.proxy.backend.hbase.result.update;
 
 import org.apache.hadoop.hbase.client.Put;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseInsertOperationAdapter;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseInsertOperation;
 import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -33,20 +34,14 @@ import java.util.List;
 public final class HBaseDatabaseInsertUpdater implements HBaseDatabaseUpdater {
     
     @Override
-    public String getType() {
-        return MySQLInsertStatement.class.getCanonicalName();
+    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
operation) {
+        List<Put> puts = ((HBaseInsertOperation) 
operation.getOperation()).getPuts();
+        HBaseExecutor.executeUpdate(operation.getTableName(), table -> 
table.put(puts));
+        return Collections.singleton(new UpdateResult(puts.size(), 0));
     }
     
-    /**
-     * Execute HBase operation.
-     *
-     * @param hbaseOperation HBase operation
-     * @return affected rows
-     */
     @Override
-    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
hbaseOperation) {
-        List<Put> puts = ((HBaseInsertOperationAdapter) 
hbaseOperation.getOperation()).getPuts();
-        HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table -> 
table.put(puts));
-        return Collections.singletonList(new UpdateResult(puts.size(), 0));
+    public String getType() {
+        return MySQLInsertStatement.class.getCanonicalName();
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
index 6d16b8470fc..9a66dca522c 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.proxy.backend.hbase.result.update;
 import org.apache.hadoop.hbase.client.Put;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseUpdateOperationAdapter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation;
 import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLUpdateStatement;
 import java.util.Collection;
@@ -31,21 +31,14 @@ import java.util.Collections;
  */
 public final class HBaseDatabaseUpdateUpdater implements HBaseDatabaseUpdater {
     
-    /**
-     * Execute HBase operation.
-     *
-     * @param hbaseOperation HBase operation
-     * @return affected rows
-     */
     @Override
-    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
hbaseOperation) {
-        if (hbaseOperation.getOperation() instanceof 
HBaseUpdateOperationAdapter) {
-            HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table 
-> table.put(((HBaseUpdateOperationAdapter) 
hbaseOperation.getOperation()).getPuts()));
-            return Collections.singletonList(new 
UpdateResult(((HBaseUpdateOperationAdapter) 
hbaseOperation.getOperation()).getPuts().size(), 0));
-        } else {
-            HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table 
-> table.put((Put) hbaseOperation.getOperation()));
-            return Collections.singletonList(new UpdateResult(1, 0));
+    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
operation) {
+        if (operation.getOperation() instanceof HBaseUpdateOperation) {
+            HBaseExecutor.executeUpdate(operation.getTableName(), table -> 
table.put(((HBaseUpdateOperation) operation.getOperation()).getPuts()));
+            return Collections.singleton(new 
UpdateResult(((HBaseUpdateOperation) 
operation.getOperation()).getPuts().size(), 0));
         }
+        HBaseExecutor.executeUpdate(operation.getTableName(), table -> 
table.put((Put) operation.getOperation()));
+        return Collections.singleton(new UpdateResult(1, 0));
     }
     
     @Override
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
index d025d9ec149..368ca39fc9a 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
@@ -24,15 +24,14 @@ import java.util.Collection;
 
 /**
  * HBase backend updater.
- *
  */
 public interface HBaseDatabaseUpdater extends TypedSPI {
     
     /**
      * Execute HBase operation.
      *
-     * @param hbaseOperation HBase operation
+     * @param operation HBase operation
      * @return affected rows
      */
-    Collection<UpdateResult> executeUpdate(HBaseOperation hbaseOperation);
+    Collection<UpdateResult> executeUpdate(HBaseOperation operation);
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
index fb85040178f..652c21be37a 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.hbase.result.update;
 
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
+import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
 import 
org.apache.shardingsphere.proxy.backend.hbase.context.HBaseRegionWarmUpContext;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
@@ -34,28 +35,20 @@ import java.util.concurrent.atomic.AtomicInteger;
  */
 public final class HBaseRegionReloadUpdater implements HBaseDatabaseUpdater {
     
-    /**
-     * Execute HBase operation.
-     *
-     * @param hbaseOperation HBase operation
-     * @return affected rows
-     */
     @Override
-    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
hbaseOperation) {
-        List<String> tables = 
Arrays.asList(hbaseOperation.getTableName().split(","));
+    public Collection<UpdateResult> executeUpdate(final HBaseOperation 
operation) {
+        List<String> tables = 
Arrays.asList(operation.getTableName().split(","));
         AtomicInteger updateCount = new AtomicInteger();
         
tables.stream().filter(this::isNotNullTableName).forEach(this::checkTableExists);
-        tables.stream().filter(this::isNotNullTableName).forEach(tableName -> {
+        tables.stream().filter(this::isNotNullTableName).forEach(each -> {
             updateCount.getAndIncrement();
-            HBaseRegionWarmUpContext.getInstance().loadRegionInfo(tableName, 
HBaseContext.getInstance().getConnection(tableName));
+            HBaseRegionWarmUpContext.getInstance().loadRegionInfo(each, 
HBaseContext.getInstance().getConnection(each));
         });
-        return Collections.singletonList(new UpdateResult(updateCount.get(), 
0));
+        return Collections.singleton(new UpdateResult(updateCount.get(), 0));
     }
     
     private void checkTableExists(final String tableName) {
-        if (!HBaseContext.getInstance().isTableExists(tableName)) {
-            throw new HBaseOperationException(String.format("Table `%s` is not 
exists", tableName));
-        }
+        
ShardingSpherePreconditions.checkState(HBaseContext.getInstance().isTableExists(tableName),
 () -> new HBaseOperationException(String.format("Table `%s` is not exists", 
tableName)));
     }
     
     private boolean isNotNullTableName(final String tableName) {
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtil.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtil.java
similarity index 85%
rename from 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtil.java
rename to 
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtil.java
index 6090028ca4e..0b3b2ba5af5 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtil.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtil.java
@@ -27,15 +27,16 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * heterogeneous util.
+ * HBase heterogeneous util.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class HeterogeneousUtil {
+public final class HBaseHeterogeneousUtil {
     
     /**
-     * Is Crc ProjectionSegment.
-     * @param projectionSegment projectionSegment
-     * @return result
+     * Whether crc projection segment.
+     * 
+     * @param projectionSegment projection segment
+     * @return Is crc projection segment or not
      */
     public static boolean isCrcProjectionSegment(final ProjectionSegment 
projectionSegment) {
         
@@ -47,10 +48,11 @@ public class HeterogeneousUtil {
     }
     
     /**
-     * convert prepared statement to literal statement.
-     * @param source sql statement
-     * @param target parameter marker
-     * @param replacements parameters
+     * Convert prepared statement to literal statement.
+     * 
+     * @param source source
+     * @param target target
+     * @param replacements replacements
      * @return literal statement
      */
     public static String replaceSQLStatementWithParameters(final String 
source, final CharSequence target, final Object... replacements) {
@@ -72,8 +74,9 @@ public class HeterogeneousUtil {
     }
     
     /**
-     * Return true if use * in SELECT Statement.
-     * @param statementContext Select Statement Context
+     * Return true if use * in SELECT statement.
+     * 
+     * @param statementContext select statement context
      * @return is use shorthand projection
      */
     public static boolean isUseShorthandProjection(final 
SelectStatementContext statementContext) {
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactoryTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactoryTest.java
similarity index 58%
rename from 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactoryTest.java
rename to 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactoryTest.java
index 7beec90a6f6..8a744963ac6 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactoryTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactoryTest.java
@@ -23,45 +23,51 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementConte
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
-import org.junit.Test;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseDeleteOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseInsertOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseRegionReloadOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseSelectOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseUpdateOperationConverter;
+import org.junit.jupiter.api.Test;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.mock;
 
-public final class HBaseDatabaseConverterFactoryTest {
+public final class HBaseOperationConverterFactoryTest {
     
     @Test
     public void assertExecuteSelectStatement() {
         SQLStatementContext<?> sqlStatementContext = 
mock(SelectStatementContext.class);
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        assertThat(converter, instanceOf(HBaseDatabaseSelectConverter.class));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        assertThat(converter, instanceOf(HBaseSelectOperationConverter.class));
     }
     
     @Test
     public void assertExecuteInsertStatement() {
         SQLStatementContext<?> sqlStatementContext = 
mock(InsertStatementContext.class);
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        assertThat(converter, instanceOf(HBaseDatabaseInsertConverter.class));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        assertThat(converter, instanceOf(HBaseInsertOperationConverter.class));
     }
     
     @Test
     public void assertExecuteUpdateStatement() {
         SQLStatementContext<?> sqlStatementContext = 
mock(UpdateStatementContext.class);
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        assertThat(converter, instanceOf(HBaseDatabaseUpdateConverter.class));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        assertThat(converter, instanceOf(HBaseUpdateOperationConverter.class));
     }
     
     @Test
     public void assertExecuteDeleteStatement() {
         SQLStatementContext<?> sqlStatementContext = 
mock(DeleteStatementContext.class);
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        assertThat(converter, instanceOf(HBaseDatabaseDeleteConverter.class));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        assertThat(converter, instanceOf(HBaseDeleteOperationConverter.class));
     }
     
     @Test
     public void assertExecuteFlushStatement() {
         SQLStatementContext<?> sqlStatementContext = 
mock(FlushStatementContext.class);
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        assertThat(converter, instanceOf(HBaseRegionReloadConverter.class));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        assertThat(converter, 
instanceOf(HBaseRegionReloadOperationConverter.class));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapterTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractorTest.java
similarity index 71%
rename from 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapterTest.java
rename to 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractorTest.java
index 9edaf05e6af..cf825691a5d 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapterTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractorTest.java
@@ -21,26 +21,25 @@ import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLSta
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 
-public class HBaseDatabaseRowKeysConverterAdapterTest {
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public final class HBaseRowKeyExtractorTest {
     
     @Test
-    public void assertGetRowKeysFromInExpression() {
+    public void assertGetRowKeys() {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where rowKey in ('1', '2') ");
         Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
-        HBaseDatabaseRowKeysConverterAdapter adapter = new 
HBaseDatabaseRowKeysConverterAdapter();
-        if (whereSegment.isPresent()) {
-            List<String> rowKeys = 
adapter.getRowKeysFromWhereSegmentByIn((InExpression) 
whereSegment.get().getExpr());
-            List<String> actual = Arrays.asList("1", "2");
-            assertEquals(rowKeys, actual);
-        } else {
-            fail();
-        }
+        assertTrue(whereSegment.isPresent());
+        List<String> actual = Arrays.asList("1", "2");
+        List<String> expected = HBaseRowKeyExtractor.getRowKeys((InExpression) 
whereSegment.get().getExpr());
+        assertThat(actual, is(expected));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverterTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverterTest.java
similarity index 68%
rename from 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverterTest.java
rename to 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverterTest.java
index ffcea8e69b5..a1926569d72 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverterTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverterTest.java
@@ -15,29 +15,32 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
 
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseDeleteOperation;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.junit.Test;
-import static org.hamcrest.CoreMatchers.equalTo;
+import org.junit.jupiter.api.Test;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
-public final class HBaseDatabaseDeleteConverterTest {
+public final class HBaseDeleteOperationConverterTest {
     
     @Test
     public void assertConvert() {
         SQLStatement sqlStatement = 
HBaseSupportedSQLStatement.parseSQLStatement(HBaseSupportedSQLStatement.getDeleteStatement());
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
         HBaseOperation hbaseOperation = converter.convert();
-        assertThat(hbaseOperation.getTableName(), 
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+        assertThat(hbaseOperation.getTableName(), 
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
         assertThat(hbaseOperation.getOperation(), instanceOf(Delete.class));
     }
     
@@ -46,10 +49,10 @@ public final class HBaseDatabaseDeleteConverterTest {
         String sql = " delete /*+ hbase */ from t_test_order where rowKey in 
('2', '1')";
         SQLStatement sqlStatement = 
HBaseSupportedSQLStatement.parseSQLStatement(sql);
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
         HBaseOperation hBaseOperation = converter.convert();
-        assertThat(hBaseOperation.getTableName(), 
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
-        assertThat(hBaseOperation.getOperation(), 
instanceOf(HBaseDeleteOperationAdapter.class));
-        assertThat(((HBaseDeleteOperationAdapter) 
hBaseOperation.getOperation()).getDeletes().size(), is(2));
+        assertThat(hBaseOperation.getTableName(), 
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+        assertThat(hBaseOperation.getOperation(), 
instanceOf(HBaseDeleteOperation.class));
+        assertThat(((HBaseDeleteOperation) 
hBaseOperation.getOperation()).getDeletes().size(), is(2));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverterTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverterTest.java
similarity index 61%
rename from 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverterTest.java
rename to 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverterTest.java
index ea0abe15c01..22a8ace9458 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverterTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverterTest.java
@@ -15,30 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
 
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
+import 
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.junit.Test;
-import static org.hamcrest.CoreMatchers.equalTo;
+import org.junit.jupiter.api.Test;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
-public final class HBaseDatabaseUpdateConverterTest {
+public final class HBaseUpdateOperationConverterTest {
     
     @Test
     public void assertConvert() {
         SQLStatement sqlStatement = 
HBaseSupportedSQLStatement.parseSQLStatement(HBaseSupportedSQLStatement.getUpdateStatement());
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        HBaseOperation hbaseOperation = converter.convert();
-        assertThat(hbaseOperation.getTableName(), 
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
-        assertThat(hbaseOperation.getOperation(), instanceOf(Put.class));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        HBaseOperation operation = converter.convert();
+        assertThat(operation.getTableName(), 
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+        assertThat(operation.getOperation(), instanceOf(Put.class));
     }
     
     @Test
@@ -46,10 +49,10 @@ public final class HBaseDatabaseUpdateConverterTest {
         String sql = " update /*+ hbase */ t_test_order set age = 10 where 
rowKey in (1, '2')";
         SQLStatement sqlStatement = 
HBaseSupportedSQLStatement.parseSQLStatement(sql);
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
-        HBaseDatabaseConverter converter = 
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
-        HBaseOperation hBaseOperation = converter.convert();
-        assertThat(hBaseOperation.getTableName(), 
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
-        assertThat(hBaseOperation.getOperation(), 
instanceOf(HBaseUpdateOperationAdapter.class));
-        assertThat(((HBaseUpdateOperationAdapter) 
hBaseOperation.getOperation()).getPuts().size(), is(2));
+        HBaseOperationConverter converter = 
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+        HBaseOperation operation = converter.convert();
+        assertThat(operation.getTableName(), 
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+        assertThat(operation.getOperation(), 
instanceOf(HBaseUpdateOperation.class));
+        assertThat(((HBaseUpdateOperation) 
operation.getOperation()).getPuts().size(), is(2));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
index ea7c818b01a..77c14efaa76 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
@@ -26,7 +26,7 @@ import java.util.Properties;
 /**
  * SQL Statement which supported in HBase.
  */
-public class HBaseSupportedSQLStatement {
+public final class HBaseSupportedSQLStatement {
     
     public static final String HBASE_DATABASE_TABLE_NAME = "t_test_order";
     
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
index f4a0f28a9cc..f2f3c883238 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
@@ -22,26 +22,25 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.Connection;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.Table;
-import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
 import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
 import org.apache.shardingsphere.proxy.backend.hbase.props.HBaseProperties;
 import org.apache.shardingsphere.proxy.backend.hbase.props.HBasePropertyKey;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
-import org.junit.After;
-import org.junit.Before;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
+
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Properties;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -52,38 +51,23 @@ import static org.mockito.Mockito.when;
 @Getter
 public abstract class AbstractHBaseDatabaseQueryResultSetTest {
     
-    private final Table table = mock(Table.class, RETURNS_DEEP_STUBS);
-    
-    private final Admin admin = mock(HBaseAdmin.class, RETURNS_DEEP_STUBS);
-    
-    private final Connection connection = mock(Connection.class, 
RETURNS_DEEP_STUBS);
+    @Mock
+    private Admin admin;
     
-    private final TablesContext tablesContext = mock(TablesContext.class, 
RETURNS_DEEP_STUBS);
-    
-    private Collection<String> tableNames;
-    
-    @Before
+    @BeforeEach
     public void setUp() throws IOException {
-        Properties props = createProperties();
-        HBaseProperties hBaseProperties = new HBaseProperties(props);
-        HBaseContext.getInstance().setProps(hBaseProperties);
-        tableNames = new ArrayList<>();
-        tableNames.add("t_test_table");
-        when(tablesContext.getTableNames()).thenReturn(tableNames);
+        Properties props = PropertiesBuilder.build(new 
Property(HBasePropertyKey.WARM_UP_THREAD_NUM.getKey(), String.valueOf(1)));
+        HBaseContext.getInstance().setProps(new HBaseProperties(props));
         HTableDescriptor[] tableDescriptors = createHTableDescriptors();
         when(admin.tableExists(any())).thenReturn(true);
         when(admin.getTableDescriptor(any())).thenReturn(tableDescriptors[0]);
         when(admin.listTables()).thenReturn(tableDescriptors);
+        Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
         when(connection.getAdmin()).thenReturn(admin);
-        when(connection.getTable(any())).thenReturn(table);
+        when(connection.getTable(any())).thenReturn(mock(Table.class));
         HBaseContext.getInstance().init(Collections.singletonMap("cluster_lj", 
connection));
     }
     
-    private Properties createProperties() {
-        return PropertiesBuilder.build(
-                new Property(HBasePropertyKey.WARM_UP_THREAD_NUM.getKey(), 
String.valueOf(1)));
-    }
-    
     private HTableDescriptor[] createHTableDescriptors() {
         HTableDescriptor descriptor = mock(HTableDescriptor.class);
         
when(descriptor.getNameAsString()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
@@ -99,7 +83,7 @@ public abstract class AbstractHBaseDatabaseQueryResultSetTest 
{
         return new HTableDescriptor[]{descriptor};
     }
     
-    @After
+    @AfterEach
     public void tearDown() {
         HBaseContext.getInstance().close();
     }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
index e0b12091a6b..aedfa4390e6 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
@@ -21,29 +21,29 @@ import 
org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dal.ShowCreateTableStatementContext;
 import 
org.apache.shardingsphere.proxy.backend.hbase.exception.HBaseOperationException;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public class HBaseDatabaseDescribeResultSetTest extends 
AbstractHBaseDatabaseQueryResultSetTest {
-    
-    private final TablesContext tablesContext = mock(TablesContext.class, 
RETURNS_DEEP_STUBS);
+public final class HBaseDatabaseDescribeResultSetTest extends 
AbstractHBaseDatabaseQueryResultSetTest {
     
     @Test
     public void assertGetRowData() {
         HBaseDatabaseQueryResultSet resultSet = new 
HBaseDatabaseDescribeResultSet();
         ShowCreateTableStatementContext context = 
mock(ShowCreateTableStatementContext.class);
-        when(context.getTablesContext()).thenReturn(tablesContext);
+        when(context.getTablesContext()).thenReturn(mock(TablesContext.class, 
RETURNS_DEEP_STUBS));
         
when(context.getTablesContext().getTableNames().iterator().next()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
         resultSet.init(context);
-        
         List<Object> actual = new ArrayList<>(resultSet.getRowData());
         assertThat(actual.size(), is(9));
         assertThat(actual.get(0), 
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
@@ -52,23 +52,21 @@ public class HBaseDatabaseDescribeResultSetTest extends 
AbstractHBaseDatabaseQue
         assertThat(actual.get(8), is(""));
     }
     
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void assertGetRowDataWithTableIsNotExists() throws IOException {
         when(getAdmin().tableExists(any())).thenReturn(false);
         ShowCreateTableStatementContext context = 
mock(ShowCreateTableStatementContext.class);
-        when(context.getTablesContext()).thenReturn(tablesContext);
+        when(context.getTablesContext()).thenReturn(mock(TablesContext.class, 
RETURNS_DEEP_STUBS));
         
when(context.getTablesContext().getTableNames().iterator().next()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
-        HBaseDatabaseQueryResultSet resultSet = new 
HBaseDatabaseDescribeResultSet();
-        resultSet.init(context);
+        assertThrows(IllegalArgumentException.class, () -> new 
HBaseDatabaseDescribeResultSet().init(context));
     }
     
-    @Test(expected = HBaseOperationException.class)
+    @Test
     public void assertGetRowDataWithBackendError() throws IOException {
         
when(getAdmin().getTableDescriptor(any())).thenThrow(IOException.class);
         ShowCreateTableStatementContext context = 
mock(ShowCreateTableStatementContext.class);
-        when(context.getTablesContext()).thenReturn(tablesContext);
+        when(context.getTablesContext()).thenReturn(mock(TablesContext.class, 
RETURNS_DEEP_STUBS));
         
when(context.getTablesContext().getTableNames().iterator().next()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
-        HBaseDatabaseQueryResultSet resultSet = new 
HBaseDatabaseDescribeResultSet();
-        resultSet.init(context);
+        assertThrows(HBaseOperationException.class, () -> new 
HBaseDatabaseDescribeResultSet().init(context));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
index ea2006d1320..f3a0e1df9d6 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
@@ -22,12 +22,15 @@ import 
org.apache.shardingsphere.proxy.backend.hbase.exception.HBaseOperationExc
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
 import java.util.ArrayList;
 import java.util.List;
+
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -40,7 +43,6 @@ public final class HBaseDatabaseListResultSetTest extends 
AbstractHBaseDatabaseQ
         ShowTablesStatementContext context = 
mock(ShowTablesStatementContext.class);
         when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement) 
sqlStatement);
         resultSet.init(context);
-        
         assertTrue(resultSet.next());
         List<Object> actual = new ArrayList<>(resultSet.getRowData());
         assertThat(actual.size(), is(2));
@@ -70,7 +72,6 @@ public final class HBaseDatabaseListResultSetTest extends 
AbstractHBaseDatabaseQ
         ShowTablesStatementContext context = 
mock(ShowTablesStatementContext.class);
         when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement) 
sqlStatement);
         resultSet.init(context);
-        
         sqlStatement = HBaseSupportedSQLStatement.parseSQLStatement("show /*+ 
hbase */ tables  like 't_test%' ");
         when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement) 
sqlStatement);
         resultSet.init(context);
@@ -80,12 +81,12 @@ public final class HBaseDatabaseListResultSetTest extends 
AbstractHBaseDatabaseQ
         assertThat(actual.get(1), 
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
     }
     
-    @Test(expected = HBaseOperationException.class)
+    @Test
     public void assertGetRowDataError() {
         SQLStatement sqlStatement = 
HBaseSupportedSQLStatement.parseSQLStatement("show /*+ hbase */ tables from 
cluster_do_not_exists");
         HBaseDatabaseQueryResultSet resultSet = new 
HBaseDatabaseListResultSet();
         ShowTablesStatementContext context = 
mock(ShowTablesStatementContext.class);
         when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement) 
sqlStatement);
-        resultSet.init(context);
+        assertThrows(HBaseOperationException.class, () -> 
resultSet.init(context));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
index 3d1032565de..5b229e196b4 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
@@ -18,15 +18,17 @@
 package org.apache.shardingsphere.proxy.backend.hbase.result.update;
 
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
-import 
org.apache.shardingsphere.proxy.backend.hbase.impl.HBaseDatabaseBackendUpdateHandler;
+import 
org.apache.shardingsphere.proxy.backend.hbase.handler.HBaseDatabaseBackendUpdateHandler;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
 import java.util.Collections;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtilTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtilTest.java
similarity index 87%
rename from 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtilTest.java
rename to 
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtilTest.java
index 290bcfdbf4d..b2c3c32878d 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtilTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtilTest.java
@@ -21,18 +21,19 @@ import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLSta
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import java.util.ArrayList;
 import java.util.List;
-import static org.junit.Assert.assertTrue;
 
-public class HeterogeneousUtilTest {
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public final class HBaseHeterogeneousUtilTest {
     
     @Test
     public void assertCrc32ProjectionSegment() {
         String sql = "SELECT /*+ HBase */ rowKey, crc32(concat_ws('#',rowKey)) 
from t_order where rowKey in (1, 2, 3)";
         SQLStatement sqlStatement = 
HBaseSupportedSQLStatement.parseSQLStatement(sql);
         List<ProjectionSegment> projectionSegments = new 
ArrayList<>(((SelectStatement) sqlStatement).getProjections().getProjections());
-        
assertTrue(HeterogeneousUtil.isCrcProjectionSegment(projectionSegments.get(1)));
+        
assertTrue(HBaseHeterogeneousUtil.isCrcProjectionSegment(projectionSegments.get(1)));
     }
 }

Reply via email to