Amazon redshift 聚合子查询的FROM子句中的项必须引用更高级别FROM子句的嵌套表

Amazon redshift 聚合子查询的FROM子句中的项必须引用更高级别FROM子句的嵌套表,amazon-redshift,amazon-redshift-spectrum,Amazon Redshift,Amazon Redshift Spectrum,我通过kafka将数据写入AWS S3,因此可以多次写入消息。我用光谱红移来查询它 由于数据是嵌套的,所以我在中遇到了一些限制,但我似乎无法找到消除重复数据的方法 我首先尝试使用GROUPBY消除重复项,然后进行常规聚合 with rid_of_duplicates as ( select table.field_1, table.struct_1.field_2, table.struct_1.field_3 from table group by 1,2,3 ) select field

我通过kafka将数据写入AWS S3,因此可以多次写入消息。我用光谱红移来查询它

由于数据是嵌套的,所以我在中遇到了一些限制,但我似乎无法找到消除重复数据的方法

我首先尝试使用GROUPBY消除重复项,然后进行常规聚合

with rid_of_duplicates as (
select table.field_1, table.struct_1.field_2, table.struct_1.field_3
from table
group by 1,2,3 
)

select field_1 || field_2, count(field_3)
from rid_of_duplicates
group by field_1, field_2
但是我得到了以下错误

错误:光谱嵌套查询错误详细信息:-----------------------------错误:光谱嵌套查询错误代码:8001上下文:聚合子查询的FROM子句中的项必须引用更高级别FROM子句的嵌套表。查询:0位置:嵌套的\u查询\u重写器。cpp:814进程:padbmaster[pid=6630]----------

如果我去掉子查询中的
groupby
,查询工作正常,但输出错误

在阅读时,我似乎不应该在子查询中选择特定字段。但由于我使用的是嵌套数据,所以不能使用
SELECT*

我还尝试创建一个没有模式绑定的视图,但也失败了<代码>选择不同的也不起作用


如果可能的话,我不想为此创建一个表,因为数据存储在S3中。此外,由于业务逻辑的原因,count(distinct field_3)不起作用。我找到的解决方案是为会话将json_序列化设置为TRUE,这样红移将所有数据设置为json,然后您可以像处理常规表一样处理它

在我的例子中,我的数据是一个纯结构,而不是一个结构数组(如何启用中提到的连接)

SET json_serialization_enable TO true;