You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2022/10/25 14:02:47 UTC

[shardingsphere] branch master updated: Refactor distsql about shadow related syntax #21696 (#21704)

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

jianglongtao 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 135206de1dd Refactor distsql about shadow related syntax #21696 (#21704)
135206de1dd is described below

commit 135206de1dd6ef833a48d877e07128cf2c91167c
Author: jiangML <10...@qq.com>
AuthorDate: Tue Oct 25 22:02:31 2022 +0800

    Refactor distsql about shadow related syntax #21696 (#21704)
    
    * refactor distsql about shadow related syntax
    
    * optimize code
    
    * update doc about shadow
    
    * imporve distsql about shadow
    
    * add test
    
    * format code
    
    * optimize code
    
    * optimize code
---
 .../syntax/rdl/rule-definition/shadow.cn.md        | 23 ++---
 .../syntax/rdl/rule-definition/shadow.en.md        | 25 +++---
 .../distsql/feature/shadow/ShadowExecutor.java     | 18 +---
 .../DefaultShadowAlgorithmQueryResultSet.java      | 84 +++++++++++++++++++
 ...lterDefaultShadowAlgorithmStatementUpdater.java | 97 ++++++++++++++++++++++
 .../update/AlterShadowRuleStatementUpdater.java    | 22 ++++-
 ...eateDefaultShadowAlgorithmStatementUpdater.java | 49 +++++++++--
 .../update/CreateShadowRuleStatementUpdater.java   | 25 ++++--
 ...dingsphere.infra.distsql.query.DistSQLResultSet |  1 +
 ...here.infra.distsql.update.RuleDefinitionUpdater |  1 +
 .../AlterShadowRuleStatementUpdaterTest.java       |  4 +-
 ...DefaultShadowAlgorithmStatementUpdaterTest.java | 29 +++++--
 .../CreateShadowRuleStatementUpdaterTest.java      |  9 +-
 .../src/main/antlr4/imports/shadow/RDLStatement.g4 | 16 ++--
 .../src/main/antlr4/imports/shadow/RQLStatement.g4 |  4 +
 .../parser/autogen/ShadowDistSQLStatement.g4       |  4 +-
 .../parser/core/ShadowDistSQLStatementVisitor.java | 77 +++++++++++------
 .../shadow/distsql/parser/ShadowDistSQLTest.java   |  6 +-
 ...a => AlterDefaultShadowAlgorithmStatement.java} |  9 +-
 .../CreateDefaultShadowAlgorithmStatement.java     |  3 +-
 ...va => ShowDefaultShadowAlgorithmStatement.java} | 13 +--
 .../common/constant/DistSQLScriptConstants.java    |  4 +-
 .../resources/expected/convert-add-resource.yaml   |  2 +-
 .../resources/expected/convert-create-encrypt.yaml |  2 +-
 .../resources/expected/convert-create-shadow.yaml  |  8 +-
 .../expected/convert-create-sharding.yaml          |  2 +-
 .../expected/convert-database-discovery.yaml       |  2 +-
 .../expected/convert-readwrite-splitting.yaml      |  2 +-
 .../rdl/alter/AlterRuleStatementAssert.java        |  5 ++
 ...lterDefaultShadowAlgorithmStatementAssert.java} | 25 +++---
 ...reateDefaultShadowAlgorithmStatementAssert.java | 13 ++-
 .../jaxb/cases/domain/SQLParserTestCases.java      | 16 ++--
 ...erDefaultShadowAlgorithmStatementTestCase.java} | 15 ++--
 ...ateDefaultShadowAlgorithmStatementTestCase.java |  9 +-
 ...wDefaultShadowAlgorithmsStatementTestCase.java} | 17 +---
 test/parser/src/main/resources/case/rdl/alter.xml  | 10 +--
 test/parser/src/main/resources/case/rdl/create.xml | 16 ++--
 test/parser/src/main/resources/case/rql/show.xml   |  4 +
 .../src/main/resources/sql/supported/rdl/alter.xml |  4 +-
 .../main/resources/sql/supported/rdl/create.xml    |  7 +-
 .../src/main/resources/sql/supported/rql/show.xml  |  1 +
 41 files changed, 481 insertions(+), 202 deletions(-)

diff --git a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md
index 9b23611e396..4d1b52fcfcd 100644
--- a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md
+++ b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md
@@ -10,15 +10,17 @@ CREATE SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ...
 
 ALTER SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ... 
 
-CREATE SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
-ALTER SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
 DROP SHADOW RULE ruleName [, ruleName] ...
 
 DROP SHADOW ALGORITHM algorithmName [, algorithmName] ...
 
-CREATE DEFAULT SHADOW ALGORITHM NAME = algorithmName
+CREATE DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+ALTER DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+SHOW DEFAULT SHADOW ALGORITHM
+
+SHOW SHADOW ALGORITHMS
 
 shadowRuleDefinition: ruleName(resourceMapping, shadowTableRule [, shadowTableRule] ...)
 
@@ -68,18 +70,11 @@ SHADOW=demo_ds_shadow,
 t_order((simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("operation"="insert","column"="user_id", "regex"='[1]')))), 
 t_order_item((TYPE(NAME="VALUE_MATCH", PROPERTIES("operation"="insert","column"="user_id", "value"='1')))));
 
