BigQuery中如何简化嵌套STRUCT与双层数组的Unnest代码生成示例数据
简化SQL内置示例数据的最优方案
方案1:逐行构造STRUCT数组(最推荐,新增数据效率最高)
这是造示例数据最优的写法,对比UNION ALL写法,20+行数据可减少近一半代码量,新增数据只需在数组中追加行元组即可,无需写重复的SELECT/UNION ALL语句:
WITH Some_Data AS ( SELECT * FROM UNNEST([ STRUCT("a" AS t_letters, 1 AS t_numbers), ("b", 2) -- 新增数据直接加 (值1, 值2) 即可 ]) ) SELECT * FROM Some_Data
方案2:等长数组对齐场景简化(适配原有实现逻辑)
如果你已经持有两个等长数组需要对齐展开,可直接移除原代码中冗余的STRUCT数组嵌套和多层子查询,简化后逻辑如下,输出和原代码完全一致:
WITH Some_Data AS ( SELECT ["a", "b"] AS letters, [1, 2] AS numbers ) SELECT t_numbers, t_letters FROM Some_Data CROSS JOIN UNNEST(numbers) AS t_numbers WITH OFFSET nm LEFT JOIN UNNEST(letters) AS t_letters WITH OFFSET lt ON nm = lt
两种方案的输出均与预期结果一致:
| Row | t_numbers | t_letters |
|---|---|---|
| 1 | 1 | a |
| 2 | 2 | b |
内容的提问来源于stack exchange,提问作者ErrHuman
相关产品推荐
相关产品推荐

