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

或是也用ASAN编译1个BE,看看Crash不

看起来是建表时这句引入的问题:PARTITION BY RANGE(cast(substr(day, 1, 10) as datetime))。substr函数是不能用于datetime类型的,这里的问题在建表时没有对substr(day, 1, 10) as datetime)进行校验,不应该让他用这个去建表的。

我用下面这个建语句就没问题了
CREATE TABLE t1 (
day datetime
) ENGINE=OLAP
PRIMARY KEY(day)
PARTITION BY RANGE(day)
(
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”
);

“substr函数是不能用于datetime类型的”

是可以用的,你可以select substr(date_column, x, x)试试

你这样查它隐式把date_column为了Varcher,再调用substr了。
substr的函数定义里确实没有接收datetime类型的。

要不我修改substr的函数让它可以接收datetime类型。但这个和substr的函数原意就有区别了,这样原作者会不会review过去呢?

我还是加个校验吧,不让用非VARCHAR 的参数去调用substring避免BE宕机。

@trueeyu 这个Issue(https://github.com/StarRocks/starrocks/issues/48141)你看行不行?

30xxx: string functions

[30010, 'substr', True, False, 'VARCHAR', ['VARCHAR', 'INT'], 'StringFunctions::substring',
 'StringFunctions::sub_str_prepare', 'StringFunctions::sub_str_close'],
[30011, 'substr', True, False, 'VARCHAR', ['VARCHAR', 'INT', 'INT'], 'StringFunctions::substring',
 'StringFunctions::sub_str_prepare', 'StringFunctions::sub_str_close'],
[30012, 'substring', True, False, 'VARCHAR', ['VARCHAR', 'INT'], 'StringFunctions::substring',
 'StringFunctions::sub_str_prepare', 'StringFunctions::sub_str_close'],
[30013, 'substring', True, False, 'VARCHAR', ['VARCHAR', 'INT', 'INT'], 'StringFunctions::substring',
 'StringFunctions::sub_str_prepare', 'StringFunctions::sub_str_close'],

上面是substring函数的定义只接受VARCHAR参数的。

你好,这个设计的时候就是只支持string类型的,不支持datetime,datetime没必要这么做的。你这边儿有兴趣方便提个PR来修复这个问题吗?

这个问题好像也是你设计的,可以帮看看吗? 分区后按条件查询结果不一致 - :speech_balloon: StarRocks 用户问答 / 功能使用相关 - StarRocks中文社区论坛 (mirrorship.cn)

@Astralidea PR是关于收复substr函数对传入的columns进行校验,还是不允许在PARTITION BY RANGE里错误的使用函数来建分区表?

另外,我已经提了个issues([https://github.com/StarRocks/starrocks/issues/48141 ](https://github.com/StarRocks/starrocks/issues/48141 ),你把任务分配给我,我去做修复提RP吧。

你的另个问题应该也是在PARTITION BY RANGE里引入的问题。

我知道,我最近在试这块的功能,随便弄了几个场景。

substr函数没必要做校验吧,能把类型隐式转换过去就行了。
我的疑问是为什么用在分区里,实现就不一样了,感觉可以用统一的接口啊,不然每个场景都得单独校验类型

这个我找时间去看看它生成的执行计划是怎么样的。