-CREATE SHADOW ALGORITHM 
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))), 
-(user_id_match_algorithm, TYPE(NAME="REGEX_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "regex"='[1]')));
-
+CREATE DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar")));
 
-ALTER SHADOW ALGORITHM 
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar"))), 
-(user_id_match_algorithm, TYPE(NAME="VALUE_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "value"='1')));
+ALTER DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar")));
 
 DROP SHADOW RULE shadow_rule;
 
 DROP SHADOW ALGORITHM simple_hint_algorithm;
-
-CREATE DEFAULT SHADOW ALGORITHM NAME = simple_hint_algorithm;
 ```
diff --git a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md
index 2699f871479..638ca33b757 100644
--- a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md
+++ b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md
@@ -10,15 +10,17 @@ CREATE SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ...
 
 ALTER SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ... 
 
-CREATE SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
-ALTER SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
 DROP SHADOW RULE ruleName [, ruleName] ...
 
 DROP SHADOW ALGORITHM algorithmName [, algorithmName] ...
+    
+CREATE DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+ALTER DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+SHOW DEFAULT SHADOW ALGORITHM
 
-CREATE DEFAULT SHADOW ALGORITHM NAME = algorithmName
+SHOW SHADOW ALGORITHMS
 
 shadowRuleDefinition: ruleName(resourceMapping, shadowTableRule [, shadowTableRule] ...)
 
@@ -68,18 +70,11 @@ SHADOW=demo_ds_shadow,
 t_order((simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("operation"="insert","column"="user_id", "regex"='[1]')))), 
 t_order_item((TYPE(NAME="VALUE_MATCH", PROPERTIES("operation"="insert","column"="user_id", "value"='1')))));
 
-CREATE SHADOW ALGORITHM 
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))), 
-(user_id_match_algorithm, TYPE(NAME="REGEX_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "regex"='[1]')));
-
-
-ALTER SHADOW ALGORITHM 
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar"))), 
-(user_id_match_algorithm, TYPE(NAME="VALUE_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "value"='1')));
+CREATE DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar")));
 
+ALTER DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar")));
+    
 DROP SHADOW RULE shadow_rule;
 
 DROP SHADOW ALGORITHM simple_hint_algorithm;
-
-CREATE DEFAULT SHADOW ALGORITHM NAME = simple_hint_algorithm;
 ```
diff --git a/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java b/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java
index 51b4b4c2f6d..8a5c58a6a8e 100644
--- a/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java
+++ b/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java
@@ -34,18 +34,14 @@ public final class ShadowExecutor extends AbstractFeatureExecutor {
     private static final String ADD_RULE = "CREATE SHADOW RULE shadow_rule(\n" +
             "SOURCE=ds_0,\n" +
             "SHADOW=ds_1,\n" +
-            "t_order((simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\"))),(TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]')))), \n" +
-            "t_order_item((TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\")))));";
+            "t_order(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\")),TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]'))), \n" +
+            "t_order_item(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\"))));";
     
     private static final String ALTER_RULE = "ALTER SHADOW RULE shadow_rule(\n" +
             "SOURCE=ds_1,\n" +
             "SHADOW=ds_0,\n" +
-            "t_order((simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\"))),(TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]')))), \n" +
-            "t_order_item((TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\")))))";
-    
-    private static final String ALTER_ALGORITHM = "ALTER SHADOW ALGORITHM \n" +
-            "(simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\"))), \n" +
-            "(shadow_rule_t_order_regex_match, TYPE(NAME=REGEX_MATCH,PROPERTIES(\"operation\"=\"insert\", \"column\"=\"user_id\", \"regex\"='[1]')))";
+            "t_order(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\")),TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]'))), \n" +
+            "t_order_item(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\"))))";
     
     private static final String DROP_RULE = "DROP SHADOW RULE shadow_rule";
     
@@ -71,7 +67,6 @@ public final class ShadowExecutor extends AbstractFeatureExecutor {
         executeShowTableRule();
         executeShowAlgorithm();
         executeAlterRule();
-        executeAlterAlgorithm();
         executeShowRule();
         executeShowTableRule();
         executeShowAlgorithm();
@@ -110,11 +105,6 @@ public final class ShadowExecutor extends AbstractFeatureExecutor {
         statement.execute(ALTER_RULE);
     }
     
-    private void executeAlterAlgorithm() throws SQLException {
-        log.info("alter algorithm...");
-        statement.execute(ALTER_ALGORITHM);
-    }
-    
     private void executeDropRule() throws SQLException {
         log.info("drop rule...");
         statement.execute(DROP_RULE);
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/DefaultShadowAlgorithmQueryResultSet.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/DefaultShadowAlgorithmQueryResultSet.java
new file mode 100644
index 00000000000..20721c4cbd2
--- /dev/null
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/DefaultShadowAlgorithmQueryResultSet.java
@@ -0,0 +1,84 @@
+/*
+ * 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.shadow.distsql.handler.query;
+
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.distsql.query.DatabaseDistSQLResultSet;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.props.PropertiesConverter;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * Query result set for default shadow algorithm.
+ */
+public final class DefaultShadowAlgorithmQueryResultSet implements DatabaseDistSQLResultSet {
+    
+    private Iterator<Entry<String, AlgorithmConfiguration>> data = Collections.emptyIterator();
+    
+    @Override
+    public void init(final ShardingSphereDatabase database, final SQLStatement sqlStatement) {
+        Optional<ShadowRule> rule = database.getRuleMetaData().findSingleRule(ShadowRule.class);
+        if (rule.isPresent()) {
+            ShadowRuleConfiguration config = (ShadowRuleConfiguration) rule.get().getConfiguration();
+            String defaultAlgorithm = config.getDefaultShadowAlgorithmName();
+            data = config.getShadowAlgorithms().entrySet().stream().filter(each -> each.getKey().equals(defaultAlgorithm))
+                    .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> v2)).entrySet().iterator();
+        }
+    }
+    
+    @Override
+    public Collection<String> getColumnNames() {
+        return Arrays.asList("shadow_algorithm_name", "type", "props");
+    }
+    
+    @Override
+    public boolean next() {
+        return data.hasNext();
+    }
+    
+    @Override
+    public Collection<Object> getRowData() {
+        return buildTableRowData(data.next());
+    }
+    
+    private Collection<Object> buildTableRowData(final Entry<String, AlgorithmConfiguration> data) {
+        return Arrays.asList(data.getKey(), data.getValue().getType(), convertToString(data.getValue().getProps()));
+    }
+    
+    private String convertToString(final Properties props) {
+        return Objects.nonNull(props) ? PropertiesConverter.convert(props) : "";
+    }
+    
+    @Override
+    public String getType() {
+        return ShowDefaultShadowAlgorithmStatement.class.getName();
+    }
+}
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmStatementUpdater.java
new file mode 100644
index 00000000000..452a9228312
--- /dev/null
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmStatementUpdater.java
@@ -0,0 +1,97 @@
+/*
+ * 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.shadow.distsql.handler.update;
+
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
+import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionAlterUpdater;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatementChecker;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Alter default shadow algorithm statement updater.
+ */
+public class AlterDefaultShadowAlgorithmStatementUpdater implements RuleDefinitionAlterUpdater<AlterDefaultShadowAlgorithmStatement, ShadowRuleConfiguration> {
+    
+    private static final String SHADOW = "shadow";
+    
+    private static final String DEFAULT_ALGORITHM_NAME = "default";
+    
+    @Override
+    public RuleConfiguration buildToBeAlteredRuleConfiguration(final AlterDefaultShadowAlgorithmStatement sqlStatement) {
+        ShadowRuleConfiguration result = new ShadowRuleConfiguration();
+        result.setShadowAlgorithms(buildAlgorithmMap(sqlStatement));
+        result.setDefaultShadowAlgorithmName(DEFAULT_ALGORITHM_NAME);
+        return result;
+    }
+    
+    private Map<String, AlgorithmConfiguration> buildAlgorithmMap(final AlterDefaultShadowAlgorithmStatement sqlStatement) {
+        return Collections.singletonMap(DEFAULT_ALGORITHM_NAME, new AlgorithmConfiguration(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName(),
+                sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getProps()));
+    }
+    
+    @Override
+    public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration currentRuleConfig, final ShadowRuleConfiguration toBeAlteredRuleConfig) {
+        currentRuleConfig.getShadowAlgorithms().putAll(toBeAlteredRuleConfig.getShadowAlgorithms());
+        currentRuleConfig.setDefaultShadowAlgorithmName(toBeAlteredRuleConfig.getDefaultShadowAlgorithmName());
+    }
+    
+    @Override
+    public void checkSQLStatement(final ShardingSphereDatabase database, final AlterDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+        checkExist(database.getName(), sqlStatement, currentRuleConfig);
+        checkAlgorithmCompleteness(Collections.singleton(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment()));
+        checkAlgorithmType(sqlStatement);
+    }
+    
+    private void checkExist(final String databaseName, final AlterDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+        ShadowRuleStatementChecker.checkConfigurationExist(databaseName, currentRuleConfig);
+    }
+    
+    private void checkAlgorithmType(final AlterDefaultShadowAlgorithmStatement sqlStatement) {
+        String shadowAlgorithmType = sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName();
+        ShardingSpherePreconditions.checkState(ShadowAlgorithmFactory.contains(shadowAlgorithmType),
+                () -> new InvalidAlgorithmConfigurationException(SHADOW, shadowAlgorithmType));
+    }
+    
+    private static void checkAlgorithmCompleteness(final Collection<AlgorithmSegment> algorithmSegments) {
+        Set<AlgorithmSegment> incompleteAlgorithms = algorithmSegments.stream().filter(each -> each.getName().isEmpty() || each.getProps().isEmpty()).collect(Collectors.toSet());
+        ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW));
+    }
+    
+    @Override
+    public Class<ShadowRuleConfiguration> getRuleConfigurationClass() {
+        return ShadowRuleConfiguration.class;
+    }
+    
+    @Override
+    public String getType() {
+        return AlterDefaultShadowAlgorithmStatement.class.getName();
+    }
+}
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java
index 600bec38534..68ef37c45cc 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.shadow.distsql.handler.update;
 
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
 import org.apache.shardingsphere.infra.distsql.exception.rule.AlgorithmInUsedException;
@@ -24,6 +25,7 @@ import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleExcep
 import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
 import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionAlterUpdater;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
 import org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
@@ -33,9 +35,12 @@ import org.apache.shardingsphere.shadow.distsql.handler.supporter.ShadowRuleStat
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowRuleStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * Alter shadow rule statement updater.
@@ -72,7 +77,9 @@ public final class AlterShadowRuleStatementUpdater implements RuleDefinitionAlte
         checkConfigurationExist(databaseName, currentRuleConfig);
         checkRuleNames(databaseName, rules, currentRuleConfig);
         checkResources(database, rules);
-        checkAlgorithms(databaseName, rules);
+        checkAlgorithmCompleteness(sqlStatement);
+        checkAlgorithms(databaseName, sqlStatement.getRules());
+        checkAlgorithmType(sqlStatement);
     }
     
     private void checkConfigurationExist(final String databaseName, final DatabaseRuleConfiguration currentRuleConfig) {
@@ -91,6 +98,19 @@ public final class AlterShadowRuleStatementUpdater implements RuleDefinitionAlte
         ShadowRuleStatementChecker.checkResourceExist(requireResource, database);
     }
     
+    private static void checkAlgorithmCompleteness(final AlterShadowRuleStatement sqlStatement) {
+        Collection<AlgorithmSegment> algorithmSegments = sqlStatement.getRules().stream().flatMap(each -> each.getShadowTableRules().values().stream()).flatMap(Collection::stream)
+                .map(ShadowAlgorithmSegment::getAlgorithmSegment).collect(Collectors.toList());
+        Set<AlgorithmSegment> incompleteAlgorithms = algorithmSegments.stream().filter(each -> each.getName().isEmpty() || each.getProps().isEmpty()).collect(Collectors.toSet());
+        ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW));
+    }
+    
+    private void checkAlgorithmType(final AlterShadowRuleStatement sqlStatement) {
+        Collection<String> nonexistentAlgorithmTypes = sqlStatement.getRules().stream().flatMap(each -> each.getShadowTableRules().values().stream()).flatMap(Collection::stream)
+                .map(each -> each.getAlgorithmSegment().getName()).collect(Collectors.toSet()).stream().filter(each -> !ShadowAlgorithmFactory.contains(each)).collect(Collectors.toSet());
+        ShardingSpherePreconditions.checkState(nonexistentAlgorithmTypes.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW, nonexistentAlgorithmTypes));
+    }
+    
     private void checkAlgorithms(final String databaseName, final Collection<ShadowRuleSegment> rules) {
         Collection<ShadowAlgorithmSegment> shadowAlgorithmSegment = ShadowRuleStatementSupporter.getShadowAlgorithmSegment(rules);
         ShadowRuleStatementChecker.checkAlgorithmCompleteness(shadowAlgorithmSegment);
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
index 44f0148f05e..f8b12b22906 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
@@ -17,42 +17,75 @@
 
 package org.apache.shardingsphere.shadow.distsql.handler.update;
 
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.distsql.exception.rule.MissingRequiredAlgorithmException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateAlgorithmException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
 import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionCreateUpdater;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatementChecker;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
 
+import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * Create default shadow algorithm statement updater.
  */
 public final class CreateDefaultShadowAlgorithmStatementUpdater implements RuleDefinitionCreateUpdater<CreateDefaultShadowAlgorithmStatement, ShadowRuleConfiguration> {
     
+    private static final String SHADOW = "shadow";
+    
+    private static final String DEFAULT_ALGORITHM_NAME = "default";
+    
     @Override
     public RuleConfiguration buildToBeCreatedRuleConfiguration(final CreateDefaultShadowAlgorithmStatement sqlStatement) {
         ShadowRuleConfiguration result = new ShadowRuleConfiguration();
-        result.setDefaultShadowAlgorithmName(sqlStatement.getAlgorithmName());
+        result.setShadowAlgorithms(buildAlgorithmMap(sqlStatement));
+        result.setDefaultShadowAlgorithmName(DEFAULT_ALGORITHM_NAME);
         return result;
     }
     
+    private Map<String, AlgorithmConfiguration> buildAlgorithmMap(final CreateDefaultShadowAlgorithmStatement sqlStatement) {
+        return Collections.singletonMap(DEFAULT_ALGORITHM_NAME, new AlgorithmConfiguration(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName(),
+                sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getProps()));
+    }
+    
     @Override
     public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration currentRuleConfig, final ShadowRuleConfiguration toBeCreatedRuleConfig) {
+        currentRuleConfig.getShadowAlgorithms().putAll(toBeCreatedRuleConfig.getShadowAlgorithms());
         currentRuleConfig.setDefaultShadowAlgorithmName(toBeCreatedRuleConfig.getDefaultShadowAlgorithmName());
     }
     
     @Override
-    public void checkSQLStatement(final ShardingSphereDatabase database,
-                                  final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
-        checkAlgorithmExist(database.getName(), sqlStatement, currentRuleConfig);
+    public void checkSQLStatement(final ShardingSphereDatabase database, final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+        checkExist(database.getName(), sqlStatement, currentRuleConfig);
+        checkAlgorithmCompleteness(Collections.singleton(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment()));
+        checkAlgorithmType(sqlStatement);
+    }
+    
+    private void checkExist(final String databaseName, final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+        Collection<String> requireAlgorithmNames = Collections.singleton(DEFAULT_ALGORITHM_NAME);
+        Collection<String> currentAlgorithmNames = null == currentRuleConfig ? Collections.emptyList() : currentRuleConfig.getShadowAlgorithms().keySet();
+        ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithmNames, currentAlgorithmNames, different -> new DuplicateAlgorithmException(SHADOW, databaseName, different));
+    }
+    
+    private void checkAlgorithmType(final CreateDefaultShadowAlgorithmStatement sqlStatement) {
+        String shadowAlgorithmType = sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName();
+        ShardingSpherePreconditions.checkState(ShadowAlgorithmFactory.contains(shadowAlgorithmType),
+                () -> new InvalidAlgorithmConfigurationException(SHADOW, shadowAlgorithmType));
     }
     
-    private void checkAlgorithmExist(final String databaseName, final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
-        ShardingSpherePreconditions.checkState(currentRuleConfig.getShadowAlgorithms().containsKey(sqlStatement.getAlgorithmName()),
-                () -> new MissingRequiredAlgorithmException(databaseName, Collections.singleton(sqlStatement.getAlgorithmName())));
+    private static void checkAlgorithmCompleteness(final Collection<AlgorithmSegment> algorithmSegments) {
+        Set<AlgorithmSegment> incompleteAlgorithms = algorithmSegments.stream().filter(each -> each.getName().isEmpty() || each.getProps().isEmpty()).collect(Collectors.toSet());
+        ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW));
     }
     
     @Override
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
index dba61dbc00c..476461455b8 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
@@ -19,8 +19,10 @@ package org.apache.shardingsphere.shadow.distsql.handler.update;
 
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
 import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionCreateUpdater;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
 import org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatementChecker;
