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

ARRAY_SHUFFLE

Описание​

Случайным образом меняет порядок элементов в массиве, сохраняя сами элементы и их количество. Возвращает NULL, если входной массив или начальное значение генератора имеет значение NULL. SHUFFLE — псевдоним этой функции.

Изменение поведения (4.1.5)

В ветке 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