setColumnarTuple!

语法

setColumnarTuple!(X, [on=true])

详情

tuple 原地标记为 columnar tuple,或取消 columnar tuple 标记。

columnar tuple 仍然是由标量或向量组成的 ANY 类型元组,但系统会按照类似数组向量的列式规则解释它:tuple 中的每个元素对应表列中的一行值;当元素为向量时,该行保存一个数组。普通 tuple 则按元组规则解释,作为表列时每一行是一个完整的 ANY 类型元素。

例如,对包含向量元素的表列调用 ungroup 时,普通 tuple 列不会被展开;转换为 columnar tuple 后,ungroup 会将每行中的向量元素展开。

参数

X 由相同数据类型的向量或标量组成的 tuple。

on 可选参数,布尔值,表示是否将 X 标记为 columnar tuple。默认值为 true。

  • on = true 时,将普通 tuple 转换为 columnar tuple。

  • on = false 时,取消 columnar tuple 标记,将其转换为普通 tuple。

返回值

返回修改后的 X

  • on = true 时,返回 columnar tuple。

  • on = false 时,返回普通 tuple。

例子

将普通 tuple 转换为 columnar tuple。

tp = [[1,2,3], [4,5,6], [7,8]]
isColumnarTuple(tp)
// output: false

tp.setColumnarTuple!()
isColumnarTuple(tp)
// output: true

普通 tuple 作为表列时,每一行是一个 ANY 类型元素,ungroup 不会展开其中的向量。

t = table([1,2] as id, ([10,11], 12) as v)
ungroup(t)
id v
1 [10,11]
2 12

将普通 tuple 转换为 columnar tuple 后,ungroup 会按照数组向量的规则展开 v 列。

t = table([1,2] as id, ([10,11], 12).setColumnarTuple!() as v)
ungroup(t)
id v
1 10
1 11
2 12

取消 columnar tuple 标记。

v = ([10,11], 12).setColumnarTuple!()
isColumnarTuple(v)
// output: true

v.setColumnarTuple!(false)
isColumnarTuple(v)
// output: false