此查询正常工作:
SELECT STRUCT<price STRUCT<previous FLOAT64, `current` FLOAT64, currency STRING>> (STRUCT(120.0 AS previous, 110.0 AS `current`, "BR")) UNION ALL
SELECT STRUCT<price STRUCT<previous FLOAT64, `current` FLOAT64, currency STRING>> (STRUCT(121.0 AS previous, 111.0, "BR"))
但是,如果我们更改字段定义的顺序,就像这样(交换字段currency
和current
):
SELECT STRUCT<price STRUCT<previous FLOAT64, `current` FLOAT64, currency STRING>> (STRUCT(120.0 AS previous, 110.0 AS `current`, "BR")) UNION ALL
SELECT STRUCT<price STRUCT<previous FLOAT64, currency STRING, `current` FLOAT64>> (STRUCT(121.0 AS previous, "BR", 111.0))
我们收到错误:
UNION ALL中的第1列具有不兼容的类型:STRUCT&gt;,STRUCT&gt;在[2:1]
预计会出现这种情况吗?
我问的原因是我们有两个表,一个是固定的,另一个是每小时使用NEWLINE_DELIMITED_JSON
文件上的模式自动检测构建的。由于我们无法在字段上设置任何顺序,因此有时它们的定义顺序会发生变化而代码会中断。
由于我们对定义字段的定义没有太多控制,我想知道BigQuery是否可以在内部对UNION操作的STRUCT字段进行某种动态映射(或者如果我做错了什么,并且有一个解决方法)