合并不同列的表时,如何为NULL的STRUCT类型指定字段名?
解决UNION ALL后STRUCT字段名丢失的问题
当然可以解决,你只需要在table1的x字段类型声明里明确指定STRUCT的字段名,而不是只写类型。
UNION ALL会以第一个表的字段结构(包括STRUCT内部的字段名)作为最终输出的结构模板,所以只要在第一个表的NULL STRUCT定义里把字段名加上,后续表的同类型STRUCT字段就能自动对齐名称,不会被重命名为_field_1、_field_2。
修改后的SQL代码如下:
WITH table1 AS ( SELECT STRUCT(1 AS b, 2 AS c) AS a, -- 明确指定STRUCT的字段名y和z CAST(NULL AS STRUCT<y STRING, z STRING>) AS x), table2 AS ( SELECT CAST(NULL AS STRUCT<INT64, INT64>) AS a, STRUCT('hello' AS y, 'world' AS z) AS x) SELECT * FROM table1 UNION ALL SELECT * FROM table2
执行这段代码后,输出中的x字段会正确保留y和z的字段名,不会出现_field_1、_field_2的情况。
内容的提问来源于stack exchange,提问作者Tobias Hermann
相关产品推荐
相关产品推荐

