由于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
输出为:
如若这一列的格式非常统一,可以用`substr`内置函数做向量化处理,性能至少能提升一倍:
select *, substr(sp,0,2) as `a, substr(sp,3,2) as `b, substr(sp,6,2) as `c from t