Presto-如何过滤连续出现的数组值

时间:2019-06-25 10:35:34

标签: arrays presto

我想从数组中滤除连续发生的值。

我尝试过使用“ array_distinct”和“ transform”函数,但是无法进行。由于array_distinct仅给出了不同的值,而不是我所期望的

Input : [1,2,2,3,4,4,4,2]

预期输出:[1,2,3,4,2]

2 个答案:

答案 0 :(得分:6)

您可以通过组合ngramsfiltertransform来检查连续的元素,如下所示:

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://prestosql.io/docs/current/functions/array.html

答案 1 :(得分:1)