【详述】
datetime时间字段如果存在NULL值且行数达到500w左右时,对此字段进行全局排序分页,数据排序错误,建表语句如下:
CREATE TABLE map_test
(
id
largeint(40) NOT NULL COMMENT “”,
source
tinyint(4) NOT NULL COMMENT “”,
date
varchar(10) NOT NULL COMMENT “”,
top_name
varchar(100) NULL COMMENT “”,
second_name
varchar(100) NULL COMMENT “”,
third_name
varchar(100) NULL COMMENT “”,
id_arrival
bigint(20) NULL COMMENT “”,
t_time
datetime NULL COMMENT “”,
oc_time
datetime NULL COMMENT “”,
province
varchar(300) NULL COMMENT “”,
city
varchar(300) NULL COMMENT “”,
area
varchar(300) NULL COMMENT “”,
re_time
datetime NULL COMMENT “”,
del_time
datetime NULL COMMENT “”
) ENGINE=OLAP
PRIMARY KEY(id
, source
, date
)
COMMENT “”
DISTRIBUTED BY HASH(date
) BUCKETS 120
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“enable_persistent_index” = “false”
);
样例数据:
131579564,3,2023-01-25,一级,二级,三级,2023-01-25 10:41:03,2023-01-24 22:34:16,省,市,区,2023-02-03 17:47:12,NULL;
280311488,3,2023-01-25,一级,二级,三级,2023-01-25 10:41:03,2023-01-24 22:34:16,省,市,区,NULL,2023-01-25 16:11:49;
585483588,3,2023-01-25,一级,二级,三级,2023-01-25 10:41:03,2023-01-24 22:34:16,省,市,区,2023-03-03 17:47:12,NULL;
re_time 或 del_time 字段存在NULL值,其余符合时间散列。
目前确认分桶键和主键不影响排序结果。
【背景】
parallel_fragment_exec_instance_num = 1
query_mem_limit = 0
查询分页数据时,发现同样页数数据不一致。
执行以下SQL,多次结果不一致:
SELECT del_time FROM map_test ORDER BY del_time DESC LIMIT 1000,100
如果加上限定条件,即使条件没有过滤任何数据,结果保持一致:
SELECT del_time FROM map_test WHERE del_time > ‘2000-01-01’ ORDER BY del_time DESC LIMIT 1000,100
修正一下,在做千万级别测试时,发现:
SELECT del_time FROM map_test WHERE date> ‘2000-01-01’ ORDER BY del_time DESC LIMIT 1000,100
这种类型查询,也会出现不一致的情况!
【StarRocks版本】:2.3.1
【集群规模】例如:3fe(3 follower)+3be(fe与be混部)
【机器信息】:40C/256G
【附件】