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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]