@@ -29,9 +31,11 @@ import org.apache.shardingsphere.shadow.distsql.handler.supporter.ShadowRuleStat
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowRuleStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Create shadow rule statement updater.
@@ -64,7 +68,8 @@ public final class CreateShadowRuleStatementUpdater implements RuleDefinitionCre
         Collection<ShadowRuleSegment> rules = sqlStatement.getRules();
         checkRuleNames(databaseName, rules, currentRuleConfig);
         checkResources(database, rules);
-        checkAlgorithms(databaseName, rules, currentRuleConfig);
+        checkAlgorithms(databaseName, sqlStatement.getRules());
+        checkAlgorithmType(sqlStatement);
     }
     
     private void checkRuleNames(final String databaseName, final Collection<ShadowRuleSegment> rules, final ShadowRuleConfiguration currentRuleConfig) {
@@ -79,13 +84,17 @@ public final class CreateShadowRuleStatementUpdater implements RuleDefinitionCre
         ShadowRuleStatementChecker.checkResourceExist(requireResource, database);
     }
     
-    private void checkAlgorithms(final String databaseName, final Collection<ShadowRuleSegment> rules, final ShadowRuleConfiguration currentRuleConfig) {
-        Collection<ShadowAlgorithmSegment> requireAlgorithms = ShadowRuleStatementSupporter.getShadowAlgorithmSegment(rules);
-        ShadowRuleStatementChecker.checkAlgorithmCompleteness(requireAlgorithms);
-        Collection<String> requireAlgorithmNames = ShadowRuleStatementSupporter.getAlgorithmNames(rules);
-        ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithmNames, duplicated -> new DuplicateRuleException(SHADOW, databaseName, duplicated));
-        Collection<String> currentAlgorithmNames = ShadowRuleStatementSupporter.getAlgorithmNames(currentRuleConfig);
-        ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithmNames, currentAlgorithmNames, duplicated -> new DuplicateRuleException(SHADOW, databaseName, duplicated));
+    private void checkAlgorithms(final String databaseName, final Collection<ShadowRuleSegment> rules) {
+        Collection<ShadowAlgorithmSegment> shadowAlgorithmSegment = ShadowRuleStatementSupporter.getShadowAlgorithmSegment(rules);
+        ShadowRuleStatementChecker.checkAlgorithmCompleteness(shadowAlgorithmSegment);
+        Collection<String> requireAlgorithms = ShadowRuleStatementSupporter.getAlgorithmNames(rules);
+        ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithms, duplicated -> new DuplicateRuleException("Shadow", databaseName, duplicated));
+    }
+    
+    private void checkAlgorithmType(final CreateShadowRuleStatement sqlStatement) {
+        Collection<String> nonexistentAlgorithmTypes = sqlStatement.getRules().stream().flatMap(each -> each.getShadowTableRules().values().stream()).flatMap(Collection::stream)
+                .map(each -> each.getAlgorithmSegment().getName()).collect(Collectors.toSet()).stream().filter(each -> !ShadowAlgorithmFactory.contains(each)).collect(Collectors.toSet());
+        ShardingSpherePreconditions.checkState(nonexistentAlgorithmTypes.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW, nonexistentAlgorithmTypes));
     }
     
     @Override
diff --git a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
index 494f9d53d34..9bd5ccc0983 100644
--- a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
+++ b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
@@ -17,5 +17,6 @@
 
 org.apache.shardingsphere.shadow.distsql.handler.query.ShadowRuleQueryResultSet
 org.apache.shardingsphere.shadow.distsql.handler.query.ShadowAlgorithmQueryResultSet
+org.apache.shardingsphere.shadow.distsql.handler.query.DefaultShadowAlgorithmQueryResultSet
 org.apache.shardingsphere.shadow.distsql.handler.query.ShadowTableRuleQueryResultSet
 org.apache.shardingsphere.shadow.distsql.handler.query.CountShadowRuleQueryResultSet
diff --git a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
index 6e3d296d1af..f05f48c1095 100644
--- a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
+++ b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
@@ -20,6 +20,7 @@ org.apache.shardingsphere.shadow.distsql.handler.update.CreateShadowRuleStatemen
 org.apache.shardingsphere.shadow.distsql.handler.update.DropShadowAlgorithmStatementUpdater
 org.apache.shardingsphere.shadow.distsql.handler.update.AlterShadowRuleStatementUpdater
 org.apache.shardingsphere.shadow.distsql.handler.update.CreateDefaultShadowAlgorithmStatementUpdater
