直接看解决方案请翻到最后一行
1.Nullable列
优点:允许Null值插入,在导数时对null值不需要额外处理
缺点,Nullable 列相比普通列需要额外的存储空间且对性能有一些影响,且一些函数splitByString对Nullable列是不支持的
2.转换处理
我们在建表时几乎每个列都加上了Nullable,这就导致了处理这些列遇见一些问题
例如names Nullable(String)字段,我想要按逗号切分这个names
select splitByString(',',names) from table
会报如下错误
DB::Exception: Nested type Array(String) cannot be inside Nullable type (version 19.5.3.1)
那么如何解决这个问题呢?当然是把Nullable(String)转换成String了
刚开始试一下了几种方法
- toString(names)
- substring(name,1,length(name)) + 别名
- concat(names,'') + 别名
- 组合查询
- 子查询
发现并没有什么 软 用
后来换成cast(names as String)成功解决问题
select splitByString(',',cast(names as String)) from table