跳转到主内容
跳转到主内容

groupArrayInsertAt

groupArrayInsertAt

引入自:v1.1

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

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

  • 如果查询在单线程中执行时,则使用最先插入的那个值。
  • 如果查询在多线程中执行,则结果值是在这些插入值中不确定的其中一个。

语法

groupArrayInsertAt(default_x, size)([x, pos])

参数

  • default_x — 可选。用于填充空缺位置的默认值。Any
  • size — 可选。结果数组的长度。使用该参数时,必须同时指定默认值 default_xUInt32

参数说明

  • x — 要插入的值。Any
  • pos — 插入指定元素 x 的位置。数组的索引从零开始计数。UInt32

返回值

返回包含已插入值的数组。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;
┌─groupArrayInsertAt(number, 0)─┐
│ [7]                           │
└───────────────────────────────┘