You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/12/29 03:04:10 UTC

[shardingsphere] branch master updated: Add t_merchant standard table in readwrite_splitting_and_shadow scenario (#23144)

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

duanzhengqiang 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 bb7079477c4 Add t_merchant standard table in readwrite_splitting_and_shadow scenario (#23144)
bb7079477c4 is described below

commit bb7079477c499646350d94d51caf4485ff1ac0d1
Author: ICannerxy <40...@users.noreply.github.com>
AuthorDate: Thu Dec 29 11:04:04 2022 +0800

    Add t_merchant standard table in readwrite_splitting_and_shadow scenario (#23144)
    
    * Add t_merchant standard table in readwrite_splitting_and_shadow scenario
    
    * Add t_merchant standard table in readwrite_splitting_and_shadow scenario
---
 .../data/actual/dataset.xml                        |  88 +++++++++++++
 .../data/actual/init-sql/h2/01-actual-init.sql     |   2 +
 .../data/actual/init-sql/mysql/01-actual-init.sql  |   4 +
 .../actual/init-sql/opengauss/01-actual-init.sql   |   8 ++
 .../data/actual/init-sql/oracle/01-actual-init.sql |   4 +
 .../actual/init-sql/postgresql/01-actual-init.sql  |   8 ++
 .../actual/init-sql/sqlserver/01-actual-init.sql   |   4 +
 .../data/expected/dataset.xml                      |  68 ++++++++++
 .../data/expected/init-sql/h2/01-expected-init.sql |   2 +
 .../expected/init-sql/mysql/01-expected-init.sql   |   3 +
 .../init-sql/opengauss/01-expected-init.sql        |   6 +
 .../expected/init-sql/oracle/01-expected-init.sql  |   3 +
 .../init-sql/postgresql/01-expected-init.sql       |   7 +-
 .../init-sql/sqlserver/01-expected-init.sql        |   4 +-
 .../proxy/conf/mysql/config-shadow.yaml            |  33 +++++
 .../proxy/conf/opengauss/config-shadow.yaml        | 137 +++++++++++++--------
 .../proxy/conf/postgresql/config-shadow.yaml       | 137 +++++++++++++--------
 .../readwrite_splitting_and_shadow/rules.yaml      | 137 +++++++++++++--------
 18 files changed, 497 insertions(+), 158 deletions(-)

diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/dataset.xml b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/dataset.xml
index 752d0c9adab..edb7d27e2f9 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/dataset.xml
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/dataset.xml
@@ -29,6 +29,14 @@
         <column name="type_time" type="time" />
         <column name="type_timestamp" type="timestamp" />
     </metadata>
+    <metadata data-nodes="write_db.t_merchant,write_db_shadow.t_merchant,read_0.t_merchant,read_1.t_merchant">
+        <column name="merchant_id" type="numeric" />
+        <column name="country_id" type="numeric" />
+        <column name="merchant_name" type="varchar" />
+        <column name="business_code" type="varchar" />
+        <column name="telephone" type="varchar" />
+        <column name="creation_date" type="datetime" />
+    </metadata>
     <row data-node="write_db.t_shadow" values="1, 1, pro_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="write_db.t_shadow" values="2, 1, pro_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="write_db.t_shadow" values="3, 1, pro_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
@@ -49,5 +57,85 @@
     <row data-node="read_1.t_shadow" values="3, 1, read_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="read_1.t_shadow" values="4, 1, read_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="read_1.t_shadow" values="5, 1, read_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
+    <row data-node="write_db.t_merchant" values="1, 86, tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="2, 86, haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="3, 86, huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="4, 86, alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="5, 86, lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="6, 86, moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="7, 86, baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="8, 86, xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="9, 86, vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="10, 86, oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="11, 1, google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="12, 1, walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="13, 1, amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="14, 1, apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="15, 1, microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="16, 1, dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="17, 1, johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="18, 1, intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="19, 1, hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="write_db.t_merchant" values="20, 1, tesla, 01000020, 01100000020, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="1, 86, shadow_tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="2, 86, shadow_haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="3, 86, shadow_huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="4, 86, shadow_alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="5, 86, shadow_lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="6, 86, shadow_moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="7, 86, shadow_baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="8, 86, shadow_xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="9, 86, shadow_vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="10, 86, shadow_oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="11, 1, shadow_google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="12, 1, shadow_walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="13, 1, shadow_amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="14, 1, shadow_apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="15, 1, shadow_microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="16, 1, shadow_dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="17, 1, shadow_johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="18, 1, shadow_intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="19, 1, shadow_hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="write_db_shadow.t_merchant" values="20, 1, shadow_tesla, 01000020, 01100000020, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="1, 86, tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="2, 86, haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="3, 86, huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="4, 86, alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="5, 86, lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="6, 86, moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="7, 86, baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="8, 86, xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="9, 86, vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="10, 86, oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="11, 1, google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="12, 1, walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="13, 1, amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="14, 1, apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="15, 1, microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="16, 1, dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="17, 1, johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="18, 1, intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="19, 1, hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="read_0.t_merchant" values="20, 1, tesla, 01000020, 01100000020, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="1, 86, tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="2, 86, haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="3, 86, huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="4, 86, alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="5, 86, lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="6, 86, moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="7, 86, baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="8, 86, xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="9, 86, vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="10, 86, oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="11, 1, google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="12, 1, walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="13, 1, amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="14, 1, apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="15, 1, microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="16, 1, dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="17, 1, johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="18, 1, intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="19, 1, hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="read_1.t_merchant" values="20, 1, tesla, 01000020, 01100000020, 2017-08-08" />
 
 </dataset>
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/h2/01-actual-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/h2/01-actual-init.sql
index 0ccb7fa42e9..4a25798fce7 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/h2/01-actual-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/h2/01-actual-init.sql
@@ -15,5 +15,7 @@
 -- limitations under the License.
 --
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/mysql/01-actual-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/mysql/01-actual-init.sql
index 1af8cf7343e..4f3d664d0ba 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/mysql/01-actual-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/mysql/01-actual-init.sql
@@ -22,18 +22,22 @@ DROP DATABASE IF EXISTS write_db;
 CREATE DATABASE write_db;
 
 CREATE TABLE write_db.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_db.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS write_db_shadow;
 CREATE DATABASE write_db_shadow;
 
 CREATE TABLE write_db_shadow.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_db_shadow.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_0;
 CREATE DATABASE read_0;
 
 CREATE TABLE read_0.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_0.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_1;
 CREATE DATABASE read_1;
 
 CREATE TABLE read_1.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_1.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/opengauss/01-actual-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/opengauss/01-actual-init.sql
index 12eb096297f..1da12c2c67a 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/opengauss/01-actual-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/opengauss/01-actual-init.sql
@@ -28,31 +28,39 @@ GRANT ALL PRIVILEGES ON DATABASE read_1 TO test_user;
 \c write_db
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 \c write_db_shadow
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 \c read_0
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 \c read_1
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/oracle/01-actual-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/oracle/01-actual-init.sql
index f8a3b91d849..b9dd5b672f9 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/oracle/01-actual-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/oracle/01-actual-init.sql
@@ -19,18 +19,22 @@ DROP SCHEMA write_db;
 CREATE SCHEMA write_db;
 
 CREATE TABLE write_db.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_db.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP SCHEMA write_db_shadow;
 CREATE SCHEMA write_db_shadow;
 
 CREATE TABLE write_db_shadow.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_db_shadow.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP SCHEMA read_0;
 CREATE SCHEMA read_0;
 
 CREATE TABLE read_0.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_0.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP SCHEMA read_1;
 CREATE SCHEMA read_1;
 
 CREATE TABLE read_1.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_1.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/postgresql/01-actual-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/postgresql/01-actual-init.sql
index 12eb096297f..1da12c2c67a 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/postgresql/01-actual-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/postgresql/01-actual-init.sql
@@ -28,31 +28,39 @@ GRANT ALL PRIVILEGES ON DATABASE read_1 TO test_user;
 \c write_db
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 \c write_db_shadow
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 \c read_0
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 \c read_1
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/sqlserver/01-actual-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/sqlserver/01-actual-init.sql
index cb9340856b2..3a9cc3f4a73 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/sqlserver/01-actual-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/actual/init-sql/sqlserver/01-actual-init.sql
@@ -19,20 +19,24 @@ DROP DATABASE IF EXISTS write_db;
 CREATE DATABASE write_db;
 
 CREATE TABLE write_db.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_db.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 
 DROP DATABASE IF EXISTS write_db_shadow;
 CREATE DATABASE write_db_shadow;
 
 CREATE TABLE write_db_shadow.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_db_shadow.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_0;
 CREATE DATABASE read_0;
 
 CREATE TABLE read_0.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_0.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 
 DROP DATABASE IF EXISTS read_1;
 CREATE DATABASE read_1;
 
 CREATE TABLE read_1.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_1.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/dataset.xml b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/dataset.xml
index 517d8392977..d53c8d121e2 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/dataset.xml
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/dataset.xml
@@ -29,6 +29,14 @@
         <column name="type_time" type="time" />
         <column name="type_timestamp" type="timestamp" />
     </metadata>
+    <metadata data-nodes="write_dataset.t_merchant,write_shadow_dataset.t_merchant,read_dataset.t_merchant">
+        <column name="merchant_id" type="numeric" />
+        <column name="country_id" type="numeric" />
+        <column name="merchant_name" type="varchar" />
+        <column name="business_code" type="varchar" />
+        <column name="telephone" type="varchar" />
+        <column name="creation_date" type="datetime" />
+    </metadata>
     <row data-node="write_dataset.t_shadow" values="1, 1, pro_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="write_dataset.t_shadow" values="2, 1, pro_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="write_dataset.t_shadow" values="3, 1, pro_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
@@ -44,4 +52,64 @@
     <row data-node="read_dataset.t_shadow" values="3, 1, read_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="read_dataset.t_shadow" values="4, 1, read_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
     <row data-node="read_dataset.t_shadow" values="5, 1, read_order, S, true, 5, summer, 10.00, 2017-08-08, 18:30:30, 2017-08-08 18:30:30.0" />
+    <row data-node="write_dataset.t_merchant" values="1, 86, tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="2, 86, haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="3, 86, huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="4, 86, alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="5, 86, lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="6, 86, moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="7, 86, baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="8, 86, xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="9, 86, vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="10, 86, oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="11, 1, google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="12, 1, walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="13, 1, amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="14, 1, apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="15, 1, microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="16, 1, dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="17, 1, johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="18, 1, intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="19, 1, hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="write_dataset.t_merchant" values="20, 1, tesla, 01000020, 01100000020, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="1, 86, shadow_tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="2, 86, shadow_haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="3, 86, shadow_huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="4, 86, shadow_alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="5, 86, shadow_lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="6, 86, shadow_moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="7, 86, shadow_baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="8, 86, shadow_xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="9, 86, shadow_vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="10, 86, shadow_oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="11, 1, shadow_google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="12, 1, shadow_walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="13, 1, shadow_amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="14, 1, shadow_apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="15, 1, shadow_microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="16, 1, shadow_dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="17, 1, shadow_johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="18, 1, shadow_intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="19, 1, shadow_hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="write_shadow_dataset.t_merchant" values="20, 1, shadow_tesla, 01000020, 01100000020, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="1, 86, tencent, 86000001, 86100000001, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="2, 86, haier, 86000002, 86100000002, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="3, 86, huawei, 86000003, 86100000003, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="4, 86, alibaba, 86000004, 86100000004, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="5, 86, lenovo, 86000005, 86100000005, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="6, 86, moutai, 86000006, 86100000006, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="7, 86, baidu, 86000007, 86100000007, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="8, 86, xiaomi, 86000008, 86100000008, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="9, 86, vivo, 86000009, 86100000009, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="10, 86, oppo, 86000010, 86100000010, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="11, 1, google, 01000011, 01100000011, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="12, 1, walmart, 01000012, 01100000012, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="13, 1, amazon, 01000013, 01100000013, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="14, 1, apple, 01000014, 01100000014, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="15, 1, microsoft, 01000015, 01100000015, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="16, 1, dell, 01000016, 01100000016, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="17, 1, johnson, 01000017, 01100000017, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="18, 1, intel, 01000018, 01100000018, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="19, 1, hp, 01000019, 01100000019, 2017-08-08" />
+    <row data-node="read_dataset.t_merchant" values="20, 1, tesla, 01000020, 01100000020, 2017-08-08" />
 </dataset>
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/h2/01-expected-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/h2/01-expected-init.sql
index 5ea66a331fc..f7470ffebf0 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/h2/01-expected-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/h2/01-expected-init.sql
@@ -16,5 +16,7 @@
 --
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/mysql/01-expected-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/mysql/01-expected-init.sql
index a09b3eaebf1..22f84359827 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/mysql/01-expected-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/mysql/01-expected-init.sql
@@ -23,14 +23,17 @@ DROP DATABASE IF EXISTS write_dataset;
 CREATE DATABASE write_dataset;
 
 CREATE TABLE write_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 
 DROP DATABASE IF EXISTS write_shadow_dataset;
 CREATE DATABASE write_shadow_dataset;
 
 CREATE TABLE write_shadow_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_shadow_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_dataset;
 CREATE DATABASE read_dataset;
 
 CREATE TABLE read_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/opengauss/01-expected-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/opengauss/01-expected-init.sql
index c2fcb46241a..0e7267e7d35 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/opengauss/01-expected-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/opengauss/01-expected-init.sql
@@ -23,9 +23,11 @@ GRANT ALL PRIVILEGES ON DATABASE write_dataset TO test_user;
 \c write_dataset;
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 
 DROP DATABASE IF EXISTS write_shadow_dataset;
@@ -36,9 +38,11 @@ GRANT ALL PRIVILEGES ON DATABASE write_shadow_dataset TO test_user;
 \c write_shadow_dataset;
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_dataset;
 CREATE DATABASE read_dataset;
@@ -48,6 +52,8 @@ GRANT ALL PRIVILEGES ON DATABASE read_dataset TO test_user;
 \c read_dataset;
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/oracle/01-expected-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/oracle/01-expected-init.sql
index 325190395a2..e8e29689d92 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/oracle/01-expected-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/oracle/01-expected-init.sql
@@ -19,14 +19,17 @@ DROP SCHEMA write_dataset;
 CREATE SCHEMA write_dataset;
 
 CREATE TABLE write_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 
 DROP SCHEMA write_shadow_dataset;
 CREATE SCHEMA write_shadow_dataset;
 
 CREATE TABLE write_shadow_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_shadow_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP SCHEMA read_dataset;
 CREATE SCHEMA read_dataset;
 
 CREATE TABLE read_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/postgresql/01-expected-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/postgresql/01-expected-init.sql
index c2fcb46241a..d10276cfdb0 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/postgresql/01-expected-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/postgresql/01-expected-init.sql
@@ -23,10 +23,11 @@ GRANT ALL PRIVILEGES ON DATABASE write_dataset TO test_user;
 \c write_dataset;
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
-
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS write_shadow_dataset;
 CREATE DATABASE write_shadow_dataset;
@@ -36,9 +37,11 @@ GRANT ALL PRIVILEGES ON DATABASE write_shadow_dataset TO test_user;
 \c write_shadow_dataset;
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_dataset;
 CREATE DATABASE read_dataset;
@@ -48,6 +51,8 @@ GRANT ALL PRIVILEGES ON DATABASE read_dataset TO test_user;
 \c read_dataset;
 
 DROP TABLE IF EXISTS t_shadow;
+DROP TABLE IF EXISTS t_merchant;
 
 CREATE TYPE season AS ENUM ('spring', 'summer', 'autumn', 'winter');
 CREATE TABLE t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum season DEFAULT 'summer', type_decimal NUMERIC(18,2) DEFAULT NULL, type_date DATE DEFAULT NULL, type_time TIME DEFAULT NULL, type_timestamp TIMESTAMP DEFAULT NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/sqlserver/01-expected-init.sql b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/sqlserver/01-expected-init.sql
index 484dba7fefe..88402769990 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/sqlserver/01-expected-init.sql
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/data/expected/init-sql/sqlserver/01-expected-init.sql
@@ -19,14 +19,16 @@ DROP DATABASE IF EXISTS write_dataset;
 CREATE DATABASE write_dataset;
 
 CREATE TABLE write_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
-
+CREATE TABLE write_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS write_shadow_dataset;
 CREATE DATABASE write_shadow_dataset;
 
 CREATE TABLE write_shadow_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE write_shadow_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
 
 DROP DATABASE IF EXISTS read_dataset;
 CREATE DATABASE read_dataset;
 
 CREATE TABLE read_dataset.t_shadow (order_id BIGINT NOT NULL, user_id INT NOT NULL, order_name VARCHAR(32) NOT NULL, type_char CHAR(1) NOT NULL, type_boolean BOOLEAN NOT NULL, type_smallint SMALLINT NOT NULL, type_enum ENUM('spring', 'summer', 'autumn', 'winter'), type_decimal DECIMAL(18,2) NOT NULL, type_date DATE NOT NULL, type_time TIME NOT NULL, type_timestamp TIMESTAMP NOT NULL, PRIMARY KEY (order_id));
+CREATE TABLE read_dataset.t_merchant (merchant_id INT PRIMARY KEY, country_id SMALLINT NOT NULL, merchant_name VARCHAR(50) NOT NULL, business_code VARCHAR(50) NOT NULL, telephone CHAR(11) NOT NULL, creation_date DATE NOT NULL);
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/mysql/config-shadow.yaml b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/mysql/config-shadow.yaml
index 8b4f43c82ff..89dfc15eaa0 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/mysql/config-shadow.yaml
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/mysql/config-shadow.yaml
@@ -80,6 +80,15 @@ rules:
         - user-id-delete-match-algorithm
         - user-id-select-match-algorithm
         - simple-hint-algorithm
+    t_merchant:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - merchant-id-insert-match-algorithm
+        - merchant-id-update-match-algorithm
+        - merchant-id-delete-match-algorithm
+        - merchant-id-select-match-algorithm
+        - simple-hint-algorithm
   shadowAlgorithms:
     user-id-insert-match-algorithm:
       type: VALUE_MATCH
@@ -109,3 +118,27 @@ rules:
       type: SIMPLE_HINT
       props:
         foo: bar
+    merchant-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: merchant_id
+        value: 0
+    merchant-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: merchant_id
+        value: 0
+    merchant-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: merchant_id
+        value: 0
+    merchant-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: merchant_id
+        value: 0
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/opengauss/config-shadow.yaml b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/opengauss/config-shadow.yaml
index 8847930b3cb..bc6b7a97ced 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/opengauss/config-shadow.yaml
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/opengauss/config-shadow.yaml
@@ -56,56 +56,89 @@ dataSources:
     minPoolSize: 2
 
 rules:
-  - !READWRITE_SPLITTING
-    dataSources:
-      write-read-ds:
-        staticStrategy:
-          writeDataSourceName: shadowDataSource
-          readDataSourceNames:
-            - read_0
-            - read_1
+- !READWRITE_SPLITTING
+  dataSources:
+    write-read-ds:
+      staticStrategy:
+        writeDataSourceName: shadowDataSource
+        readDataSourceNames:
+          - read_0
+          - read_1
 
-  - !SHADOW
-    dataSources:
-      shadowDataSource:
-        productionDataSourceName: write_db
-        shadowDataSourceName: write_db_shadow
-    tables:
-      t_shadow:
-        dataSourceNames:
-          - shadowDataSource
-        shadowAlgorithmNames:
-          - user-id-insert-match-algorithm
-          - user-id-update-match-algorithm
-          - user-id-delete-match-algorithm
-          - user-id-select-match-algorithm
-          - simple-hint-algorithm
-    shadowAlgorithms:
-      user-id-insert-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: insert
-          column: user_id
-          value: 0
-      user-id-update-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: update
-          column: user_id
-          value: 0
-      user-id-delete-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: delete
-          column: user_id
-          value: 0
-      user-id-select-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: select
-          column: user_id
-          value: 0
-      simple-hint-algorithm:
-        type: SIMPLE_HINT
-        props:
-          foo: bar
+- !SHADOW
+  dataSources:
+    shadowDataSource:
+      productionDataSourceName: write_db
+      shadowDataSourceName: write_db_shadow
+  tables:
+    t_shadow:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - user-id-insert-match-algorithm
+        - user-id-update-match-algorithm
+        - user-id-delete-match-algorithm
+        - user-id-select-match-algorithm
+        - simple-hint-algorithm
+    t_merchant:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - merchant-id-insert-match-algorithm
+        - merchant-id-update-match-algorithm
+        - merchant-id-delete-match-algorithm
+        - merchant-id-select-match-algorithm
+        - simple-hint-algorithm
+  shadowAlgorithms:
+    user-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: user_id
+        value: 0
+    user-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: user_id
+        value: 0
+    user-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: user_id
+        value: 0
+    user-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: user_id
+        value: 0
+    simple-hint-algorithm:
+      type: SIMPLE_HINT
+      props:
+        foo: bar
+    merchant-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: merchant_id
+        value: 0
+    merchant-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: merchant_id
+        value: 0
+    merchant-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: merchant_id
+        value: 0
+    merchant-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: merchant_id
+        value: 0
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/postgresql/config-shadow.yaml b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/postgresql/config-shadow.yaml
index d3ce62374a8..0713dd5a8f3 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/postgresql/config-shadow.yaml
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/proxy/conf/postgresql/config-shadow.yaml
@@ -56,56 +56,89 @@ dataSources:
     minPoolSize: 2
 
 rules:
-  - !READWRITE_SPLITTING
-    dataSources:
-      write-read-ds:
-        staticStrategy:
-          writeDataSourceName: shadowDataSource
-          readDataSourceNames:
-            - read_0
-            - read_1
+- !READWRITE_SPLITTING
+  dataSources:
+    write-read-ds:
+      staticStrategy:
+        writeDataSourceName: shadowDataSource
+        readDataSourceNames:
+          - read_0
+          - read_1
 
-  - !SHADOW
-    dataSources:
-      shadowDataSource:
-        productionDataSourceName: write_db
-        shadowDataSourceName: write_db_shadow
-    tables:
-      t_shadow:
-        dataSourceNames:
-          - shadowDataSource
-        shadowAlgorithmNames:
-          - user-id-insert-match-algorithm
-          - user-id-update-match-algorithm
-          - user-id-delete-match-algorithm
-          - user-id-select-match-algorithm
-          - simple-hint-algorithm
-    shadowAlgorithms:
-      user-id-insert-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: insert
-          column: user_id
-          value: 0
-      user-id-update-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: update
-          column: user_id
-          value: 0
-      user-id-delete-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: delete
-          column: user_id
-          value: 0
-      user-id-select-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: select
-          column: user_id
-          value: 0
-      simple-hint-algorithm:
-        type: SIMPLE_HINT
-        props:
-          foo: bar
+- !SHADOW
+  dataSources:
+    shadowDataSource:
+      productionDataSourceName: write_db
+      shadowDataSourceName: write_db_shadow
+  tables:
+    t_shadow:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - user-id-insert-match-algorithm
+        - user-id-update-match-algorithm
+        - user-id-delete-match-algorithm
+        - user-id-select-match-algorithm
+        - simple-hint-algorithm
+    t_merchant:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - merchant-id-insert-match-algorithm
+        - merchant-id-update-match-algorithm
+        - merchant-id-delete-match-algorithm
+        - merchant-id-select-match-algorithm
+        - simple-hint-algorithm
+  shadowAlgorithms:
+    user-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: user_id
+        value: 0
+    user-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: user_id
+        value: 0
+    user-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: user_id
+        value: 0
+    user-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: user_id
+        value: 0
+    simple-hint-algorithm:
+      type: SIMPLE_HINT
+      props:
+        foo: bar
+    merchant-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: merchant_id
+        value: 0
+    merchant-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: merchant_id
+        value: 0
+    merchant-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: merchant_id
+        value: 0
+    merchant-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: merchant_id
+        value: 0
diff --git a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/rules.yaml b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/rules.yaml
index 142860aba22..e43aad1e99e 100644
--- a/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/rules.yaml
+++ b/test/e2e/suite/src/test/resources/env/scenario/readwrite_splitting_and_shadow/rules.yaml
@@ -16,56 +16,89 @@
 #
 
 rules:
-  - !READWRITE_SPLITTING
-    dataSources:
-      write-read-ds:
-        staticStrategy:
-          writeDataSourceName: shadowDataSource
-          readDataSourceNames:
-            - read_0
-            - read_1
+- !READWRITE_SPLITTING
+  dataSources:
+    write-read-ds:
+      staticStrategy:
+        writeDataSourceName: shadowDataSource
+        readDataSourceNames:
+          - read_0
+          - read_1
 
-  - !SHADOW
-    dataSources:
-      shadowDataSource:
-        productionDataSourceName: write_db
-        shadowDataSourceName: write_db_shadow
-    tables:
-      t_shadow:
-        dataSourceNames:
-          - shadowDataSource
-        shadowAlgorithmNames:
-          - user-id-insert-match-algorithm
-          - user-id-update-match-algorithm
-          - user-id-delete-match-algorithm
-          - user-id-select-match-algorithm
-          - simple-hint-algorithm
-    shadowAlgorithms:
-      user-id-insert-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: insert
-          column: user_id
-          value: 0
-      user-id-update-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: update
-          column: user_id
-          value: 0
-      user-id-delete-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: delete
-          column: user_id
-          value: 0
-      user-id-select-match-algorithm:
-        type: VALUE_MATCH
-        props:
-          operation: select
-          column: user_id
-          value: 0
-      simple-hint-algorithm:
-        type: SIMPLE_HINT
-        props:
-          foo: bar
+- !SHADOW
+  dataSources:
+    shadowDataSource:
+      productionDataSourceName: write_db
+      shadowDataSourceName: write_db_shadow
+  tables:
+    t_shadow:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - user-id-insert-match-algorithm
+        - user-id-update-match-algorithm
+        - user-id-delete-match-algorithm
+        - user-id-select-match-algorithm
+        - simple-hint-algorithm
+    t_merchant:
+      dataSourceNames:
+        - shadowDataSource
+      shadowAlgorithmNames:
+        - merchant-id-insert-match-algorithm
+        - merchant-id-update-match-algorithm
+        - merchant-id-delete-match-algorithm
+        - merchant-id-select-match-algorithm
+        - simple-hint-algorithm
+  shadowAlgorithms:
+    user-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: user_id
+        value: 0
+    user-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: user_id
+        value: 0
+    user-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: user_id
+        value: 0
+    user-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: user_id
+        value: 0
+    simple-hint-algorithm:
+      type: SIMPLE_HINT
+      props:
+        foo: bar
+    merchant-id-insert-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: insert
+        column: merchant_id
+        value: 0
+    merchant-id-update-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: update
+        column: merchant_id
+        value: 0
+    merchant-id-delete-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: delete
+        column: merchant_id
+        value: 0
+    merchant-id-select-match-algorithm:
+      type: VALUE_MATCH
+      props:
+        operation: select
+        column: merchant_id
+        value: 0