查询含REPEATED类型RECORD字段line_items的订单表SQL执行报错求助
报错排查及解决方案
错误原因
你表中的line_items字段是REPEATED类型的嵌套RECORD,本质是数组结构,无法直接通过line_items.vfsku的方式直接引用数组内的子字段做等值过滤,现有查询语法不符合嵌套数组字段的查询规则,因此触发报错。
修复方案
根据你的查询需求可以选择两种写法:
场景1:查询所有包含对应sku行项目的订单,保留订单完整结构(所有行项目都保留)
使用EXISTS搭配UNNEST做存在性校验,SQL语句如下:
SELECT * FROM testdata.orders WHERE EXISTS ( SELECT 1 FROM UNNEST(line_items) AS item WHERE item.vfsku = 'VFPQ123_VT1' )
场景2:仅返回符合条件的行项目,将嵌套的行项目拆为独立行返回
直接关联打平数组后过滤,SQL语句如下:
SELECT o.*, item.* FROM testdata.orders o, UNNEST(line_items) AS item WHERE item.vfsku = 'VFPQ123_VT1'
如果不需要保留原订单的line_items数组字段,可以调整选择列表剔除冗余字段:
SELECT o.* EXCEPT(line_items), item.* FROM testdata.orders o, UNNEST(line_items) AS item WHERE item.vfsku = 'VFPQ123_VT1'
内容的提问来源于stack exchange,提问作者SHUVANKAR
相关产品推荐
相关产品推荐

