diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DeleteStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DeleteStmt.java index 465cd6c16002b1..5db714f1394c44 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DeleteStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DeleteStmt.java @@ -342,7 +342,8 @@ private void checkDeleteConditions() throws AnalysisException { // TODO(Now we can not push down non-scala type like array/map/struct to storage layer because of // predict_column in be not support non-scala type, so we just should ban this type in delete predict, when // we delete predict_column in be we should delete this ban) - if (!column.getType().isScalarType()) { + if (!column.getType().isScalarType() + || (column.getType().isOnlyMetricType() && !column.getType().isJsonbType())) { throw new AnalysisException(String.format("Can not apply delete condition to column type: %s ", column.getType())); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java index 6d339a21d943cb..62feee1c43fafe 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java @@ -224,7 +224,8 @@ private void checkColumn(Set tableColumns, SlotReference slotReference, // TODO(Now we can not push down non-scala type like array/map/struct to storage layer because of // predict_column in be not support non-scala type, so we just should ban this type in delete predict, when // we delete predict_column in be we should delete this ban) - if (!column.getType().isScalarType()) { + if (!column.getType().isScalarType() + || (column.getType().isOnlyMetricType() && !column.getType().isJsonbType())) { throw new AnalysisException(String.format("Can not apply delete condition to column type: " + column.getType())); } diff --git a/regression-test/suites/delete_p0/test_delete.groovy b/regression-test/suites/delete_p0/test_delete.groovy index bdb1cf8e89cf85..c0a5e0fbfe0096 100644 --- a/regression-test/suites/delete_p0/test_delete.groovy +++ b/regression-test/suites/delete_p0/test_delete.groovy @@ -483,4 +483,33 @@ suite("test_delete") { sql "set experimental_enable_nereids_planner = false;" sql "set @data_batch_num='2024-01-31 00:00:00';" sql "delete from bi_acti_per_period_plan where data_batch_num =@data_batch_num; " + + // delete bitmap + sql "drop table if exists table_bitmap" + sql """ + CREATE TABLE if not exists `table_bitmap` ( + `dt` DATE NULL, + `page_id` INT NULL, + `page_level` INT NULL, + `user_id` BITMAP NOT NULL + ) ENGINE=OLAP + DUPLICATE KEY(`dt`, `page_id`, `page_level`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`dt`) BUCKETS 10 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + + sql """ + insert into table_bitmap values + ('2021-12-09', 101 , 1 , BITMAP_FROM_STRING('100001,100002,100003,100004,100005')), + ('2021-12-09', 102 , 2 , BITMAP_FROM_STRING('100001,100003,100004')), + ('2021-12-09', 103 , 3 , BITMAP_FROM_STRING('100003')); + """ + + test { + sql "delete from table_bitmap where user_id is null" + exception "Can not apply delete condition to column type: BITMAP" + } }