在具有相同架构的表上使用 UNION ALL 的 Google Big Query 中的 SQL 错误编辑:架构从 String 更改为 INT
Posted
技术标签:
【中文标题】在具有相同架构的表上使用 UNION ALL 的 Google Big Query 中的 SQL 错误编辑:架构从 String 更改为 INT【英文标题】:SQL Error in Google Big Query with UNION ALL on tables with same schema EDIT: change in schema from String to INT 【发布时间】:2019-03-16 01:59:58 【问题描述】:我有以下问题
SELECT *
FROM `January_2018`
UNION ALL
SELECT *
FROM `February_2018`
我在第二次SELECT
调用时收到以下错误
UNION ALL 中的第 14 列具有不兼容的类型:STRING、STRING、INT64、 INT64、INT64、INT64、INT64、INT64、INT64、INT64、INT64、INT64 在 [7:3]
列名为 travel_type,类型为整数,值为 0、1 和 2。
我正在尝试从几个较小的表格中制作一张大表格 - 相同数据的月度表格。似乎其中一个字段在第 4 个月后已从 String 数据类型更改为 Int 数据类型,并在此之后保持 Int 持续。
【问题讨论】:
UNION
要求将两个查询放在一起以返回相同数量的列,并且成对的列具有相同的数据类型。您需要确保查询返回的列符合该约束...
将根据您的输入编辑问题。请看问题。
【参考方案1】:
尝试以下操作,以便两个表架构匹配:
SELECT * EXCEPT(changed_column)
, CAST(changed_column AS STRING) AS changed_column
FROM table1
UNION ALL
SELECT * EXCEPT(changed_column)
, CAST(changed_column AS STRING) AS changed_column
FROM table2
【讨论】:
前3个表是字符串,其他12个左右是Int。前 3 个应该改为CAST(changed_column as INT) as changed_column
吗?
我按照您的建议进行了尝试,但改为转换为 INT64。我现在收到此错误Bad int64 value: NULL
如果CAST
不起作用,因为不是所有东西都可以投射,试试SAFE_CAST
【参考方案2】:
要从不同的表中选择数据,您可以使用通配符而不是联合。通配符将在满足条件的所有表上执行您的查询。您可以使用带有表前缀的通配符“*”一次选择多个表。您的表名必须具有相同的前缀和不同的后缀。例如——Mytable_1、Mytabel_2、Mytable_3…………
【讨论】:
以上是关于在具有相同架构的表上使用 UNION ALL 的 Google Big Query 中的 SQL 错误编辑:架构从 String 更改为 INT的主要内容,如果未能解决你的问题,请参考以下文章
在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误
有啥方法可以在同一个大表上使用 3x UNION All 来加速复杂查询?
Bigquery - UNION ALL 具有不同参数的相同查询