+org.apache.shardingsphere.shadow.distsql.handler.update.AlterDefaultShadowAlgorithmStatementUpdater
 org.apache.shardingsphere.shadow.distsql.handler.update.AlterShadowAlgorithmStatementUpdater
 org.apache.shardingsphere.shadow.distsql.handler.update.CreateShadowAlgorithmStatementUpdater
 org.apache.shardingsphere.shadow.distsql.handler.update.DropDefaultShadowAlgorithmStatementUpdater
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java
index 98c77535679..ac6d9247c73 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java
@@ -121,8 +121,8 @@ public final class AlterShadowRuleStatementUpdaterTest {
     public void assertExecuteSuccess() {
         Properties prop = new Properties();
         prop.setProperty("type", "value");
-        ShadowAlgorithmSegment segment1 = new ShadowAlgorithmSegment("algorithmName1", new AlgorithmSegment("name", prop));
-        ShadowAlgorithmSegment segment2 = new ShadowAlgorithmSegment("algorithmName2", new AlgorithmSegment("name", prop));
+        ShadowAlgorithmSegment segment1 = new ShadowAlgorithmSegment("algorithmName1", new AlgorithmSegment("SIMPLE_HINT", prop));
+        ShadowAlgorithmSegment segment2 = new ShadowAlgorithmSegment("algorithmName2", new AlgorithmSegment("SIMPLE_HINT", prop));
         AlterShadowRuleStatement sqlStatement = createSQLStatement(new ShadowRuleSegment("initRuleName1", "ds", null, Collections.singletonMap("t_order", Collections.singleton(segment1))),
                 new ShadowRuleSegment("initRuleName2", "ds1", null, Collections.singletonMap("t_order_1", Collections.singletonList(segment2))));
         updater.checkSQLStatement(database, sqlStatement, currentConfig);
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java
index b7bb24b0fb3..ba204899234 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java
@@ -17,10 +17,12 @@
 
 package org.apache.shardingsphere.shadow.distsql.update;
 
-import org.apache.shardingsphere.infra.distsql.exception.rule.MissingRequiredAlgorithmException;
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.distsql.handler.update.CreateDefaultShadowAlgorithmStatementUpdater;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -28,8 +30,9 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.util.Collections;
+import java.util.Properties;
 
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -43,9 +46,23 @@ public final class CreateDefaultShadowAlgorithmStatementUpdaterTest {
     
     private final CreateDefaultShadowAlgorithmStatementUpdater updater = new CreateDefaultShadowAlgorithmStatementUpdater();
     
-    @Test(expected = MissingRequiredAlgorithmException.class)
-    public void assertExecuteWithNotExistAlgorithm() {
-        when(currentConfig.getShadowAlgorithms()).thenReturn(Collections.singletonMap("default_name", null));
-        updater.checkSQLStatement(database, new CreateDefaultShadowAlgorithmStatement("input_default_name"), currentConfig);
+    @Test(expected = InvalidAlgorithmConfigurationException.class)
+    public void assertExecuteWithInvalidAlgorithm() {
+        Properties prop = new Properties();
+        prop.setProperty("type", "value");
+        CreateDefaultShadowAlgorithmStatement statement = mock(CreateDefaultShadowAlgorithmStatement.class);
+        ShadowAlgorithmSegment shadowAlgorithmSegment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("name", prop));
+        when(statement.getShadowAlgorithmSegment()).thenReturn(shadowAlgorithmSegment);
+        updater.checkSQLStatement(database, statement, currentConfig);
+    }
+    
+    @Test
+    public void assertExecuteSuccess() {
+        Properties prop = new Properties();
+        prop.setProperty("type", "value");
+        CreateDefaultShadowAlgorithmStatement statement = mock(CreateDefaultShadowAlgorithmStatement.class);
+        ShadowAlgorithmSegment shadowAlgorithmSegment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("SIMPLE_HINT", prop));
+        when(statement.getShadowAlgorithmSegment()).thenReturn(shadowAlgorithmSegment);
+        updater.checkSQLStatement(database, statement, currentConfig);
     }
 }
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java
index fefb8ab4225..32bd27aa2e7 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java
@@ -18,9 +18,9 @@
 package org.apache.shardingsphere.shadow.distsql.update;
 
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.distsql.exception.resource.MissingRequiredResourcesException;
 import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
@@ -91,7 +91,7 @@ public final class CreateShadowRuleStatementUpdaterTest {
         prop.setProperty("type", "value");
         ShadowAlgorithmSegment segment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("name", prop));
         CreateShadowRuleStatement sqlStatement = createSQLStatement(new ShadowRuleSegment("ruleName", "ds", null, Collections.singletonMap("t_order", Collections.singleton(segment))),
-                new ShadowRuleSegment("ruleName1", "ds1", null, Collections.singletonMap("t_order_1", Collections.singletonList(segment))));
+                new ShadowRuleSegment("ruleName", "ds1", null, Collections.singletonMap("t_order_1", Collections.singletonList(segment))));
         updater.checkSQLStatement(database, sqlStatement, currentConfig);
     }
     
@@ -105,11 +105,10 @@ public final class CreateShadowRuleStatementUpdaterTest {
         updater.checkSQLStatement(database, sqlStatement, null);
     }
     
-    @Test(expected = DuplicateRuleException.class)
-    public void assertExecuteDuplicateAlgorithmInMetaData() {
+    @Test(expected = InvalidAlgorithmConfigurationException.class)
+    public void assertInvalidAlgorithmConfiguration() {
         Properties prop = new Properties();
         prop.setProperty("type", "value");
-        when(currentConfig.getShadowAlgorithms()).thenReturn(Collections.singletonMap("algorithmName", new AlgorithmConfiguration("type", prop)));
         ShadowAlgorithmSegment segment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("type", prop));
         CreateShadowRuleStatement sqlStatement = createSQLStatement(new ShadowRuleSegment("ruleName", "ds", null, Collections.singletonMap("t_order", Collections.singleton(segment))));
         updater.checkSQLStatement(database, sqlStatement, currentConfig);
diff --git a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4 b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4
index 8194d1a8f9d..660c9921eab 100644
--- a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4
+++ b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4
@@ -30,27 +30,23 @@ alterShadowRule
 dropShadowRule
     : DROP SHADOW RULE ifExists? ruleName (COMMA ruleName)*
     ;
-   
-createShadowAlgorithm
-    : CREATE SHADOW ALGORITHM shadowAlgorithmDefinition (COMMA shadowAlgorithmDefinition)*
-    ;
-
-alterShadowAlgorithm
-    : ALTER SHADOW ALGORITHM shadowAlgorithmDefinition (COMMA shadowAlgorithmDefinition)*
-    ;
 
 dropShadowAlgorithm
     : DROP SHADOW ALGORITHM ifExists? algorithmName (COMMA algorithmName)*
     ;
 
 createDefaultShadowAlgorithm
-    : CREATE DEFAULT SHADOW ALGORITHM NAME EQ algorithmName 
+    : CREATE DEFAULT SHADOW ALGORITHM shadowAlgorithmDefinition
     ;
 
 dropDefaultShadowAlgorithm
     : DROP DEFAULT SHADOW ALGORITHM ifExists?
     ;
 
+alterDefaultShadowAlgorithm
+    : ALTER DEFAULT SHADOW ALGORITHM shadowAlgorithmDefinition
+    ;
+
 shadowRuleDefinition
     :  ruleName LP SOURCE EQ source COMMA SHADOW EQ shadow COMMA shadowTableRule (COMMA shadowTableRule)* RP
     ;
@@ -72,7 +68,7 @@ tableName
     ;
 
 shadowAlgorithmDefinition
-    :  LP (algorithmName COMMA) ? TYPE LP NAME EQ shadowAlgorithmType COMMA PROPERTIES LP algorithmProperties RP RP RP
+    : TYPE LP NAME EQ shadowAlgorithmType COMMA PROPERTIES LP algorithmProperties RP RP
     ;
 
 algorithmName
diff --git a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4 b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4
index 82db23c2d70..292e8b17cd2 100644
--- a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4
+++ b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4
@@ -31,6 +31,10 @@ showShadowAlgorithms
     : SHOW SHADOW ALGORITHMS (FROM databaseName)?
     ;
 
+showDefaultShadowAlgorithm
+    : SHOW DEFAULT SHADOW ALGORITHM (FROM databaseName)?
+    ;
+
 shadowRule
     : RULE ruleName
     ;
diff --git a/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4 b/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4
index 32639581d27..4f9210c23d6 100644
--- a/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4
+++ b/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4
@@ -26,11 +26,11 @@ execute
     | showShadowRules
     | showShadowTableRules
     | showShadowAlgorithms
+    | showDefaultShadowAlgorithm
     | dropShadowAlgorithm
     | dropDefaultShadowAlgorithm
     | createDefaultShadowAlgorithm
-    | alterShadowAlgorithm
-    | createShadowAlgorithm
+    | alterDefaultShadowAlgorithm
     | countShadowRule
     ) SEMI?
     ;
diff --git a/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java b/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
index 22bc6b24f57..a6d11423262 100644
--- a/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
+++ b/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
@@ -20,11 +20,10 @@ package org.apache.shardingsphere.shadow.distsql.parser.core;
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementBaseVisitor;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlgorithmPropertiesContext;
-import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlterShadowAlgorithmContext;
+import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlterDefaultShadowAlgorithmContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlterShadowRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CountShadowRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CreateDefaultShadowAlgorithmContext;
-import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CreateShadowAlgorithmContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CreateShadowRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.DatabaseNameContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.DropDefaultShadowAlgorithmContext;
@@ -32,22 +31,22 @@ import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementPa
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.DropShadowRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShadowAlgorithmDefinitionContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShadowRuleDefinitionContext;
-import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShadowTableRuleContext;
+import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowDefaultShadowAlgorithmContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowShadowAlgorithmsContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowShadowRulesContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowShadowTableRulesContext;
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
-import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CountShadowRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
-import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.DropDefaultShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.DropShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.DropShadowRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowDefaultShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowShadowAlgorithmsStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowShadowRulesStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowShadowTableRulesStatement;
@@ -58,6 +57,8 @@ import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.Identifi
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -72,12 +73,17 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
     @Override
     public ASTNode visitCreateShadowRule(final CreateShadowRuleContext ctx) {
         List<ShadowRuleSegment> shadowRuleSegments = ctx.shadowRuleDefinition().stream().map(this::visit).map(each -> (ShadowRuleSegment) each).collect(Collectors.toList());
-        return new CreateShadowRuleStatement(shadowRuleSegments);
+        return new CreateShadowRuleStatement(autoCreateAlgorithmName(shadowRuleSegments));
     }
     
     @Override
     public ASTNode visitCreateDefaultShadowAlgorithm(final CreateDefaultShadowAlgorithmContext ctx) {
-        return new CreateDefaultShadowAlgorithmStatement(getIdentifierValue(ctx.algorithmName()));
+        return new CreateDefaultShadowAlgorithmStatement((ShadowAlgorithmSegment) visit(ctx.shadowAlgorithmDefinition()));
+    }
+    
+    @Override
+    public ASTNode visitAlterDefaultShadowAlgorithm(final AlterDefaultShadowAlgorithmContext ctx) {
+        return new AlterDefaultShadowAlgorithmStatement((ShadowAlgorithmSegment) visit(ctx.shadowAlgorithmDefinition()));
     }
     
     @Override
