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
相关产品推荐
相关产品推荐

