[branch-2.1] Picks "[Fix](schema change) Fix can't do reorder column schema change for MOW table and duplicate key table #37067" (#37226)

## Proposed changes

picks https://github.com/apache/doris/pull/37067
This commit is contained in:
bobhan1
2024-07-03 22:42:51 +08:00
committed by GitHub
parent 70e1c563b3
commit 69aebc2d25
8 changed files with 155 additions and 441 deletions

View File

@ -539,7 +539,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);
}

View File

@ -264,7 +264,7 @@ public class ColumnDefinition {
}
if (isOlap) {
if (!isKey && keysType.equals(KeysType.UNIQUE_KEYS)) {
if (!isKey && (keysType.equals(KeysType.UNIQUE_KEYS) || keysType.equals(KeysType.DUP_KEYS))) {
aggTypeImplicit = true;
}

View File

@ -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

View File

@ -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 --

View File

@ -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} {"a":1,"b":[1],"c":1.0}
-- !dup --
1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"a":1,"b":[1],"c":1.0} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343}
2 {"f1": "E", "f2": "F", "f3": 30, "f4": 484.3234} {"a":1,"b":[1],"c":1.0} \N
-- !mor --
1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} {"a":1,"b":[1],"c":1.0}
-- !mor --
1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"a":1,"b":[1],"c":1.0} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343}
2 {"f1": "E", "f2": "F", "f3": 30, "f4": 484.3234} {"a":1,"b":[1],"c":1.0} \N
-- !mow --
1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343} {"a":1,"b":[1],"c":1.0}
-- !mow --
1 {"f1": "A", "f2": "B", "f3": 10, "f4": 3.14} {"a":1,"b":[1],"c":1.0} {"f1": "C", "f2": "D", "f3": 20, "f4": 8.343}
2 {"f1": "E", "f2": "F", "f3": 30, "f4": 484.3234} {"a":1,"b":[1],"c":1.0} \N

View File

@ -1,121 +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") {
sql """ SET enable_profile = true """
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"""
}

View File

@ -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"""
}

View File

@ -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 VARIANT
) 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}, '{"a" : 1, "b" : [1], "c": 1.0}') """
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}, '{"a" : 1, "b" : [1], "c": 1.0}', 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 VARIANT
) 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}, '{"a" : 1, "b" : [1], "c": 1.0}') """
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}, '{"a" : 1, "b" : [1], "c": 1.0}', 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 VARIANT
) 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}, '{"a" : 1, "b" : [1], "c": 1.0}') """
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}, '{"a" : 1, "b" : [1], "c": 1.0}', null) """
qt_mow """ select * from ${tbl3} order by k1;"""
sql """DROP TABLE IF EXISTS ${tbl3} FORCE; """
}