【问题标题】:SQL Error in Google Big Query with UNION ALL on tables with same schema EDIT: change in schema from String to INT在具有相同架构的表上使用 UNION ALL 的 Google Big Query 中的 SQL 错误编辑:架构从 String 更改为 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 要求将两个查询放在一起以返回相同数量的列,并且成对的列具有相同的数据类型。您需要确保查询返回的列符合该约束...
  • 将根据您的输入编辑问题。请看问题。

标签: sql google-bigquery


【解决方案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…………

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多