跳到主要内容
跳到主要内容

groupArrayInsertAt

向数组的指定位置插入一个值。

语法

groupArrayInsertAt(default_x, size)(x, pos)

如果在同一个查询中有多个值要插入到同一位置,函数的行为如下:

  • 如果查询在单线程中执行时,则使用第一个插入的值。
  • 如果查询在多线程中执行时,结果值是不确定的,为所插入值中的任意一个。

参数

  • x — 要插入的值。表达式,其结果为一种支持的数据类型
  • pos — 指定元素 x 将要插入的位置。数组中的索引编号从零开始。UInt32
  • default_x — 用于填充空位置的默认值。可选参数。表达式,其结果类型与参数 x 的数据类型相同。如果未定义 default_x,则使用默认值
  • size — 结果数组的长度。可选参数。使用该参数时,必须指定默认值 default_xUInt32

返回值

  • 包含插入值的数组。

类型:Array

示例

查询:

SELECT groupArrayInsertAt(toString(number), number * 2) FROM numbers(5);

结果:

┌─groupArrayInsertAt(toString(number), multiply(number, 2))─┐
│ ['0','','1','','2','','3','','4']                         │
└───────────────────────────────────────────────────────────┘

查询:

SELECT groupArrayInsertAt('-')(toString(number), number * 2) FROM numbers(5);

结果:

┌─groupArrayInsertAt('-')(toString(number), multiply(number, 2))─┐
│ ['0','-','1','-','2','-','3','-','4']                          │
└────────────────────────────────────────────────────────────────┘

查询:

SELECT groupArrayInsertAt('-', 5)(toString(number), number * 2) FROM numbers(5);

结果:

┌─groupArrayInsertAt('-', 5)(toString(number), multiply(number, 2))─┐
│ ['0','-','1','-','2']                                             │
└───────────────────────────────────────────────────────────────────┘

在同一位置多线程插入多个元素。

查询:

SELECT groupArrayInsertAt(number, 0) FROM numbers_mt(10) SETTINGS max_block_size = 1;

执行此查询将得到一个位于 [0,9] 范围内的随机整数。例如:

┌─groupArrayInsertAt(number, 0)─┐
│ [7]                           │
└───────────────────────────────┘