コンパレータに基づいて配列aの要素を並べ替えます。
構文
array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)パラメーター
a: 必須です。 このパラメーターは、配列を指定します。
array<T>のTは、配列内の要素のデータ型を指定します。 要素は任意のデータ型にすることができます。comparator: 必須。 このパラメーターには、配列内の2つの要素を比較するために使用される組み込み関数、ユーザー定義関数 (UDF) 、または式を指定します。
comparator(a, b)の処理ロジック: aがbに等しい場合、0が返されます。 aがbより小さい場合、負の整数が返されます。 aがbより大きい場合、正の整数が返されます。comparator(a, b)がnullを返すと、エラーが返されます。重要ARRAY_SORTの比較関数は自己整合的でなければなりません。 例:
compare(a, b) > 0が満たされる場合、compare(b, a) < 0が満たされなければならない。compare(a, b) = 0が満たされる場合、compare(b, a) = 0が満たされなければならない。compare(a, b) < 0が満たされる場合、compare(b, a) > 0が満たされなければならない。
自己整合性ではない関数の例:
(左、右) -> ケース左 <=右THEN -1L ELSE 0L END:a = 1とb = 1を設定した場合、compare(a, b)関数は-1を返し、compare(b, a)関数も-1を返します。 比較結果は互いに矛盾し、関数は自己矛盾していません。(左、右) -> ケース左 <右THEN - 1L左=右THEN 0L ELSE 1L END:a = NULLおよびb = 1を設定した場合、compare(a, b)関数は1を返し、compare(b, a)関数も1を返します。 比較結果は互いに矛盾し、関数は自己矛盾していません。
戻り値
ARRAY型の値が返されます。
例
例1:
配列 (5,6,1)の要素をソートします。SELECT array_sort(array(5,6,1),(left,right)-> CASE WHEN left<right THEN-1L WHEN left>right THEN 1L ELSE 0L END );次の応答が返されます。
+------------+ | _c0 | +------------+ | [1,5,6] | +------------+例 2:
SELECT array_sort(a, (a,b)-> CASE WHEN a.a>b.a THEN 1L WHEN a.a<b.a THEN -1L ELSE 0L END) FROM VALUES ( ARRAY(named_struct('a', 1, 'b', 10), named_struct('a', 3, 'b', 11), named_struct('a', 2, 'b', 12))) AS t(a);次の応答が返されます。
+------+ | _c0 | +------+ | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] | +------+