在 BigQuery 中将包含空单元格、NULL 和字符串的列转换为 FLOAT64
CAST a column contain empty cells, NULL and String to FLOAT64 in BigQuery
我遇到了一个无法解决的将字符串转换为浮动的问题。我在 BQ table 中有一列包含值(数字作为字符串)、NULL 和空单元格。现在,我想将这些值转换为 FLOAT64,但出现双值错误。我试过了:
CAST(myfield AS FLOAT64) as myfield
并认为用 NULL 替换空字段可能会有所帮助:
CAST(REGEXP_REPLACE(myfield, " ", NULL) AS FLOAT64 ) as myfield
但这会将所有内容设置为 NULL。
任何关于如何解决这个问题的想法都将不胜感激。
要从字符串中删除字符,请使用空字符串,而不是 NULL
:
CAST(REGEXP_REPLACE(myfield, ' ', '') AS FLOAT64 ) as myfield
REGEXP_REPLACE()
对这个操作来说太过分了。您可以只使用常规 REPLACE()
:
CAST(REPLACE(myfield, ' ', '') AS FLOAT64 ) as myfield
根据您对另一个问题的评论,很明显 space 不是您数据中的唯一问题。
您需要识别并修复问题数据(理想情况下,这应该在摄取到数据库之前完成,但这是一个不同的问题)。
例如,您可以使用 safe_cast()
:
SAFE_CAST()
不会抛出错误,而是 returns NULL
,所以你可以检查那些 NULL
s...
SELECT
*
FROM
yourTable
WHERE
myfield IS NOT NULL
AND SAFE_CAST(REPLACE(myfield, ' ', '') AS FLOAT64) IS NULL
或者,只需在查询中使用 SAFE_CAST()
(而不是 CAST()
) 并接受格式错误的数据会产生 NULL
- 防止运行时错误
- 但是 'hides' 错误数据为
NULL
s
编辑:
此外,您还可以通过去除其他白色 space 字符来使您的 REPLACE()
更健壮 (例如制表符、回车符 returns 等).
我遇到了一个无法解决的将字符串转换为浮动的问题。我在 BQ table 中有一列包含值(数字作为字符串)、NULL 和空单元格。现在,我想将这些值转换为 FLOAT64,但出现双值错误。我试过了:
CAST(myfield AS FLOAT64) as myfield
并认为用 NULL 替换空字段可能会有所帮助:
CAST(REGEXP_REPLACE(myfield, " ", NULL) AS FLOAT64 ) as myfield
但这会将所有内容设置为 NULL。
任何关于如何解决这个问题的想法都将不胜感激。
要从字符串中删除字符,请使用空字符串,而不是 NULL
:
CAST(REGEXP_REPLACE(myfield, ' ', '') AS FLOAT64 ) as myfield
REGEXP_REPLACE()
对这个操作来说太过分了。您可以只使用常规 REPLACE()
:
CAST(REPLACE(myfield, ' ', '') AS FLOAT64 ) as myfield
根据您对另一个问题的评论,很明显 space 不是您数据中的唯一问题。
您需要识别并修复问题数据(理想情况下,这应该在摄取到数据库之前完成,但这是一个不同的问题)。
例如,您可以使用 safe_cast()
:
SAFE_CAST()
不会抛出错误,而是 returns NULL
,所以你可以检查那些 NULL
s...
SELECT
*
FROM
yourTable
WHERE
myfield IS NOT NULL
AND SAFE_CAST(REPLACE(myfield, ' ', '') AS FLOAT64) IS NULL
或者,只需在查询中使用 SAFE_CAST()
(而不是 CAST()
) 并接受格式错误的数据会产生 NULL
- 防止运行时错误
- 但是 'hides' 错误数据为
NULL
s
编辑:
此外,您还可以通过去除其他白色 space 字符来使您的 REPLACE()
更健壮 (例如制表符、回车符 returns 等).