groupArrayInsertAt

Inserts a value into the array at the specified position.

Syntax

  1. groupArrayInsertAt(default_x, size)(x, pos);

If in one query several values are inserted into the same position, the function behaves in the following ways:

  • If a query is executed in a single thread, the first one of the inserted values is used.
  • If a query is executed in multiple threads, the resulting value is an undetermined one of the inserted values.

Parameters

  • x — Value to be inserted. Expression resulting in one of the supported data types.
  • pos — Position at which the specified element x is to be inserted. Index numbering in the array starts from zero. UInt32.
  • default_x— Default value for substituting in empty positions. Optional parameter. Expression resulting in the data type configured for the x parameter. If default_x is not defined, the default values are used.
  • size— Length of the resulting array. Optional parameter. When using this parameter, the default value default_x must be specified. UInt32.

Returned value

  • Array with inserted values.

Type: Array.

Example

Query:

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

Result:

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

Query:

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

Result:

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

Query:

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

Result:

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

Multi-threaded insertion of elements into one position.

Query:

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

As a result of this query you get random integer in the [0,9] range. For example:

  1. ┌─groupArrayInsertAt(number, 0)─┐
  2. [7]
  3. └───────────────────────────────┘