@@ -92,14 +98,15 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
         return new ShowShadowAlgorithmsStatement(null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
     }
     
+    @Override
+    public ASTNode visitShowDefaultShadowAlgorithm(final ShowDefaultShadowAlgorithmContext ctx) {
+        return new ShowDefaultShadowAlgorithmStatement(null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+    }
+    
     @Override
     public ASTNode visitShadowAlgorithmDefinition(final ShadowAlgorithmDefinitionContext ctx) {
         AlgorithmSegment segment = new AlgorithmSegment(getIdentifierValue(ctx.shadowAlgorithmType()), getAlgorithmProperties(ctx.algorithmProperties()));
-        String algorithmName = null == ctx.algorithmName()
-                ? createAlgorithmName(getIdentifierValue(((ShadowRuleDefinitionContext) ctx.getParent().getParent()).ruleName()),
-                        getIdentifierValue(((ShadowTableRuleContext) ctx.getParent()).tableName()), segment)
-                : getIdentifierValue(ctx.algorithmName());
-        return new ShadowAlgorithmSegment(algorithmName, segment);
+        return new ShadowAlgorithmSegment(null, segment);
     }
     
     private Properties getAlgorithmProperties(final AlgorithmPropertiesContext ctx) {
@@ -110,12 +117,8 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
     
     @Override
     public ASTNode visitAlterShadowRule(final AlterShadowRuleContext ctx) {
-        return new AlterShadowRuleStatement(ctx.shadowRuleDefinition().stream().map(this::visit).map(each -> (ShadowRuleSegment) each).collect(Collectors.toList()));
-    }
-    
-    @Override
-    public ASTNode visitCreateShadowAlgorithm(final CreateShadowAlgorithmContext ctx) {
-        return new CreateShadowAlgorithmStatement(visitShadowAlgorithms(ctx.shadowAlgorithmDefinition()));
+        List<ShadowRuleSegment> shadowRuleSegments = ctx.shadowRuleDefinition().stream().map(this::visit).map(each -> (ShadowRuleSegment) each).collect(Collectors.toList());
+        return new AlterShadowRuleStatement(autoCreateAlgorithmName(shadowRuleSegments));
     }
     
     @Override
@@ -123,11 +126,6 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
         return new DropShadowRuleStatement(null != ctx.ifExists(), ctx.ruleName().stream().map(each -> new IdentifierValue(each.getText()).getValue()).collect(Collectors.toList()));
     }
     
-    @Override
-    public ASTNode visitAlterShadowAlgorithm(final AlterShadowAlgorithmContext ctx) {
-        return new AlterShadowAlgorithmStatement(visitShadowAlgorithms(ctx.shadowAlgorithmDefinition()));
-    }
-    
     @Override
     public ASTNode visitDropShadowAlgorithm(final DropShadowAlgorithmContext ctx) {
         return new DropShadowAlgorithmStatement(null != ctx.ifExists(), null == ctx.algorithmName()
@@ -160,10 +158,6 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
         return ctxs.stream().map(this::visit).map(each -> (ShadowAlgorithmSegment) each).collect(Collectors.toList());
     }
     
-    private String createAlgorithmName(final String ruleName, final String tableName, final AlgorithmSegment algorithmSegment) {
-        return String.format("%s_%s_%s", ruleName, tableName, algorithmSegment.getName()).toLowerCase();
-    }
-    
     @Override
     public ASTNode visitDatabaseName(final DatabaseNameContext ctx) {
         return new DatabaseSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), new IdentifierValue(ctx.getText()));
@@ -173,4 +167,33 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
     public ASTNode visitCountShadowRule(final CountShadowRuleContext ctx) {
         return new CountShadowRuleStatement(Objects.nonNull(ctx.databaseName()) ? (DatabaseSegment) visit(ctx.databaseName()) : null);
     }
+    
+    private static Collection<ShadowRuleSegment> autoCreateAlgorithmName(final Collection<ShadowRuleSegment> shadowRuleSegments) {
+        Collection<ShadowRuleSegment> newShadowRuleSegments = new LinkedList<>();
+        shadowRuleSegments.forEach(each -> buildShadowRuleSegment(newShadowRuleSegments, each));
+        return newShadowRuleSegments;
+    }
+    
+    private static void buildShadowRuleSegment(final Collection<ShadowRuleSegment> collection, final ShadowRuleSegment shadowRuleSegment) {
+        Map<String, Collection<ShadowAlgorithmSegment>> shadowTableRules = new LinkedHashMap<>();
+        shadowRuleSegment.getShadowTableRules().forEach((key, value) -> {
+            int index = 0;
+            Collection<ShadowAlgorithmSegment> shadowAlgorithmSegments = new LinkedList<>();
+            for (ShadowAlgorithmSegment shadowAlgorithmSegment : value) {
+                shadowAlgorithmSegments.add(buildShadowAlgorithmSegment(shadowRuleSegment.getRuleName(), key, index++, shadowAlgorithmSegment));
+            }
+            shadowTableRules.put(key, shadowAlgorithmSegments);
+        });
+        collection.add(new ShadowRuleSegment(shadowRuleSegment.getRuleName(), shadowRuleSegment.getSource(), shadowRuleSegment.getShadow(), shadowTableRules));
+    }
+    
+    private static ShadowAlgorithmSegment buildShadowAlgorithmSegment(final String ruleName, final String tableName, final Integer index, final ShadowAlgorithmSegment shadowAlgorithmSegment) {
+        String algorithmName = buildAlgorithmName(ruleName, tableName, shadowAlgorithmSegment.getAlgorithmSegment().getName(), index);
+        AlgorithmSegment algorithmSegment = new AlgorithmSegment(shadowAlgorithmSegment.getAlgorithmSegment().getName(), shadowAlgorithmSegment.getAlgorithmSegment().getProps());
+        return new ShadowAlgorithmSegment(algorithmName, algorithmSegment);
+    }
+    
+    private static String buildAlgorithmName(final String ruleName, final String tableName, final String algorithmType, final Integer index) {
+        return String.format("%s_%s_%s_%d", ruleName, tableName, algorithmType, index).toLowerCase();
+    }
 }
