メインコンテンツまでスキップ
に最終更新

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