首页 > 解决方案 > BigQuery - 使用默认值将字符串转换为时间戳

问题描述

在 BigQuery 中,我有String一列包含时间戳数据。在查询中,我想将其转换为Timestamp列。
我知道,BigQuery 具有PARSE_TIMESTAMPTIMESTAMP功能。问题是,这些数据来自外部来源,所以我需要为这种可能性做好准备,输入String可能不是正确的时间戳。
在查询中使用这些函数时,如果输入数据格式错误,它将失败。
有没有一种方法可以让这个查询通过错误的输入数据?例如,将不正确的格式更改为null或一些任意时间戳,如1900-01-01 00:00:00.
简单的正则表达式检查是不够的。例如2020-02-29 00:00:00是一个完全正确的时间戳,但2019-02-29 00:00:00不正确。

标签: google-bigquerytimestamp

解决方案


您需要使用 SAFE 作为前缀才能获取无效数据的 NULL。

SELECT safe.timestamp('2019-02-29 00:00:00') as tt

返回

[
  {
    "tt": null
  }
]

如果您使用 SAFE 开始一个功能。前缀,它将返回 NULL 而不是错误。安全。prefix 仅防止来自前缀函数本身的错误:它不会防止在评估参数表达式时发生的错误。安全。前缀仅防止由于函数输入的值而发生的错误,例如“值超出范围”错误;其他错误,例如内部或系统错误,仍可能发生。如果函数没有返回错误,SAFE。对输出没有影响。如果函数从不返回错误,如 RAND,则 SAFE。没有效果。

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#safe_prefix


推荐阅读