ARRAY_SHUFFLE
Описание
Случайным образом меняет порядок элементов в массиве, сохраняя сами элементы и их количество. Возвращает NULL, если входной массив или начальное значение генератора имеет значение NULL. SHUFFLE — псевдоним этой функции.
В ветке Doris 4.1 начиная с версии 4.1.5 параметр seed должен быть константой. Он принимает любое значение BIGINT, включая отрицательные значения, и использует все 64 бита. Константные массивы также перемешиваются отдельно для каждой строки, поэтому одно и то же начальное значение генератора может давать результат, отличающийся от результатов в более ранних версиях. В более ранних версиях 4.1 использовалось только начальное значение генератора из первой строки каждого пакета, отрицательные значения и значения больше 4294967295 не допускались, а для константных массивов порядок элементов был одинаковым во всех строках.
Синтаксис
ARRAY_SHUFFLE(<arr> [, <seed>])
Параметры
| Параметр | Описание |
|---|---|
<arr> | Массив типа ARRAY, элементы которого нужно перемешать. |
<seed> | Необязательное константное начальное значение генератора случайных чисел типа BIGINT. Поддерживаются константные выражения. Если параметр не указан, для каждого пакета используется новое случайное начальное значение генератора. |
Возвращаемое значение
Возвращает массив того же типа, что и входной, с элементами в случайном порядке. Количество и типы элементов сохраняются. Возвращает NULL, если массив или начальное значение генератора имеет значение NULL, и пустой массив, если входной массив пуст.
Строки обрабатываются пакетами. Если задано начальное значение генератора, каждый пакет начинает генерацию случайной последовательности с этого значения, а строки пакета используют её по порядку. Поэтому перестановка элементов в строке может зависеть от границ пакетов. Указание начального значения генератора не гарантирует одинаковых перестановок для одинаковых массивов. Константные массивы также перемешиваются отдельно для каждой строки.
Пример
Сортировка перемешанного массива подтверждает, что его элементы сохраняются. Допускаются как отрицательные начальные значения генератора, так и константные выражения:
SELECT ARRAY_SORT(ARRAY_SHUFFLE([1, 2, 3, 4], -1)),
ARRAY_SORT(ARRAY_SHUFFLE([1, 2, 3, 4], 1 + 1));
[1, 2, 3, 4] [1, 2, 3, 4]
NULL и пустые массивы:
SELECT ARRAY_SHUFFLE(CAST(NULL AS ARRAY<INT>), 1),
ARRAY_SHUFFLE([1, 2, 3], NULL), ARRAY_SHUFFLE([], 1);
NULL NULL []
Использование столбца в качестве начального значения генератора приводит к ошибке, содержащей следующий текст:
SELECT ARRAY_SHUFFLE([1, 2, 3], number) FROM numbers("number" = "2");
The seed of array_shuffle must be a constant