Presto结构的嵌套数组

时间:2019-12-20 08:55:38

标签: arrays json presto complex-data-types

我有以下json格式的数据

create table events (
id_user bigint,
experiments ARRAY <
    STRUCT <
        id: BIGINT,
        impressed: BOOLEAN,
        variantId: BIGINT
    >
>
)

describe events返回:

columns               | types
id_user               | bigint
experiments           | array(row(id bigint, impressed boolean, variantid bigint)) 

我想使用以下命令取消嵌套数组结构

select CAST(ROW(array[experiments]) AS ROW(id BIGINT, impressed boolean, variantid bigint)) as test

from events

和presto返回以下错误: 失败:fromType和toType的大小必须匹配

当我在数组中输入伪数据时,命令运行平稳。

问题是什么,我如何克服?

1 个答案:

答案 0 :(得分:1)

  

presto返回以下错误:失败:fromType和toType的大小必须匹配

此:

ROW(array[experiments])

用一个字段构成一个ROW,类型为array的“ row

  

我要取消嵌套

如果要unnest数组,则需要类似的内容:

SELECT *
FROM events
LEFT JOIN UNNEST(experiments) AS t(experiment) ON true

(对于较早的Presto版本,使用CROSS JOIN而不是LEFT JOIN .. ON true;请注意,这会改变语义)