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

Items in the FROM clause of aggregation subqueries have to refer to nested tables of higher level FROM clauses

我有数据通过 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 子句的嵌套 table。查询:0 位置:nested_query_rewriter.cpp:814 进程:padbmaster [pid=6630] ----------

如果我去掉子查询中的 GROUP BY,查询工作正常,但它的输出是错误的。

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

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

如果可能,我不想为此创建 table,因为数据存储在 S3 中。此外,由于业务逻辑

,count(distinct field_3) 不起作用

我为此找到的解决方案是将会话的 json_serialization 设置为 TRUE,这样 Redshift 会将所有数据设置为 json,然后您就可以像处理它一样处理它一个普通的 table。 Docs

SET json_serialization_enable TO true;

在我的例子中,我的数据是一个纯结构而不是一个结构数组(什么会启用 use cases for neted data 中提到的连接)