SQL如何合并数组内不同Schema的Struct并为缺失字段填充Null
问题原因
直接使用UNION ALL运行失败,是因为两张表的a字段类型不匹配:
baz_v1的a字段类型为ARRAY<STRUCT<x INT64>>,数组内的结构体只有x一个字段baz_v2的a字段类型为ARRAY<STRUCT<x INT64, y INT64>>,数组内的结构体有x、y两个字段
UNION ALL要求上下两个查询的对应列的数量、数据类型完全一致,所以需要先对齐baz_v1的a字段结构,补上缺失的y字段,默认值设为NULL即可。
实现代码
替换原待实现逻辑部分即可:
SELECT * FROM baz_v2 UNION ALL SELECT ARRAY(SELECT AS STRUCT x, CAST(NULL AS INT64) AS y FROM UNNEST(a)) AS a, b FROM baz_v1
运行后即可得到你需要的拼接结果,baz_v1对应行的a.y会自动填充为NULL。
内容的提问来源于stack exchange,提问作者Tobias Hermann
相关产品推荐
相关产品推荐

