This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new 4b8554535da [branch-2.0] Picks "[Fix](schema change) Fix can't do reorder column schema change for MOW table and duplicate key table #37067" (#37515) 4b8554535da is described below commit 4b8554535da7d2b41be91e2b9d8ccf20301d4e6c Author: bobhan1 <bh2444151...@outlook.com> AuthorDate: Sat Jul 13 22:07:46 2024 +0800 [branch-2.0] Picks "[Fix](schema change) Fix can't do reorder column schema change for MOW table and duplicate key table #37067" (#37515) ## Proposed changes picks https://github.com/apache/doris/pull/37067 --- .../apache/doris/alter/SchemaChangeHandler.java | 4 +- .../org/apache/doris/analysis/CreateTableStmt.java | 3 +- .../test_schema_change_datev2_with_delete.out | 81 ---------- .../datev2/test_dup_keys_schema_change_datev2.out | 70 --------- .../test_modify_reorder_column.out | 22 +++ .../test_schema_change_datev2_with_delete.groovy | 120 --------------- .../test_dup_keys_schema_change_datev2.groovy | 167 --------------------- .../test_modify_reorder_column.groovy | 131 ++++++++++++++++ 8 files changed, 157 insertions(+), 441 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java index dae99f40a36..b526b217f34 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java @@ -541,7 +541,7 @@ public class SchemaChangeHandler extends AlterHandler { } if (!modColumn.isKey()) { if (olapTable.getEnableUniqueKeyMergeOnWrite()) { - modColumn.setAggregationType(AggregateType.NONE, false); + modColumn.setAggregationType(AggregateType.NONE, true); } else { modColumn.setAggregationType(AggregateType.REPLACE, true); } @@ -928,7 +928,7 @@ public class SchemaChangeHandler extends AlterHandler { } if (!newColumn.isKey()) { if (olapTable.getEnableUniqueKeyMergeOnWrite()) { - newColumn.setAggregationType(AggregateType.NONE, false); + newColumn.setAggregationType(AggregateType.NONE, true); } else { newColumn.setAggregationType(AggregateType.REPLACE, true); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java index 22f55598856..b2120a3133c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java @@ -574,7 +574,8 @@ public class CreateTableStmt extends DdlStmt { for (ColumnDef columnDef : columnDefs) { Column col = columnDef.toColumn(); - if (keysDesc != null && keysDesc.getKeysType() == KeysType.UNIQUE_KEYS) { + if (keysDesc != null && (keysDesc.getKeysType() == KeysType.UNIQUE_KEYS + || keysDesc.getKeysType() == KeysType.DUP_KEYS)) { if (!col.isKey()) { col.setAggregationTypeImplicit(true); } diff --git a/regression-test/data/schema_change/test_schema_change_datev2_with_delete.out b/regression-test/data/schema_change/test_schema_change_datev2_with_delete.out deleted file mode 100644 index 2ef72df7c71..00000000000 --- a/regression-test/data/schema_change/test_schema_change_datev2_with_delete.out +++ /dev/null @@ -1,81 +0,0 @@ --- This file is automatically generated. You should know what you did if you want to edit this --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - diff --git a/regression-test/data/schema_change_p0/datev2/test_dup_keys_schema_change_datev2.out b/regression-test/data/schema_change_p0/datev2/test_dup_keys_schema_change_datev2.out deleted file mode 100644 index de1946b723f..00000000000 --- a/regression-test/data/schema_change_p0/datev2/test_dup_keys_schema_change_datev2.out +++ /dev/null @@ -1,70 +0,0 @@ --- This file is automatically generated. You should know what you did if you want to edit this --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- -2022-01-01 2022-01-06T11:11:11 2022-01-06 2022-01-06T11:11:11 -2022-01-02 2022-01-02T11:11:11 2022-01-02 2022-01-02T11:11:11 -2022-01-03 2022-01-03T11:11:11 2022-01-03 2022-01-01T11:11:11 -2022-01-04 2022-01-04T11:11:11 2022-01-01 2022-01-04T11:11:11 -2022-01-05 2022-01-01T11:11:11 2022-01-05 2022-01-05T11:11:11 - --- !sql -- - diff --git a/regression-test/data/schema_change_p0/test_modify_reorder_column.out b/regression-test/data/schema_change_p0/test_modify_reorder_column.out new file mode 100644 index 00000000000..3f951b0640d --- /dev/null +++ b/regression-test/data/schema_change_p0/test_modify_reorder_column.out @@ -0,0 +1,22 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !dup -- +1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} 10 + +-- !dup -- +1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} 10 {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} +2 {"f1": "E", "f2": "F", "f3": 30, "f4": 484.3234} 20 \N + +-- !mor -- +1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} 10 + +-- !mor -- +1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} 10 {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} +2 {"f1": "E", "f2": "F", "f3": 30, "f4": 484.3234} 20 \N + +-- !mow -- +1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} 10 + +-- !mow -- +1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} 10 {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} +2 {"f1": "E", "f2": "F", "f3": 30, "f4": 484.3234} 20 \N + diff --git a/regression-test/suites/schema_change/test_schema_change_datev2_with_delete.groovy b/regression-test/suites/schema_change/test_schema_change_datev2_with_delete.groovy deleted file mode 100644 index ca2cb666dbb..00000000000 --- a/regression-test/suites/schema_change/test_schema_change_datev2_with_delete.groovy +++ /dev/null @@ -1,120 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -suite("test_schema_change_datev2_with_delete") { - def tbName = "test_schema_change_datev2_with_delete" - def getJobState = { tableName -> - def jobStateResult = sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ - return jobStateResult[0][9] - } - - sql """ DROP TABLE IF EXISTS ${tbName} FORCE""" - // Create table and disable light weight schema change - sql """ - CREATE TABLE IF NOT EXISTS ${tbName} - ( - `datek1` date DEFAULT '2022-01-01', - `datek2` datetime DEFAULT '2022-01-01 11:11:11', - `datev1` date DEFAULT '2022-01-01', - `datev2` datetime DEFAULT '2022-01-01 11:11:11' - ) - DUPLICATE KEY(`datek1`,`datek2`) - DISTRIBUTED BY HASH(`datek1`) BUCKETS 1 - PROPERTIES("replication_num" = "1", "light_schema_change" = "false"); - """ - sql """ insert into ${tbName} values('2022-01-02', '2022-01-02 11:11:11', '2022-01-02', '2022-01-02 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev1`) values('2022-01-03', '2022-01-03 11:11:11', '2022-01-03');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev2`) values('2022-01-04', '2022-01-04 11:11:11', '2022-01-04 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datev1`, `datev2`) values('2022-01-05', '2022-01-05', '2022-01-05 11:11:11');""" - sql """ insert into ${tbName} (`datek2`, `datev1`, `datev2`) values('2022-01-06 11:11:11', '2022-01-06', '2022-01-06 11:11:11');""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ alter table ${tbName} modify column `datev1` datev2 DEFAULT '2022-01-01' """ - int max_try_time = 1000 - while(max_try_time--){ - String result = getJobState(tbName) - if (result == "FINISHED") { - sleep(3000) - break - } else { - sleep(100) - if (max_try_time < 1){ - assertEquals(1,2) - } - } - } - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ alter table ${tbName} modify column `datev2` datetimev2 DEFAULT '2022-01-01 11:11:11' """ - max_try_time = 1000 - while(max_try_time--){ - String result = getJobState(tbName) - if (result == "FINISHED") { - sleep(3000) - break - } else { - sleep(100) - if (max_try_time < 1){ - assertEquals(1,2) - } - } - } - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ alter table ${tbName} modify column `datev2` datetimev2(3) DEFAULT '2022-01-01 11:11:11' """ - max_try_time = 1000 - while(max_try_time--){ - String result = getJobState(tbName) - if (result == "FINISHED") { - sleep(3000) - break - } else { - sleep(100) - if (max_try_time < 1){ - assertEquals(1,2) - } - } - } - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ delete from ${tbName} where `datev1`='2022-01-02';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ delete from ${tbName} where `datev2`='2022-01-04 11:11:11.111';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ delete from ${tbName} where `datev2`='2022-01-04 11:11:11';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ insert into ${tbName} values('2022-01-02', '2022-01-02 11:11:11', '2022-01-02', '2022-01-02 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev1`) values('2022-01-03', '2022-01-03 11:11:11', '2022-01-03');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev2`) values('2022-01-04', '2022-01-04 11:11:11', '2022-01-04 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datev1`, `datev2`) values('2022-01-05', '2022-01-05', '2022-01-05 11:11:11');""" - sql """ insert into ${tbName} (`datek2`, `datev1`, `datev2`) values('2022-01-06 11:11:11', '2022-01-06', '2022-01-06 11:11:11');""" - - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - sql """ delete from ${tbName} where `datev1`='2022-01-01';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ delete from ${tbName} where `datev2`='2022-01-01 11:11:11.111';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ delete from ${tbName} where `datev2`='2022-01-01 11:11:11';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ DROP TABLE ${tbName} force""" -} diff --git a/regression-test/suites/schema_change_p0/datev2/test_dup_keys_schema_change_datev2.groovy b/regression-test/suites/schema_change_p0/datev2/test_dup_keys_schema_change_datev2.groovy deleted file mode 100644 index cb50fc85b09..00000000000 --- a/regression-test/suites/schema_change_p0/datev2/test_dup_keys_schema_change_datev2.groovy +++ /dev/null @@ -1,167 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import org.codehaus.groovy.runtime.IOGroovyMethods - -suite("test_dup_keys_schema_change_datev2") { - def tbName = "test_dup_keys_schema_change_datev2" - def getJobState = { tableName -> - def jobStateResult = sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ - return jobStateResult[0][9] - } - - String backend_id; - def backendId_to_backendIP = [:] - def backendId_to_backendHttpPort = [:] - getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); - - backend_id = backendId_to_backendIP.keySet()[0] - def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) - - logger.info("Show config: code=" + code + ", out=" + out + ", err=" + err) - assertEquals(code, 0) - def configList = parseJson(out.trim()) - assert configList instanceof List - - def do_compact = { tableName -> - String[][] tablets = sql """ show tablets from ${tableName}; """ - for (String[] tablet in tablets) { - String tablet_id = tablet[0] - backend_id = tablet[2] - logger.info("run compaction:" + tablet_id) - (code, out, err) = be_run_cumulative_compaction(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), tablet_id) - logger.info("Run compaction: code=" + code + ", out=" + out + ", err=" + err) - } - - // wait for all compactions done - for (String[] tablet in tablets) { - boolean running = true - do { - Thread.sleep(100) - String tablet_id = tablet[0] - backend_id = tablet[2] - (code, out, err) = be_get_compaction_status(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), tablet_id) - logger.info("Get compaction status: code=" + code + ", out=" + out + ", err=" + err) - assertEquals(code, 0) - def compactionStatus = parseJson(out.trim()) - assertEquals("success", compactionStatus.status.toLowerCase()) - running = compactionStatus.run_status - } while (running) - } - } - - sql """ DROP TABLE IF EXISTS ${tbName} FORCE""" - // Create table and disable light weight schema change - sql """ - CREATE TABLE IF NOT EXISTS ${tbName} - ( - `datek1` date DEFAULT '2022-01-01', - `datek2` datetime DEFAULT '2022-01-01 11:11:11', - `datev1` date DEFAULT '2022-01-01', - `datev2` datetime DEFAULT '2022-01-01 11:11:11' - ) - DUPLICATE KEY(`datek1`,`datek2`) - DISTRIBUTED BY HASH(`datek1`) BUCKETS 1 - PROPERTIES("replication_num" = "1", "light_schema_change" = "false"); - """ - // datev2 - sql """ insert into ${tbName} values('2022-01-02', '2022-01-02 11:11:11', '2022-01-02', '2022-01-02 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev1`) values('2022-01-03', '2022-01-03 11:11:11', '2022-01-03');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev2`) values('2022-01-04', '2022-01-04 11:11:11', '2022-01-04 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datev1`, `datev2`) values('2022-01-05', '2022-01-05', '2022-01-05 11:11:11');""" - sql """ insert into ${tbName} (`datek2`, `datev1`, `datev2`) values('2022-01-06 11:11:11', '2022-01-06', '2022-01-06 11:11:11');""" - - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ alter table ${tbName} modify column `datev1` datev2 DEFAULT '2022-01-01' """ - int max_try_time = 1000 - while (max_try_time--){ - String result = getJobState(tbName) - if (result == "FINISHED") { - sleep(3000) - break - } else { - sleep(100) - if (max_try_time < 1){ - assertEquals(1,2) - } - } - } - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - do_compact(tbName) - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - sql """delete from ${tbName} where `datev1` <= '2022-01-06';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - // datetimev2(0) - sql """ insert into ${tbName} values('2022-01-02', '2022-01-02 11:11:11', '2022-01-02', '2022-01-02 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev1`) values('2022-01-03', '2022-01-03 11:11:11', '2022-01-03');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev2`) values('2022-01-04', '2022-01-04 11:11:11', '2022-01-04 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datev1`, `datev2`) values('2022-01-05', '2022-01-05', '2022-01-05 11:11:11');""" - sql """ insert into ${tbName} (`datek2`, `datev1`, `datev2`) values('2022-01-06 11:11:11', '2022-01-06', '2022-01-06 11:11:11');""" - - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - sql """ alter table ${tbName} modify column `datev2` datetimev2 DEFAULT '2022-01-01 11:11:11' """ - max_try_time = 1000 - while (max_try_time--){ - String result = getJobState(tbName) - if (result == "FINISHED") { - sleep(3000) - break - } else { - sleep(100) - if (max_try_time < 1){ - assertEquals(1,2) - } - } - } - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - do_compact(tbName) - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - sql """delete from ${tbName} where `datev2` <= '2022-01-06 11:11:11';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - // datetimev2(3) - sql """ insert into ${tbName} values('2022-01-02', '2022-01-02 11:11:11', '2022-01-02', '2022-01-02 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev1`) values('2022-01-03', '2022-01-03 11:11:11', '2022-01-03');""" - sql """ insert into ${tbName} (`datek1`, `datek2`, `datev2`) values('2022-01-04', '2022-01-04 11:11:11', '2022-01-04 11:11:11');""" - sql """ insert into ${tbName} (`datek1`, `datev1`, `datev2`) values('2022-01-05', '2022-01-05', '2022-01-05 11:11:11');""" - sql """ insert into ${tbName} (`datek2`, `datev1`, `datev2`) values('2022-01-06 11:11:11', '2022-01-06', '2022-01-06 11:11:11');""" - - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - sql """ alter table ${tbName} modify column `datev2` datetimev2(3) DEFAULT '2022-01-01 11:11:11' """ - max_try_time = 1000 - while (max_try_time--){ - String result = getJobState(tbName) - if (result == "FINISHED") { - sleep(3000) - break - } else { - sleep(100) - if (max_try_time < 1){ - assertEquals(1,2) - } - } - } - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - do_compact(tbName) - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - sql """delete from ${tbName} where `datev2` < '2022-01-06 11:11:11.111';""" - qt_sql """select * from ${tbName} ORDER BY `datek1`;""" - - sql """ DROP TABLE ${tbName} force""" -} diff --git a/regression-test/suites/schema_change_p0/test_modify_reorder_column.groovy b/regression-test/suites/schema_change_p0/test_modify_reorder_column.groovy new file mode 100644 index 00000000000..8a9d5d1779e --- /dev/null +++ b/regression-test/suites/schema_change_p0/test_modify_reorder_column.groovy @@ -0,0 +1,131 @@ +// 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. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite ("test_modify_reorder_column") { + + def getJobState = { tableName -> + def jobStateResult = sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ + return jobStateResult[0][9] + } + + // test reorder column on duplicate table + def tbl1 = "test_modify_reorder_column_dup" + sql """ DROP TABLE IF EXISTS ${tbl1}; """ + sql """ create table ${tbl1} ( + k1 TINYINT, + colnotnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NOT NULL, + colnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NULL, + v int + ) duplicate key(k1) distributed by hash(k1) buckets 1 + properties( "replication_num" = "1" ); """ + + sql """insert into ${tbl1} values + (1, {"A", "B", 10, 3.14}, {"C", "D", 20, 8.343}, 10) """ + qt_dup """ select * from ${tbl1} order by k1;""" + + sql "ALTER TABLE ${tbl1} MODIFY COLUMN colnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NULL AFTER v" + + + int max_try_time = 100 + while (max_try_time--){ + String result = getJobState("${tbl1}") + if (result == "FINISHED") { + sleep(1000) + break + } else { + sleep(1000) + assertTrue(max_try_time>1) + } + } + + sql """insert into ${tbl1} values + (2, {"E", "F", 30, 484.3234}, 20, null) """ + qt_dup """ select * from ${tbl1} order by k1;""" + sql """DROP TABLE IF EXISTS ${tbl1} FORCE; """ + + + // test reorder column on MOR table + def tbl2 = "test_modify_reorder_column_mor" + sql """ DROP TABLE IF EXISTS ${tbl2}; """ + sql """ create table ${tbl2} ( + k1 TINYINT, + colnotnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NOT NULL, + colnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NULL, + v int + ) unique key(k1) distributed by hash(k1) buckets 1 + properties( "replication_num" = "1", "enable_unique_key_merge_on_write" = "false" ); """ + + sql """insert into ${tbl2} values + (1, {"A", "B", 10, 3.14}, {"C", "D", 20, 8.343}, 10) """ + qt_mor """ select * from ${tbl2} order by k1;""" + + sql "ALTER TABLE ${tbl2} MODIFY COLUMN colnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NULL AFTER v" + + max_try_time = 100 + while (max_try_time--){ + String result = getJobState("${tbl2}") + if (result == "FINISHED") { + sleep(1000) + break + } else { + sleep(1000) + assertTrue(max_try_time>1) + } + } + + sql """insert into ${tbl2} values + (2, {"E", "F", 30, 484.3234}, 20, null) """ + qt_mor """ select * from ${tbl2} order by k1;""" + sql """DROP TABLE IF EXISTS ${tbl2} FORCE; """ + + + // test reorder column on MOW table + def tbl3 = "test_modify_reorder_column_mow" + sql """ DROP TABLE IF EXISTS ${tbl3}; """ + sql """ create table ${tbl3} ( + k1 TINYINT, + colnotnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NOT NULL, + colnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NULL, + v int + ) unique key(k1) distributed by hash(k1) buckets 1 + properties( "replication_num" = "1", "enable_unique_key_merge_on_write" = "false" ); """ + + sql """insert into ${tbl3} values + (1, {"A", "B", 10, 3.14}, {"C", "D", 20, 8.343}, 10) """ + qt_mow """ select * from ${tbl3} order by k1;""" + + sql "ALTER TABLE ${tbl3} MODIFY COLUMN colnull STRUCT<f1: varchar(65533), f2: char(32), f3: int, f4: double> NULL AFTER v" + + max_try_time = 100 + while (max_try_time--){ + String result = getJobState("${tbl3}") + if (result == "FINISHED") { + sleep(1000) + break + } else { + sleep(1000) + assertTrue(max_try_time>1) + } + } + + sql """insert into ${tbl3} values + (2, {"E", "F", 30, 484.3234}, 20, null) """ + qt_mow """ select * from ${tbl3} order by k1;""" + sql """DROP TABLE IF EXISTS ${tbl3} FORCE; """ +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org