You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zh...@apache.org on 2026/03/16 06:06:18 UTC

(doris) branch branch-4.1 updated: branch-4.1: [opt](nereids) support order by clause in create table (#60684) (#61363)

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

zhangstar333 pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new c37af871e43 branch-4.1: [opt](nereids) support order by clause in create table (#60684) (#61363)
c37af871e43 is described below

commit c37af871e4356be15d1c8c329ab8d2e2019f556a
Author: zhangstar333 <zh...@selectdb.com>
AuthorDate: Mon Mar 16 14:06:11 2026 +0800

    branch-4.1: [opt](nereids) support order by clause in create table (#60684) (#61363)
    
    Problem Summary:
    cherry-pick from master (#60684)
---
 .../main/java/org/apache/doris/common/Config.java  |   6 +-
 .../antlr4/org/apache/doris/nereids/DorisParser.g4 |   4 +-
 .../src/main/java/org/apache/doris/DorisFE.java    |   4 +-
 .../java/org/apache/doris/analysis/KeysDesc.java   |  46 +++----
 .../main/java/org/apache/doris/catalog/Env.java    |  16 ++-
 .../apache/doris/datasource/InternalCatalog.java   |   6 +-
 .../datasource/iceberg/IcebergExternalTable.java   |  35 +++++
 .../datasource/iceberg/IcebergMetadataOps.java     |  41 +++++-
 .../doris/nereids/parser/LogicalPlanBuilder.java   |  56 +++++++-
 .../trees/plans/commands/info/CreateMTMVInfo.java  |   2 +-
 .../trees/plans/commands/info/CreateTableInfo.java | 141 ++++++++++++++-------
 .../trees/plans/commands/info/SortFieldInfo.java   |  67 ++++++++++
 .../org/apache/doris/planner/IcebergTableSink.java |   6 +
 .../org/apache/doris/regression/Config.groovy      |   8 +-
 .../org/apache/doris/regression/suite/Suite.groovy |   2 +-
 .../compaction/test_compaction_uniq_keys_ck.groovy |   2 +-
 .../test_compaction_uniq_keys_row_store_ck.groovy  |   2 +-
 ...test_compaction_uniq_keys_with_delete_ck.groovy |   2 +-
 .../compaction/test_full_compaction_ck.groovy      |   2 +-
 .../test_vertical_compaction_uniq_keys_ck.groovy   |   2 +-
 .../iceberg/write/test_iceberg_create_table.groovy |  26 ++++
 .../test_index_compaction_unique_keys_arr.groovy   |   2 +-
 .../suites/nereids_p0/delete/delete_cte_ck.groovy  |   4 +-
 .../suites/point_query_p0/load_ck.groovy           |   2 +-
 .../point_query_p0/test_point_query_ck.groovy      |   6 +-
 .../test_point_query_partition_ck.groovy           |   4 +-
 .../suites/point_query_p0/test_rowstore_ck.groovy  |  14 +-
 .../point_query_p0/test_rowstore_query_ck.groovy   |   2 +-
 .../unique_ck/test_schema_change_unique.groovy     |   2 +-
 .../unique_ck/test_unique_schema_value_drop.groovy |  14 +-
 .../test_unique_schema_value_modify.groovy         |  20 +--
 .../test_unique_schema_value_modify1.groovy        |  10 +-
 .../test_unique_schema_value_modify2.groovy        |  14 +-
 .../test_unique_schema_value_modify3.groovy        |   6 +-
 .../test_segcompaction_unique_keys_mow_ck.groovy   |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/call_center.sql     |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/catalog_page.sql    |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/catalog_returns.sql |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/catalog_sales.sql   |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/customer.sql |   2 +-
 .../ddl/customer_address.sql                       |   2 +-
 .../ddl/customer_demographics.sql                  |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/date_dim.sql |   2 +-
 .../ddl/household_demographics.sql                 |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/income_band.sql     |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/inventory.sql       |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/item.sql     |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/promotion.sql       |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/reason.sql   |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/ship_mode.sql       |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/store.sql    |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/store_returns.sql   |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/store_sales.sql     |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/time_dim.sql |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/warehouse.sql       |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/web_page.sql |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/web_returns.sql     |   2 +-
 .../tpcds_sf1_unique_ck_p1/ddl/web_sales.sql       |   2 +-
 .../suites/tpcds_sf1_unique_ck_p1/ddl/web_site.sql |   2 +-
 .../tpch_sf0.1_unique_ck_p1/ddl/customer.sql       |   2 +-
 .../tpch_sf0.1_unique_ck_p1/ddl/lineitem.sql       |   2 +-
 .../suites/tpch_sf0.1_unique_ck_p1/ddl/nation.sql  |   2 +-
 .../suites/tpch_sf0.1_unique_ck_p1/ddl/orders.sql  |   2 +-
 .../suites/tpch_sf0.1_unique_ck_p1/ddl/part.sql    |   2 +-
 .../tpch_sf0.1_unique_ck_p1/ddl/partsupp.sql       |   2 +-
 .../suites/tpch_sf0.1_unique_ck_p1/ddl/region.sql  |   2 +-
 .../tpch_sf0.1_unique_ck_p1/ddl/supplier.sql       |   2 +-
 .../partial_update/test_mix_partial_update.groovy  |   8 +-
 .../test_new_partial_update_delete.groovy          |   2 +-
 .../partial_update/test_partial_update.groovy      |   8 +-
 .../test_partial_update_2pc_schema_change.groovy   |   2 +-
 .../test_partial_update_after_delete.groovy        |   4 +-
 .../test_partial_update_auto_inc.groovy            |   2 +-
 .../test_partial_update_case_insensitivity.groovy  |   2 +-
 .../test_partial_update_complex_type.groovy        |   2 +-
 ...artial_update_complex_type_schema_change.groovy |   2 +-
 .../test_partial_update_default_value.groovy       |   2 +-
 .../test_partial_update_delete.groovy              |   4 +-
 .../test_partial_update_delete_sign.groovy         |   8 +-
 ...partial_update_delete_sign_with_conflict.groovy |   2 +-
 ...artial_update_insert_light_schema_change.groovy |  10 +-
 ...test_partial_update_insert_schema_change.groovy |  10 +-
 .../test_partial_update_insert_seq_col.groovy      |   4 +-
 .../test_partial_update_native_insert_stmt.groovy  |  14 +-
 ...artial_update_native_insert_stmt_complex.groovy |   4 +-
 .../partial_update/test_partial_update_orc.groovy  |   2 +-
 .../test_partial_update_parallel.groovy            |  10 +-
 .../test_partial_update_publish.groovy             |   2 +-
 .../test_partial_update_schema_change.groovy       |  20 +--
 ...t_partial_update_schema_change_row_store.groovy |  20 +--
 .../test_partial_update_with_update_stmt.groovy    |   6 +-
 .../ssb_unique_load_zstd/ddl/customer_create.sql   |   2 +-
 .../ddl/customer_sequence_create.sql               |   2 +-
 .../ssb_unique_load_zstd/ddl/date_create.sql       |   2 +-
 .../ddl/date_sequence_create.sql                   |   2 +-
 .../ssb_unique_load_zstd/ddl/lineorder_create.sql  |   2 +-
 .../ddl/lineorder_sequence_create.sql              |   2 +-
 .../ssb_unique_load_zstd/ddl/part_create.sql       |   2 +-
 .../ddl/part_sequence_create.sql                   |   2 +-
 .../ssb_unique_load_zstd/ddl/supplier_create.sql   |   2 +-
 .../ddl/supplier_sequence_create.sql               |   2 +-
 .../ssb_unique_sql_zstd/ddl/customer_create.sql    |   2 +-
 .../ssb_unique_sql_zstd/ddl/date_create.sql        |   2 +-
 .../ssb_unique_sql_zstd/ddl/lineorder_create.sql   |   2 +-
 .../ssb_unique_sql_zstd/ddl/part_create.sql        |   2 +-
 .../ssb_unique_sql_zstd/ddl/supplier_create.sql    |   2 +-
 .../test_compact_multi_segments.groovy             |   2 +-
 .../unique_with_mow_c_p0/test_compact_seg.groovy   |   2 +-
 .../test_compact_with_seq.groovy                   |   2 +-
 .../test_compact_with_seq2.groovy                  |   2 +-
 ...est_compaction_with_multi_append_columns.groovy |   2 +-
 .../unique_with_mow_c_p0/test_create_table.groovy  |  71 ++++++++---
 .../unique_with_mow_c_p0/test_delete_sign.groovy   |   8 +-
 .../test_delete_sign_delete_bitmap.groovy          |   4 +-
 .../test_mow_full_clone_exception.groovy           |   2 +-
 .../test_mow_with_null_sequence.groovy             |   4 +-
 .../unique_with_mow_c_p0/test_pk_uk_case.groovy    |   2 +-
 .../test_primary_key_simple_case.groovy            |   2 +-
 .../unique_with_mow_c_p0/test_schema_change.groovy |   2 +-
 .../test_schema_change_add_key_column.groovy       |   2 +-
 .../test_schema_change_and_compaction.groovy       |   2 +-
 .../test_schema_change_ck.groovy                   |   6 +-
 .../suites/unique_with_mow_c_p0/test_select.groovy |   2 +-
 .../test_unique_mow_sequence.groovy                |   2 +-
 .../suites/unique_with_mow_c_p0/test_update.groovy |   2 +-
 .../ssb_unique_load_zstd/ddl/customer_create.sql   |   2 +-
 .../ddl/customer_sequence_create.sql               |   2 +-
 .../ssb_unique_load_zstd/ddl/date_create.sql       |   2 +-
 .../ddl/date_sequence_create.sql                   |   2 +-
 .../ssb_unique_load_zstd/ddl/lineorder_create.sql  |   2 +-
 .../ddl/lineorder_sequence_create.sql              |   2 +-
 .../ssb_unique_load_zstd/ddl/part_create.sql       |   2 +-
 .../ddl/part_sequence_create.sql                   |   2 +-
 .../ssb_unique_load_zstd/ddl/supplier_create.sql   |   2 +-
 .../ddl/supplier_sequence_create.sql               |   2 +-
 .../ssb_unique_sql_zstd/ddl/customer_create.sql    |   2 +-
 .../ssb_unique_sql_zstd/ddl/date_create.sql        |   2 +-
 .../ssb_unique_sql_zstd/ddl/lineorder_create.sql   |   2 +-
 .../ssb_unique_sql_zstd/ddl/part_create.sql        |   2 +-
 .../ssb_unique_sql_zstd/ddl/supplier_create.sql    |   2 +-
 .../unique_with_mow_c_p2/test_pk_uk_case.groovy    |   2 +-
 141 files changed, 650 insertions(+), 325 deletions(-)

diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index d19c6304edb..c074fb6ab76 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -644,9 +644,9 @@ public class Config extends ConfigBase {
             "Default timeout for insert load job, in seconds."})
     public static int insert_load_default_timeout_second = 14400; // 4 hour
 
-    @ConfField(mutable = true, masterOnly = true, description = {"对 mow 表随机设置 cluster keys,用于测试",
-            "random set cluster keys for mow table for test"})
-    public static boolean random_add_cluster_keys_for_mow = false;
+    @ConfField(mutable = true, masterOnly = true, description = {"对 mow 表随机设置 order by keys,用于测试",
+            "random set order by keys for mow table for test"})
+    public static boolean random_add_order_by_keys_for_mow = false;
 
     @ConfField(mutable = true, masterOnly = true, description = {
             "在 fuzzy 测试中随机选择部分表使用 V3 storage_format(ext_meta),用于增强覆盖",
diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
index e07b45f751f..3ec546ccc0a 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
@@ -189,8 +189,8 @@ supportedCreateStatement
     : CREATE (EXTERNAL | TEMPORARY)? TABLE (IF NOT EXISTS)? name=multipartIdentifier
         ((ctasCols=identifierList)? | (LEFT_PAREN columnDefs (COMMA indexDefs)? COMMA? RIGHT_PAREN))
         (ENGINE EQ engine=identifier)?
-        ((AGGREGATE | UNIQUE | DUPLICATE) KEY keys=identifierList
-        (CLUSTER BY clusterKeys=identifierList)?)?
+        ((AGGREGATE | UNIQUE | DUPLICATE) KEY keys=identifierList)?
+        (ORDER BY LEFT_PAREN sortItems+=sortItem (COMMA sortItems+=sortItem)* RIGHT_PAREN)?
         (COMMENT STRING_LITERAL)?
         (partition=partitionTable)?
         (DISTRIBUTED BY (HASH hashKeys=identifierList | RANDOM)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java b/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java
index 26f9389741c..73742497226 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java
@@ -599,8 +599,8 @@ public class DorisFE {
         // Keep global fuzzy knobs that are not session-based.
         if (Config.fuzzy_test_type.equalsIgnoreCase("daily")
                 || Config.fuzzy_test_type.equalsIgnoreCase("rqg")) {
-            Config.random_add_cluster_keys_for_mow = (LocalDate.now().getDayOfMonth() % 2 == 0);
-            LOG.info("fuzzy set random_add_cluster_keys_for_mow={}", Config.random_add_cluster_keys_for_mow);
+            Config.random_add_order_by_keys_for_mow = (LocalDate.now().getDayOfMonth() % 2 == 0);
+            LOG.info("fuzzy set random_add_order_by_keys_for_mow={}", Config.random_add_order_by_keys_for_mow);
         }
 
         setFuzzyForCatalog();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java
index 5c4d489dcd4..e594b6c14b0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java
@@ -28,7 +28,7 @@ import java.util.List;
 public class KeysDesc {
     private KeysType type;
     private List<String> keysColumnNames;
-    private List<String> clusterKeysColumnNames;
+    private List<String> orderByKeysColumnNames;
 
     public KeysDesc() {
         this.type = KeysType.AGG_KEYS;
@@ -40,9 +40,9 @@ public class KeysDesc {
         this.keysColumnNames = keysColumnNames;
     }
 
-    public KeysDesc(KeysType type, List<String> keysColumnNames, List<String> clusterKeyColumnNames) {
+    public KeysDesc(KeysType type, List<String> keysColumnNames, List<String> orderByKeysColumnNames) {
         this(type, keysColumnNames);
-        this.clusterKeysColumnNames = clusterKeyColumnNames;
+        this.orderByKeysColumnNames = orderByKeysColumnNames;
     }
 
     public KeysType getKeysType() {
@@ -53,8 +53,8 @@ public class KeysDesc {
         return keysColumnNames.size();
     }
 
-    public List<String> getClusterKeysColumnNames() {
-        return clusterKeysColumnNames;
+    public List<String> getOrderByKeysColumnNames() {
+        return orderByKeysColumnNames;
     }
 
     public boolean containsCol(String colName) {
@@ -107,39 +107,39 @@ public class KeysDesc {
             }
         }
 
-        if (clusterKeysColumnNames != null) {
-            analyzeClusterKeys(cols);
+        if (orderByKeysColumnNames != null) {
+            analyzeOrderByKeys(cols);
         }
     }
 
-    private void analyzeClusterKeys(List<ColumnDef> cols) throws AnalysisException {
+    private void analyzeOrderByKeys(List<ColumnDef> cols) throws AnalysisException {
         if (type != KeysType.UNIQUE_KEYS) {
-            throw new AnalysisException("Cluster keys only support unique keys table");
+            throw new AnalysisException("Order by keys only support unique keys table");
         }
-        // check that cluster keys is not duplicated
-        for (int i = 0; i < clusterKeysColumnNames.size(); i++) {
-            String name = clusterKeysColumnNames.get(i);
+        // check that order by keys is not duplicated
+        for (int i = 0; i < orderByKeysColumnNames.size(); i++) {
+            String name = orderByKeysColumnNames.get(i);
             for (int j = 0; j < i; j++) {
-                if (clusterKeysColumnNames.get(j).equalsIgnoreCase(name)) {
-                    throw new AnalysisException("Duplicate cluster key column[" + name + "].");
+                if (orderByKeysColumnNames.get(j).equalsIgnoreCase(name)) {
+                    throw new AnalysisException("Duplicate order by key column[" + name + "].");
                 }
             }
         }
-        // check that cluster keys is not equal to primary keys
-        int minKeySize = Math.min(keysColumnNames.size(), clusterKeysColumnNames.size());
+        // check that order by keys is not equal to primary keys
+        int minKeySize = Math.min(keysColumnNames.size(), orderByKeysColumnNames.size());
         boolean sameKey = true;
         for (int i = 0; i < minKeySize; i++) {
-            if (!keysColumnNames.get(i).equalsIgnoreCase(clusterKeysColumnNames.get(i))) {
+            if (!keysColumnNames.get(i).equalsIgnoreCase(orderByKeysColumnNames.get(i))) {
                 sameKey = false;
                 break;
             }
         }
-        if (sameKey && !Config.random_add_cluster_keys_for_mow) {
+        if (sameKey && !Config.random_add_order_by_keys_for_mow) {
             throw new AnalysisException("Unique keys and cluster keys should be different.");
         }
         // check that cluster key column exists
-        for (int i = 0; i < clusterKeysColumnNames.size(); i++) {
-            String name = clusterKeysColumnNames.get(i);
+        for (int i = 0; i < orderByKeysColumnNames.size(); i++) {
+            String name = orderByKeysColumnNames.get(i);
             for (int j = 0; j < cols.size(); j++) {
                 if (cols.get(j).getName().equalsIgnoreCase(name)) {
                     cols.get(j).setClusterKeyId(i);
@@ -164,10 +164,10 @@ public class KeysDesc {
             i++;
         }
         stringBuilder.append(")");
-        if (clusterKeysColumnNames != null) {
-            stringBuilder.append("\nCLUSTER BY (");
+        if (orderByKeysColumnNames != null) {
+            stringBuilder.append("\nORDER BY (");
             i = 0;
-            for (String columnName : clusterKeysColumnNames) {
+            for (String columnName : orderByKeysColumnNames) {
                 if (i != 0) {
                     stringBuilder.append(", ");
                 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 4a8ab20c1ff..af9449d93f4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -4011,9 +4011,9 @@ public class Env {
                     }
                 }
                 sb.append(Joiner.on(", ").join(keysColumnNames)).append(")");
-                // show cluster keys
+                // show order keys
                 if (!clusterKeysColumnNamesToId.isEmpty()) {
-                    sb.append("\n").append("CLUSTER BY (`");
+                    sb.append("\n").append("ORDER BY (`");
                     sb.append(Joiner.on("`, `").join(clusterKeysColumnNamesToId.values())).append("`)");
                 }
             }
@@ -4238,6 +4238,9 @@ public class Env {
         } else if (table.getType() == TableType.ICEBERG_EXTERNAL_TABLE) {
             addTableComment(table, sb);
             IcebergExternalTable icebergExternalTable = (IcebergExternalTable) table;
+            if (icebergExternalTable.hasSortOrder()) {
+                sb.append("\n").append(icebergExternalTable.getSortOrderSql());
+            }
             sb.append("\nLOCATION '").append(icebergExternalTable.location()).append("'");
             sb.append("\nPROPERTIES (");
             Iterator<Entry<String, String>> iterator = icebergExternalTable.properties().entrySet().iterator();
@@ -4420,9 +4423,9 @@ public class Env {
                     }
                 }
                 sb.append(Joiner.on(", ").join(keysColumnNames)).append(")");
-                // show cluster keys
+                // show order keys
                 if (!clusterKeysColumnNamesToId.isEmpty()) {
-                    sb.append("\n").append("CLUSTER BY (`");
+                    sb.append("\n").append("ORDER BY (`");
                     sb.append(Joiner.on("`, `").join(clusterKeysColumnNamesToId.values())).append("`)");
                 }
             }
@@ -4653,6 +4656,9 @@ public class Env {
         } else if (table.getType() == TableType.ICEBERG_EXTERNAL_TABLE) {
             addTableComment(table, sb);
             IcebergExternalTable icebergExternalTable = (IcebergExternalTable) table;
+            if (icebergExternalTable.hasSortOrder()) {
+                sb.append("\n").append(icebergExternalTable.getSortOrderSql());
+            }
             sb.append("\nLOCATION '").append(icebergExternalTable.location()).append("'");
             sb.append("\nPROPERTIES (");
             Iterator<Entry<String, String>> iterator = icebergExternalTable.properties().entrySet().iterator();
@@ -5350,7 +5356,7 @@ public class Env {
                     break;
                 }
             }
-            if (sameKey && !Config.random_add_cluster_keys_for_mow) {
+            if (sameKey && !Config.random_add_order_by_keys_for_mow) {
                 throw new DdlException(shortKeyColumnCount + " short keys is a part of unique keys");
             }
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
index 9a719c8bef1..7f93fa1008e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
@@ -2659,8 +2659,8 @@ public class InternalCatalog implements CatalogIf<Database> {
         olapTable.setStorageDictPageSize(storageDictPageSize);
 
         // check data sort properties
-        int keyColumnSize = CollectionUtils.isEmpty(keysDesc.getClusterKeysColumnNames()) ? keysDesc.keysColumnSize() :
-                keysDesc.getClusterKeysColumnNames().size();
+        int keyColumnSize = CollectionUtils.isEmpty(keysDesc.getOrderByKeysColumnNames()) ? keysDesc.keysColumnSize() :
+                keysDesc.getOrderByKeysColumnNames().size();
         DataSortInfo dataSortInfo = PropertyAnalyzer.analyzeDataSortInfo(properties, keysType,
                 keyColumnSize, storageFormat);
         olapTable.setDataSortInfo(dataSortInfo);
@@ -2673,7 +2673,7 @@ public class InternalCatalog implements CatalogIf<Database> {
                 throw new DdlException(e.getMessage());
             }
             if (enableUniqueKeyMergeOnWrite && !enableLightSchemaChange && !CollectionUtils.isEmpty(
-                    keysDesc.getClusterKeysColumnNames())) {
+                    keysDesc.getOrderByKeysColumnNames())) {
                 throw new DdlException(
                     "Unique merge-on-write tables with cluster keys require light schema change to be enabled.");
             }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalTable.java
index 5f421199b86..1695c96a38d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalTable.java
@@ -38,6 +38,7 @@ import org.apache.doris.mtmv.MTMVRefreshContext;
 import org.apache.doris.mtmv.MTMVRelatedTableIf;
 import org.apache.doris.mtmv.MTMVSnapshotIdSnapshot;
 import org.apache.doris.mtmv.MTMVSnapshotIf;
+import org.apache.doris.nereids.trees.plans.commands.info.SortFieldInfo;
 import org.apache.doris.statistics.AnalysisInfo;
 import org.apache.doris.statistics.BaseAnalysisTask;
 import org.apache.doris.statistics.ExternalAnalysisTask;
@@ -377,4 +378,38 @@ public class IcebergExternalTable extends ExternalTable implements MTMVRelatedTa
         Table table = getIcebergTable();
         return table.spec().isPartitioned();
     }
+
+    /**
+     * Get sort order SQL clause from iceberg table
+     * @return SQL string representing ORDER BY clause, or empty string if no sort order
+     */
+    public String getSortOrderSql() {
+        Table table = getIcebergTable();
+        org.apache.iceberg.SortOrder sortOrder = table.sortOrder();
+        if (sortOrder == null || sortOrder.isUnsorted() || sortOrder.fields().isEmpty()) {
+            return "";
+        }
+
+        List<String> sortItems = new java.util.ArrayList<>();
+        for (org.apache.iceberg.SortField sortField : sortOrder.fields()) {
+            String columnName = table.schema().findColumnName(sortField.sourceId());
+            if (columnName != null) {
+                boolean isAscending = sortField.direction() != org.apache.iceberg.SortDirection.DESC;
+                boolean isNullFirst = sortField.nullOrder() == org.apache.iceberg.NullOrder.NULLS_FIRST;
+                SortFieldInfo sortFieldInfo = new SortFieldInfo(columnName, isAscending, isNullFirst);
+                sortItems.add(sortFieldInfo.toSql());
+            }
+        }
+        return "ORDER BY (" + String.join(", ", sortItems) + ")";
+    }
+
+    /**
+     * Check if table has sort order defined
+     * @return true if table has sort order
+     */
+    public boolean hasSortOrder() {
+        Table table = getIcebergTable();
+        org.apache.iceberg.SortOrder sortOrder = table.sortOrder();
+        return sortOrder != null && !sortOrder.isUnsorted();
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
index 76ee84db216..a82e59157ba 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
@@ -47,6 +47,7 @@ import org.apache.doris.nereids.trees.plans.commands.info.CreateOrReplaceTagInfo
 import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.DropBranchInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.DropTagInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.SortFieldInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.TagOptions;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -360,7 +361,17 @@ public class IcebergMetadataOps implements ExternalMetadataOps {
         properties.put(ExternalCatalog.DORIS_VERSION, ExternalCatalog.DORIS_VERSION_VALUE);
         PartitionSpec partitionSpec = IcebergUtils.solveIcebergPartitionSpec(createTableInfo.getPartitionDesc(),
                 schema);
-        catalog.createTable(getTableIdentifier(dbName, tableName), schema, partitionSpec, properties);
+        // Build and create table with optional sort order
+        org.apache.iceberg.SortOrder sortOrder = buildSortOrder(createTableInfo.getSortOrderFields(), schema);
+        if (sortOrder != null && !sortOrder.isUnsorted()) {
+            catalog.buildTable(getTableIdentifier(dbName, tableName), schema)
+                    .withPartitionSpec(partitionSpec)
+                    .withProperties(properties)
+                    .withSortOrder(sortOrder)
+                    .create();
+        } else {
+            catalog.createTable(getTableIdentifier(dbName, tableName), schema, partitionSpec, properties);
+        }
         return false;
     }
 
@@ -1193,4 +1204,32 @@ public class IcebergMetadataOps implements ExternalMetadataOps {
         ViewCatalog viewCatalog = (ViewCatalog) catalog;
         viewCatalog.dropView(getTableIdentifier(remoteDbName, remoteViewName));
     }
+
+    /**
+     * Build Iceberg SortOrder from SortFieldInfo list
+     */
+    private org.apache.iceberg.SortOrder buildSortOrder(List<SortFieldInfo> sortFields, Schema schema) {
+        if (sortFields == null || sortFields.isEmpty()) {
+            return null;
+        }
+
+        org.apache.iceberg.SortOrder.Builder builder = org.apache.iceberg.SortOrder.builderFor(schema);
+        for (SortFieldInfo sortField : sortFields) {
+            String columnName = sortField.getColumnName();
+            if (sortField.isAscending()) {
+                if (sortField.isNullFirst()) {
+                    builder.asc(columnName, org.apache.iceberg.NullOrder.NULLS_FIRST);
+                } else {
+                    builder.asc(columnName, org.apache.iceberg.NullOrder.NULLS_LAST);
+                }
+            } else {
+                if (sortField.isNullFirst()) {
+                    builder.desc(columnName, org.apache.iceberg.NullOrder.NULLS_FIRST);
+                } else {
+                    builder.desc(columnName, org.apache.iceberg.NullOrder.NULLS_LAST);
+                }
+            }
+        }
+        return builder.build();
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index ec8a55e6a6e..3c19a8bbd83 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -1002,6 +1002,7 @@ import org.apache.doris.nereids.trees.plans.commands.info.SetUserPropertyVarOp;
 import org.apache.doris.nereids.trees.plans.commands.info.SetVarOp;
 import org.apache.doris.nereids.trees.plans.commands.info.ShowCreateMTMVInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.SimpleColumnDefinition;
+import org.apache.doris.nereids.trees.plans.commands.info.SortFieldInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.StepPartition;
 import org.apache.doris.nereids.trees.plans.commands.info.TableNameInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.TableRefInfo;
@@ -3854,6 +3855,9 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
             partitionInfo = PartitionTableInfo.EMPTY;
         }
 
+        // parse sort items
+        List<SortFieldInfo> sortFields = parseSortItems(ctx.sortItems);
+
         if (ctx.columnDefs() != null) {
             if (ctx.query() != null) {
                 throw new AnalysisException("Should not define the entire column in CTAS");
@@ -3876,7 +3880,7 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
                     ctx.rollupDefs() != null ? visitRollupDefs(ctx.rollupDefs()) : ImmutableList.of(),
                     properties,
                     extProperties,
-                    ctx.clusterKeys != null ? visitIdentifierList(ctx.clusterKeys) : ImmutableList.of()));
+                    sortFields));
         } else if (ctx.query() != null) {
             return new CreateTableCommand(Optional.of(visitQuery(ctx.query())), new CreateTableInfo(
                     ctx.EXISTS() != null,
@@ -3895,7 +3899,7 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
                     ctx.rollupDefs() != null ? visitRollupDefs(ctx.rollupDefs()) : ImmutableList.of(),
                     properties,
                     extProperties,
-                    ctx.clusterKeys != null ? visitIdentifierList(ctx.clusterKeys) : ImmutableList.of()));
+                    sortFields));
         } else {
             throw new AnalysisException("Should contain at least one column in a table");
         }
@@ -9638,4 +9642,52 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
     public AlterTableOp visitDropBranchClause(DorisParser.DropBranchClauseContext ctx) {
         return new DropBranchOp(ctx.name.getText(), ctx.EXISTS() != null);
     }
+
+    /**
+     * Parse sort items from ANTLR context to SortFieldInfo list.
+     * Used for Iceberg table ORDER BY clause.
+     *
+     * @param sortItemContexts List of sortItem contexts from grammar
+     * @return List of SortFieldInfo containing column name, sort order, and null order
+     */
+    private List<SortFieldInfo> parseSortItems(List<DorisParser.SortItemContext> sortItemContexts) {
+        if (sortItemContexts == null || sortItemContexts.isEmpty()) {
+            return ImmutableList.of();
+        }
+
+        ImmutableList.Builder<SortFieldInfo> sortFields = ImmutableList.builder();
+        for (DorisParser.SortItemContext sortItemContext : sortItemContexts) {
+            Expression expression = typedVisit(sortItemContext.expression());
+
+            // Extract column name from expression
+            String columnName;
+            if (expression instanceof UnboundSlot) {
+                UnboundSlot slot = (UnboundSlot) expression;
+                // Get the last part of the nameParts as column name
+                columnName = slot.getNameParts().get(slot.getNameParts().size() - 1);
+            } else {
+                throw new AnalysisException("ORDER BY clause only supports column references, got: "
+                    + expression.getClass().getSimpleName());
+            }
+
+            // Determine sort order (default is ASC)
+            boolean isAscending = sortItemContext.DESC() == null;
+
+            // Determine null order
+            // Default: NULLS FIRST for ASC, NULLS LAST for DESC
+            boolean isNullFirst;
+            if (sortItemContext.FIRST() != null) {
+                isNullFirst = true;
+            } else if (sortItemContext.LAST() != null) {
+                isNullFirst = false;
+            } else {
+                // Use default behavior
+                isNullFirst = isAscending;
+            }
+
+            sortFields.add(new SortFieldInfo(columnName, isAscending, isNullFirst));
+        }
+
+        return sortFields.build();
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
index b21aacb5828..cd8259b3726 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
@@ -284,7 +284,7 @@ public class CreateMTMVInfo extends CreateTableInfo {
         this.setPartitionTableInfo(partitionDesc == null
                 ? PartitionTableInfo.EMPTY : partitionDesc.convertToPartitionTableInfo());
         this.setRollups(Lists.newArrayList());
-        this.setClusterKeysColumnNames(Lists.newArrayList());
+        this.setSortOrderFields(Lists.newArrayList());
         this.setIndexes(Lists.newArrayList());
 
         this.analyzeEngine();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
index 6943de00bb5..f6deabcb863 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
@@ -146,8 +146,7 @@ public class CreateTableInfo {
     private boolean isEnableSkipBitmapColumn = false;
     private boolean isExternal = false;
     private boolean isTemp = false;
-    private String clusterName = null;
-    private List<String> clusterKeysColumnNames = null;
+    private List<SortFieldInfo> sortOrderFields = null; // order by fields
     private PartitionTableInfo partitionTableInfo; // get when validate
     private DistributionDesc distributionDesc;
 
@@ -176,7 +175,7 @@ public class CreateTableInfo {
             List<RollupDefinition> rollups,
             Map<String, String> properties,
             Map<String, String> extProperties,
-            List<String> clusterKeyColumnNames) {
+            List<SortFieldInfo> sortOrderFields) {
         this.ifNotExists = ifNotExists;
         this.isExternal = isExternal;
         this.isTemp = isTemp;
@@ -197,7 +196,7 @@ public class CreateTableInfo {
         this.properties = properties;
         PropertyAnalyzer.getInstance().rewriteForceProperties(this.properties);
         this.extProperties = extProperties;
-        this.clusterKeysColumnNames = Utils.copyRequiredList(clusterKeyColumnNames);
+        this.sortOrderFields = Utils.copyRequiredList(sortOrderFields);
     }
 
     /**
@@ -220,7 +219,7 @@ public class CreateTableInfo {
             List<RollupDefinition> rollups,
             Map<String, String> properties,
             Map<String, String> extProperties,
-            List<String> clusterKeyColumnNames) {
+            List<SortFieldInfo> sortOrderFields) {
         this.ifNotExists = ifNotExists;
         this.isExternal = isExternal;
         this.isTemp = isTemp;
@@ -241,7 +240,7 @@ public class CreateTableInfo {
         this.properties = properties;
         PropertyAnalyzer.getInstance().rewriteForceProperties(this.properties);
         this.extProperties = extProperties;
-        this.clusterKeysColumnNames = Utils.copyRequiredList(clusterKeyColumnNames);
+        this.sortOrderFields = Utils.copyRequiredList(sortOrderFields);
     }
 
     /**
@@ -270,11 +269,11 @@ public class CreateTableInfo {
         if (ctasColumns != null) {
             return new CreateTableInfo(ifNotExists, isExternal, isTemp, ctlName, dbName, tableName, ctasColumns,
                     engineName, keysType, keys, comment, partitionTableInfo, distribution, rollups, properties,
-                    extProperties, clusterKeysColumnNames);
+                    extProperties, sortOrderFields);
         } else {
             return new CreateTableInfo(ifNotExists, isExternal, isTemp, ctlName, dbName, tableName, columns, indexes,
                     engineName, keysType, keys, comment, partitionTableInfo, distribution, rollups, properties,
-                    extProperties, clusterKeysColumnNames);
+                    extProperties, sortOrderFields);
         }
     }
 
@@ -286,8 +285,12 @@ public class CreateTableInfo {
         this.indexes = indexes;
     }
 
-    public void setClusterKeysColumnNames(List<String> clusterKeysColumnNames) {
-        this.clusterKeysColumnNames = clusterKeysColumnNames;
+    public void setSortOrderFields(List<SortFieldInfo> sortOrderFields) {
+        this.sortOrderFields = sortOrderFields;
+    }
+
+    public List<SortFieldInfo> getSortOrderFields() {
+        return sortOrderFields;
     }
 
     public void setRollups(List<RollupDefinition> rollups) {
@@ -599,10 +602,10 @@ public class CreateTableInfo {
             }
 
             try {
-                if (Config.random_add_cluster_keys_for_mow && isEnableMergeOnWrite && clusterKeysColumnNames.isEmpty()
+                if (Config.random_add_order_by_keys_for_mow && isEnableMergeOnWrite && sortOrderFields.isEmpty()
                         && PropertyAnalyzer.analyzeUseLightSchemaChange(new HashMap<>(properties))) {
-                    // exclude columns whose data type can not be cluster key, see {@link ColumnDefinition#validate}
-                    List<ColumnDefinition> clusterKeysCandidates = columns.stream().filter(c -> {
+                    // exclude columns whose data type can not be order key, see {@link ColumnDefinition#validate}
+                    List<ColumnDefinition> orderKeysCandidates = columns.stream().filter(c -> {
                         DataType type = c.getType();
                         return !(type.isFloatLikeType() || type.isStringType() || type.isArrayType()
                                 || type.isBitmapType() || type.isHllType() || type.isQuantileStateType()
@@ -611,16 +614,17 @@ public class CreateTableInfo {
                                 || type.isMapType()
                                 || type.isStructType());
                     }).collect(Collectors.toList());
-                    if (clusterKeysCandidates.size() > 0) {
-                        clusterKeysColumnNames = new ArrayList<>();
+                    if (orderKeysCandidates.size() > 0) {
+                        sortOrderFields = new ArrayList<>();
                         Random random = new Random();
-                        int randomClusterKeysCount = random.nextInt(clusterKeysCandidates.size()) + 1;
-                        Collections.shuffle(clusterKeysCandidates);
+                        int randomClusterKeysCount = random.nextInt(orderKeysCandidates.size()) + 1;
+                        Collections.shuffle(orderKeysCandidates);
                         for (int i = 0; i < randomClusterKeysCount; i++) {
-                            clusterKeysColumnNames.add(clusterKeysCandidates.get(i).getName());
+                            sortOrderFields.add(new SortFieldInfo(orderKeysCandidates.get(i).getName()));
                         }
-                        LOG.info("Randomly add cluster keys for table {}.{}: {}",
-                                dbName, tableName, clusterKeysColumnNames);
+                        LOG.info("Randomly add order keys for table {}.{}: {}",
+                                dbName, tableName, sortOrderFields.stream().map(SortFieldInfo::getColumnName)
+                                        .collect(Collectors.joining(",")));
                     }
                 }
             } catch (Exception e) {
@@ -628,10 +632,10 @@ public class CreateTableInfo {
             }
 
             validateKeyColumns();
-            if (!clusterKeysColumnNames.isEmpty()) {
+            if (!sortOrderFields.isEmpty()) {
                 if (!isEnableMergeOnWrite) {
                     throw new AnalysisException(
-                            "Cluster keys only support unique keys table which enabled "
+                            "Order keys only support unique keys table which enabled "
                                     + PropertyAnalyzer.ENABLE_UNIQUE_KEY_MERGE_ON_WRITE);
                 }
             }
@@ -783,6 +787,15 @@ public class CreateTableInfo {
                         + "and you can use 'bucket(num, column)' in 'PARTITIONED BY'.");
             }
 
+            // Validate Iceberg sort order columns
+            if (sortOrderFields != null && !sortOrderFields.isEmpty()) {
+                if (!engineName.equalsIgnoreCase(ENGINE_ICEBERG)) {
+                    throw new AnalysisException(
+                        "Only Iceberg catalog supports sort order, but current catalog is: " + engineName);
+                }
+                validateIcebergSortOrder(columnMap);
+            }
+
             for (ColumnDefinition columnDef : columns) {
                 if (!columnDef.isNullable()
                         && engineName.equalsIgnoreCase(ENGINE_HIVE)) {
@@ -808,9 +821,9 @@ public class CreateTableInfo {
         final boolean finalEnableMergeOnWrite = isEnableMergeOnWrite;
         Set<String> keysSet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
         keysSet.addAll(keys);
-        Set<String> clusterKeySet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
-        clusterKeySet.addAll(clusterKeysColumnNames);
-        columns.forEach(c -> c.validate(engineName.equals(ENGINE_OLAP), keysSet, clusterKeySet, finalEnableMergeOnWrite,
+        Set<String> orderKeySet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
+        orderKeySet.addAll(sortOrderFields.stream().map(SortFieldInfo::getColumnName).collect(Collectors.toSet()));
+        columns.forEach(c -> c.validate(engineName.equals(ENGINE_OLAP), keysSet, orderKeySet, finalEnableMergeOnWrite,
                 keysType));
 
         // validate index
@@ -1028,42 +1041,48 @@ public class CreateTableInfo {
             }
         }
 
-        if (!clusterKeysColumnNames.isEmpty()) {
-            // the same code as KeysDesc#analyzeClusterKeys
+        if (!sortOrderFields.isEmpty()) {
+            // the same code as KeysDesc#analyzeOrderKeys
             if (keysType != KeysType.UNIQUE_KEYS) {
-                throw new AnalysisException("Cluster keys only support unique keys table");
+                throw new AnalysisException("Order keys only support unique keys table");
             }
-            // check that cluster keys is not duplicated
-            for (int i = 0; i < clusterKeysColumnNames.size(); i++) {
-                String name = clusterKeysColumnNames.get(i);
+            // check that order keys is not duplicated
+            for (int i = 0; i < sortOrderFields.size(); i++) {
+                String name = sortOrderFields.get(i).getColumnName();
+                if (!sortOrderFields.get(i).isAscending()) {
+                    throw new AnalysisException("Order keys only support ASC in OLAP table.");
+                }
+                if (!sortOrderFields.get(i).isNullFirst()) {
+                    throw new AnalysisException("Order keys only support NULLS FIRST in OLAP table.");
+                }
                 for (int j = 0; j < i; j++) {
-                    if (clusterKeysColumnNames.get(j).equalsIgnoreCase(name)) {
-                        throw new AnalysisException("Duplicate cluster key column[" + name + "].");
+                    if (sortOrderFields.get(j).getColumnName().equalsIgnoreCase(name)) {
+                        throw new AnalysisException("Duplicate order key column[" + name + "].");
                     }
                 }
             }
-            // check that cluster keys is not equal to primary keys
-            int minKeySize = Math.min(keys.size(), clusterKeysColumnNames.size());
+            // check that order keys is not equal to primary keys
+            int minKeySize = Math.min(keys.size(), sortOrderFields.size());
             boolean sameKey = true;
             for (int i = 0; i < minKeySize; ++i) {
-                if (!keys.get(i).equalsIgnoreCase(clusterKeysColumnNames.get(i))) {
+                if (!keys.get(i).equalsIgnoreCase(sortOrderFields.get(i).getColumnName())) {
                     sameKey = false;
                     break;
                 }
             }
-            if (sameKey && !Config.random_add_cluster_keys_for_mow) {
-                throw new AnalysisException("Unique keys and cluster keys should be different.");
+            if (sameKey && !Config.random_add_order_by_keys_for_mow) {
+                throw new AnalysisException("Unique keys and order keys should be different.");
             }
-            // check that cluster key column exists
-            for (int i = 0; i < clusterKeysColumnNames.size(); ++i) {
-                String name = clusterKeysColumnNames.get(i);
+            // check that order key column exists
+            for (int i = 0; i < sortOrderFields.size(); ++i) {
+                String name = sortOrderFields.get(i).getColumnName();
                 for (int j = 0; j < columns.size(); j++) {
                     if (columns.get(j).getName().equalsIgnoreCase(name)) {
                         columns.get(j).setClusterKeyId(i);
                         break;
                     }
                     if (j == columns.size() - 1) {
-                        throw new AnalysisException("Cluster key column[" + name + "] doesn't exist.");
+                        throw new AnalysisException("Order key column[" + name + "] doesn't exist.");
                     }
                 }
             }
@@ -1365,7 +1384,8 @@ public class CreateTableInfo {
     }
 
     public KeysDesc getKeysDesc() {
-        return new KeysDesc(keysType, keys, clusterKeysColumnNames);
+        return new KeysDesc(keysType, keys,
+                sortOrderFields.stream().map(SortFieldInfo::getColumnName).collect(Collectors.toList()));
     }
 
     // 1. if the column is variant type, check it's field pattern is valid
@@ -1545,4 +1565,39 @@ public class CreateTableInfo {
 
         return sb.toString();
     }
+
+    /**
+     * Validate sort order for Iceberg table
+     */
+    private void validateIcebergSortOrder(Map<String, ColumnDefinition> columnMap) {
+        if (sortOrderFields == null || sortOrderFields.isEmpty()) {
+            return;
+        }
+
+        // Check if sort order columns exist
+        for (SortFieldInfo sortField : sortOrderFields) {
+            String sortCol = sortField.getColumnName();
+            if (!columnMap.containsKey(sortCol)) {
+                throw new AnalysisException("Sort order column '" + sortCol + "' does not exist in table");
+            }
+
+            ColumnDefinition col = columnMap.get(sortCol);
+            DataType type = col.getType();
+
+            // Check if data type supports sorting
+            if (type.isOnlyMetricType()) {
+                throw new AnalysisException("Sort order column '" + sortCol
+                        + "' has unsupported type: " + type);
+            }
+        }
+
+        // Check for duplicate sort order columns
+        Set<String> sortColSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+        for (SortFieldInfo sortField : sortOrderFields) {
+            String sortCol = sortField.getColumnName();
+            if (!sortColSet.add(sortCol)) {
+                throw new AnalysisException("Duplicate sort order column: " + sortCol);
+            }
+        }
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/SortFieldInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/SortFieldInfo.java
new file mode 100644
index 00000000000..79d6340f5c6
--- /dev/null
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/SortFieldInfo.java
@@ -0,0 +1,67 @@
+// 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.doris.nereids.trees.plans.commands.info;
+
+/**
+ * Sort field information for CREATE TABLE ORDER BY clause
+ */
+public class SortFieldInfo {
+    private final String columnName;
+    private final boolean ascending;
+    private final boolean nullFirst;
+
+    public SortFieldInfo(String columnName) {
+        this.columnName = columnName;
+        this.ascending = true; // default to ascending
+        this.nullFirst = true; // default to nulls first
+    }
+
+    public SortFieldInfo(String columnName, boolean ascending, boolean nullFirst) {
+        this.columnName = columnName;
+        this.ascending = ascending;
+        this.nullFirst = nullFirst;
+    }
+
+    public String getColumnName() {
+        return columnName;
+    }
+
+    public boolean isAscending() {
+        return ascending;
+    }
+
+    public boolean isNullFirst() {
+        return nullFirst;
+    }
+
+    /**
+     * Convert to SQL format with backticks around column name
+     * @return SQL string like: `column_name` ASC NULLS FIRST
+     */
+    public String toSql() {
+        StringBuilder sql = new StringBuilder("`").append(columnName).append("`");
+        sql.append(ascending ? " ASC" : " DESC");
+        sql.append(" NULLS ").append(nullFirst ? "FIRST" : "LAST");
+        return sql.toString();
+    }
+
+    @Override
+    public String toString() {
+        return toSql();
+    }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergTableSink.java b/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergTableSink.java
index c536844c649..edc68c1636a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergTableSink.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergTableSink.java
@@ -89,6 +89,12 @@ public class IcebergTableSink extends BaseExternalTableDataSink {
         if (explainLevel == TExplainLevel.BRIEF) {
             return strBuilder.toString();
         }
+        Table icebergTable = targetTable.getIcebergTable();
+        strBuilder.append(prefix).append("Table: ").append(icebergTable.name()).append("\n");
+        if (icebergTable.sortOrder().isSorted()) {
+            strBuilder.append(prefix).append(targetTable.getSortOrderSql()).append("\n");
+        }
+
         // TODO: explain partitions
         return strBuilder.toString();
     }
diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
index badb7fefd87..e5dcfd3a05d 100644
--- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
+++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
@@ -1127,18 +1127,18 @@ class Config {
 
     boolean isClusterKeyEnabled() {
         try {
-            def result = JdbcUtils.executeToMapArray(getRootConnection(), "SHOW FRONTEND CONFIG LIKE 'random_add_cluster_keys_for_mow'")
-            log.info("show random_add_cluster_keys_for_mow config: ${result}".toString())
+            def result = JdbcUtils.executeToMapArray(getRootConnection(), "SHOW FRONTEND CONFIG LIKE 'random_add_order_by_keys_for_mow'")
+            log.info("show random_add_order_by_keys_for_mow config: ${result}".toString())
             return result[0].Value.toString().equalsIgnoreCase("true")
         } catch (Throwable t) {
-            log.warn("Fetch server config 'random_add_cluster_keys_for_mow' failed, jdbcUrl: ${jdbcUrl}".toString(), t)
+            log.warn("Fetch server config 'random_add_order_by_keys_for_mow' failed, jdbcUrl: ${jdbcUrl}".toString(), t)
             return false
         }
     }
 
     void excludeUnsupportedCase() {
         boolean isCKEnabled = isClusterKeyEnabled()
-        log.info("random_add_cluster_keys_for_mow in fe.conf: ${isCKEnabled}".toString())
+        log.info("random_add_order_by_keys_for_mow in fe.conf: ${isCKEnabled}".toString())
         if (isCKEnabled) {
             excludeDirectorySet.add("unique_with_mow_p0/partial_update")
             excludeDirectorySet.add("unique_with_mow_p0/flexible")
diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
index 2af0aef9710..7ff5ce0eb37 100644
--- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
+++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
@@ -2103,7 +2103,7 @@ class Suite implements GroovyInterceptable {
     }
 
     boolean isClusterKeyEnabled() {
-        return getFeConfig("random_add_cluster_keys_for_mow").equals("true")
+        return getFeConfig("random_add_order_by_keys_for_mow").equals("true")
     }
 
     boolean enableStoragevault() {
diff --git a/regression-test/suites/compaction/test_compaction_uniq_keys_ck.groovy b/regression-test/suites/compaction/test_compaction_uniq_keys_ck.groovy
index 1b401b3c789..807da7d067f 100644
--- a/regression-test/suites/compaction/test_compaction_uniq_keys_ck.groovy
+++ b/regression-test/suites/compaction/test_compaction_uniq_keys_ck.groovy
@@ -62,7 +62,7 @@ suite("test_compaction_uniq_keys_ck") {
                 `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
                 `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
             UNIQUE KEY(`user_id`, `date`, `datev2`, `datetimev2_1`, `datetimev2_2`, `city`, `age`, `sex`)
-            CLUSTER BY(`last_visit_date_not_null`, `age`, `sex`, `city`)
+            ORDER BY(`last_visit_date_not_null`, `age`, `sex`, `city`)
             DISTRIBUTED BY HASH(`user_id`)
             PROPERTIES (
                 "replication_num" = "1",
diff --git a/regression-test/suites/compaction/test_compaction_uniq_keys_row_store_ck.groovy b/regression-test/suites/compaction/test_compaction_uniq_keys_row_store_ck.groovy
index 19a6d467d84..ddf48cde253 100644
--- a/regression-test/suites/compaction/test_compaction_uniq_keys_row_store_ck.groovy
+++ b/regression-test/suites/compaction/test_compaction_uniq_keys_row_store_ck.groovy
@@ -139,7 +139,7 @@ suite("test_compaction_uniq_keys_row_store_ck", "p0") {
                 `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
                 `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
             UNIQUE KEY(`user_id`, `date`, `datev2`, `datetimev2_1`, `datetimev2_2`, `city`, `age`, `sex`)
-            CLUSTER BY(`last_visit_date`, `last_update_date`, `city`, `cost`)
+            ORDER BY(`last_visit_date`, `last_update_date`, `city`, `cost`)
             DISTRIBUTED BY HASH(`user_id`)
             PROPERTIES ( "replication_num" = "1",
                     "enable_unique_key_merge_on_write" = "true",
diff --git a/regression-test/suites/compaction/test_compaction_uniq_keys_with_delete_ck.groovy b/regression-test/suites/compaction/test_compaction_uniq_keys_with_delete_ck.groovy
index 6a61c84a1f6..b2092542ce6 100644
--- a/regression-test/suites/compaction/test_compaction_uniq_keys_with_delete_ck.groovy
+++ b/regression-test/suites/compaction/test_compaction_uniq_keys_with_delete_ck.groovy
@@ -62,7 +62,7 @@ suite("test_compaction_uniq_keys_with_delete_ck") {
                 `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
                 `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
             UNIQUE KEY(`user_id`, `date`, `datev2`, `datetimev2_1`, `datetimev2_2`, `city`, `age`, `sex`)
-            CLUSTER BY(`sex`, `date`, `cost`)
+            ORDER BY(`sex`, `date`, `cost`)
             DISTRIBUTED BY HASH(`user_id`)
             PROPERTIES (
                 "replication_num" = "1",
diff --git a/regression-test/suites/compaction/test_full_compaction_ck.groovy b/regression-test/suites/compaction/test_full_compaction_ck.groovy
index fd4d799f8ee..1c510f04982 100644
--- a/regression-test/suites/compaction/test_full_compaction_ck.groovy
+++ b/regression-test/suites/compaction/test_full_compaction_ck.groovy
@@ -47,7 +47,7 @@ suite("test_full_compaction_ck") {
             CREATE TABLE ${tableName} (
             `user_id` INT NOT NULL, `value` INT NOT NULL)
             UNIQUE KEY(`user_id`)
-            CLUSTER BY(`value`)
+            ORDER BY(`value`)
             DISTRIBUTED BY HASH(`user_id`)
             BUCKETS 1
             PROPERTIES ("replication_allocation" = "tag.location.default: 1",
diff --git a/regression-test/suites/compaction/test_vertical_compaction_uniq_keys_ck.groovy b/regression-test/suites/compaction/test_vertical_compaction_uniq_keys_ck.groovy
index e7fad814e15..665cc9d47d8 100644
--- a/regression-test/suites/compaction/test_vertical_compaction_uniq_keys_ck.groovy
+++ b/regression-test/suites/compaction/test_vertical_compaction_uniq_keys_ck.groovy
@@ -61,7 +61,7 @@ suite("test_vertical_compaction_uniq_keys_ck") {
                 `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
                 `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
             UNIQUE KEY(`user_id`, `date`, `datev2`, `datetimev2_1`, `datetimev2_2`, `city`, `age`, `sex`)
-            CLUSTER BY(`age`, `sex`, `user_id`)
+            ORDER BY(`age`, `sex`, `user_id`)
             DISTRIBUTED BY HASH(`user_id`)
             PROPERTIES ( "replication_num" = "1", "enable_unique_key_merge_on_write"="true" );
         """
diff --git a/regression-test/suites/external_table_p0/iceberg/write/test_iceberg_create_table.groovy b/regression-test/suites/external_table_p0/iceberg/write/test_iceberg_create_table.groovy
index e7b2bb9bafc..f9a5fb63ec6 100644
--- a/regression-test/suites/external_table_p0/iceberg/write/test_iceberg_create_table.groovy
+++ b/regression-test/suites/external_table_p0/iceberg/write/test_iceberg_create_table.groovy
@@ -73,7 +73,33 @@ suite("test_iceberg_create_table", "p0,external,doris,external_docker,external_d
 
         sql """ create table ${db1}.${tb1} (id int) engine = iceberg """
         sql """ create table ${db1}.${tb2} (id int) """
+        sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb3 (id int) order by (id asc) """
+        sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb4 (id int) order by (id asc NULLS LAST)"""
+        sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb5 (id int) order by (id desc) """
+        sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb6 (id int) order by (id desc NULLS FIRST)"""
+        sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb7 (id int, id2 int) order by (id desc NULLS FIRST, id2 asc NULLS LAST)"""
+        test {
+            sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb8 (id int, id2 int) order by (id desc NULLS FIRST, id2 asc NULLS LAST, id3 asc) """
+            exception "does not exist in table"
+        }
+        test {
+            sql """ create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb9 (id int, id2 int) order by (id desc NULLS FIRST, id2 asc NULLS LAST, id desc) """
+            exception "Duplicate sort order column"
+        }
+        def result = sql """ show create table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb7 """;
+        logger.info(" result: " + result)
+        assertTrue(result[0][1].contains('ORDER BY (`id` DESC NULLS FIRST, `id2` ASC NULLS LAST)'))
+
+        explain {
+            sql """ insert into test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb7 values(1,1)""";
+            contains "ORDER BY (`id` DESC NULLS FIRST, `id2` ASC NULLS LAST)"
+        }
 
+        sql """ drop table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb3 """
+        sql """ drop table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb4 """
+        sql """ drop table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb5 """
+        sql """ drop table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb6 """
+        sql """ drop table test_iceberg_create_table_db1.test_iceberg_create_table_db1_tb7 """
         sql """ drop table ${db1}.${tb1} """
         sql """ drop table ${db1}.${tb2} """
         sql """ drop database ${db1} """
diff --git a/regression-test/suites/inverted_index_p0/array_contains/test_index_compaction_unique_keys_arr.groovy b/regression-test/suites/inverted_index_p0/array_contains/test_index_compaction_unique_keys_arr.groovy
index 875acba7574..6de254c699a 100644
--- a/regression-test/suites/inverted_index_p0/array_contains/test_index_compaction_unique_keys_arr.groovy
+++ b/regression-test/suites/inverted_index_p0/array_contains/test_index_compaction_unique_keys_arr.groovy
@@ -216,7 +216,7 @@ suite("test_index_compaction_unique_keys_arr", "array_contains_inverted_index, n
                 index index_score (score) using inverted
             ) ENGINE=OLAP
             UNIQUE KEY(`id`)
-            CLUSTER BY (`score`)
+            ORDER BY (`score`)
             COMMENT 'OLAP'
             DISTRIBUTED BY HASH(`id`) BUCKETS 1
             PROPERTIES (
diff --git a/regression-test/suites/nereids_p0/delete/delete_cte_ck.groovy b/regression-test/suites/nereids_p0/delete/delete_cte_ck.groovy
index 090b3fb1552..9ab4338a8bc 100644
--- a/regression-test/suites/nereids_p0/delete/delete_cte_ck.groovy
+++ b/regression-test/suites/nereids_p0/delete/delete_cte_ck.groovy
@@ -40,7 +40,7 @@ suite('nereids_delete_cte_ck') {
                     c3 double,
                     c4 date
                 ) unique key (id, id1)
-                CLUSTER BY (`id1`, `id`, `c4`)
+                ORDER BY (`id1`, `id`, `c4`)
                 distributed by hash(id, id1)
                 properties(
                     "replication_num"="1",
@@ -56,7 +56,7 @@ suite('nereids_delete_cte_ck') {
                     c3 double,
                     c4 date
                 ) unique key (id)
-                CLUSTER BY (`c4`, `c1`)
+                ORDER BY (`c4`, `c1`)
                 distributed by hash(id)
                 properties(
                     "replication_num"="1"
diff --git a/regression-test/suites/point_query_p0/load_ck.groovy b/regression-test/suites/point_query_p0/load_ck.groovy
index 716d012a516..bf3f4ecfa17 100644
--- a/regression-test/suites/point_query_p0/load_ck.groovy
+++ b/regression-test/suites/point_query_p0/load_ck.groovy
@@ -117,7 +117,7 @@ suite("test_load_and_schema_change_row_store_ck", "p0") {
             `c_string` text NULL
         ) ENGINE=OLAP
         UNIQUE KEY(`k1`)
-        CLUSTER BY(c_datev2, c_date, c_largeint, c_tinyint, c_varchar, c_char, c_datetimev2, c_int, c_decimalv3, k1, c_decimal)
+        ORDER BY(c_datev2, c_date, c_largeint, c_tinyint, c_varchar, c_char, c_datetimev2, c_int, c_decimalv3, k1, c_decimal)
         COMMENT 'OLAP'
         DISTRIBUTED BY HASH(`k1`) BUCKETS 10
         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true");
diff --git a/regression-test/suites/point_query_p0/test_point_query_ck.groovy b/regression-test/suites/point_query_p0/test_point_query_ck.groovy
index 2d4f5299c81..3f15d8b2585 100644
--- a/regression-test/suites/point_query_p0/test_point_query_ck.groovy
+++ b/regression-test/suites/point_query_p0/test_point_query_ck.groovy
@@ -105,7 +105,7 @@ suite("test_point_query_ck") {
                     `k12` array<text> NULL COMMENT ""
                   ) ENGINE=OLAP
                   UNIQUE KEY(`k1`, `k2`, `k3`)
-                  CLUSTER BY(`k9`, `k5`, `k4`, `k2`)
+                  ORDER BY(`k9`, `k5`, `k4`, `k2`)
                   DISTRIBUTED BY HASH(`k1`, k2, k3) BUCKETS 1
                   PROPERTIES (
                   "replication_allocation" = "tag.location.default: 1",
@@ -246,7 +246,7 @@ suite("test_point_query_ck") {
                         `customer_btm_value_2` text NULL
                     ) ENGINE=OLAP
                     UNIQUE KEY(`customer_key`)
-                    CLUSTER BY(`customer_btm_value_1`)
+                    ORDER BY(`customer_btm_value_1`)
                     COMMENT 'OLAP'
                     DISTRIBUTED BY HASH(`customer_key`) BUCKETS 16
                     PROPERTIES (
@@ -270,7 +270,7 @@ suite("test_point_query_ck") {
               `A_INTIME` DATETIME NULL
             ) ENGINE=OLAP
             UNIQUE KEY(`RPTNO`)
-            CLUSTER BY(`A_ENTTYP`, `A_INTIME`)
+            ORDER BY(`A_ENTTYP`, `A_INTIME`)
             DISTRIBUTED BY HASH(`RPTNO`) BUCKETS 3
             PROPERTIES (
             "replication_allocation" = "tag.location.default: 1",
diff --git a/regression-test/suites/point_query_p0/test_point_query_partition_ck.groovy b/regression-test/suites/point_query_p0/test_point_query_partition_ck.groovy
index 658a0ecfb71..c29bbbd3f4b 100644
--- a/regression-test/suites/point_query_p0/test_point_query_partition_ck.groovy
+++ b/regression-test/suites/point_query_p0/test_point_query_partition_ck.groovy
@@ -60,7 +60,7 @@ suite("test_point_query_partition_ck") {
                 `value` varchar(100) NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`value`)
+              ORDER BY(`value`)
               PARTITION BY RANGE(`k1`)
               (
                   PARTITION `p1` VALUES LESS THAN ("1"),
@@ -132,7 +132,7 @@ suite("test_point_query_partition_ck") {
           `customer_value_10` TEXT NULL
         ) ENGINE=OLAP
         UNIQUE KEY(`customer_key`)
-        CLUSTER BY(`customer_value_2`, `customer_value_1`)
+        ORDER BY(`customer_value_2`, `customer_value_1`)
         COMMENT 'OLAP'
         DISTRIBUTED BY HASH(`customer_key`) BUCKETS 10
         PROPERTIES (
diff --git a/regression-test/suites/point_query_p0/test_rowstore_ck.groovy b/regression-test/suites/point_query_p0/test_rowstore_ck.groovy
index 98b77c3c4e3..44a6be1cff3 100644
--- a/regression-test/suites/point_query_p0/test_rowstore_ck.groovy
+++ b/regression-test/suites/point_query_p0/test_rowstore_ck.groovy
@@ -43,7 +43,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                 `v4` datetime NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`v2`)
+              ORDER BY(`v2`)
               DISTRIBUTED BY HASH(`k1`) BUCKETS 1
               PROPERTIES (
               "replication_allocation" = "tag.location.default: 1",
@@ -71,7 +71,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                 `v4` datetime NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`v4`, `v2`)
+              ORDER BY(`v4`, `v2`)
               DISTRIBUTED BY HASH(`k1`) BUCKETS 1
               PROPERTIES (
               "replication_allocation" = "tag.location.default: 1",
@@ -99,7 +99,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                 `v4` datetime NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`v2`, `v4`)
+              ORDER BY(`v2`, `v4`)
               DISTRIBUTED BY HASH(`k1`) BUCKETS 1
               PROPERTIES (
               "replication_allocation" = "tag.location.default: 1",
@@ -126,7 +126,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                 `v4` datetime NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`v2`, `k1`)
+              ORDER BY(`v2`, `k1`)
               DISTRIBUTED BY HASH(`k1`) BUCKETS 1
               PROPERTIES (
               "replication_allocation" = "tag.location.default: 1",
@@ -164,7 +164,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                 `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
                 `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
             UNIQUE KEY(`user_id`, `date`, `datev2`, `datetimev2_1`, `datetimev2_2`, `city`, `age`, `sex`)
-            CLUSTER BY(`max_dwell_time`) 
+            ORDER BY(`max_dwell_time`) 
             DISTRIBUTED BY HASH(`user_id`)
             PROPERTIES ( "replication_num" = "1",
                     "enable_unique_key_merge_on_write" = "true",
@@ -278,7 +278,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                  `v4` datetime NULL COMMENT ""
                ) ENGINE=OLAP
                UNIQUE KEY(`k1`)
-               CLUSTER BY(`v4`, `k1`, `v2`)
+               ORDER BY(`v4`, `k1`, `v2`)
                DISTRIBUTED BY HASH(`k1`) BUCKETS 1
                PROPERTIES (
                "replication_allocation" = "tag.location.default: 1",
@@ -299,7 +299,7 @@ suite("test_rowstore_ck", "p0,nonConcurrent") {
                 `v2` DECIMALv3(50, 18) NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`v2`)
+              ORDER BY(`v2`)
               DISTRIBUTED BY HASH(`k1`) BUCKETS 1
               PROPERTIES (
               "replication_allocation" = "tag.location.default: 1",
diff --git a/regression-test/suites/point_query_p0/test_rowstore_query_ck.groovy b/regression-test/suites/point_query_p0/test_rowstore_query_ck.groovy
index 896264f0065..0c79821cf3c 100644
--- a/regression-test/suites/point_query_p0/test_rowstore_query_ck.groovy
+++ b/regression-test/suites/point_query_p0/test_rowstore_query_ck.groovy
@@ -26,7 +26,7 @@ suite("test_rowstore_ck", "p0") {
                 `v2` DECIMAL(50, 18) NULL COMMENT ""
               ) ENGINE=OLAP
               UNIQUE KEY(`k1`)
-              CLUSTER BY(`v2`)
+              ORDER BY(`v2`)
               DISTRIBUTED BY HASH(`k1`) BUCKETS 1
               PROPERTIES (
               "replication_allocation" = "tag.location.default: 1",
diff --git a/regression-test/suites/schema_change_p0/unique_ck/test_schema_change_unique.groovy b/regression-test/suites/schema_change_p0/unique_ck/test_schema_change_unique.groovy
index c82a0f616a0..36e71bbaa09 100644
--- a/regression-test/suites/schema_change_p0/unique_ck/test_schema_change_unique.groovy
+++ b/regression-test/suites/schema_change_p0/unique_ck/test_schema_change_unique.groovy
@@ -102,7 +102,7 @@ suite("test_schema_change_unique", "p0") {
       `k13` datetime NULL
     ) ENGINE=OLAP
     unique KEY(k1, k2, k3)
-    CLUSTER BY (`k13`)
+    ORDER BY (`k13`)
     DISTRIBUTED BY HASH(`k1`) BUCKETS 1
     PROPERTIES (
         "replication_allocation" = "tag.location.default: 1"
diff --git a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_drop.groovy b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_drop.groovy
index f3b83dd2370..16db18fccd5 100644
--- a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_drop.groovy
+++ b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_drop.groovy
@@ -54,7 +54,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(SCORE, user_id)\n" +
+            "          ORDER BY(SCORE, user_id)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -99,7 +99,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(t_bigint, username, age)\n" +
+            "          ORDER BY(t_bigint, username, age)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -151,7 +151,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(t_bigint, USER_ID, username, age)\n" +
+            "          ORDER BY(t_bigint, USER_ID, username, age)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -203,7 +203,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(t_datev2, USER_ID, CITY)\n" +
+            "          ORDER BY(t_datev2, USER_ID, CITY)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -255,7 +255,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(t_datetimev2, USER_ID, t_datev2, CITY, age)\n" +
+            "          ORDER BY(t_datetimev2, USER_ID, t_datev2, CITY, age)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -307,7 +307,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(t_datetimev2, sex, t_datev2, age, city)\n" +
+            "          ORDER BY(t_datetimev2, sex, t_datev2, age, city)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -359,7 +359,7 @@ suite("test_unique_schema_value_drop", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`)\n" +
-            "          CLUSTER BY(score, t_date, sex, t_datev2, age)\n" +
+            "          ORDER BY(score, t_date, sex, t_datev2, age)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
diff --git a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify.groovy b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify.groovy
index 3d1b5b8d59b..ca45bc744c5 100644
--- a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify.groovy
+++ b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify.groovy
@@ -43,7 +43,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(age, user_id)\n" +
+             "          ORDER BY(age, user_id)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -219,7 +219,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(phone, age, user_id)\n" +
+             "          ORDER BY(phone, age, user_id)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -274,7 +274,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(sex, user_id, phone)\n" +
+             "          ORDER BY(sex, user_id, phone)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -416,7 +416,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(age, sex, phone)\n" +
+             "          ORDER BY(age, sex, phone)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -579,7 +579,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(address, register_time)\n" +
+             "          ORDER BY(address, register_time)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -755,7 +755,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(age, phone, user_id)\n" +
+             "          ORDER BY(age, phone, user_id)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -935,7 +935,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(sex, age, user_id)\n" +
+             "          ORDER BY(sex, age, user_id)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -1122,7 +1122,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(age, user_id, sex)\n" +
+             "          ORDER BY(age, user_id, sex)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -1397,7 +1397,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(sex, age, user_id)\n" +
+             "          ORDER BY(sex, age, user_id)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -1671,7 +1671,7 @@ suite("test_unique_schema_value_modify","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(phone, user_id, username)\n" +
+             "          ORDER BY(phone, user_id, username)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
diff --git a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify1.groovy b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify1.groovy
index f698d8df89e..20f2b9a4ae4 100644
--- a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify1.groovy
+++ b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify1.groovy
@@ -34,7 +34,7 @@ suite("test_unique_schema_value_modify1","p0") {
              "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(phone, user_id, username)\n" +
+             "          ORDER BY(phone, user_id, username)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -78,7 +78,7 @@ suite("test_unique_schema_value_modify1","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(age, user_id, address)\n" +
+             "          ORDER BY(age, user_id, address)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -331,7 +331,7 @@ suite("test_unique_schema_value_modify1","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(address, age, sex)\n" +
+             "          ORDER BY(address, age, sex)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -585,7 +585,7 @@ suite("test_unique_schema_value_modify1","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(address, city, username)\n" +
+             "          ORDER BY(address, city, username)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -837,7 +837,7 @@ suite("test_unique_schema_value_modify1","p0") {
              "              `j` JSON NULL COMMENT \"\"\n" +
              "          )\n" +
              "          UNIQUE KEY(`user_id`, `username`)\n" +
-             "          CLUSTER BY(phone, address, username)\n" +
+             "          ORDER BY(phone, address, username)\n" +
              "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
              "          PROPERTIES (\n" +
              "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
diff --git a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify2.groovy b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify2.groovy
index 9e03362d9a2..a3d91003b43 100644
--- a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify2.groovy
+++ b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify2.groovy
@@ -36,7 +36,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(address, age, sex)\n" +
+            "          ORDER BY(address, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -78,7 +78,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(address, user_id, sex, age)\n" +
+            "          ORDER BY(address, user_id, sex, age)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -291,7 +291,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(age, city, sex)\n" +
+            "          ORDER BY(age, city, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -340,7 +340,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(register_time, age, user_id, sex)\n" +
+            "          ORDER BY(register_time, age, user_id, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -413,7 +413,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(username, age, sex)\n" +
+            "          ORDER BY(username, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -641,7 +641,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(score, age, sex)\n" +
+            "          ORDER BY(score, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -713,7 +713,7 @@ suite("test_unique_schema_value_modify2", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(score, user_id, address, age, sex)\n" +
+            "          ORDER BY(score, user_id, address, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
diff --git a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify3.groovy b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify3.groovy
index 6e1c9756706..beaa5b30475 100644
--- a/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify3.groovy
+++ b/regression-test/suites/schema_change_p0/unique_ck/test_unique_schema_value_modify3.groovy
@@ -34,7 +34,7 @@ suite("test_unique_schema_value_modify3", "p0") {
             "              `register_time` DATETIME COMMENT \"用户注册时间\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(user_id, address, age, sex)\n" +
+            "          ORDER BY(user_id, address, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -76,7 +76,7 @@ suite("test_unique_schema_value_modify3", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(score, age, sex)\n" +
+            "          ORDER BY(score, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
@@ -322,7 +322,7 @@ suite("test_unique_schema_value_modify3", "p0") {
             "              `j` JSON NULL COMMENT \"\"\n" +
             "          )\n" +
             "          UNIQUE KEY(`user_id`, `username`)\n" +
-            "          CLUSTER BY(score, user_id, age, sex)\n" +
+            "          ORDER BY(score, user_id, age, sex)\n" +
             "          DISTRIBUTED BY HASH(`user_id`) BUCKETS 1\n" +
             "          PROPERTIES (\n" +
             "          \"replication_allocation\" = \"tag.location.default: 1\",\n" +
diff --git a/regression-test/suites/segcompaction_p2/test_segcompaction_unique_keys_mow_ck.groovy b/regression-test/suites/segcompaction_p2/test_segcompaction_unique_keys_mow_ck.groovy
index 6fa8f6bbcb4..e38062aaaa6 100644
--- a/regression-test/suites/segcompaction_p2/test_segcompaction_unique_keys_mow_ck.groovy
+++ b/regression-test/suites/segcompaction_p2/test_segcompaction_unique_keys_mow_ck.groovy
@@ -43,7 +43,7 @@ suite("test_segcompaction_unique_keys_mow_ck") {
                 `col_40` VARCHAR(20),`col_41` VARCHAR(20),`col_42` VARCHAR(20),`col_43` VARCHAR(20),`col_44` VARCHAR(20),
                 `col_45` VARCHAR(20),`col_46` VARCHAR(20),`col_47` VARCHAR(20),`col_48` VARCHAR(20),`col_49` VARCHAR(20)
                 )
-            UNIQUE KEY(`col_0`) cluster by(`col_1`) DISTRIBUTED BY HASH(`col_0`) BUCKETS 1
+            UNIQUE KEY(`col_0`) ORDER BY(`col_1`) DISTRIBUTED BY HASH(`col_0`) BUCKETS 1
             PROPERTIES (
                 """ + (i == 1 ? "\"function_column.sequence_col\"='col_0', " : "") +
                 """
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/call_center.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/call_center.sql
index af77601ab6f..50134092290 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/call_center.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/call_center.sql
@@ -32,7 +32,7 @@ CREATE TABLE IF NOT EXISTS call_center (
     cc_tax_percentage decimal(5,2)
  )
 UNIQUE KEY(cc_call_center_sk, cc_call_center_id)
-CLUSTER BY(cc_division, cc_class)
+ORDER BY(cc_division, cc_class)
 DISTRIBUTED BY HASH(cc_call_center_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_page.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_page.sql
index fc7f294e5bf..b1b032041a2 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_page.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_page.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS catalog_page (
     cp_type varchar(100)
 )
 UNIQUE KEY(cp_catalog_page_sk, cp_catalog_page_id)
-CLUSTER BY(cp_department, cp_catalog_number, cp_type)
+ORDER BY(cp_department, cp_catalog_number, cp_type)
 DISTRIBUTED BY HASH(cp_catalog_page_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_returns.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_returns.sql
index cb5e44b289d..6834109342f 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_returns.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_returns.sql
@@ -28,7 +28,7 @@ CREATE TABLE IF NOT EXISTS catalog_returns (
     cr_net_loss decimal(7,2)
 )
 UNIQUE KEY(cr_item_sk, cr_order_number)
-CLUSTER BY(cr_returned_time_sk)
+ORDER BY(cr_returned_time_sk)
 DISTRIBUTED BY HASH(cr_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_sales.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_sales.sql
index 985700a6912..7e06bf9f349 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_sales.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/catalog_sales.sql
@@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS catalog_sales (
     cs_net_profit decimal(7,2)
 )
 UNIQUE KEY(cs_item_sk, cs_order_number)
-CLUSTER BY(cs_list_price, cs_call_center_sk, cs_item_sk)
+ORDER BY(cs_list_price, cs_call_center_sk, cs_item_sk)
 DISTRIBUTED BY HASH(cs_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer.sql
index df850c8e479..53030920db4 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer.sql
@@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS customer (
     c_last_review_date_sk bigint
 )
 UNIQUE KEY(c_customer_sk)
-CLUSTER BY(c_customer_id, c_customer_sk, c_salutation)
+ORDER BY(c_customer_id, c_customer_sk, c_salutation)
 DISTRIBUTED BY HASH(c_customer_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_address.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_address.sql
index abda3c18127..26e5a5ec0bc 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_address.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_address.sql
@@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS customer_address (
     ca_location_type char(20)
 )
 UNIQUE KEY(ca_address_sk)
-CLUSTER BY(ca_address_id, ca_address_sk, ca_street_number)
+ORDER BY(ca_address_id, ca_address_sk, ca_street_number)
 DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_demographics.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_demographics.sql
index 3b2bd531c11..e00e8b652ae 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_demographics.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/customer_demographics.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS customer_demographics (
     cd_dep_college_count integer
 )
 UNIQUE KEY(cd_demo_sk)
-CLUSTER BY(cd_dep_count)
+ORDER BY(cd_dep_count)
 DISTRIBUTED BY HASH(cd_demo_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/date_dim.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/date_dim.sql
index e69718faca1..1e4d2b5b7a6 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/date_dim.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/date_dim.sql
@@ -29,7 +29,7 @@ CREATE TABLE IF NOT EXISTS date_dim (
     d_current_year char(1)
 )
 UNIQUE KEY(d_date_sk)
-CLUSTER BY(d_date_id, d_date_sk, d_date)
+ORDER BY(d_date_id, d_date_sk, d_date)
 DISTRIBUTED BY HASH(d_date_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/household_demographics.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/household_demographics.sql
index 55af19a04b1..f51f0d18c65 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/household_demographics.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/household_demographics.sql
@@ -6,7 +6,7 @@ CREATE TABLE IF NOT EXISTS household_demographics (
     hd_vehicle_count integer
 )
 UNIQUE KEY(hd_demo_sk)
-CLUSTER BY(hd_dep_count, hd_demo_sk, hd_vehicle_count)
+ORDER BY(hd_dep_count, hd_demo_sk, hd_vehicle_count)
 DISTRIBUTED BY HASH(hd_demo_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/income_band.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/income_band.sql
index ea01cf0f6ab..c627df4ca0f 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/income_band.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/income_band.sql
@@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS income_band (
     ib_upper_bound integer
 )
 UNIQUE KEY(ib_income_band_sk)
-CLUSTER BY(ib_lower_bound, ib_upper_bound)
+ORDER BY(ib_lower_bound, ib_upper_bound)
 DISTRIBUTED BY HASH(ib_income_band_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/inventory.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/inventory.sql
index 035d73681df..e1691ecc93d 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/inventory.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/inventory.sql
@@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS inventory (
     inv_quantity_on_hand integer
 )
 UNIQUE KEY(inv_date_sk, inv_item_sk, inv_warehouse_sk)
-CLUSTER BY(inv_item_sk, inv_date_sk)
+ORDER BY(inv_item_sk, inv_date_sk)
 DISTRIBUTED BY HASH(inv_date_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/item.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/item.sql
index 7d16c1713f4..06f4d63e1d7 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/item.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/item.sql
@@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS item (
     i_product_name char(50)
 )
 UNIQUE KEY(i_item_sk)
-CLUSTER BY(i_item_id, i_item_sk, i_brand)
+ORDER BY(i_item_id, i_item_sk, i_brand)
 DISTRIBUTED BY HASH(i_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/promotion.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/promotion.sql
index 60dcb29751f..5b6abe8d64e 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/promotion.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/promotion.sql
@@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS promotion (
     p_discount_active char(1)
 )
 UNIQUE KEY(p_promo_sk)
-CLUSTER BY(p_promo_id, p_promo_name)
+ORDER BY(p_promo_id, p_promo_name)
 DISTRIBUTED BY HASH(p_promo_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/reason.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/reason.sql
index 5fc99d22b14..7ec2d2c6dda 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/reason.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/reason.sql
@@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS reason (
     r_reason_desc char(100)
  )
 UNIQUE KEY(r_reason_sk)
-CLUSTER BY(r_reason_id, r_reason_sk)
+ORDER BY(r_reason_id, r_reason_sk)
 DISTRIBUTED BY HASH(r_reason_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/ship_mode.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/ship_mode.sql
index 2b31cd51b08..54e2d245110 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/ship_mode.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/ship_mode.sql
@@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS ship_mode (
     sm_contract char(20)
 )
 UNIQUE KEY(sm_ship_mode_sk)
-CLUSTER BY(sm_ship_mode_id)
+ORDER BY(sm_ship_mode_id)
 DISTRIBUTED BY HASH(sm_ship_mode_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store.sql
index cbc3e7f4929..b35e14bb236 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store.sql
@@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS store (
     s_tax_percentage decimal(5,2)
 )
 UNIQUE KEY(s_store_sk)
-CLUSTER BY(s_company_id, s_store_id)
+ORDER BY(s_company_id, s_store_id)
 DISTRIBUTED BY HASH(s_store_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_returns.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_returns.sql
index e92fc695afa..4f188afe5bd 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_returns.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_returns.sql
@@ -21,7 +21,7 @@ CREATE TABLE IF NOT EXISTS store_returns (
     sr_net_loss decimal(7,2)
 )
 UNIQUE KEY(sr_item_sk, sr_ticket_number)
-CLUSTER BY(sr_net_loss)
+ORDER BY(sr_net_loss)
 DISTRIBUTED BY HASH(sr_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_sales.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_sales.sql
index 7b575604da5..d02913c2434 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_sales.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/store_sales.sql
@@ -24,7 +24,7 @@ CREATE TABLE IF NOT EXISTS store_sales (
     ss_net_profit decimal(7,2)
 )
 UNIQUE KEY(ss_item_sk, ss_ticket_number)
-CLUSTER BY(ss_net_profit)
+ORDER BY(ss_net_profit)
 DISTRIBUTED BY HASH(ss_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/time_dim.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/time_dim.sql
index 07399e60998..41514dc2281 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/time_dim.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/time_dim.sql
@@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS time_dim (
     t_meal_time char(20)
 )
 UNIQUE KEY(t_time_sk)
-CLUSTER BY(t_time_id)
+ORDER BY(t_time_id)
 DISTRIBUTED BY HASH(t_time_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/warehouse.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/warehouse.sql
index 41f7d2cbd30..0df02c4bbc5 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/warehouse.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/warehouse.sql
@@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS warehouse (
     w_gmt_offset decimal(5,2)
 )
 UNIQUE KEY(w_warehouse_sk)
-CLUSTER BY(w_warehouse_id)
+ORDER BY(w_warehouse_id)
 DISTRIBUTED BY HASH(w_warehouse_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_page.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_page.sql
index 74f64e5739c..302b47e2a7e 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_page.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_page.sql
@@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS web_page (
         wp_max_ad_count integer
 )
 UNIQUE KEY(wp_web_page_sk)
-CLUSTER BY(wp_web_page_id, wp_web_page_sk)
+ORDER BY(wp_web_page_id, wp_web_page_sk)
 DISTRIBUTED BY HASH(wp_web_page_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_returns.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_returns.sql
index 7e3a074eccd..a7fb972b0b1 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_returns.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_returns.sql
@@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS web_returns (
     wr_net_loss decimal(7,2)
 )
 UNIQUE KEY(wr_item_sk, wr_order_number)
-CLUSTER BY(wr_net_loss)
+ORDER BY(wr_net_loss)
 DISTRIBUTED BY HASH(wr_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_sales.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_sales.sql
index 3a81958ec8c..3b11b8300bd 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_sales.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_sales.sql
@@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS web_sales (
     ws_net_profit decimal(7,2)
 )
 UNIQUE KEY(ws_item_sk, ws_order_number)
-CLUSTER BY(ws_net_profit, ws_quantity)
+ORDER BY(ws_net_profit, ws_quantity)
 DISTRIBUTED BY HASH(ws_item_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_site.sql b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_site.sql
index b4b3e3a00c8..6f82fc1619a 100644
--- a/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_site.sql
+++ b/regression-test/suites/tpcds_sf1_unique_ck_p1/ddl/web_site.sql
@@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS web_site (
     web_tax_percentage decimal(5,2)
 )
 UNIQUE KEY(web_site_sk)
-CLUSTER BY(web_company_id, web_site_id)
+ORDER BY(web_company_id, web_site_id)
 DISTRIBUTED BY HASH(web_site_sk) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/customer.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/customer.sql
index 9b505880859..e5caf724024 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/customer.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/customer.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS customer (
   C_COMMENT     VARCHAR(117) NOT NULL
 )
 UNIQUE KEY(C_CUSTKEY)
-CLUSTER BY(C_PHONE, C_ADDRESS)
+ORDER BY(C_PHONE, C_ADDRESS)
 DISTRIBUTED BY HASH(C_CUSTKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/lineitem.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/lineitem.sql
index 642f6fc69ee..0e13f897200 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/lineitem.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/lineitem.sql
@@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS lineitem (
   L_COMMENT      VARCHAR(44) NOT NULL
 )
 UNIQUE KEY(L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER)
-CLUSTER BY(L_SHIPDATE, L_ORDERKEY)
+ORDER BY(L_SHIPDATE, L_ORDERKEY)
 DISTRIBUTED BY HASH(L_ORDERKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/nation.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/nation.sql
index aff592a98c3..6441d04f615 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/nation.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/nation.sql
@@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS nation  (
   N_COMMENT    VARCHAR(152)
 )
 UNIQUE KEY(N_NATIONKEY)
-CLUSTER BY(N_REGIONKEY, N_NAME)
+ORDER BY(N_REGIONKEY, N_NAME)
 DISTRIBUTED BY HASH(N_NATIONKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/orders.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/orders.sql
index 7ad070f9ee2..e2f14c337dd 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/orders.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/orders.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS orders  (
   O_COMMENT        VARCHAR(79) NOT NULL
 )
 UNIQUE KEY(O_ORDERKEY)
-CLUSTER BY(O_COMMENT, O_CLERK)
+ORDER BY(O_COMMENT, O_CLERK)
 DISTRIBUTED BY HASH(O_ORDERKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/part.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/part.sql
index 80774960bb1..5dd54e80c0b 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/part.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/part.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS part (
   P_COMMENT     VARCHAR(23) NOT NULL 
 )
 UNIQUE KEY(P_PARTKEY)
-CLUSTER BY(P_BRAND, P_SIZE, P_PARTKEY)
+ORDER BY(P_BRAND, P_SIZE, P_PARTKEY)
 DISTRIBUTED BY HASH(P_PARTKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/partsupp.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/partsupp.sql
index 609bcfb10b9..c390b680e8a 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/partsupp.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/partsupp.sql
@@ -6,7 +6,7 @@ CREATE TABLE IF NOT EXISTS partsupp (
   PS_COMMENT     VARCHAR(199) NOT NULL 
 )
 UNIQUE KEY(PS_PARTKEY, PS_SUPPKEY)
-CLUSTER BY(PS_AVAILQTY, PS_PARTKEY, PS_SUPPKEY)
+ORDER BY(PS_AVAILQTY, PS_PARTKEY, PS_SUPPKEY)
 DISTRIBUTED BY HASH(PS_PARTKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/region.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/region.sql
index 3d900f420c1..a560e8d37eb 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/region.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/region.sql
@@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS region (
   R_COMMENT    VARCHAR(152)
 )
 UNIQUE KEY(R_REGIONKEY)
-CLUSTER BY(R_NAME, R_COMMENT)
+ORDER BY(R_NAME, R_COMMENT)
 DISTRIBUTED BY HASH(R_REGIONKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/supplier.sql b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/supplier.sql
index 6dd259f673f..78249e174b9 100644
--- a/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/supplier.sql
+++ b/regression-test/suites/tpch_sf0.1_unique_ck_p1/ddl/supplier.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS supplier (
   S_COMMENT     VARCHAR(101) NOT NULL
 )
 UNIQUE KEY(S_SUPPKEY)
-CLUSTER BY(S_NATIONKEY, S_NAME)
+ORDER BY(S_NATIONKEY, S_NAME)
 DISTRIBUTED BY HASH(S_SUPPKEY) BUCKETS 1
 PROPERTIES (
   "replication_num" = "1"
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_mix_partial_update.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_mix_partial_update.groovy
index 4a6d587d3f7..5aafb0a13ed 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_mix_partial_update.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_mix_partial_update.groovy
@@ -38,7 +38,7 @@ suite('test_mix_partial_update') {
                     `c3` int,
                     `seq` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c1, c2)    
+                ORDER BY(c1, c2)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "disable_auto_compaction" = "true",
@@ -106,7 +106,7 @@ suite('test_mix_partial_update') {
                     `c3` int,
                     `seq` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c1)    
+                ORDER BY(c1)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "disable_auto_compaction" = "true",
@@ -272,7 +272,7 @@ suite('test_mix_partial_update') {
                     `c5` datetimev2(3) DEFAULT CURRENT_TIMESTAMP,
                     `c6` datetimev2(3) DEFAULT CURRENT_TIMESTAMP
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c2, c1)    
+                ORDER BY(c2, c1)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "disable_auto_compaction" = "true",
@@ -334,7 +334,7 @@ suite('test_mix_partial_update') {
                     `c5` datetimev2(3) DEFAULT CURRENT_TIMESTAMP,
                     `c6` datetimev2(3) DEFAULT CURRENT_TIMESTAMP
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c2, k1, c1)    
+                ORDER BY(c2, k1, c1)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "disable_auto_compaction" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_new_partial_update_delete.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_new_partial_update_delete.groovy
index 76772ad19b3..9c2497adf90 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_new_partial_update_delete.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_new_partial_update_delete.groovy
@@ -83,7 +83,7 @@ suite('test_new_partial_update_delete') {
                     `c3` int,
                     `c4` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c4, c2)    
+                ORDER BY(c4, c2)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "disable_auto_compaction" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update.groovy
index 9a04f731ac5..740a5453a2b 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update.groovy
@@ -36,7 +36,7 @@ suite("test_primary_key_partial_update", "p0") {
                         `test` int(11) NULL COMMENT "null test",
                         `dft` int(11) DEFAULT "4321")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`score`, `name`) 
+                        ORDER BY(`score`, `name`) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
@@ -243,7 +243,7 @@ suite("test_primary_key_partial_update", "p0") {
                         `rtime` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
                         `corp_name` VARCHAR(600) NOT NULL
                         ) ENGINE = OLAP UNIQUE KEY(`name`, `userid`)
-                        CLUSTER BY(`userid`) 
+                        ORDER BY(`userid`) 
                         COMMENT 'OLAP'
                         DISTRIBUTED BY HASH(`name`) BUCKETS 10 
                         PROPERTIES ("replication_num" = "1",
@@ -276,7 +276,7 @@ suite("test_primary_key_partial_update", "p0") {
                         `ctime` DATE DEFAULT CURRENT_DATE,
                         `corp_name` VARCHAR(600) NOT NULL
                         ) ENGINE = OLAP UNIQUE KEY(`name`, `userid`) 
-                        CLUSTER BY(`seq`, `name`) 
+                        ORDER BY(`seq`, `name`) 
                         COMMENT 'OLAP'
                         DISTRIBUTED BY HASH(`name`) BUCKETS 10 
                         PROPERTIES ("replication_num" = "1",
@@ -308,7 +308,7 @@ suite("test_primary_key_partial_update", "p0") {
                         `ctime` DATE DEFAULT CURRENT_DATE,
                         `corp_name` VARCHAR(600) NOT NULL
                         ) ENGINE = OLAP UNIQUE KEY(`name`, `userid`) 
-                        CLUSTER BY(`corp_name`, `seq`, `name`) 
+                        ORDER BY(`corp_name`, `seq`, `name`) 
                         COMMENT 'OLAP'
                         DISTRIBUTED BY HASH(`name`) BUCKETS 10 
                         PROPERTIES ("replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_2pc_schema_change.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_2pc_schema_change.groovy
index 6b3c4572dab..50893b1f663 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_2pc_schema_change.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_2pc_schema_change.groovy
@@ -56,7 +56,7 @@ suite("test_partial_update_2pc_schema_change", "p0") {
                 v4 varchar(20),
                 v5 varchar(20))
                 UNIQUE KEY(k1)
-                CLUSTER BY(v1) 
+                ORDER BY(v1) 
                 DISTRIBUTED BY HASH(k1) BUCKETS 4
                 PROPERTIES(
                     "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_after_delete.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_after_delete.groovy
index c00bba7ae34..fcaaef2d899 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_after_delete.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_after_delete.groovy
@@ -36,7 +36,7 @@ suite("test_partial_update_after_delete", "p0") {
                     `v1` INT NULL,
                     `v2` INT NULL
                     )UNIQUE KEY(k1)
-                CLUSTER BY(v2, v1)
+                ORDER BY(v2, v1)
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "enable_unique_key_merge_on_write" = "true",
@@ -62,7 +62,7 @@ suite("test_partial_update_after_delete", "p0") {
                     `v1` INT NULL,
                     `v2` INT NULL
                     )UNIQUE KEY(k1)
-                CLUSTER BY(v2, v1, k1)    
+                ORDER BY(v2, v1, k1)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "enable_unique_key_merge_on_write" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_auto_inc.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_auto_inc.groovy
index 63a14ec70eb..b2c986cea53 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_auto_inc.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_auto_inc.groovy
@@ -41,7 +41,7 @@ suite("test_partial_update_auto_inc") {
                             `id` BIGINT NOT NULL AUTO_INCREMENT,
                             `name` varchar(65533) NOT NULL COMMENT "用户姓名" )
                             UNIQUE KEY(`id`)
-                            CLUSTER BY(`name`)
+                            ORDER BY(`name`)
                             DISTRIBUTED BY HASH(`id`) BUCKETS 1
                             PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "${use_mow}"); """
 
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_case_insensitivity.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_case_insensitivity.groovy
index 5431ec26666..5fe7cb7723e 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_case_insensitivity.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_case_insensitivity.groovy
@@ -43,7 +43,7 @@ suite("test_partial_update_case_insensitivity", "p0") {
                         UpAndDown int
                         ) ENGINE=OLAP
                         UNIQUE KEY(name) 
-                        CLUSTER BY(UpAndDown)
+                        ORDER BY(UpAndDown)
                         COMMENT 'OLAP'
                         DISTRIBUTED BY HASH(name) BUCKETS 1
                         PROPERTIES (
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type.groovy
index 910bdeacd68..41226038894 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type.groovy
@@ -40,7 +40,7 @@ suite("test_primary_key_partial_update_complex_type", "p0") {
                         `c_array` ARRAY<INT> NULL DEFAULT "[]",
                         `c_struct` STRUCT<a:INT, b:INT> NULL)
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(c_varchar) 
+                        ORDER BY(c_varchar) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type_schema_change.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type_schema_change.groovy
index de74fe6ad13..d2afb5da532 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type_schema_change.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_complex_type_schema_change.groovy
@@ -33,7 +33,7 @@ suite("test_primary_key_partial_update_complex_type_schema_change", "p0") {
                         `id` int(11) NOT NULL COMMENT "用户 ID",
                         `c_varchar` varchar(65533) NULL COMMENT "用户姓名")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(c_varchar)  
+                        ORDER BY(c_varchar)  
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_default_value.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_default_value.groovy
index 1a66075d2ab..6d0e4b8c93c 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_default_value.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_default_value.groovy
@@ -38,7 +38,7 @@ suite("test_primary_key_partial_update_default_value", "p0") {
                         `test` int(11) NULL DEFAULT "4321" COMMENT  "test",
                         `dft` int(11) DEFAULT "4321")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`name`, `score`) 
+                        ORDER BY(`name`, `score`) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete.groovy
index 99fb042bb68..0fdf0696521 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete.groovy
@@ -35,7 +35,7 @@ suite('test_partial_update_delete') {
                     `c3` int NOT NULL,
                     `c4` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c2, c1, c3)
+                ORDER BY(c2, c1, c3)
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "enable_unique_key_merge_on_write" = "true",
@@ -88,7 +88,7 @@ suite('test_partial_update_delete') {
                     `c3` int,
                     `c4` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c3, c4)    
+                ORDER BY(c3, c4)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "enable_unique_key_merge_on_write" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign.groovy
index 2805b0b669c..626a592bb27 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign.groovy
@@ -35,7 +35,7 @@ suite('test_partial_update_delete_sign') {
                     `c3` int,
                     `c4` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c1)    
+                ORDER BY(c1)    
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "enable_unique_key_merge_on_write" = "true",
@@ -97,7 +97,7 @@ suite('test_partial_update_delete_sign') {
                     `c3` int,
                     `c4` int
                     )UNIQUE KEY(k1)
-                CLUSTER BY(c3, c2)
+                ORDER BY(c3, c2)
                 DISTRIBUTED BY HASH(k1) BUCKETS 1
                 PROPERTIES (
                     "enable_unique_key_merge_on_write" = "true",
@@ -160,7 +160,7 @@ suite('test_partial_update_delete_sign') {
                 v1 int,
                 v2 int
             ) ENGINE=OLAP unique key (k)
-            CLUSTER BY(v2, k)
+            ORDER BY(v2, k)
             distributed by hash(k) buckets 1
             properties("replication_num" = "1",
             "enable_unique_key_merge_on_write" = "true",
@@ -205,7 +205,7 @@ suite('test_partial_update_delete_sign') {
                 v2 int,
                 c int
             ) ENGINE=OLAP unique key (k)
-            CLUSTER BY(c, v1)
+            ORDER BY(c, v1)
             distributed by hash(k) buckets 1
             properties("replication_num" = "1",
             "enable_unique_key_merge_on_write" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign_with_conflict.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign_with_conflict.groovy
index 9438541227e..06fc0e79894 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign_with_conflict.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_delete_sign_with_conflict.groovy
@@ -49,7 +49,7 @@ suite("test_partial_update_delete_sign_with_conflict") {
             `c3` int,
             `c4` varchar(100) default 'foo'
             )UNIQUE KEY(k1)
-        CLUSTER BY(c3)    
+        ORDER BY(c3)    
         DISTRIBUTED BY HASH(k1) BUCKETS 1
         PROPERTIES (
             "enable_unique_key_merge_on_write" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_light_schema_change.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_light_schema_change.groovy
index 390b9cc0441..8aafbe5540c 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_light_schema_change.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_light_schema_change.groovy
@@ -49,7 +49,7 @@ suite("test_partial_update_insert_light_schema_change", "p0") {
                         `c8` int NULL,
                         `c9` int NULL)
                         UNIQUE KEY(`c0`)
-                        CLUSTER BY(c2, c8) 
+                        ORDER BY(c2, c8) 
                         DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                         PROPERTIES(
                             "replication_num" = "1",
@@ -110,7 +110,7 @@ suite("test_partial_update_insert_light_schema_change", "p0") {
                         `c8` int NULL,
                         `c9` int NULL)
                         UNIQUE KEY(`c0`)
-                        CLUSTER BY(c9, c5, c3) 
+                        ORDER BY(c9, c5, c3) 
                         DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                         PROPERTIES(
                             "replication_num" = "1",
@@ -157,7 +157,7 @@ suite("test_partial_update_insert_light_schema_change", "p0") {
                         `v2` int NULL,
                         `c` int NULL)
                         UNIQUE KEY(`k`)
-                        CLUSTER BY(v2) 
+                        ORDER BY(v2) 
                         DISTRIBUTED BY HASH(`k`) BUCKETS 1
                         PROPERTIES(
                             "replication_num" = "1",
@@ -190,7 +190,7 @@ suite("test_partial_update_insert_light_schema_change", "p0") {
                         `c8` int NULL,
                         `c9` int NULL)
                         UNIQUE KEY(`c0`)
-                        CLUSTER BY(c7, c6) 
+                        ORDER BY(c7, c6) 
                         DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                         PROPERTIES(
                             "replication_num" = "1",
@@ -308,7 +308,7 @@ suite("test_partial_update_insert_light_schema_change", "p0") {
                         `c8` int NULL,
                         `c9` int NULL)
                         UNIQUE KEY(`c0`)
-                        CLUSTER BY(c3, c8) 
+                        ORDER BY(c3, c8) 
                         DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                         PROPERTIES(
                             "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_schema_change.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_schema_change.groovy
index 794df6bdee8..641f329efbc 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_schema_change.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_schema_change.groovy
@@ -41,7 +41,7 @@ suite("test_partial_update_insert_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(c7, c8, c5) 
+                ORDER BY(c7, c8, c5) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -103,7 +103,7 @@ suite("test_partial_update_insert_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(c7, c2, c5) 
+                ORDER BY(c7, c2, c5) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -150,7 +150,7 @@ suite("test_partial_update_insert_schema_change", "p0") {
                 `v2` int NULL,
                 `c` int NULL)
                 UNIQUE KEY(`k`)
-                CLUSTER BY(v2, k) 
+                ORDER BY(v2, k) 
                 DISTRIBUTED BY HASH(`k`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -182,7 +182,7 @@ suite("test_partial_update_insert_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(c1, c8, c9) 
+                ORDER BY(c1, c8, c9) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -300,7 +300,7 @@ suite("test_partial_update_insert_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(c2, c0) 
+                ORDER BY(c2, c0) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_seq_col.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_seq_col.groovy
index 6dc7169ed2b..690c2d90a0c 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_seq_col.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_insert_seq_col.groovy
@@ -39,7 +39,7 @@ suite("test_partial_update_native_insert_seq_col", "p0") {
                         `dft` int(11) DEFAULT "4321",
                         `update_time` date NULL)
                     UNIQUE KEY(`id`)
-                    CLUSTER BY(test, dft) 
+                    ORDER BY(test, dft) 
                     DISTRIBUTED BY HASH(`id`) BUCKETS 1
                     PROPERTIES(
                         "replication_num" = "1",
@@ -107,7 +107,7 @@ suite("test_partial_update_native_insert_seq_col", "p0") {
                         `score` int(11) NOT NULL COMMENT "用户得分",
                         `update_time` DATETIMEV2 NULL DEFAULT CURRENT_TIMESTAMP)
                     UNIQUE KEY(`id`)
-                    CLUSTER BY(score) 
+                    ORDER BY(score) 
                     DISTRIBUTED BY HASH(`id`) BUCKETS 1
                     PROPERTIES(
                         "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt.groovy
index 76a65d21728..65340ee066e 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt.groovy
@@ -39,7 +39,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                         `test` int(11) NULL COMMENT "null test",
                         `dft` int(11) DEFAULT "4321")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`name`, `score`) 
+                        ORDER BY(`name`, `score`) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true","store_row_column" = "${use_row_store}"); """
 
@@ -72,7 +72,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                         `dft` int(11) DEFAULT "4321",
                         `update_time` date NULL)
                     UNIQUE KEY(`id`)
-                    CLUSTER BY(`test`, `score`) 
+                    ORDER BY(`test`, `score`) 
                     DISTRIBUTED BY HASH(`id`) BUCKETS 1
                     PROPERTIES(
                         "replication_num" = "1",
@@ -110,7 +110,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                         `test` int(11) NULL COMMENT "null test",
                         `dft` int(11) DEFAULT "4321")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`name`, `dft`) 
+                        ORDER BY(`name`, `dft`) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
@@ -146,7 +146,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                         `test` int(11) NULL COMMENT "null test",
                         `dft` int(11) DEFAULT "4321")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`name`, `score`, `test`) 
+                        ORDER BY(`name`, `score`, `test`) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
@@ -175,7 +175,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                         `balance` decimalv3(9, 0) NULL, 
                         `last_access_time` datetime NULL 
                     ) ENGINE = OLAP UNIQUE KEY(`id`)
-                    CLUSTER BY(`balance`) 
+                    ORDER BY(`balance`) 
                     COMMENT 'OLAP' DISTRIBUTED BY HASH(`id`) 
                     BUCKETS AUTO PROPERTIES ( 
                         "replication_allocation" = "tag.location.default: 1", 
@@ -211,7 +211,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                 v2 int null,
                 v3 int null
             ) unique key (k)
-            CLUSTER BY(`v2`, `v`) 
+            ORDER BY(`v2`, `v`) 
             distributed by hash(k) buckets 1
             properties("replication_num" = "1",
             "enable_unique_key_merge_on_write"="true",
@@ -238,7 +238,7 @@ suite("test_partial_update_native_insert_stmt", "p0") {
                 v1 int null,
                 v2 int null
             ) unique key (k1,k2,k3)
-            CLUSTER BY(`v2`, `k1`) 
+            ORDER BY(`v2`, `k1`) 
             distributed by hash(k1,k2) buckets 4
             properties("replication_num" = "1",
             "enable_unique_key_merge_on_write"="true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt_complex.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt_complex.groovy
index c03eff973db..67c43718a5f 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt_complex.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_native_insert_stmt_complex.groovy
@@ -42,7 +42,7 @@ suite("test_partial_update_native_insert_stmt_complex", "p0") {
                     c2 string, 
                     c3 double, 
                     c4 date) unique key (id) 
-                CLUSTER BY(c4, c1)    
+                ORDER BY(c4, c1)    
                 distributed by hash(id) 
                 properties('replication_num'='1', 'enable_unique_key_merge_on_write' = 'true',"store_row_column" = "${use_row_store}"); """
 
@@ -52,7 +52,7 @@ suite("test_partial_update_native_insert_stmt_complex", "p0") {
                     c2 string, 
                     c3 double, 
                     c4 date) unique key (id)
-                CLUSTER BY(c4) 
+                ORDER BY(c4) 
                 distributed by hash(id) 
                 properties('replication_num'='1', 'enable_unique_key_merge_on_write' = 'true',"store_row_column" = "${use_row_store}"); """
 
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_orc.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_orc.groovy
index ca6cd270651..0438309e8ac 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_orc.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_orc.groovy
@@ -29,7 +29,7 @@ suite("test_primary_key_partial_update_orc", "p0") {
                 `col_3` varchar(65533) NULL COMMENT "col_3",
                 `col_4` varchar(65533) DEFAULT "4321")
                 UNIQUE KEY(`col_0`)
-                CLUSTER BY(`col_1`, `col_2`) 
+                ORDER BY(`col_1`, `col_2`) 
                 DISTRIBUTED BY HASH(`col_0`) BUCKETS 1
                 PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true")
     """
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_parallel.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_parallel.groovy
index e76b5d9f710..dad3d9bdb97 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_parallel.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_parallel.groovy
@@ -28,7 +28,7 @@ suite("test_primary_key_partial_update_parallel", "p0") {
                 `test` int(11) NULL COMMENT "null test",
                 `dft` int(11) DEFAULT "4321")
                 UNIQUE KEY(`id`)
-                CLUSTER BY(`name`, `score`) 
+                ORDER BY(`name`, `score`) 
                 DISTRIBUTED BY HASH(`id`) BUCKETS 1
                 PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true")
     """
@@ -137,7 +137,7 @@ suite("test_primary_key_partial_update_parallel", "p0") {
                 `test` int(11) NULL COMMENT "null test",
                 `dft` int(11) DEFAULT "4321")
                 UNIQUE KEY(`id`)
-                CLUSTER BY(`score`, `name`) 
+                ORDER BY(`score`, `name`) 
                 DISTRIBUTED BY HASH(`id`) BUCKETS 1
                 PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true", "store_row_column" = "true")
     """
@@ -248,7 +248,7 @@ suite("test_primary_key_partial_update_parallel", "p0") {
                 `test` int(11) NULL COMMENT "null test",
                 `dft` int(11) DEFAULT "4321")
                 UNIQUE KEY(`id`)
-                CLUSTER BY(`test`, `score`) 
+                ORDER BY(`test`, `score`) 
                 DISTRIBUTED BY HASH(`id`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1", 
@@ -366,7 +366,7 @@ suite("test_primary_key_partial_update_parallel", "p0") {
                 `test` int(11) NULL COMMENT "null test",
                 `dft` int(11) DEFAULT "4321")
                 UNIQUE KEY(`id`)
-                CLUSTER BY(`score`) 
+                ORDER BY(`score`) 
                 DISTRIBUTED BY HASH(`id`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1", 
@@ -483,7 +483,7 @@ suite("test_primary_key_partial_update_parallel", "p0") {
                 `test` int(11) NULL COMMENT "null test",
                 `dft` int(11) DEFAULT "4321")
                 UNIQUE KEY(`id`)
-                CLUSTER BY(`test`, `score`, `dft`) 
+                ORDER BY(`test`, `score`, `dft`) 
                 DISTRIBUTED BY HASH(`id`) BUCKETS 1
                 PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true")
     """
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_publish.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_publish.groovy
index 2afa521d8cb..c1d70669388 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_publish.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_publish.groovy
@@ -27,7 +27,7 @@ suite("test_primary_key_partial_update_publish", "p0") {
                 `name` varchar(65533) NOT NULL COMMENT "用户姓名",
                 `score` int(11) NOT NULL COMMENT "用户得分")
                 UNIQUE KEY(`id`)
-                CLUSTER BY(`name`) 
+                ORDER BY(`name`) 
                 DISTRIBUTED BY HASH(`id`) BUCKETS 1
                 PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true")
     """
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change.groovy
index 0c6346f5345..74bde07d021 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change.groovy
@@ -41,7 +41,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`) 
-                CLUSTER BY(`c2`, `c1`)
+                ORDER BY(`c2`, `c1`)
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -166,7 +166,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c3`) 
+                ORDER BY(`c3`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -290,7 +290,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c1`, `c3`) 
+                ORDER BY(`c4`, `c1`, `c3`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -473,7 +473,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c1`, `c8`, `c6`) 
+                ORDER BY(`c1`, `c8`, `c6`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -565,7 +565,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c2`) 
+                ORDER BY(`c2`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -651,7 +651,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c6`, `c1`) 
+                ORDER BY(`c6`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -773,7 +773,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c2`, `c0`) 
+                ORDER BY(`c2`, `c0`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -890,7 +890,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c1`) 
+                ORDER BY(`c4`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -1066,7 +1066,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c1`) 
+                ORDER BY(`c4`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -1156,7 +1156,7 @@ suite("test_partial_update_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c1`) 
+                ORDER BY(`c4`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change_row_store.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change_row_store.groovy
index 41dec2f8441..6ea66fe4182 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change_row_store.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_schema_change_row_store.groovy
@@ -41,7 +41,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c1`) 
+                ORDER BY(`c4`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -168,7 +168,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c1`, `c5`) 
+                ORDER BY(`c1`, `c5`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -293,7 +293,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c0`) 
+                ORDER BY(`c4`, `c0`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -477,7 +477,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c5`, `c4`, `c6`) 
+                ORDER BY(`c5`, `c4`, `c6`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -570,7 +570,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c4`, `c9`, `c8`) 
+                ORDER BY(`c4`, `c9`, `c8`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -657,7 +657,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c5`, `c0`, `c2`) 
+                ORDER BY(`c5`, `c0`, `c2`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -781,7 +781,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c5`, `c9`) 
+                ORDER BY(`c5`, `c9`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -900,7 +900,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c8`, `c1`) 
+                ORDER BY(`c8`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -1079,7 +1079,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c7`, `c6`, `c0`) 
+                ORDER BY(`c7`, `c6`, `c0`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
@@ -1170,7 +1170,7 @@ suite("test_partial_update_row_store_schema_change", "p0") {
                 `c8` int NULL,
                 `c9` int NULL)
                 UNIQUE KEY(`c0`)
-                CLUSTER BY(`c2`, `c0`, `c7`, `c1`) 
+                ORDER BY(`c2`, `c0`, `c7`, `c1`) 
                 DISTRIBUTED BY HASH(`c0`) BUCKETS 1
                 PROPERTIES(
                     "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_with_update_stmt.groovy b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_with_update_stmt.groovy
index 60fe8167dc9..57f5aa826ea 100644
--- a/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_with_update_stmt.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/partial_update/test_partial_update_with_update_stmt.groovy
@@ -43,7 +43,7 @@ suite("test_primary_key_partial_update_with_update_stmt", "p0") {
                         `test` int(11) NULL COMMENT "null test",
                         `dft` int(11) DEFAULT "4321")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`test`, `name`) 
+                        ORDER BY(`test`, `name`) 
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
@@ -82,7 +82,7 @@ suite("test_primary_key_partial_update_with_update_stmt", "p0") {
                         `id` int(11) NOT NULL COMMENT "用户 ID",
                         `name` varchar(65533) NOT NULL COMMENT "用户姓名")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`name`)  
+                        ORDER BY(`name`)  
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
@@ -91,7 +91,7 @@ suite("test_primary_key_partial_update_with_update_stmt", "p0") {
                         `id` int(11) NOT NULL COMMENT "用户 ID",
                         `score` int(11) NOT NULL COMMENT "用户得分")
                         UNIQUE KEY(`id`)
-                        CLUSTER BY(`score`)  
+                        ORDER BY(`score`)  
                         DISTRIBUTED BY HASH(`id`) BUCKETS 1
                         PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true",
                         "store_row_column" = "${use_row_store}"); """
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_create.sql
index 53c1b103328..dc6b8c1f89a 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_create.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS `customer` (
   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`c_custkey`)
-CLUSTER BY (`c_name`, `c_phone`, `c_city`)
+ORDER BY (`c_name`, `c_phone`, `c_city`)
 DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_sequence_create.sql
index 2b560cfdacb..c8bf8d0da93 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/customer_sequence_create.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS `customer` (
   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`c_custkey`)
-CLUSTER BY (`c_nation`, `c_phone`, `c_city`, `c_name`)
+ORDER BY (`c_nation`, `c_phone`, `c_city`, `c_name`)
 DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
 PROPERTIES (
 "function_column.sequence_type" = 'int',
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_create.sql
index b96d1038c74..328074707a5 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `date` (
   `d_weekdayfl` int(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`d_datekey`)
-CLUSTER BY (`d_holidayfl`)
+ORDER BY (`d_holidayfl`)
 DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_sequence_create.sql
index 4ff7ba2208a..7ef05c3e7cd 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/date_sequence_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `date` (
   `d_weekdayfl` int(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`d_datekey`)
-CLUSTER BY (`d_yearmonth`, `d_holidayfl`)
+ORDER BY (`d_yearmonth`, `d_holidayfl`)
 DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
 PROPERTIES (
 "function_column.sequence_type" = 'int',
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_create.sql
index 37ba740fa06..bc066e64e1e 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `lineorder` (
   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`lo_orderdate`,`lo_orderkey`,`lo_linenumber`)
-CLUSTER BY (`lo_orderdate`, `lo_suppkey`, `lo_shipmode`)
+ORDER BY (`lo_orderdate`, `lo_suppkey`, `lo_shipmode`)
 PARTITION BY RANGE(`lo_orderdate`)
 (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
 PARTITION p1993 VALUES [("19930101"), ("19940101")),
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql
index d639e7f2bba..3ddb66690dd 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `lineorder` (
   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`lo_orderdate`,`lo_orderkey`,`lo_linenumber`)
-CLUSTER BY (`lo_quantity`, `lo_suppkey`)
+ORDER BY (`lo_quantity`, `lo_suppkey`)
 PARTITION BY RANGE(`lo_orderdate`)
 (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
 PARTITION p1993 VALUES [("19930101"), ("19940101")),
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_create.sql
index f8b9438a192..6b83e3b6639 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_create.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `part` (
   `p_container` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`p_partkey`)
-CLUSTER BY (`p_color`, `p_name`)
+ORDER BY (`p_color`, `p_name`)
 DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 10
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_sequence_create.sql
index ab2b62a52da..dd9f489b3d2 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/part_sequence_create.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `part` (
   `p_container` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`p_partkey`)
-CLUSTER BY (`p_size`)
+ORDER BY (`p_size`)
 DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 10
 PROPERTIES (
 "function_column.sequence_type" = 'int',
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_create.sql
index a40662617f6..50f8a62f322 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_create.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `supplier` (
   `s_phone` varchar(16) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`s_suppkey`)
-CLUSTER BY (`s_region`, `s_address`)
+ORDER BY (`s_region`, `s_address`)
 DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 10
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql
index ef1136bbfda..acb5705c473 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `supplier` (
   `s_phone` varchar(16) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`s_suppkey`)
-CLUSTER BY (`s_region`, `s_city`, `s_name`)
+ORDER BY (`s_region`, `s_city`, `s_name`)
 DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 10
 PROPERTIES (
 "function_column.sequence_type" = 'int',
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/customer_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/customer_create.sql
index 1d593fb15ba..cc6c1bf8a95 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/customer_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/customer_create.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS `customer` (
   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`c_custkey`)
-CLUSTER BY (`c_region`, `c_city`, `c_name`)
+ORDER BY (`c_region`, `c_city`, `c_name`)
 DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/date_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/date_create.sql
index e46caac95dc..b2ab29e89b0 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/date_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/date_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `date` (
   `d_weekdayfl` int(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`d_datekey`)
-CLUSTER BY (`d_year`, `d_month`, `d_weeknuminyear`)
+ORDER BY (`d_year`, `d_month`, `d_weeknuminyear`)
 DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/lineorder_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/lineorder_create.sql
index d3015f954c9..02d31805960 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/lineorder_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/lineorder_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `lineorder` (
   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`lo_orderdate`,`lo_orderkey`,`lo_linenumber`)
-CLUSTER BY (`lo_orderdate`, `lo_orderpriority`)
+ORDER BY (`lo_orderdate`, `lo_orderpriority`)
 PARTITION BY RANGE(`lo_orderdate`)
 (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
 PARTITION p1993 VALUES [("19930101"), ("19940101")),
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/part_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/part_create.sql
index 5ec4981cf10..6d1a93356e0 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/part_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/part_create.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `part` (
   `p_container` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`p_partkey`)
-CLUSTER BY (`p_category`, `p_brand`, `p_size`)
+ORDER BY (`p_category`, `p_brand`, `p_size`)
 DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 10
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/supplier_create.sql b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/supplier_create.sql
index 266a2119eb6..ae89310929c 100644
--- a/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/supplier_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p0/ssb_unique_sql_zstd/ddl/supplier_create.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `supplier` (
   `s_phone` varchar(16) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`s_suppkey`)
-CLUSTER BY (`s_region`, `s_city`, `s_name`)
+ORDER BY (`s_region`, `s_city`, `s_name`)
 DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 10
 PROPERTIES (
 "compression"="zstd",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_compact_multi_segments.groovy b/regression-test/suites/unique_with_mow_c_p0/test_compact_multi_segments.groovy
index e6fba5bfdfe..b9d3a28bfb6 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_compact_multi_segments.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_compact_multi_segments.groovy
@@ -63,7 +63,7 @@ suite("test_compact_multi_segments", "nonConcurrent") {
                 `v3` int(11) NULL,
                 `v4` int(11) NULL
             ) unique KEY(`k1`, `k2`) 
-            cluster by(`v3`, `v4`) 
+            ORDER BY(`v3`, `v4`) 
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
             PROPERTIES (
             """ + (j == 1 ? "\"function_column.sequence_col\"='v4', " : "") +
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_compact_seg.groovy b/regression-test/suites/unique_with_mow_c_p0/test_compact_seg.groovy
index 421e2956434..e3e56224018 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_compact_seg.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_compact_seg.groovy
@@ -74,7 +74,7 @@ suite("test_compact_seg", "nonConcurrent") {
                 `v3` int(11) NULL,
                 `v4` int(11) NULL
             ) unique KEY(`k1`, `k2`) 
-            cluster by(`v3`, `v4`) 
+            ORDER BY(`v3`, `v4`) 
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
             PROPERTIES (
             """ + (j == 1 ? "\"function_column.sequence_col\"='v4', " : "") +
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq.groovy b/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq.groovy
index b9e08b21d7b..90fc2fa705e 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq.groovy
@@ -45,7 +45,7 @@ suite("test_compact_with_seq", "nonConcurrent") {
                 `v3` int(11) NULL,
                 `v4` int(11) NULL
             ) unique KEY(`k1`) 
-            cluster by(`v3`, `v4`) 
+            ORDER BY(`v3`, `v4`) 
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
             PROPERTIES (
                 "function_column.sequence_col" = "v4",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq2.groovy b/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq2.groovy
index df50f5f07ea..7fc9d2a48fd 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq2.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_compact_with_seq2.groovy
@@ -94,7 +94,7 @@ suite("test_compact_with_seq2", "nonConcurrent") {
                 `v3` int(11) NULL,
                 `v4` int(11) NULL
             ) unique KEY(`k1`) 
-            cluster by(`v3`, `v4`) 
+            ORDER BY(`v3`, `v4`) 
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
             PROPERTIES (
                 "function_column.sequence_col" = "v4",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_compaction_with_multi_append_columns.groovy b/regression-test/suites/unique_with_mow_c_p0/test_compaction_with_multi_append_columns.groovy
index acac719b8c5..3ac0a7e630a 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_compaction_with_multi_append_columns.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_compaction_with_multi_append_columns.groovy
@@ -74,7 +74,7 @@ suite("test_compaction_with_multi_append_columns", "p0") {
       `k13` datetime NULL
     ) ENGINE=OLAP
     unique KEY(k1, k2, k3)
-    CLUSTER BY (`k13`, `k2`)
+    ORDER BY (`k13`, `k2`)
     DISTRIBUTED BY HASH(`k1`) BUCKETS 1
     PROPERTIES (
         "replication_allocation" = "tag.location.default: 1"
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_create_table.groovy b/regression-test/suites/unique_with_mow_c_p0/test_create_table.groovy
index c8cb94904c3..3c9918b647d 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_create_table.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_create_table.groovy
@@ -37,7 +37,7 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_name`, `c_address`)
+            ORDER BY (`c_name`, `c_address`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
@@ -45,7 +45,7 @@ suite("test_create_table") {
              );
         """
         // test mor table
-        exception "Cluster keys only support unique keys table which enabled enable_unique_key_merge_on_write"
+        exception "Order keys only support unique keys table which enabled enable_unique_key_merge_on_write"
     }
 
     // mor unique table with cluster keys
@@ -58,14 +58,14 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_name`, `c_address`)
+            ORDER BY (`c_name`, `c_address`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
                     "enable_unique_key_merge_on_write" = "false"
              );
         """
-        exception "Cluster keys only support unique keys table which enabled enable_unique_key_merge_on_write"
+        exception "Order keys only support unique keys table which enabled enable_unique_key_merge_on_write"
     }
 
     // mow unique table with invalid cluster keys
@@ -78,14 +78,14 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_name`, `c_addresses`)
+            ORDER BY (`c_name`, `c_addresses`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
                     "enable_unique_key_merge_on_write" = "true"
              );
         """
-        exception "Cluster key column[c_addresses] doesn't exist"
+        exception "Order key column[c_addresses] doesn't exist"
     }
 
     // mow unique table with duplicate cluster keys
@@ -98,14 +98,14 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_name`, `c_address`, `c_name`)
+            ORDER BY (`c_name`, `c_address`, `c_name`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
                     "enable_unique_key_merge_on_write" = "true"
              );
         """
-        exception "Duplicate cluster key column[c_name]"
+        exception "Duplicate order key column[c_name]"
     }
 
     // mow unique table with same cluster and unique keys
@@ -118,14 +118,53 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_custkey`)
+            ORDER BY (`c_custkey`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
                     "enable_unique_key_merge_on_write" = "true"
              );
         """
-        exception "Unique keys and cluster keys should be different"
+        exception "Unique keys and order keys should be different"
+    }
+
+    // mow unique table order keys only asc and nulls first
+    test {
+        sql """
+            CREATE TABLE `$tableName` (
+                    `c_custkey` int(11) NOT NULL COMMENT "",
+                    `c_name` varchar(26) NOT NULL COMMENT "",
+                    `c_address` varchar(41) NOT NULL COMMENT "",
+                    `c_city` varchar(11) NOT NULL COMMENT ""
+            )
+            UNIQUE KEY (`c_custkey`)
+            ORDER BY (`c_custkey` desc)
+            DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
+            PROPERTIES (
+                    "replication_num" = "1",
+                    "enable_unique_key_merge_on_write" = "true"
+             );
+        """
+        exception "Order keys only support ASC in OLAP table"
+    }
+
+    test {
+        sql """
+            CREATE TABLE `$tableName` (
+                    `c_custkey` int(11) NOT NULL COMMENT "",
+                    `c_name` varchar(26) NOT NULL COMMENT "",
+                    `c_address` varchar(41) NOT NULL COMMENT "",
+                    `c_city` varchar(11) NOT NULL COMMENT ""
+            )
+            UNIQUE KEY (`c_custkey`)
+            ORDER BY (`c_custkey` asc NULLS LAST)
+            DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
+            PROPERTIES (
+                    "replication_num" = "1",
+                    "enable_unique_key_merge_on_write" = "true"
+             );
+        """
+        exception "Order keys only support NULLS FIRST in OLAP table"
     }
 
     // mow unique table with short key is part of unique keys
@@ -139,7 +178,7 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`, `c_age`,  `c_name`)
-            CLUSTER BY (`c_custkey`, `c_age`,  `c_address`)
+            ORDER BY (`c_custkey`, `c_age`,  `c_address`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
@@ -161,7 +200,7 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`, `c_age`,  `c_name`, `c_address`)
-            CLUSTER BY (`c_custkey`, `c_age`,  `c_name`, `c_city`)
+            ORDER BY (`c_custkey`, `c_age`,  `c_name`, `c_city`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1",
@@ -180,7 +219,7 @@ suite("test_create_table") {
                 `c_city` varchar(11) NOT NULL COMMENT ""
         )
         UNIQUE KEY (`c_custkey`)
-        CLUSTER BY (`c_name`, `c_city`, `c_address`)
+        ORDER BY (`c_name`, `c_city`, `c_address`)
         DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
         PROPERTIES (
             "replication_num" = "1",
@@ -202,13 +241,13 @@ suite("test_create_table") {
                     `c_city` varchar(11) NOT NULL COMMENT ""
             )
             DUPLICATE KEY (`c_custkey`)
-            CLUSTER BY (`c_name`, `c_address`)
+            ORDER BY (`c_name`, `c_address`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                     "replication_num" = "1"
              );
         """
-        exception "Cluster keys only support unique keys table"
+        exception "Order keys only support unique keys table"
     }
 
     // cluster key contains complex type
@@ -221,7 +260,7 @@ suite("test_create_table") {
                 `c_city` variant NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_name`, `c_city`, `c_address`)
+            ORDER BY (`c_name`, `c_city`, `c_address`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1
             PROPERTIES (
                 "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_delete_sign.groovy b/regression-test/suites/unique_with_mow_c_p0/test_delete_sign.groovy
index 0437bf709d5..d50a9b9560c 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_delete_sign.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_delete_sign.groovy
@@ -35,7 +35,7 @@ suite("test_delete_sign", "p0") {
                         col3 INT,
                         col4 variant
                     ) unique key(col1, col2)
-                    CLUSTER BY (`col3`, `col2`) 
+                    ORDER BY (`col3`, `col2`) 
                     distributed by hash(col1) buckets 1
                     properties(
                         "replication_num" = "1",
@@ -60,7 +60,7 @@ suite("test_delete_sign", "p0") {
                         col3 INT,
                         col4 variant
                     ) unique key(col1, col2) 
-                    CLUSTER BY (`col2`, `col3`) 
+                    ORDER BY (`col2`, `col3`) 
                     distributed by hash(col1) buckets 1
                     properties(
                         "replication_num" = "1",
@@ -88,7 +88,7 @@ suite("test_delete_sign", "p0") {
                         col3 INT,
                         col4 variant NULL
                     ) unique key(col1, col2)
-                    CLUSTER BY (`col1`, `col3`)  
+                    ORDER BY (`col1`, `col3`)  
                     distributed by hash(col1) buckets 1
                     properties(
                         "replication_num" = "1",
@@ -114,7 +114,7 @@ suite("test_delete_sign", "p0") {
                         col4 variant default NULL,
                         INDEX idx_col3 (`col3`) USING INVERTED,
                     ) unique key(col1, col2)
-                    CLUSTER BY (`col3`, `col1`, `col2`)  
+                    ORDER BY (`col3`, `col1`, `col2`)  
                     distributed by hash(col1) buckets 1
                     properties(
                         "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_delete_sign_delete_bitmap.groovy b/regression-test/suites/unique_with_mow_c_p0/test_delete_sign_delete_bitmap.groovy
index ea7e2c5e7dc..a7c2223d0ae 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_delete_sign_delete_bitmap.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_delete_sign_delete_bitmap.groovy
@@ -26,7 +26,7 @@ suite('test_delete_sign_delete_bitmap') {
 //            `c3` int,
 //            `c4` int
 //            )UNIQUE KEY(k1)
-//            CLUSTER BY(c1, c2)
+//            ORDER BY(c1, c2)
 //        DISTRIBUTED BY HASH(k1) BUCKETS 1
 //        PROPERTIES (
 //            "enable_unique_key_merge_on_write" = "true",
@@ -68,7 +68,7 @@ suite('test_delete_sign_delete_bitmap') {
 //            `c3` int,
 //            `c4` int
 //            )UNIQUE KEY(k1)
-//            CLUSTER BY(c4, c3)
+//            ORDER BY(c4, c3)
 //        DISTRIBUTED BY HASH(k1) BUCKETS 1
 //        PROPERTIES (
 //            "enable_unique_key_merge_on_write" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_mow_full_clone_exception.groovy b/regression-test/suites/unique_with_mow_c_p0/test_mow_full_clone_exception.groovy
index 6ab872239cd..6a022ea26d2 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_mow_full_clone_exception.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_mow_full_clone_exception.groovy
@@ -69,7 +69,7 @@ suite('test_full_clone_exception', 'docker') {
                     v int
                 )
                 UNIQUE KEY(k)
-                CLUSTER BY(v)
+                ORDER BY(v)
                 DISTRIBUTED BY HASH(k) BUCKETS 1 properties(
                     "enable_unique_key_merge_on_write" = "true"
                 );
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_mow_with_null_sequence.groovy b/regression-test/suites/unique_with_mow_c_p0/test_mow_with_null_sequence.groovy
index 44286fdc27d..4d0c16d9e45 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_mow_with_null_sequence.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_mow_with_null_sequence.groovy
@@ -26,7 +26,7 @@ suite("test_mow_with_null_sequence") {
                     `c_date` date NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY(`c_name`, `c_date`)
+            ORDER BY(`c_name`, `c_date`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
             PROPERTIES (
                     "function_column.sequence_col" = 'c_date',
@@ -59,7 +59,7 @@ suite("test_mow_with_null_sequence") {
                     `c_int` int NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY(`c_int`, `c_name`)
+            ORDER BY(`c_int`, `c_name`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
             PROPERTIES (
                     "function_column.sequence_col" = 'c_int',
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_pk_uk_case.groovy b/regression-test/suites/unique_with_mow_c_p0/test_pk_uk_case.groovy
index 90a992aa352..379f15e2b53 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_pk_uk_case.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_pk_uk_case.groovy
@@ -56,7 +56,7 @@ suite("test_pk_uk_case") {
         L_COMMENT      VARCHAR(60) NOT NULL
         )
         UNIQUE KEY(L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER)
-        CLUSTER BY(L_PARTKEY, L_RETURNFLAG)
+        ORDER BY(L_PARTKEY, L_RETURNFLAG)
         DISTRIBUTED BY HASH(L_ORDERKEY) BUCKETS 1
         PROPERTIES (
         "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_primary_key_simple_case.groovy b/regression-test/suites/unique_with_mow_c_p0/test_primary_key_simple_case.groovy
index 8e5d683cea5..fb964b15100 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_primary_key_simple_case.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_primary_key_simple_case.groovy
@@ -38,7 +38,7 @@ suite("test_primary_key_simple_case") {
             `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
             `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
         UNIQUE KEY(`user_id`, `date`, `city`, `age`, `sex`)
-        CLUSTER BY(`user_id`, `age`, `cost`, `sex`)
+        ORDER BY(`user_id`, `age`, `cost`, `sex`)
         DISTRIBUTED BY HASH(`user_id`)
         PROPERTIES ( "replication_num" = "1",
                      "enable_unique_key_merge_on_write" = "true"
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_schema_change.groovy b/regression-test/suites/unique_with_mow_c_p0/test_schema_change.groovy
index 37c96e79a6b..222e669fc23 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_schema_change.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_schema_change.groovy
@@ -47,7 +47,7 @@ suite("test_schema_change") {
             `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间",
             `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间")
         UNIQUE KEY(`user_id`, `date`, `city`, `age`, `sex`)
-        CLUSTER BY(`cost`, `comment`)
+        ORDER BY(`cost`, `comment`)
         DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
         PROPERTIES ( "replication_num" = "1",
                      "enable_unique_key_merge_on_write" = "true"
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_schema_change_add_key_column.groovy b/regression-test/suites/unique_with_mow_c_p0/test_schema_change_add_key_column.groovy
index ba1a88e5246..f3d9429c747 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_schema_change_add_key_column.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_schema_change_add_key_column.groovy
@@ -79,7 +79,7 @@ suite("test_schema_change_add_key_column", "nonConcurrent") {
                 `v3` int(11) NULL,
                 `v4` int(11) NULL
             ) unique KEY(`k1`, `k2`) 
-            cluster by(`v3`, `v4`) 
+            ORDER BY(`v3`, `v4`) 
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
             PROPERTIES (
             """ + (i >= 2 ? "\"function_column.sequence_col\"='v4', " : "") +
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_schema_change_and_compaction.groovy b/regression-test/suites/unique_with_mow_c_p0/test_schema_change_and_compaction.groovy
index 9190a6c114c..fa015c368a6 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_schema_change_and_compaction.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_schema_change_and_compaction.groovy
@@ -68,7 +68,7 @@ suite("test_schema_change_and_compaction", "nonConcurrent") {
     sql """ DROP TABLE IF EXISTS ${tableName} force """
     sql """
         CREATE TABLE ${tableName} ( `k1` int(11), `k2` int(11), `v1` int(11), `v2` int(11) ) ENGINE=OLAP
-        unique KEY(`k1`, `k2`) cluster by(v1) DISTRIBUTED BY HASH(`k1`) BUCKETS 1
+        unique KEY(`k1`, `k2`) ORDER BY(v1) DISTRIBUTED BY HASH(`k1`) BUCKETS 1
         PROPERTIES ( "replication_num" = "1" );
     """
     sql """ insert into ${tableName} values(10, 20, 30, 40); """
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_schema_change_ck.groovy b/regression-test/suites/unique_with_mow_c_p0/test_schema_change_ck.groovy
index 4482a6bce32..a0e97b1aa4f 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_schema_change_ck.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_schema_change_ck.groovy
@@ -39,7 +39,7 @@ suite("test_schema_change_ck") {
                 `c2` int(11) NULL, 
                 `c3` int(11) NULL
             ) unique KEY(`c1`) 
-            cluster by(`c3`, `c2`) 
+            ORDER BY(`c3`, `c2`) 
             DISTRIBUTED BY HASH(`c1`) BUCKETS 1
             PROPERTIES (
                 "replication_num" = "1",
@@ -56,7 +56,7 @@ suite("test_schema_change_ck") {
             `c2` int(11) NULL, 
             `c3` int(11) NULL
         ) unique KEY(`c1`)
-        cluster by(`c3`, `c2`)
+        ORDER BY(`c3`, `c2`)
         PARTITION BY RANGE(`c1`)
         ( 
             PARTITION `p_10000` VALUES [("0"), ("10000")) 
@@ -200,7 +200,7 @@ suite("test_schema_change_ck") {
             `c4` int(11) NULL,
             `c5` int(11) NULL
         ) unique KEY(`k1`, `k2`)
-        cluster by(`c4`, `c5`)
+        ORDER BY(`c4`, `c5`)
         DISTRIBUTED BY HASH(`k1`) BUCKETS 1
         ROLLUP (
             r1 (k2, k1, c4, c3)
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_select.groovy b/regression-test/suites/unique_with_mow_c_p0/test_select.groovy
index 8cf169e6272..082ccb44835 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_select.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_select.groovy
@@ -39,7 +39,7 @@ suite("test_select") {
             v3 varchar(1000) not null 
         ) engine=olap
         UNIQUE KEY(pk)
-        cluster by(v2, v3)
+        ORDER BY(v2, v3)
         distributed by hash(pk) buckets 10
         properties("replication_num" = "1");
     """
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_unique_mow_sequence.groovy b/regression-test/suites/unique_with_mow_c_p0/test_unique_mow_sequence.groovy
index d9e7c53312f..a571420153b 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_unique_mow_sequence.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_unique_mow_sequence.groovy
@@ -30,7 +30,7 @@ suite("test_unique_mow_sequence") {
                     `c_mktsegment` varchar(11) NOT NULL COMMENT ""
             )
             UNIQUE KEY (`c_custkey`)
-            CLUSTER BY (`c_nation`, `c_mktsegment`, `c_region`)
+            ORDER BY (`c_nation`, `c_mktsegment`, `c_region`)
             DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
             PROPERTIES (
                     "function_column.sequence_type" = 'int',
diff --git a/regression-test/suites/unique_with_mow_c_p0/test_update.groovy b/regression-test/suites/unique_with_mow_c_p0/test_update.groovy
index b062da54516..dfd84e30042 100644
--- a/regression-test/suites/unique_with_mow_c_p0/test_update.groovy
+++ b/regression-test/suites/unique_with_mow_c_p0/test_update.groovy
@@ -29,7 +29,7 @@ suite("test_update") {
             `c` int NOT NULL
         ) ENGINE=OLAP
         UNIQUE KEY(`a`)
-        CLUSTER BY (`b`)
+        ORDER BY (`b`)
         DISTRIBUTED BY HASH(`a`) BUCKETS 1
         PROPERTIES (
             "replication_num" = "1",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_create.sql
index d1ecb0f40be..49622b7237c 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_create.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS `customer` (
   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`c_custkey`)
-CLUSTER BY (`c_region`, `c_phone`, `c_city`)
+ORDER BY (`c_region`, `c_phone`, `c_city`)
 DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_sequence_create.sql
index 23cd8eea913..124276f67a4 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/customer_sequence_create.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS `customer` (
   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`c_custkey`)
-CLUSTER BY (`c_mktsegment`, `c_city`, `c_region`, `c_nation`)
+ORDER BY (`c_mktsegment`, `c_city`, `c_region`, `c_nation`)
 DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_create.sql
index d801ef4bfe2..2b164434f03 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `date` (
   `d_weekdayfl` int(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`d_datekey`)
-CLUSTER BY (`d_sellingseason`, `d_holidayfl`)
+ORDER BY (`d_sellingseason`, `d_holidayfl`)
 DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_sequence_create.sql
index 5407b9953bf..61540ea5075 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/date_sequence_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `date` (
   `d_weekdayfl` int(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`d_datekey`)
-CLUSTER BY (`d_sellingseason`, `d_lastdayinweekfl`)
+ORDER BY (`d_sellingseason`, `d_lastdayinweekfl`)
 DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_create.sql
index 9c7da522fcf..aae56c3848d 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `lineorder` (
   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`lo_orderdate`,`lo_orderkey`,`lo_linenumber`)
-CLUSTER BY (`lo_orderdate`, `lo_orderkey`, `lo_shipmode`)
+ORDER BY (`lo_orderdate`, `lo_orderkey`, `lo_shipmode`)
 PARTITION BY RANGE(`lo_orderdate`)
 (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
 PARTITION p1993 VALUES [("19930101"), ("19940101")),
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql
index 68061f835d6..b4a0e4d44a4 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/lineorder_sequence_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `lineorder` (
   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`lo_orderdate`,`lo_orderkey`,`lo_linenumber`)
-CLUSTER BY (`lo_supplycost`, `lo_orderdate`, `lo_orderkey`)
+ORDER BY (`lo_supplycost`, `lo_orderdate`, `lo_orderkey`)
 PARTITION BY RANGE(`lo_orderdate`)
 (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
 PARTITION p1993 VALUES [("19930101"), ("19940101")),
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_create.sql
index 0ea087a17c0..8daeb1cfe50 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_create.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `part` (
   `p_container` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`p_partkey`)
-CLUSTER BY (`p_color`, `p_name`, `p_category`)
+ORDER BY (`p_color`, `p_name`, `p_category`)
 DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_sequence_create.sql
index a02c693f866..4e23199b6d9 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/part_sequence_create.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `part` (
   `p_container` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`p_partkey`)
-CLUSTER BY (`p_size`, `p_type`, `p_partkey`)
+ORDER BY (`p_size`, `p_type`, `p_partkey`)
 DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_create.sql
index 5b3c9f7ffee..253ec85341f 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_create.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `supplier` (
   `s_phone` varchar(16) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`s_suppkey`)
-CLUSTER BY (`s_address`)
+ORDER BY (`s_address`)
 DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql
index f99b17b148a..b09de9cd551 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_load_zstd/ddl/supplier_sequence_create.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `supplier` (
   `s_phone` varchar(16) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`s_suppkey`)
-CLUSTER BY (`s_nation`, `s_region`, `s_city`, `s_name`)
+ORDER BY (`s_nation`, `s_region`, `s_city`, `s_name`)
 DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/customer_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/customer_create.sql
index 5ade9e170ad..0dc08f0d6e6 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/customer_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/customer_create.sql
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS `customer` (
   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`c_custkey`)
-CLUSTER BY (`c_region`, `c_address`, `c_city`, `c_name`)
+ORDER BY (`c_region`, `c_address`, `c_city`, `c_name`)
 DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/date_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/date_create.sql
index 0ae14f534ca..c6e2ea100c3 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/date_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/date_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `date` (
   `d_weekdayfl` int(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`d_datekey`)
-CLUSTER BY (`d_weeknuminyear`, `d_month`)
+ORDER BY (`d_weeknuminyear`, `d_month`)
 DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/lineorder_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/lineorder_create.sql
index 4d213e2ff14..46e6a6f44f3 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/lineorder_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/lineorder_create.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `lineorder` (
   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`lo_orderdate`,`lo_orderkey`,`lo_linenumber`)
-CLUSTER BY (`lo_revenue`, `lo_orderdate`, `lo_orderpriority`)
+ORDER BY (`lo_revenue`, `lo_orderdate`, `lo_orderpriority`)
 PARTITION BY RANGE(`lo_orderdate`)
 (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
 PARTITION p1993 VALUES [("19930101"), ("19940101")),
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/part_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/part_create.sql
index 980c57e0a90..e8610a764b5 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/part_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/part_create.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `part` (
   `p_container` varchar(11) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`p_partkey`)
-CLUSTER BY (`p_color`, `p_container`)
+ORDER BY (`p_color`, `p_container`)
 DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/supplier_create.sql b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/supplier_create.sql
index 78d4e332efb..fddf397a6fa 100644
--- a/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/supplier_create.sql
+++ b/regression-test/suites/unique_with_mow_c_p2/ssb_unique_sql_zstd/ddl/supplier_create.sql
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `supplier` (
   `s_phone` varchar(16) NOT NULL COMMENT ""
 )
 UNIQUE KEY (`s_suppkey`)
-CLUSTER BY (`s_address`, `s_name`)
+ORDER BY (`s_address`, `s_name`)
 DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 10
 PROPERTIES (
 "enable_mow_light_delete" = "true",
diff --git a/regression-test/suites/unique_with_mow_c_p2/test_pk_uk_case.groovy b/regression-test/suites/unique_with_mow_c_p2/test_pk_uk_case.groovy
index c962dc9109e..4c58e0caf4b 100644
--- a/regression-test/suites/unique_with_mow_c_p2/test_pk_uk_case.groovy
+++ b/regression-test/suites/unique_with_mow_c_p2/test_pk_uk_case.groovy
@@ -56,7 +56,7 @@ suite("test_pk_uk_case") {
         L_COMMENT      VARCHAR(60) NOT NULL
         )
         UNIQUE KEY(L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER)
-        CLUSTER BY (L_PARTKEY, L_SUPPKEY, L_SHIPDATE)
+        ORDER BY (L_PARTKEY, L_SUPPKEY, L_SHIPDATE)
         DISTRIBUTED BY HASH(L_ORDERKEY) BUCKETS 1
         PROPERTIES (
         "replication_num" = "1",


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org