SparkSQL array_agg中的排序顺序



我有一个如下所示的表:

传感器 时间
靠近 2 0.3
接近 3 0.8
2 0.2
5 0.0
4 0.1

您也可以使用array_sorttransform来完成此操作。

WITH sorted_structs AS (
SELECT sensor,
ARRAY_SORT(
ARRAY_AGG(st),
(left, right) -> case when left.time < right.time then -1 when left.time > right.time then 1 else 0 end
) AS sorted_struct_array
FROM (
SELECT
sensor
struct(value, time) as st
FROM sensor_table
) as sensor_struct
GROUP BY feature_key
)
SELECT sensor,
TRANSFORM(
sorted_struct_array,
sorted_struct -> sorted_struct.value
) AS sorted_values,
TRANSFORM(
sorted_struct_array,
sorted_struct -> sorted_struct.time
) AS sorted_times
FROM sorted_structs

首先将valuetime放在结构中,然后将结构值聚合到数组中。您可以根据time值对结构进行排序。

使用transform,可以再次将值拆分为不同的列。

您可以使用array_sort:

对输入数组进行排序。如果省略了func,则按升序排序。输入数组的元素必须是可排序的。对于双精度/浮点型,NaN大于任何非NaN元素。空元素将被放置在返回数组的末尾。

SELECT sensor,
array_sort(ARRAY_AGG(value)) AS values,
array_sort(ARRAY_AGG(time)) AS times
FROM sensor_table
GROUP BY sensor

相关内容

  • 没有找到相关文章

最新更新