diff --git a/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java b/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java
index 477cd412379..1fde612735f 100644
--- a/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java
+++ b/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java
@@ -40,7 +40,7 @@ public final class ShadowDistSQLTest {
     
     @Test
     public void assertCreateShadowRule() {
-        String sql = "CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))";
+        String sql = "CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))";
         CreateShadowRuleStatement shadowDistSQLStatement = (CreateShadowRuleStatement) getShadowDistSQLStatement(sql);
         assertThat(shadowDistSQLStatement.getRules().size(), is(1));
         assertShadowRuleSegment(shadowDistSQLStatement.getRules().iterator().next());
@@ -48,7 +48,7 @@ public final class ShadowDistSQLTest {
     
     @Test
     public void assertAlterShadowRule() {
-        String sql = "ALTER SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))";
+        String sql = "ALTER SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))";
         AlterShadowRuleStatement shadowDistSQLStatement = (AlterShadowRuleStatement) getShadowDistSQLStatement(sql);
         assertThat(shadowDistSQLStatement.getRules().size(), is(1));
         assertShadowRuleSegment(shadowDistSQLStatement.getRules().iterator().next());
@@ -61,7 +61,7 @@ public final class ShadowDistSQLTest {
         assertThat(shadowRuleSegment.getShadowTableRules().size(), is(1));
         assertThat(shadowRuleSegment.getShadowTableRules().containsKey("t_order"), is(true));
         ShadowAlgorithmSegment shadowAlgorithmSegment = shadowRuleSegment.getShadowTableRules().get("t_order").iterator().next();
-        assertThat(shadowAlgorithmSegment.getAlgorithmName(), is("simple_hint_algorithm"));
+        assertThat(shadowAlgorithmSegment.getAlgorithmName(), is("shadow_rule_t_order_simple_hint_0"));
         assertThat(shadowAlgorithmSegment.getAlgorithmSegment().getName(), is("SIMPLE_HINT"));
         Properties properties = new Properties();
         properties.setProperty("shadow", "true");
diff --git a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterDefaultShadowAlgorithmStatement.java
similarity index 72%
copy from features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
copy to features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterDefaultShadowAlgorithmStatement.java
index fde6f86ae05..d12bc6510d3 100644
--- a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterDefaultShadowAlgorithmStatement.java
@@ -19,14 +19,15 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 
 /**
- * Create default shadow algorithm rule statement.
+ * Alter default shadow algorithm rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
+public class AlterDefaultShadowAlgorithmStatement extends AlterRuleStatement {
     
-    private final String algorithmName;
+    private final ShadowAlgorithmSegment shadowAlgorithmSegment;
 }
diff --git a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
index fde6f86ae05..e463c6b7370 100644
--- a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 
 /**
  * Create default shadow algorithm rule statement.
@@ -28,5 +29,5 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleS
 @Getter
 public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
     
-    private final String algorithmName;
+    private final ShadowAlgorithmSegment shadowAlgorithmSegment;
 }
diff --git a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowDefaultShadowAlgorithmStatement.java
similarity index 68%
copy from features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
copy to features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowDefaultShadowAlgorithmStatement.java
index fde6f86ae05..b2d42aa15e6 100644
--- a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowDefaultShadowAlgorithmStatement.java
@@ -18,15 +18,16 @@
 package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
 
 /**
- * Create default shadow algorithm rule statement.
+ * Show default shadow algorithm statement.
  */
-@RequiredArgsConstructor
 @Getter
-public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
+public final class ShowDefaultShadowAlgorithmStatement extends ShowRulesStatement {
     
-    private final String algorithmName;
+    public ShowDefaultShadowAlgorithmStatement(final DatabaseSegment database) {
+        super(database);
+    }
 }
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
index 970f96e5378..315acf6df2a 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
@@ -52,7 +52,7 @@ public final class DistSQLScriptConstants {
     
     public static final String USE_DATABASE = "USE %s;";
     
-    public static final String ADD_RESOURCE = "ADD RESOURCE";
+    public static final String ADD_RESOURCE = "REGISTER STORAGE UNIT";
     
     public static final String KEY_URL = "url";
     
@@ -196,5 +196,5 @@ public final class DistSQLScriptConstants {
     
     public static final String SHADOW_TABLE = "%s(%s)";
     
-    public static final String SHADOW_TABLE_TYPE = "(TYPE(NAME=\"%s\", PROPERTIES(%s)))";
+    public static final String SHADOW_TABLE_TYPE = "TYPE(NAME=\"%s\", PROPERTIES(%s))";
 }
diff --git a/proxy/backend/src/test/resources/expected/convert-add-resource.yaml b/proxy/backend/src/test/resources/expected/convert-add-resource.yaml
index 6373de98bfd..ec5f87d9cc7 100644
--- a/proxy/backend/src/test/resources/expected/convert-add-resource.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-add-resource.yaml
@@ -17,7 +17,7 @@
 
 CREATE DATABASE resource_db;
 USE resource_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
 URL="jdbc:mysql://127.0.0.1:3306/demo_resource_ds_0?serverTimezone=UTC&useSSL=false",
 USER="root",
 PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml b/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml
index 65029b2ca8c..67791b5630e 100644
--- a/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml
@@ -17,7 +17,7 @@
 
 CREATE DATABASE encrypt_db;
 USE encrypt_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
 URL="jdbc:mysql://127.0.0.1:3306/demo_encrypt_ds_0?serverTimezone=UTC&useSSL=false",
 USER="root",
 PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml b/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml
index bcf9a7d1009..e9349dd455a 100644
--- a/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml
@@ -17,7 +17,7 @@
 
 CREATE DATABASE shadow_db;
 USE shadow_db;
-ADD RESOURCE ds (
+REGISTER STORAGE UNIT ds (
 URL="jdbc:mysql://127.0.0.1:3306/demo_shadow_ds_0?serverTimezone=UTC&useSSL=false",
 USER="root",
 PASSWORD="12345678",
@@ -31,7 +31,7 @@ PROPERTIES("minPoolSize"="1","connectionTimeoutMilliseconds"="30000","maxLifetim
 CREATE SHADOW RULE shadowDataSource(
 SOURCE=ds,
 SHADOW=shadow_ds,
-t_order((TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]")))),
-t_order_item((TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="update","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]")))),
-t_address((TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]"))),(TYPE(NAME="SIMPLE_HINT", PROPERTIES("foo"="bar"))))
+t_order(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]"))),
+t_order_item(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="update","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]"))),
+t_address(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]")),TYPE(NAME="SIMPLE_HINT", PROPERTIES("foo"="bar")))
 );
diff --git a/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml b/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml
index ac54a9e640b..47f771397e6 100644
--- a/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml
@@ -17,7 +17,7 @@
 
 CREATE DATABASE sharding_db;
 USE sharding_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
 URL="jdbc:mysql://127.0.0.1:3306/demo_sharding_ds_0?serverTimezone=UTC&useSSL=false",
 USER="root",
 PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml b/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml
index 05c79442bf6..026418d5710 100644
--- a/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml
@@ -17,7 +17,7 @@
 
 CREATE DATABASE database_discovery_db;
 USE database_discovery_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
 URL="jdbc:mysql://127.0.0.1:3306/demo_primary_ds_0?serverTimezone=UTC&useSSL=false",
 USER="root",
 PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml b/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml
index 8a467130867..2f1a33d6a41 100644
--- a/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml
@@ -17,7 +17,7 @@
 
 CREATE DATABASE readwrite_splitting_db;
 USE readwrite_splitting_db;
-ADD RESOURCE write_ds_0 (
+REGISTER STORAGE UNIT write_ds_0 (
 URL="jdbc:mysql://127.0.0.1:3306/demo_write_ds_0?serverTimezone=UTC&useSSL=false",
 USER="root",
 PASSWORD="12345678",
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
index 654bf848387..a99a94bc1a7 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterDefault
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 import org.apache.shardingsphere.encrypt.distsql.parser.statement.AlterEncryptRuleStatement;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.AlterReadwriteSplittingRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowAlgorithmStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowRuleStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.AlterDefaultShardingStrategyStatement;
@@ -35,6 +36,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAs
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDatabaseDiscoveryHeartbeatStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDatabaseDiscoveryRuleStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDatabaseDiscoveryTypeStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDefaultShadowAlgorithmStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDefaultShardingStrategyStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDefaultSingleTableRuleStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterEncryptRuleStatementAssert;
@@ -57,6 +59,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingAuditorStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingBindingTableRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingKeyGeneratorStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AlterDefaultShadowAlgorithmStatementTestCase;
 
 /**
  * Alter rule statement assert.
@@ -98,6 +101,8 @@ public final class AlterRuleStatementAssert {
             AlterShardingKeyGeneratorStatementAssert.assertIs(assertContext, (AlterShardingKeyGeneratorStatement) actual, (AlterShardingKeyGeneratorStatementTestCase) expected);
         } else if (actual instanceof AlterShardingAuditorStatement) {
             AlterShardingAuditorStatementAssert.assertIs(assertContext, (AlterShardingAuditorStatement) actual, (AlterShardingAuditorStatementTestCase) expected);
+        } else if (actual instanceof AlterDefaultShadowAlgorithmStatement) {
+            AlterDefaultShadowAlgorithmStatementAssert.assertIs(assertContext, (AlterDefaultShadowAlgorithmStatement) actual, (AlterDefaultShadowAlgorithmStatementTestCase) expected);
         }
     }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDefaultShadowAlgorithmStatementAssert.java
similarity index 61%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDefaultShadowAlgorithmStatementAssert.java
index d30164140af..2d746529ac9 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDefaultShadowAlgorithmStatementAssert.java
@@ -15,24 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl;
+package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AlterDefaultShadowAlgorithmStatementTestCase;
 
-import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
- * Create default shadow algorithm statement assert.
+ * Alter default shadow algorithm statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class CreateDefaultShadowAlgorithmStatementAssert {
+public class AlterDefaultShadowAlgorithmStatementAssert {
     
     /**
      * Assert create default shadow algorithm statement is correct with expected parser result.
@@ -41,13 +42,17 @@ public final class CreateDefaultShadowAlgorithmStatementAssert {
      * @param actual actual create default shadow algorithm statement
      * @param expected expected create default shadow algorithm statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final CreateDefaultShadowAlgorithmStatement actual, final CreateDefaultShadowAlgorithmStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, final AlterDefaultShadowAlgorithmStatement actual, final AlterDefaultShadowAlgorithmStatementTestCase expected) {
         if (null == expected) {
             assertNull(assertContext.getText("Actual statement should not exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should exist."), actual);
-            assertThat(assertContext.getText(String.format("`%s`'s algorithm name assertion error: ", actual.getClass().getSimpleName())),
-                    actual.getAlgorithmName(), is(expected.getAlgorithmName()));
+            expected.getRules().forEach(each -> assertIsAlgorithmsSegment(assertContext, actual.getShadowAlgorithmSegment(), each));
         }
     }
+    
+    private static void assertIsAlgorithmsSegment(final SQLCaseAssertContext assertContext, final ShadowAlgorithmSegment actual, final ExpectedShadowAlgorithm expected) {
+        assertNotNull(actual);
+        AlgorithmAssert.assertIs(assertContext, actual.getAlgorithmSegment(), expected.getAlgorithmSegment());
+    }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
index d30164140af..a06d3432c06 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
@@ -19,14 +19,15 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
 
-import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Create default shadow algorithm statement assert.
@@ -46,8 +47,12 @@ public final class CreateDefaultShadowAlgorithmStatementAssert {
             assertNull(assertContext.getText("Actual statement should not exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should exist."), actual);
-            assertThat(assertContext.getText(String.format("`%s`'s algorithm name assertion error: ", actual.getClass().getSimpleName())),
-                    actual.getAlgorithmName(), is(expected.getAlgorithmName()));
+            expected.getRules().forEach(each -> assertIsAlgorithmsSegment(assertContext, actual.getShadowAlgorithmSegment(), each));
         }
     }
+    
+    private static void assertIsAlgorithmsSegment(final SQLCaseAssertContext assertContext, final ShadowAlgorithmSegment actual, final ExpectedShadowAlgorithm expected) {
+        assertNotNull(actual);
+        AlgorithmAssert.assertIs(assertContext, actual.getAlgorithmSegment(), expected.getAlgorithmSegment());
+    }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
index 12a14163b98..c26644e21c1 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
@@ -334,7 +334,6 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterEncryptRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterReadwriteSplittingRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterResourceStatementTestCase;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShadowAlgorithmStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShadowRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingAlgorithmStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingAuditorStatementTestCase;
@@ -343,6 +342,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingKeyGeneratorStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingTableRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AddResourceStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AlterDefaultShadowAlgorithmStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateBroadcastTableRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDatabaseDiscoveryDefinitionRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
@@ -350,7 +350,6 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultSingleTableRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateEncryptRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateReadwriteSplittingRuleStatementTestCase;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShadowAlgorithmStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShadowRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShardingAlgorithmStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShardingAuditorStatementTestCase;
@@ -381,6 +380,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.CountSingleTableRuleStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowBroadcastTableRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDataBaseDiscoveryRulesStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDefaultShadowAlgorithmsStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDefaultShardingStrategyStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowEncryptRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowReadwriteSplittingRulesStatementTestCase;
@@ -1069,18 +1069,15 @@ public final class SQLParserTestCases {
     @XmlElement(name = "alter-shadow-rule")
     private final List<AlterShadowRuleStatementTestCase> alterShadowRuleTestCases = new LinkedList<>();
     
-    @XmlElement(name = "alter-shadow-algorithm")
-    private final List<AlterShadowAlgorithmStatementTestCase> alterShadowAlgorithmTestCases = new LinkedList<>();
-    
-    @XmlElement(name = "create-shadow-algorithm")
-    private final List<CreateShadowAlgorithmStatementTestCase> createShadowAlgorithmTestCases = new LinkedList<>();
-    
     @XmlElement(name = "show-shadow-rules")
     private final List<ShowShadowRulesStatementTestCase> showShadowRulesTestCases = new LinkedList<>();
     
     @XmlElement(name = "show-shadow-algorithms")
     private final List<ShowShadowAlgorithmsStatementTestCase> showShadowAlgorithmsTestCases = new LinkedList<>();
     
+    @XmlElement(name = "show-default-shadow-algorithm")
+    private final List<ShowDefaultShadowAlgorithmsStatementTestCase> showDefaultShadowAlgorithmsTestCases = new LinkedList<>();
+    
     @XmlElement(name = "show-shadow-table-rules")
     private final List<ShowShadowTableRulesStatementTestCase> showShadowTableRulesTestCases = new LinkedList<>();
     
@@ -1165,6 +1162,9 @@ public final class SQLParserTestCases {
     @XmlElement(name = "create-default-shadow-algorithm")
     private final List<CreateDefaultShadowAlgorithmStatementTestCase> createDefaultShadowAlgorithmTestCases = new LinkedList<>();
     
+    @XmlElement(name = "alter-default-shadow-algorithm")
+    private final List<AlterDefaultShadowAlgorithmStatementTestCase> alterDefaultShadowAlgorithmTestCases = new LinkedList<>();
+    
     @XmlElement(name = "show-replicas")
     private final List<ShowReplicasStatementTestCase> showReplicasTestCases = new LinkedList<>();
     
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/AlterDefaultShadowAlgorithmStatementTestCase.java
similarity index 68%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/AlterDefaultShadowAlgorithmStatementTestCase.java
index edef175af47..e2e894b5928 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/AlterDefaultShadowAlgorithmStatementTestCase.java
@@ -18,18 +18,19 @@
 package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create;
 
 import lombok.Getter;
-import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.Collection;
+import java.util.LinkedList;
 
 /**
- * Create default shadow algorithm statement test case.
+ * Alter default shadow algorithm statement test case.
  */
 @Getter
-@Setter
-public final class CreateDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
+public class AlterDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
     
-    @XmlAttribute(name = "algorithm")
-    private String algorithmName;
+    @XmlElement(name = "shadow-algorithm")
+    private final Collection<ExpectedShadowAlgorithm> rules = new LinkedList<>();
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
index edef175af47..7fc44d719e3 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
@@ -19,9 +19,12 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.Collection;
+import java.util.LinkedList;
 
 /**
  * Create default shadow algorithm statement test case.
@@ -30,6 +33,6 @@ import javax.xml.bind.annotation.XmlAttribute;
 @Setter
 public final class CreateDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
     
-    @XmlAttribute(name = "algorithm")
-    private String algorithmName;
+    @XmlElement(name = "shadow-algorithm")
+    private final Collection<ExpectedShadowAlgorithm> rules = new LinkedList<>();
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowDefaultShadowAlgorithmsStatementTestCase.java
similarity index 68%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowDefaultShadowAlgorithmsStatementTestCase.java
index edef175af47..71b9c68fca1 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowDefaultShadowAlgorithmsStatementTestCase.java
@@ -15,21 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql;
 
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
-
-import javax.xml.bind.annotation.XmlAttribute;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.DatabaseContainedTestCase;
 
 /**
- * Create default shadow algorithm statement test case.
+ * Show default shadow algorithm statement test case.
  */
-@Getter
-@Setter
-public final class CreateDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
-    
-    @XmlAttribute(name = "algorithm")
-    private String algorithmName;
+public class ShowDefaultShadowAlgorithmsStatementTestCase extends DatabaseContainedTestCase {
 }
diff --git a/test/parser/src/main/resources/case/rdl/alter.xml b/test/parser/src/main/resources/case/rdl/alter.xml
index 499c2b6bc10..94a2357fa37 100644
--- a/test/parser/src/main/resources/case/rdl/alter.xml
+++ b/test/parser/src/main/resources/case/rdl/alter.xml
@@ -199,7 +199,7 @@
     <alter-shadow-rule sql-case-id="alter-shadow-rule">
         <rule name="rule" rule-name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
             <table-rule table-name="t_order">
-                <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match">
+                <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match_0">
                     <algorithm algorithm-name="REGEX_MATCH">
                         <properties>
                             <property key="operation" value="insert" />
@@ -208,7 +208,7 @@
                         </properties>
                     </algorithm>
                 </shadow-algorithm>
-                <shadow-algorithm algorithm-id="simple_hint_algorithm">
+                <shadow-algorithm algorithm-id="shadow_rule_t_order_simple_hint_1">
                     <algorithm algorithm-name="SIMPLE_HINT">
                         <properties>
                             <property key="shadow" value="true" />
@@ -220,8 +220,8 @@
         </rule>
     </alter-shadow-rule>
     
-    <alter-shadow-algorithm sql-case-id="alter-shadow-algorithm">
-        <shadow-algorithm algorithm-id="simple_hint_algorithm">
+    <alter-default-shadow-algorithm sql-case-id="alter-default-shadow-algorithm">
+        <shadow-algorithm algorithm-id="default">
             <algorithm algorithm-name="SIMPLE_HINT">
                 <properties>
                     <property key="shadow" value="true" />
@@ -229,7 +229,7 @@
                 </properties>
             </algorithm>
         </shadow-algorithm>
-    </alter-shadow-algorithm>
+    </alter-default-shadow-algorithm>
     
     <alter-sharding-algorithm sql-case-id="alter-sharding-algorithm">
         <shardingAlgorithm sharding-algorithm-name="algorithm_name">
diff --git a/test/parser/src/main/resources/case/rdl/create.xml b/test/parser/src/main/resources/case/rdl/create.xml
index 9670fef1699..d91e6b942c3 100644
--- a/test/parser/src/main/resources/case/rdl/create.xml
+++ b/test/parser/src/main/resources/case/rdl/create.xml
@@ -323,7 +323,7 @@
     <create-shadow-rule sql-case-id="create-shadow-rule">
         <rule name="rule" rule-name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
             <table-rule table-name="t_order">
-                <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match">
+                <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match_0">
                     <algorithm algorithm-name="REGEX_MATCH">
                         <properties>
                             <property key="operation" value="insert"/>
@@ -332,7 +332,7 @@
                         </properties>
                     </algorithm>
                 </shadow-algorithm>
-                <shadow-algorithm algorithm-id="simple_hint_algorithm">
+                <shadow-algorithm algorithm-id="shadow_rule_t_order_simple_hint_1">
                     <algorithm algorithm-name="SIMPLE_HINT">
                         <properties>
                             <property key="shadow" value="true"/>
@@ -347,7 +347,7 @@
     <create-shadow-rule sql-case-id="create-shadow-rule-with-quota">
         <rule name="rule" rule-name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
             <table-rule table-name="t_order">
-                <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match">
+                <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match_0">
                     <algorithm algorithm-name="REGEX_MATCH">
                         <properties>
                             <property key="operation" value="insert"/>
@@ -356,7 +356,7 @@
                         </properties>
                     </algorithm>
                 </shadow-algorithm>
-                <shadow-algorithm algorithm-id="simple_hint_algorithm">
+                <shadow-algorithm algorithm-id="shadow_rule_t_order_simple_hint_1">
                     <algorithm algorithm-name="SIMPLE_HINT">
                         <properties>
                             <property key="shadow" value="true"/>
@@ -378,8 +378,6 @@
         </shardingAlgorithm>
     </create-sharding-algorithm>
     
-    <create-default-shadow-algorithm sql-case-id="create-default-shadow-algorithm" algorithm="simple_hint_algorithm"/>
-    
     <create-default-sharding-strategy sql-case-id="create-default-sharding-table-strategy-with-lower-case">
         <strategy default-type="table" strategy-type="standard" sharding-column="order_id" sharding-algorithm-name="algorithms_name">
         </strategy>
@@ -395,8 +393,8 @@
         </strategy>
     </create-default-sharding-strategy>
     
-    <create-shadow-algorithm sql-case-id="create-shadow-algorithm">
-        <shadow-algorithm algorithm-id="simple_hint_algorithm">
+    <create-default-shadow-algorithm sql-case-id="create-default-shadow-algorithm">
+        <shadow-algorithm algorithm-id="default">
             <algorithm algorithm-name="HINT">
                 <properties>
                     <property key="shadow" value="true"/>
@@ -404,7 +402,7 @@
                 </properties>
             </algorithm>
         </shadow-algorithm>
-    </create-shadow-algorithm>
+    </create-default-shadow-algorithm>
     
     <create-default-single-table sql-case-id="create-default-single-table" default-data-source="ds_0"/>
     
diff --git a/test/parser/src/main/resources/case/rql/show.xml b/test/parser/src/main/resources/case/rql/show.xml
index e98d6da67f6..41fe1849ff8 100644
--- a/test/parser/src/main/resources/case/rql/show.xml
+++ b/test/parser/src/main/resources/case/rql/show.xml
@@ -81,6 +81,10 @@
     <show-shadow-algorithms sql-case-id="show-shadow-algorithms">
         <database name="shadow_db" start-index="28" stop-index="36" />
     </show-shadow-algorithms>
+
+    <show-default-shadow-algorithm sql-case-id="show-default-shadow-algorithm">
+        <database name="shadow_db" start-index="35" stop-index="43" />
+    </show-default-shadow-algorithm>
     
     <show-single-table sql-case-id="show-single-table">
         <name name="t_order" start-index="19" stop-index="25" />
diff --git a/test/parser/src/main/resources/sql/supported/rdl/alter.xml b/test/parser/src/main/resources/sql/supported/rdl/alter.xml
index 7f46c7a6a84..da268703d62 100644
--- a/test/parser/src/main/resources/sql/supported/rdl/alter.xml
+++ b/test/parser/src/main/resources/sql/supported/rdl/alter.xml
@@ -34,8 +34,8 @@
     <distsql-case id="alter-encrypt-rule" value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
     <distsql-case id="alter-encrypt-rule-with-assisted-query-column" value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column, TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME='MD5')), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
     <distsql-case id="alter-encrypt-rule-with-query-with-cipher-column" value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher, TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))), QUERY_WITH_CIPHER_COLUMN=false)" />
-    <distsql-case id="alter-shadow-algorithm" value="ALTER SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME='SIMPLE_HINT', PROPERTIES('shadow'='true', 'foo'='bar')))" />
-    <distsql-case id="alter-shadow-rule" value="ALTER SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))" />
+    <distsql-case id="alter-default-shadow-algorithm" value="ALTER DEFAULT SHADOW ALGORITHM TYPE(NAME='SIMPLE_HINT', PROPERTIES('shadow'='true', 'foo'='bar'))" />
+    <distsql-case id="alter-shadow-rule" value="ALTER SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))" />
     <distsql-case id="alter-sharding-table-rule" value="ALTER SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column = order_id,sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" />
     <distsql-case id="alter-sharding-table-rule-complex" value="ALTER SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='complex',sharding_columns = order_id,user_id, sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" />
     <distsql-case id="alter-sharding-algorithm" value="ALTER SHARDING ALGORITHM algorithm_name(TYPE(NAME='inline',PROPERTIES('algorithm-expression' = 't_order_${order_id % 2}')))" />
diff --git a/test/parser/src/main/resources/sql/supported/rdl/create.xml b/test/parser/src/main/resources/sql/supported/rdl/create.xml
index a7d3e5ef879..523200a0f53 100644
--- a/test/parser/src/main/resources/sql/supported/rdl/create.xml
+++ b/test/parser/src/main/resources/sql/supported/rdl/create.xml
@@ -35,8 +35,7 @@
     <distsql-case id="create-database-discovery-definition-rule" value="CREATE DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1), TYPE(NAME='mgr',PROPERTIES('groupName'='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5 * * * * ?'))), ha_group_1 (RESOURCES(resource2,resource3), TYPE(NAME='mgr2',PROPERTIES('groupName'='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6 * * * * ?')))" />
     <distsql-case id="create-encrypt-rule" value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
     <distsql-case id="create-encrypt-rule-with-assisted-query-column" value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column, TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME='MD5')), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
-    <distsql-case id="create-shadow-rule" value="CREATE SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))" />
-    <distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT SHADOW ALGORITHM NAME = simple_hint_algorithm ;" />
+    <distsql-case id="create-shadow-rule" value="CREATE SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))" />
     <distsql-case id="create-sharding-algorithm" value="CREATE SHARDING ALGORITHM algorithm_name(TYPE(NAME='hash_mod',PROPERTIES('algorithm-expression' = 't_order_${order_id % 2}')))" />
     <distsql-case id="create-default-sharding-table-strategy-with-lower-case" value="create default sharding table strategy(type='standard', sharding_column=order_id, sharding_algorithm=algorithms_name)" />
     <distsql-case id="create-default-sharding-database-strategy" value="CREATE DEFAULT SHARDING DATABASE STRATEGY(TYPE='STANDARD', SHARDING_COLUMN=ORDER_ID, SHARDING_ALGORITHM=algorithms_name)" />
@@ -45,7 +44,7 @@
     <distsql-case id="create-sharding-table-rule-with-enum-inline-expression" value="CREATE SHARDING TABLE RULE t_order (DATANODES(&quot;ms_group_${['abc','ac']}.table &quot; ),DATABASE_STRATEGY(TYPE='standard',sharding_column = order_id,sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake'))),t_order_item (DATANODES('ms_group_${0..1}'),DATABASE_STRATE [...]
     <distsql-case id="create-sharding-table-rule-complex" value="CREATE SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='complex',sharding_columns = order_id,user_id,sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake'))),t_order_item (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column = o [...]
     <distsql-case id="create-sharding-table-rule-with-auto-create-algorithm" value="CREATE SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column = order_id,sharding_algorithm (TYPE(NAME='inline',PROPERTIES('algorithm-expression'='ms_group_${order_id% 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" />
-    <distsql-case id="create-shadow-algorithm" value="CREATE SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME='HINT', PROPERTIES('shadow'='true', 'foo'='bar')))" />
+    <distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT SHADOW ALGORITHM TYPE(NAME='HINT', PROPERTIES('shadow'='true', 'foo'='bar'))" />
     <distsql-case id="create-default-single-table" value="SET DEFAULT SINGLE TABLE STORAGE UNIT = ds_0" />
 
     <distsql-case id="add-resource-with-quota" value="REGISTER STORAGE UNIT `ds_0`(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT');" />
@@ -56,7 +55,7 @@
     <distsql-case id="create-database-discovery-rule-with-quota" value="CREATE DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1), TYPE(NAME='mgr',PROPERTIES('groupName'='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5 * * * * ?'))), ha_group_1 (RESOURCES(resource2,resource3), TYPE(NAME='mgr2',PROPERTIES('groupName'='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6 * * * * ?')))" />
     <distsql-case id="create-encrypt-rule-with-quota" value="CREATE ENCRYPT RULE `encrypt` (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
     <distsql-case id="create-encrypt-rule-with-query-with-cipher-column" value="CREATE ENCRYPT RULE `encrypt` (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))),QUERY_WITH_CIPHER_COLUMN=false)" />
-    <distsql-case id="create-shadow-rule-with-quota" value="CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))" />
+    <distsql-case id="create-shadow-rule-with-quota" value="CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))" />
     <distsql-case id="create-sharding-key-generator" value="CREATE SHARDING KEY GENERATOR uuid_key_generator(TYPE(NAME='uuid'))" />
     <distsql-case id="create-sharding-auditor" value="CREATE SHARDING AUDITOR sharding_key_required_auditor(TYPE(NAME='DML_SHARDING_CONDITIONS'))" />
     <distsql-case id="single-register-migration-source-storage-unit" value="REGISTER MIGRATION SOURCE STORAGE UNIT ds_0 (URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456');" />
diff --git a/test/parser/src/main/resources/sql/supported/rql/show.xml b/test/parser/src/main/resources/sql/supported/rql/show.xml
index f5cb8d14cf5..67457a300ff 100644
--- a/test/parser/src/main/resources/sql/supported/rql/show.xml
+++ b/test/parser/src/main/resources/sql/supported/rql/show.xml
@@ -33,6 +33,7 @@
     <distsql-case id="show-shadow-rules" value="SHOW SHADOW RULE shadow_rule FROM shadow_db" />
     <distsql-case id="show-shadow-table-rules" value="SHOW SHADOW TABLE RULES FROM shadow_db" />
     <distsql-case id="show-shadow-algorithms" value="SHOW SHADOW ALGORITHMS FROM shadow_db" />
+    <distsql-case id="show-default-shadow-algorithm" value="SHOW DEFAULT SHADOW ALGORITHM FROM shadow_db" />
     <distsql-case id="show-single-table" value="SHOW SINGLE TABLE t_order FROM single_table_db" />
     <distsql-case id="show-single-table-rules" value="SHOW DEFAULT SINGLE TABLE STORAGE UNIT FROM single_table_db" />
     <distsql-case id="show-sharding-table-nodes" value="SHOW SHARDING TABLE NODES t_order FROM sharding_db" />