STRUCT字段中UNION ALL中的冲突

时间:2018-04-13 19:06:07

标签: google-bigquery

此查询正常工作:

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"))

但是,如果我们更改字段定义的顺序,就像这样(交换字段currencycurrent):

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字段进行某种动态映射(或者如果我做错了什么,并且有一个解决方法)

1 个答案:

答案 0 :(得分:2)

  

预计会出现这种情况吗?

是的!

STRUCT有序字段的容器,每个字段都有一个类型(必填)和字段名称(可选)。 请点击Struct type

了解更多信息