如何在BigQuery中向含STRUCT数据类型的表插入数据?报错求助
嘿,这个问题我太熟了!你之所以报错,核心原因是没搞清楚BigQuery里STRUCT类型字段的插入逻辑——你的表mydataset.struct_1只有一个顶层字段x(它是STRUCT类型,内部包含course和id子字段),但你在INSERT语句里直接把course和id当作独立列来引用,BigQuery自然找不到对应的顶层列,所以才会报错。
下面给你几种正确的插入方式,按需选用:
方式1:直接按顺序构造STRUCT值
这是最简洁的写法,只要保证STRUCT内的字段顺序和表定义的struct<course string,id int64>一致即可:
INSERT INTO `mydataset.struct_1` (x) VALUES(STRUCT("B.A", 12))
方式2:命名字段构造STRUCT(更安全)
如果怕记混字段顺序,推荐用命名字段的方式,这样不管顺序怎么写都不会出错,可读性也更强:
INSERT INTO `mydataset.struct_1` (x) VALUES(STRUCT("B.A" AS course, 12 AS id))
方式3:从其他表查询插入的场景
如果是从现有表取数据插入,同样需要把子字段打包成STRUCT对象后赋值给x列:
INSERT INTO `mydataset.struct_1` (x) SELECT STRUCT(source_course_col AS course, source_id_col AS id) FROM `your_project.your_dataset.source_table`
简单总结下:STRUCT是嵌套的复合类型,你的表顶层只有x这一列,所以必须把course和id组合成一个STRUCT对象,作为x列的值插入,而不能直接把它们当作独立列来处理。
内容的提问来源于stack exchange,提问作者user444422
相关产品推荐
相关产品推荐

