如何用split对表中的一列操作,使其每一个元素为一列呢?

如何用split对表中的一列操作,使其每一个元素为一列呢?比如我的表中有一列,格式类似于“aa bb cc”,如何将其变为aa为一列,bb为一列,cc为一列?

请先 登录 后评论

1 个回答

Shena Mao

由于split的对象必须是标量,故在表中,可以用each\loop进行操作。

可以写一个自定义函数,将其应用于想要展开的几列:

def splitV(sp,k){
        return string(split(sp, " ")[k])
}


应用于表中:

sp = array(STRING, 0).append!("aa bb cc").append!("aa bb dd")
t = table(sp as sp)
select *, each(splitV,sp,0) as `a, each(splitV,sp,1) as `b, each(splitV,sp,2) as `c from t


输出为:

attachments-2022-06-rB5CZM2d62a6f698b386e.png


如若这一列的格式非常统一,可以用`substr`内置函数做向量化处理,性能至少能提升一倍:

select *, substr(sp,0,2) as `a, substr(sp,3,2) as `b, substr(sp,6,2) as `c from t


请先 登录 后评论
  • 1 关注
  • 0 收藏,986 浏览
  • ricecake 提出于 2022-06-13 16:29