SQL 方言通

首页 / 数组和 Map

SORT_ARRAY 数组排序

SORT_ARRAY 对数组元素排序。MaxCompute、Hive 和 Spark 用 SORT_ARRAY,Hologres、StarRocks、Doris 和 Flink 用 ARRAY_SORT。NULL 元素放在开头还是末尾、能否降序排列,各引擎不同;Spark 的 sort_array 和 array_sort 对 NULL 的处理也不一样。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持SORT_ARRAY(a[, isasc])isasc 默认为 True,即升序,传 False 时降序。NULL 视为最小值。官方文档
Hologres需改写ARRAY_SORT(anyarray)只有升序。V1.1.46 起支持 TEXT 数组,但会先转成 INT8 再排序;V1.3.18 起 TEXT 数组按字典序排序,并支持 INT4、INT8、FLOAT4、FLOAT8 和 BOOLEAN 数组。官方文档
StarRocks需改写array_sort(array)升序排列,NULL 放在开头。4.0 起可以传 Lambda 比较函数自定义顺序。官方文档
Doris需改写ARRAY_SORT(arr)升序排列,NULL 放在开头;降序用 ARRAY_REVERSE_SORT。也可以传 Lambda 表达式自定义排序。官方文档
Hive支持sort_array(Array<T>)Hive 0.9.0 起提供,只能升序。官方文档
Spark SQL支持sort_array(array[, ascendingOrder])Spark 1.5.0 起提供。升序时 NULL 在开头,降序时 NULL 在末尾。另有 array_sort,它把 NULL 放在末尾,3.0.0 起支持比较函数。官方文档
Flink SQL需改写ARRAY_SORT(array[, ascending_order[, null_first]])默认升序且 NULL 在开头。可以分别指定升降序和 NULL 的位置。任一参数为 NULL 时返回 NULL。官方文档

迁移注意事项

示例

把标签数组排序后拼接成字符串

MaxCompute
SELECT user_id, CONCAT_WS(',', SORT_ARRAY(tags)) AS tag_str FROM user_tags;
Hologres
SELECT user_id, ARRAY_TO_STRING(ARRAY_SORT(tags), ',') AS tag_str FROM user_tags;
StarRocks
SELECT user_id, array_join(array_sort(tags), ',') AS tag_str FROM user_tags;
Doris
SELECT user_id, ARRAY_JOIN(ARRAY_SORT(tags), ',') AS tag_str FROM user_tags;
Hive
SELECT user_id, concat_ws(',', sort_array(tags)) AS tag_str FROM user_tags;
Spark SQL
SELECT user_id, concat_ws(',', sort_array(tags)) AS tag_str FROM user_tags;
Flink SQL
SELECT user_id, ARRAY_JOIN(ARRAY_SORT(tags), ',') AS tag_str FROM user_tags;

同类函数

最后核对日期: