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

我有数据通过kafka被写入AWS S3,因此消息可以被多次写入。我正在使用Spectrum Redshift进行查询。

由于数据是嵌套的,因此我在documentation中遇到了一些限制,但是我似乎无法找到一种重复数据删除的方法。

我首先尝试了以下操作,以使用group by消除重复项,然后进行通常的汇总操作

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

但是我收到以下错误

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

如果我摆脱了子查询中的GROUP BY,该查询可以正常工作,但是其输出是错误的。

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

我也曾尝试创建没有架构绑定的视图,但是同样失败了。 SELECT Distinct效果不佳

如果可能的话,我不想为此创建表,因为数据存储在S3中。另外,由于业务逻辑,count(distinct field_3)不起作用

iCMS 回答:聚合子查询的FROM子句中的项目必须引用更高级别的FROM子句的嵌套表

为此,我发现的解决方案是将会话的json_serialization设置为TRUE,这样Redshift会将所有数据设置为json,然后就可以像处理常规表一样对其进行处理。 Docs

SET json_serialization_enable TO true;

就我而言,我的数据是纯结构而不是结构数组(这将启用use cases for neted data中提到的联接)

本文链接:https://www.f2er.com/1627130.html

大家都在问