如何在BigQuery查询中生成计算衍生多行(非数组展开)
实现单条记录拆分为多行输出的方法
在BigQuery中,完全可以通过计算将单条记录拆分为多行输出,无需展开数组。针对你的需求,这里提供两种直接的实现方式:
方法一:使用UNION ALL拆分查询结果
这是最直观的方式,分别查询不含税价格和税费后合并结果:
WITH products_incl_taxes AS ( SELECT "Color TV" AS product, 6000 AS price ) -- 查询不含税价格行 SELECT product, price / 1.2 AS price FROM products_incl_taxes UNION ALL -- 查询税费行 SELECT "Taxes" AS product, price * (0.2 / 1.2) AS price FROM products_incl_taxes
执行后得到的结果如下:
| Product | Price |
|---|---|
| Color TV | 5000 |
| Taxes | 1000 |
方法二:使用UNNEST结合结构化数据(非数组展开逻辑)
如果想避免多次扫描原表,可以用ARRAY构造包含两行数据的结构,再通过UNNEST展开(这里虽用到UNNEST,但本质是基于计算生成的结构化数据,并非展开原表中的数组字段):
WITH products_incl_taxes AS ( SELECT "Color TV" AS product, 6000 AS price ) SELECT item.product_name AS product, item.calculated_price AS price FROM products_incl_taxes, UNNEST([ STRUCT(product AS product_name, price / 1.2 AS calculated_price), STRUCT("Taxes" AS product_name, price * (0.2 / 1.2) AS calculated_price) ]) AS item
该查询会一次性生成两行数据,结果与方法一完全一致,且仅扫描一次原表,数据量较大时性能更优。
说明
两种方法均不依赖原表中的数组字段,完全通过计算生成多行结果,符合你“非展开数组”的要求。若表中有多条商品记录,两种方法都会自动为每个商品生成对应的两行数据。
内容的提问来源于stack exchange,提问作者JCDB
相关产品推荐
相关产品推荐

