Sql 在Google BigQuery中强制转换不合适?

Sql 在Google BigQuery中强制转换不合适?,sql,google-bigquery,Sql,Google Bigquery,我有一个标准的SQL查询 SELECT CAST(created_utc AS STRING), author, FROM `table` WHERE something = "Something" 这给了我以下的错误 Error: Cannot read field 'created_utc' of type STRING as INT64 创建的utc示例为1517360483 如果我理解这个错误,我显然不理解。created_utc存储为字符串,但查

我有一个标准的SQL查询

 SELECT
    CAST(created_utc AS STRING),
    author,
 FROM
    `table`
 WHERE
   something = "Something"
这给了我以下的错误

Error: Cannot read field 'created_utc' of type STRING as INT64
创建的utc示例为1517360483

如果我理解这个错误,我显然不理解。created_utc存储为字符串,但查询尝试将其转换为INT64时失败。我希望CAST函数能够强制将其作为字符串保存


我做错了什么

问题是你实际上没有一张桌子。在您的问题中,您编写了table,但我怀疑您正在查询table*,它匹配多个表,其中一个表恰好具有该列的不同类型。您的选项不是使用表*,而是:

将UNION ALL与各个表一起使用,在“选择”列表中根据需要执行强制转换。 如果您知道哪些表将该列作为INT64而不是字符串,并且可以排除它们,那么可以使用_TABLE_后缀上的过滤器跳过某些表的读取。
问题是你实际上没有一张桌子。在您的问题中,您编写了table,但我怀疑您正在查询table*,它匹配多个表,其中一个表恰好具有该列的不同类型。您的选项不是使用表*,而是:

将UNION ALL与各个表一起使用,在“选择”列表中根据需要执行强制转换。 如果您知道哪些表将该列作为INT64而不是字符串,并且可以排除它们,那么可以使用_TABLE_后缀上的过滤器跳过某些表的读取。
正如Elliott已经指出的,有些值实际上无法转换为INT64,因为它们不是整数,而是数字以外的其他字符

使用下面的选择,您可以识别这些值,这样它将帮助您找到有问题的条目,然后决定下一步的操作

#standardSQL
SELECT created_utc, author
FROM `table`
WHERE something = "Something"
  AND NOT REGEXP_CONTAINS(created_utc , r'[0-9]')

正如Elliott已经指出的,有些值实际上无法转换为INT64,因为它们不是整数,而是数字以外的其他字符

使用下面的选择,您可以识别这些值,这样它将帮助您找到有问题的条目,然后决定下一步的操作

#standardSQL
SELECT created_utc, author
FROM `table`
WHERE something = "Something"
  AND NOT REGEXP_CONTAINS(created_utc , r'[0-9]')

值本身可能是有效的整数,但通配符匹配的表中的列类型不相同,因此此查询也会导致OP出现相同的错误。很遗憾,同意此猜测,但我们不知道这里到底是什么问题-对吗哦,所以我的答案是更多的故障排除…@ElliottBrossard-看起来今天是我们两个人在这里值勤:哦,七月四日快乐!值本身可能是有效的整数,但通配符匹配的表中的列类型不相同,因此此查询也会导致OP出现相同的错误。很遗憾,同意此猜测,但我们不知道这里到底是什么问题-对吗哦,所以我的答案是更多的故障排除…@ElliottBrossard-看起来今天是我们两个人在这里值勤:哦,七月四日快乐!