我无法取消雅典娜的子数组

问题描述

我正在使用带有JSON文件和嵌套字段的雅典娜。 如何取消子级别的嵌套?

该模式的平台部分:

`platforms` array<struct<key_name:boolean,key_name:string,key_name:boolean,tags:array<string>,

一个数据样本,如果我直接查询平台字段而又不打扰的话:

[{registrationcomplete=true,source=mail,invitesent=true,label=test,tags=[top],...

我的问题是我无法使用雅典娜使第一级放松。

UNnesT(platforms) AS t1 (platform);

我正在多个表上运行查询,当我这样调用子数组时,它不起作用:

array_join('a.platform.tags',',') AS plat_tags,

我收到此错误,是因为嵌套改变了类型:

语法:行6:1:函数array_join的意外参数(varchar(15),varchar(1))。预期:array_join(array(T),varchar)T,array_join(array(T),varchar,varchar)T

如果我仅对一张表执行简单查询,则此代码有效:

array_join('platform.tags',

我想知道是否存在解决方法,或者更好地像其他嵌套对象一样直接转换我的子数组标签

因为如果我使用这段代码可以工作,但是结果在数组中,而aws quicksight无法处理。

platform.tags AS plat_tags,

解决方法

您正在用单引号引号platform.tags,这是字符串的SQL语法。

要对标识符加引号,必须使用双引号,并将引号括在每个组件上(即不要将点分开)。在这种情况下,我认为引用是不必要的,因此应这样写:

array_join(platform.tags,',') AS plat_tags

但是,如果要引用标识符,请这样写:

array_join("platform"."tags",') AS plat_tags