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

Snowflake中Lateral Flatten调用name键报错求助

解决Snowflake中FLATTEN后无法直接引用字段的问题

问题原因

你第二次LATERAL FLATTEN操作是对flattened_items.value(已拆分为单个订单商品对象)进行扁平化,这会把对象拆成键值对的行结构(比如每行是KEY为"name"、VALUE为对应名称的记录)。此时name并不是nested_flattened_items的列,而是KEY字段值为"name"的那条记录里的VALUE,直接引用nested_flattened_items.name自然会报错。

修正方案

方案1:移除多余的FLATTEN操作

如果ITEMS是对象数组,第一次FLATTEN已经把数组拆成单个对象,直接通过半结构化数据访问符:获取name字段即可:

SELECT flattened_items.value:name::STRING AS name
FROM HEVO.SHIPSTATION.SHIPSTATION_ORDERS,
LATERAL FLATTEN(input => HEVO.SHIPSTATION.SHIPSTATION_ORDERS.ITEMS) flattened_items

方案2:基于第二次FLATTEN结果筛选取值

如果确实需要保留第二次FLATTEN(比如要遍历对象所有键值对),可以通过KEY字段筛选出"name"对应的VALUE:

SELECT nested_flattened_items.value AS name
FROM HEVO.SHIPSTATION.SHIPSTATION_ORDERS,
LATERAL FLATTEN(input => HEVO.SHIPSTATION.SHIPSTATION_ORDERS.ITEMS) flattened_items,
LATERAL FLATTEN(input => flattened_items.value) nested_flattened_items
WHERE nested_flattened_items.key = 'name'

补充说明

  • 执行SELECT nested_flattened_items.*时看到的"name",其实是KEY列的其中一个值,而非列名,这就是直接引用nested_flattened_items.name报错的核心原因。
  • 使用:操作符可以直接访问Variant类型字段中的嵌套属性,加上类型转换(如::STRING)能确保返回预期的数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:46