mirror of https://github.com/ByConity/ByConity
Array functions arrayConcat, arraySlice, arrayPopFront, arrayPopBack, arrayPushFront, arrayPushBack are described.
This commit is contained in:
parent
af96036860
commit
62128eff70
|
@ -1,45 +1,69 @@
|
|||
Функции по работе с массивами
|
||||
=============================
|
||||
# Функции по работе с массивами
|
||||
|
||||
### empty
|
||||
|
||||
## empty
|
||||
Возвращает 1 для пустого массива, и 0 для непустого массива.
|
||||
Тип результата - UInt8.
|
||||
Функция также работает для строк.
|
||||
|
||||
### notEmpty
|
||||
## notEmpty
|
||||
Возвращает 0 для пустого массива, и 1 для непустого массива.
|
||||
Тип результата - UInt8.
|
||||
Функция также работает для строк.
|
||||
|
||||
### length
|
||||
## length
|
||||
Возвращает количество элементов в массиве.
|
||||
Тип результата - UInt64.
|
||||
Функция также работает для строк.
|
||||
|
||||
### emptyArrayUInt8, emptyArrayUInt16, emptyArrayUInt32, emptyArrayUInt64
|
||||
## emptyArrayUInt8, emptyArrayUInt16, emptyArrayUInt32, emptyArrayUInt64
|
||||
|
||||
### emptyArrayInt8, emptyArrayInt16, emptyArrayInt32, emptyArrayInt64
|
||||
## emptyArrayInt8, emptyArrayInt16, emptyArrayInt32, emptyArrayInt64
|
||||
|
||||
### emptyArrayFloat32, emptyArrayFloat64
|
||||
## emptyArrayFloat32, emptyArrayFloat64
|
||||
|
||||
### emptyArrayDate, emptyArrayDateTime
|
||||
## emptyArrayDate, emptyArrayDateTime
|
||||
|
||||
### emptyArrayString
|
||||
## emptyArrayString
|
||||
Принимает ноль аргументов и возвращает пустой массив соответствующего типа.
|
||||
|
||||
### emptyArrayToSingle
|
||||
## emptyArrayToSingle
|
||||
Принимает пустой массив и возвращает массив из одного элемента, равного значению по умолчанию.
|
||||
|
||||
### range(N)
|
||||
## range(N)
|
||||
Возвращает массив чисел от 0 до N-1.
|
||||
На всякий случай, если на блок данных, создаются массивы суммарной длины больше 100 000 000 элементов, то кидается исключение.
|
||||
|
||||
### array(x1, ...), оператор \[x1, ...\]
|
||||
## array(x1, ...), оператор \[x1, ...\]
|
||||
Создаёт массив из аргументов функции.
|
||||
Аргументы должны быть константами и иметь типы, для которых есть наименьший общий тип. Должен быть передан хотя бы один аргумент, так как иначе непонятно, какого типа создавать массив. То есть, с помощью этой функции невозможно создать пустой массив (для этого используйте функции emptyArray\*, описанные выше).
|
||||
Возвращает результат типа Array(T), где T - наименьший общий тип от переданных аргументов.
|
||||
|
||||
### arrayElement(arr, n), оператор arr\[n\]
|
||||
## arrayConcat
|
||||
|
||||
Объединяет массивы, переданные в качестве аргументов.
|
||||
|
||||
```
|
||||
arrayConcat(arrays)
|
||||
```
|
||||
|
||||
**Аргументы**
|
||||
|
||||
- `arrays` - Перечисленные через запятую массивы `[values]`.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res
|
||||
```
|
||||
```
|
||||
┌─res───────────┐
|
||||
│ [1,2,3,4,5,6] │
|
||||
└───────────────┘
|
||||
```
|
||||
|
||||
|
||||
## arrayElement(arr, n), оператор arr\[n\]
|
||||
Достаёт элемент с индексом n из массива arr.
|
||||
n должен быть любым целочисленным типом.
|
||||
Индексы в массиве начинаются с единицы.
|
||||
|
@ -47,17 +71,17 @@ n должен быть любым целочисленным типом.
|
|||
|
||||
Если индекс выходит за границы массива, то возвращается некоторое значение по умолчанию (0 для чисел, пустая строка для строк и т. п.).
|
||||
|
||||
### has(arr, elem)
|
||||
## has(arr, elem)
|
||||
Проверяет наличие элемента elem в массиве arr.
|
||||
Возвращает 0, если элемента в массиве нет, или 1, если есть.
|
||||
|
||||
### indexOf(arr, x)
|
||||
## indexOf(arr, x)
|
||||
Возвращает индекс элемента x (начиная с 1), если он есть в массиве, или 0, если его нет.
|
||||
|
||||
### countEqual(arr, x)
|
||||
## countEqual(arr, x)
|
||||
Возвращает количество элементов массива, равных x. Эквивалентно arrayCount(elem -> elem = x, arr).
|
||||
|
||||
### arrayEnumerate(arr)
|
||||
## arrayEnumerate(arr)
|
||||
Возвращает массив \[1, 2, 3, ..., length(arr)\]
|
||||
|
||||
Эта функция обычно используется совместно с ARRAY JOIN. Она позволяет, после применения ARRAY JOIN, посчитать что-либо только один раз для каждого массива. Пример:
|
||||
|
@ -98,7 +122,7 @@ WHERE (CounterID = 160656) AND notEmpty(GoalsReached)
|
|||
|
||||
Также эта функция может быть использована в функциях высшего порядка. Например, с её помощью можно достать индексы массива для элементов, удовлетворяющих некоторому условию.
|
||||
|
||||
### arrayEnumerateUniq(arr, ...)
|
||||
## arrayEnumerateUniq(arr, ...)
|
||||
Возвращает массив, такого же размера, как исходный, где для каждого элемента указано, какой он по счету среди элементов с таким же значением.
|
||||
Например: arrayEnumerateUniq(\[10, 20, 10, 30\]) = \[1, 1, 2, 1\].
|
||||
|
||||
|
@ -151,11 +175,132 @@ SELECT arrayEnumerateUniq([1, 1, 1, 2, 2, 2], [1, 1, 2, 1, 1, 2]) AS res
|
|||
|
||||
Это нужно при использовании ARRAY JOIN с вложенной структурой данных и затем агрегации по нескольким элементам этой структуры.
|
||||
|
||||
### arrayUniq(arr, ...)
|
||||
## arrayPopBack
|
||||
|
||||
Удаляет последний элемент из массива.
|
||||
|
||||
```
|
||||
arrayPopBack(array)
|
||||
```
|
||||
|
||||
**Аргументы**
|
||||
|
||||
- `array` - Массив.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT arrayPopBack([1, 2, 3]) AS res
|
||||
```
|
||||
```
|
||||
┌─res───┐
|
||||
│ [1,2] │
|
||||
└───────┘
|
||||
```
|
||||
|
||||
## arrayPopFront
|
||||
|
||||
Удаляет первый элемент из массива.
|
||||
|
||||
```
|
||||
arrayPopFront(array)
|
||||
```
|
||||
|
||||
**Аргументы**
|
||||
|
||||
- `array` - Массив.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT arrayPopFront([1, 2, 3]) AS res
|
||||
```
|
||||
```
|
||||
┌─res───┐
|
||||
│ [2,3] │
|
||||
└───────┘
|
||||
```
|
||||
|
||||
## arrayPushBack
|
||||
|
||||
Добавляет один элемент в конец массива.
|
||||
|
||||
```
|
||||
arrayPushBack(array, single_value)
|
||||
```
|
||||
|
||||
**Аргументы**
|
||||
|
||||
- `array` - Массив.
|
||||
- `single_value` - Одиночное значение того же типа, что хранится в массиве.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT arrayPushBack(['a'], 'b') AS res
|
||||
```
|
||||
```
|
||||
┌─res───────┐
|
||||
│ ['a','b'] │
|
||||
└───────────┘
|
||||
```
|
||||
|
||||
## arrayPushFront
|
||||
|
||||
Добавляет один элемент в начало массива.
|
||||
|
||||
```
|
||||
arrayPushFront(array, single_value)
|
||||
```
|
||||
|
||||
**Аргументы**
|
||||
|
||||
- `array` - Массив.
|
||||
- `single_value` - Одиночное значение того же типа, что хранится в массиве.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT arrayPushBack(['b'], 'a') AS res
|
||||
```
|
||||
```
|
||||
┌─res───────┐
|
||||
│ ['a','b'] │
|
||||
└───────────┘
|
||||
```
|
||||
|
||||
## arraySlice
|
||||
|
||||
Возвращает срез массива.
|
||||
|
||||
```
|
||||
arraySlice(array, offset, length)
|
||||
```
|
||||
|
||||
**Аргументы**
|
||||
|
||||
- `array` - Массив данных.
|
||||
- `offset` - Отступ от начала массива. Отсчет начинается с 1.
|
||||
- `length` - Длина необходимого среза.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT arraySlice([1, 2, 3, 4, 5], 2, 3) AS res
|
||||
```
|
||||
```
|
||||
┌─res─────┐
|
||||
│ [2,3,4] │
|
||||
└─────────┘
|
||||
```
|
||||
|
||||
|
||||
## arrayUniq(arr, ...)
|
||||
Если передан один аргумент, считает количество разных элементов в массиве.
|
||||
Если передано несколько аргументов, считает количество разных кортежей из элементов на соответствующих позициях в нескольких массивах.
|
||||
|
||||
Если необходимо получить список уникальных элементов массива, можно воспользоваться arrayReduce('groupUniqArray', arr).
|
||||
|
||||
### arrayJoin(arr)
|
||||
Особенная функция. Смотрите раздел "Функция arrayJoin".
|
||||
## arrayJoin(arr)
|
||||
Особенная функция. Смотрите раздел ["Функция arrayJoin"](array_join.md#functions_arrayjoin).
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
<a name="functions_arrayjoin"></a>
|
||||
|
||||
Функция arrayJoin
|
||||
=================
|
||||
|
||||
|
|
Loading…
Reference in New Issue