presto-按一定值将数组分开

  • 本文关键字:数组 presto- arrays presto
  • 更新时间 :
  • 英文 :


我想将数组分为一定值。在这里,说1

我尝试使用"变换",但无法进行,而"拆分"对字符串很有用。

Input : [1,8,2,1,4,5,6,1,1,4,2,4,1]
Expected Output : [[1,8,2],[1,4,5,6],[1],[1,4,2,4],[1]]

它不是很漂亮,但是您可以使用reduce

进行操作
WITH t(a) AS (VALUES
    array[1,8,2,1,4,5,6,1,1,4,2,4,1],
    array[8,2,1,4,5,6,1,1,4,2,4,1]
)
SELECT
    reduce(
        a,
        array[array[-1]],
        (state, value) -> case
            when value = 1 then
                concat(state, array[value])
            else
                concat(slice(state, 1, cardinality(state) - 1), array[concat(slice(state, -1, 1)[1], array[value])])
            end,
            state -> slice(state, 2, cardinality(state) - 1)
        )
FROM t

这个想法是将数组用作状态值,该数组将包含到目前为止得出的所有组。它是用一个包含任意值(array[array[-1]](的单个组初始化的,以在类型推理期间获得歧义。产生结果时丢弃该组(array[array[-1]](。

由于处理输入数组中的每个元素,如果是1,则将新组添加到状态(concat(state, array[value])(。否则,该值将添加到迄今为止得出的最后一个组(concat(slice(state, 1, cardinality(state) - 1), array[concat(slice(state, -1, 1)[1], array[value])])(。

相关内容

  • 没有找到相关文章