如何在Athena中编写含多个CROSS JOIN UNNEST的单条查询语句
Athena多层UNNEST绕过层级限制解决方案
Athena的3层展开限制仅针对单次查询中直接嵌套的UNNEST操作,通过分层CTE逐层展开即可轻松绕过该限制,每层仅处理一级数组展开,不会触发层级校验。
实现示例
你可以参考以下代码结构调整你的查询,每一层CTE仅完成一级UNNEST操作:
-- 第一层CTE:展开最外层的balances数组 WITH step1_expand_balances AS ( SELECT balances.month.yearnumber AS year_num, balances.month.monthnumber AS month_num, balances -- 保留完整balances结构供下一层展开 FROM athena_data CROSS JOIN UNNEST(customerdata.data.balances) t (balances) ), -- 第二层CTE:展开balances下的DATE数组,可根据实际路径调整 step2_expand_date AS ( SELECT year_num, month_num, date_item -- 展开后的DATE字段值 FROM step1_expand_balances -- 此处替换为你实际要展开的字段路径即可 CROSS JOIN UNNEST(balances.DATE) t2 (date_item) ) -- 最终查询需要的字段,有更多层级继续新增CTE步骤即可 SELECT * FROM step2_expand_date
注意事项
- 若需要展开更多层级,继续新增CTE步骤即可,每层仅处理一级UNNEST,无层级上限
- 若存在空数组场景,可将
CROSS JOIN UNNEST替换为LEFT JOIN UNNEST ON true,避免空数组过滤掉整行数据 - 各层UNNEST的表别名、字段别名不要重复,避免字段冲突
内容的提问来源于stack exchange,提问作者Sid Howes
相关产品推荐
相关产品推荐

