This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 0c3e73e6016 Branch-3.0 [Fix](RowStore) fix partial columns as row store (#49542) (#49609) 0c3e73e6016 is described below commit 0c3e73e6016a1d65047a060c4f9292e6689c1018 Author: lihangyu <lihan...@selectdb.com> AuthorDate: Sun Mar 30 10:43:02 2025 +0800 Branch-3.0 [Fix](RowStore) fix partial columns as row store (#49542) (#49609) cherry-pick from #49542 --- be/src/service/point_query_executor.cpp | 2 + .../apache/doris/alter/SchemaChangeHandler.java | 17 ++++-- .../org/apache/doris/catalog/TableProperty.java | 3 ++ regression-test/data/point_query_p0/load.out | Bin 5193 -> 5239 bytes regression-test/suites/point_query_p0/load.groovy | 60 +++++++++++++++++++-- 5 files changed, 75 insertions(+), 7 deletions(-) diff --git a/be/src/service/point_query_executor.cpp b/be/src/service/point_query_executor.cpp index d3935745882..2079a496f39 100644 --- a/be/src/service/point_query_executor.cpp +++ b/be/src/service/point_query_executor.cpp @@ -79,6 +79,8 @@ static void get_missing_and_include_cids(const TabletSchema& schema, for (auto* slot : slots) { missing_cids.insert(slot->col_unique_id()); } + // insert delete sign column id + missing_cids.insert(schema.columns()[schema.delete_sign_idx()]->unique_id()); if (target_rs_column_id == -1) { // no row store columns return; 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 deb9f0ac938..8ae7112e49b 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 @@ -1382,12 +1382,21 @@ public class SchemaChangeHandler extends AlterHandler { } catch (AnalysisException e) { throw new DdlException(e.getMessage()); } - // check row store column has change + boolean hasRowStoreChanged = false; - if (storeRowColumn || (rsColumns != null && !rsColumns.isEmpty())) { + if (storeRowColumn || rsColumns != null) { List<String> oriRowStoreColumns = olapTable.getTableProperty().getCopiedRowStoreColumns(); - if ((oriRowStoreColumns != null && !oriRowStoreColumns.equals(rsColumns)) - || storeRowColumn != olapTable.storeRowColumn()) { + // correct the comparison logic for null and empty list + boolean columnsChanged = false; + if (rsColumns == null) { + columnsChanged = oriRowStoreColumns != null; + } else if (oriRowStoreColumns == null) { + columnsChanged = true; + } else { + columnsChanged = !oriRowStoreColumns.equals(rsColumns); + } + // partial row store columns changed, or store_row_column enabled, not supported to disable at present + if (columnsChanged || (!olapTable.storeRowColumn() && storeRowColumn)) { // only support mow and duplicate model if (!(olapTable.getKeysType() == KeysType.DUP_KEYS || olapTable.getEnableUniqueKeyMergeOnWrite())) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java index cdefe46a102..e2e28d9652e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java @@ -688,6 +688,9 @@ public class TableProperty implements Writable, GsonPostProcessable { modifyTableProperties(PropertyAnalyzer.PROPERTIES_ROW_STORE_COLUMNS, Joiner.on(",").join(rowStoreColumns)); buildRowStoreColumns(); + } else { + // clear row store columns + this.rowStoreColumns = null; } } diff --git a/regression-test/data/point_query_p0/load.out b/regression-test/data/point_query_p0/load.out index e2a2ef88733..36880e254f9 100644 Binary files a/regression-test/data/point_query_p0/load.out and b/regression-test/data/point_query_p0/load.out differ diff --git a/regression-test/suites/point_query_p0/load.groovy b/regression-test/suites/point_query_p0/load.groovy index 8e7db326fb8..99b317a0def 100644 --- a/regression-test/suites/point_query_p0/load.groovy +++ b/regression-test/suites/point_query_p0/load.groovy @@ -126,23 +126,35 @@ suite("test_load_and_schema_change_row_store", "p0") { sql "INSERT INTO tbl_scalar_types_dup_1 SELECT * from tbl_scalar_types_dup" sql """alter table tbl_scalar_types_dup_1 set ("bloom_filter_columns" = "c_largeint")""" wait_job_done.call("tbl_scalar_types_dup_1") + + sql """alter table tbl_scalar_types_dup_1 set ("row_store_columns" = "k1,c_largeint")""" + wait_job_done.call("tbl_scalar_types_dup_1") + + def show_result = sql "SHOW CREATE TABLE tbl_scalar_types_dup_1" + assertTrue(show_result[0][1].contains("k1,c_largeint")) + sql """alter table tbl_scalar_types_dup_1 set ("store_row_column" = "true")""" wait_job_done.call("tbl_scalar_types_dup_1") + show_result = sql "SHOW CREATE TABLE tbl_scalar_types_dup_1" + assertTrue(show_result[0][1].contains("store_row_column")) qt_sql "select sum(length(__DORIS_ROW_STORE_COL__)) from tbl_scalar_types_dup_1" + sql """ ALTER table tbl_scalar_types_dup_1 ADD COLUMN new_column1 INT default "123"; """ sql "select /*+ SET_VAR(enable_nereids_planner=true)*/ * from tbl_scalar_types_dup_1 where k1 = -2147303679" sql """insert into tbl_scalar_types_dup_1(new_column1) values (9999999)""" qt_sql """select length(__DORIS_ROW_STORE_COL__) from tbl_scalar_types_dup_1 where new_column1 = 9999999""" - explain { sql("select /*+ SET_VAR(enable_nereids_planner=true)*/ * from tbl_scalar_types_dup_1 where k1 = -2147303679") contains "SHORT-CIRCUIT" } + sql """alter table tbl_scalar_types_dup_1 set ("row_store_columns" = "k1,c_datetimev2")""" wait_job_done.call("tbl_scalar_types_dup_1") qt_sql "select sum(length(__DORIS_ROW_STORE_COL__)) from tbl_scalar_types_dup_1" + show_result = sql "SHOW CREATE TABLE tbl_scalar_types_dup_1" + assertTrue(show_result[0][1].contains("k1,c_datetimev2")) sql "set enable_short_circuit_query_access_column_store = false" test { sql "select /*+ SET_VAR(enable_nereids_planner=true,enable_short_circuit_query_access_column_store=false)*/ * from tbl_scalar_types_dup_1 where k1 = -2147303679" @@ -152,16 +164,19 @@ suite("test_load_and_schema_change_row_store", "p0") { sql("select /*+ SET_VAR(enable_nereids_planner=true)*/ k1, c_datetimev2 from tbl_scalar_types_dup_1 where k1 = -2147303679") contains "SHORT-CIRCUIT" } - qt_sql "select /*+ SET_VAR(enable_nereids_planner=true)*/ k1, c_datetimev2 from tbl_scalar_types_dup_1 where k1 = -2147303679" + + sql "set enable_short_circuit_query_access_column_store = true" + qt_sql "select /*+ SET_VAR(enable_nereids_planner=true,enable_short_circuit_query_access_column_store=true)*/ k1, c_datetimev2 from tbl_scalar_types_dup_1 where k1 = -2147303679" sql """alter table tbl_scalar_types_dup_1 set ("row_store_columns" = "k1,c_decimalv3")""" wait_job_done.call("tbl_scalar_types_dup_1") + sql "set enable_short_circuit_query_access_column_store = false" test { sql "select /*+ SET_VAR(enable_nereids_planner=true,enable_short_circuit_query_access_column_store=false)*/ k1,c_datetimev2 from tbl_scalar_types_dup_1 where k1 = -2147303679" exception("Not support column store") } - qt_sql "select /*+ SET_VAR(enable_nereids_planner=true,enable_short_circuit_query_access_column_store=false)*/ k1, c_decimalv3 from tbl_scalar_types_dup_1 where k1 = -2147303679" sql "set enable_short_circuit_query_access_column_store = true" + qt_sql "select /*+ SET_VAR(enable_nereids_planner=true)*/ k1, c_decimalv3 from tbl_scalar_types_dup_1 where k1 = -2147303679" sql "DROP TABLE IF EXISTS tbl_scalar_types_uk_not_mow" @@ -195,4 +210,43 @@ suite("test_load_and_schema_change_row_store", "p0") { sql """alter table tbl_scalar_types_agg set ("store_row_column" = "true")""" exception("`store_row_column` only support duplicate model or mow model") } + + sql "DROP TABLE IF EXISTS test_sclar_types_mow" + sql """ + CREATE TABLE IF NOT EXISTS test_sclar_types_mow ( + `k1` bigint(11) NULL, + `c_string` text NULL + ) ENGINE=OLAP + UNIQUE KEY(`k1`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`k1`) BUCKETS 1 + PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true"); + """ + sql "insert into test_sclar_types_mow(k1,c_string) values (1,'123'), (2,'456')" + sql """alter table test_sclar_types_mow set ("store_row_column" = "true")""" + wait_job_done.call("test_sclar_types_mow") + show_result = sql "SHOW CREATE TABLE test_sclar_types_mow" + assertTrue(show_result[0][1].contains("store_row_column")) + qt_sql "select * from test_sclar_types_mow where k1 = 1" + + sql """alter table test_sclar_types_mow set ("row_store_columns" = "c_string")""" + wait_job_done.call("test_sclar_types_mow") + show_result = sql "SHOW CREATE TABLE test_sclar_types_mow" + assertTrue(show_result[0][1].contains("c_string")) + qt_sql "select c_string from test_sclar_types_mow where k1 = 1" + // alter again + test { + sql """alter table test_sclar_types_mow set ("row_store_columns" = "c_string")""" + exception("Nothing is changed") + } + + sql """alter table test_sclar_types_mow set ("store_row_column" = "true")""" + wait_job_done.call("test_sclar_types_mow") + sql "select * from test_sclar_types_mow where k1 = 1" + + // test delete with partial row store columns + sql """alter table test_sclar_types_mow set ("row_store_columns" = "k1,c_string")""" + wait_job_done.call("test_sclar_types_mow") + sql "delete from test_sclar_types_mow where k1 = 1" + qt_sql "select * from test_sclar_types_mow where k1 = 1" } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org