Перейти к основному содержимому
Перейти к основному содержимому

groupArrayInsertAt

groupArrayInsertAt

Появилось в: v1.1

Вставляет значение в массив в указанную позицию.

Если в одном запросе в одну и ту же позицию вставляется несколько значений, функция ведёт себя следующим образом:

  • Если запрос выполняется в одном потоке, используется первое из вставленных значений.
  • Если запрос выполняется в нескольких потоках, результирующим значением становится одно из вставленных значений, выбранное неопределённым образом.

Синтаксис

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

Параметры

  • default_x — Необязательный параметр. Значение по умолчанию для подстановки в пустые позиции. Any
  • size — Необязательный параметр. Длина результирующего массива. При использовании этого параметра необходимо указать значение по умолчанию default_x. UInt32

Аргументы

  • 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]                           │
└───────────────────────────────┘