带分区建表后插入数据,BE直接挂

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】问题详细描述
【背景】建表语句:
CREATE TABLE t (
day datetime
) ENGINE=OLAP
PRIMARY KEY(day)
PARTITION BY RANGE(cast(substr(day, 1, 10) as datetime))
(
PARTITION p201704 VALUES LESS THAN (‘20170501’),
PARTITION p201705 VALUES LESS THAN (‘20170601’),
PARTITION p201706 VALUES LESS THAN (‘20170701’)
)
DISTRIBUTED BY HASH(day) BUCKETS 10
PROPERTIES (
“replication_num” = “1”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”
);

插入数据:
insert into t values(“20170601”);

结果:BE直接挂掉

【业务影响】
【是否存算分离】否
【StarRocks版本】例如:3.1.10
【集群规模】单机
【机器信息】
【联系方式】
【附件】

看起来是爆内存了。把be的be.out日志发出来吧!里面有be挂掉时的栈跟踪信息。
另外看你好像是在做测试,为什么不用新的版本来做验证呢?新版本会修复一些老版本的bug。

这个新版本也有这个问题,我们来Fix下。

调用栈:

substr_const_not_null这个函数里面,443行里面的入参是0,到444行就会数组越界
image

列的类型是varchar就可以。
我不太清楚什么场景下会走到StringFunctions::substring这个函数里面,正常使用SELECT substr("aaaa", 1) 是不会走到这个函数的,感觉挺奇怪

感谢,另外有空的话也可以看这个: 分区后按条件查询结果不一致 - :speech_balloon: StarRocks 用户问答 / 功能使用相关 - StarRocks中文社区论坛 (mirrorship.cn)

可能是执行计划有问题,把列类型搞错了,这种导致的。

应该不是,之前加过日志,是有走到VectorizedCastExprFactory::create_cast_expr这里的,将datetime类型转成varcahr

能不能把修复这个bug的任务分给我,让我试试?我想给社区做点贡献。

可以的,你来修下吧,实际类型是Timestamp类型,当作String类型处理了。

少了一个cast

好的,要在github上发个Issues,然后提PR。是吗?

是的,流程是这样的

类型搞错了,E0710 16:19:37.705088 1786672 string_functions.cpp:557] TYPE: timestamp

收到,我来做一下。

咦,调用栈竟然不一样
不过应该就是这里了,感谢

我是ASAN模式编译的,容易暴露出真正问题点

建好后,把Issue发下,大概率是FE执行计划搞的有问题。

学习了

另一个帖子,可能是一样的问题,只是表现不一样,等修复了再试下吧,