可以用 loop 函数实现,参考脚本如下
t = table(`a`b as sym, array(INT[]).append!([1 2 1, 2 3 2]) as val)
select sym, loop(distinct,val) as`val from t // 不保证顺序
select sym, loop(x -> x[ifirstHit{==,x,}:E(distinct x).sort()], val) as `val from t // 保证顺序
假设有含arrayVector列的表t,要求对arrayVector列中每一行的数据做去重。
t = table(`a`b as sym, array(INT[]).append!([1 2 1 3, 2 3 2 1 0 0]) as val)
方案一:loop + distinct 对arrayVector列中每一行的数据做去重。该方案去重后每行的元素顺序不会保留。
t2 = select sym, array(INT[]).append!(loop(distinct,val))as `val from t
方案二:loop + distinct 去重,并使用ifirstHit 使结果按照去重之前每个值第一次出现的顺序排序。
t3 = select sym, array(INT[]).append!(loop(x -> x[ifirstHit{==,x,}:E(distinct x).sort()], val)) as `val from t