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

groupArrayInsertAt

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

Синтаксис

groupArrayInsertAt(default_x, size)(x, pos)

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

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

Аргументы

  • x — значение для вставки. Выражение, результатом которого является один из поддерживаемых типов данных.
  • pos — позиция, в которую должно быть вставлено указанное значение x. Нумерация индексов в массиве начинается с нуля. UInt32.
  • default_x — значение по умолчанию для подстановки в пустые позиции. Необязательный параметр. Выражение, результатом которого является тип данных, заданный для параметра x. Если default_x не определён, используются значения по умолчанию.
  • size — длина результирующего массива. Необязательный параметр. При использовании этого параметра значение по умолчанию default_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;

В результате этого запроса вы получаете случайное целое число из диапазона [0, 9]. Например:

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