【发布时间】:2019-11-07 04:15:13
【问题描述】:
我想从数组中过滤掉连续出现的值。
我尝试在 presto 中使用“array_distinct”和“transform”功能,但无法进行。由于 array_distinct 只给出不同的值,而不是我所期望的
Input : [1,2,2,3,4,4,4,2]
预期输出:[1,2,3,4,2]
【问题讨论】:
我想从数组中过滤掉连续出现的值。
我尝试在 presto 中使用“array_distinct”和“transform”功能,但无法进行。由于 array_distinct 只给出不同的值,而不是我所期望的
Input : [1,2,2,3,4,4,4,2]
预期输出:[1,2,3,4,2]
【问题讨论】:
您可以通过组合ngrams、filter、transform 来检查连续元素,如下所示:
presto> SELECT
-> ARRAY[a[1]] ||
-> transform(
-> filter(
-> ngrams(a, 2),
-> pair -> pair[1] IS DISTINCT FROM pair[2]),
-> pair -> pair[2])
-> FROM (VALUES ARRAY[1,2,2,3,4,4,4,2]) t(a);
_col0
-----------------
[1, 2, 3, 4, 2]
(1 row)
解释:
ngrams(a, 2) 建立兄弟姐妹对filter 仅保留未由相同的元素进行的元素; IS DISTINCT FROM 用于比普通= 更友好的比较NULL。transform 用于将兄弟姐妹转换回平面数组请参阅https://trino.io/docs/current/functions/array.html 了解所有可用的数组函数。
【讨论】: