运行BigQuery SQL查询时出现标量子查询返回多行错误,原因何在?
嘿,这个错误我太熟了!咱们来拆解一下问题出在哪儿,以及怎么快速解决~
问题原因分析
你遇到的BQ Scalar subquery produced more than one element错误,核心原因是标量子查询返回了多个值——你在SELECT里写的(select item.quantity from unnest (_raw.line_items) as item)属于标量子查询,BigQuery要求这类查询必须只能返回单个值,但_raw.line_items是一个数组,用UNNEST展开后会得到多行数据,这就导致子查询返回了多个quantity值,BigQuery不知道该把哪个值对应到原订单的行里,自然就报错了。
解决方法
根据你想要的最终数据结构,有两种常见的处理思路:
思路1:保留原订单行,把所有quantity存成数组
如果希望每个订单还是一行,同时把该订单下的所有quantity汇总成一个数组,可以用ARRAY()函数包裹子查询:
SELECT _raw.created_at, _raw.name, ARRAY(SELECT item.quantity FROM UNNEST(_raw.line_items) AS item) AS quantity_array FROM `Orders` WHERE DATE(_raw.created_at) = "2020-04-27"
这样返回的quantity_array字段就是一个包含当前订单所有商品数量的数组。
思路2:展开数组,每个商品占一行
如果需要把每个订单的商品明细拆成单独的行(每个行对应一个商品的quantity),直接在FROM子句里UNNEST数组就行,不用嵌套子查询:
SELECT _raw.created_at, _raw.name, item.quantity FROM `Orders`, UNNEST(_raw.line_items) AS item WHERE DATE(_raw.created_at) = "2020-04-27"
这种方式会把每个订单的多个商品条目拆成多行,适合需要查看明细数据的场景。
内容的提问来源于stack exchange,提问作者Eugen Skotarenko
相关产品推荐
相关产品推荐

