You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift中Super类型左外Unnest的替代实现方案咨询

Redshift处理JSON Unnest时保留无tags记录的方案

直接用LEFT JOIN LATERAL UNNEST配合COALESCE就能解决这个问题,替代原来的隐式内连接,确保没有tags元素的行不会被过滤,逻辑和Athena/Presto里用默认空数组的思路一致。

修改后的SQL代码:

SELECT
    src.ac, 
    src."day", 
    src.region, 
    i.resourcearn, 
    t.key, 
    t.value
FROM 
    ap_rs_meta_use_dev.getresources src
-- 左连接展开resourcetagmappinglist,避免过滤主表行
LEFT JOIN LATERAL UNNEST(src.resourcetagmappinglist) AS i(resourcearn, tags) ON TRUE
-- 用COALESCE把空/不存在的tags转为空数组,再左连接展开
LEFT JOIN LATERAL UNNEST(COALESCE(i.tags, '[]'::super)) AS t(key, value) ON TRUE

关键逻辑说明:

  • 用LEFT JOIN LATERAL UNNEST替换原来的逗号隐式连接:隐式连接等价于内连接,会过滤掉数组为空的行;而左连接横向展开(LATERAL)会保留主表所有行,即使嵌套数组为空。
  • COALESCE(i.tags, '[]'::super):当tags元素不存在或者为空数组时,将其替换为一个空的SUPER类型数组,这样UNNEST空数组时,对应的key和value会返回NULL,而非过滤整行。
  • ON TRUE:横向连接不需要额外匹配条件,仅需展开数组即可。

效果验证:

  • 对于你提供的示例数据(含tags的记录),会正常展开为2行,分别对应两个tag的key和value。
  • 对于没有tags元素的记录,主表的ac、day、region会保留,resourcearn(如果resourcetagmappinglist存在的话)也会保留,key和value则为NULL。

内容的提问来源于stack exchange,提问作者SimonB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:35:57