Sql 在Google BigQuery中强制转换不合适?
我有一个标准的SQL查询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存储为字符串,但查
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-看起来今天是我们两个人在这里值勤:哦,七月四日快乐!