Google bigquery BigQuery-使用默认值将字符串转换为时间戳

Google bigquery BigQuery-使用默认值将字符串转换为时间戳,google-bigquery,timestamp,Google Bigquery,Timestamp,在BigQuery中,我有String列,其中包含时间戳数据。在查询中,我想将其转换为Timestamp列。 我知道,BigQuery有PARSE_TIMESTAMP和TIMESTAMP函数。问题是,这些数据来自外部源,所以我需要做好准备,以防输入的String可能不是正确的时间戳。 在查询中使用这些函数时,如果输入数据格式错误,则查询将失败。 有没有一种方法可以让这个查询在输入数据错误的情况下通过?例如,将不正确的格式更改为null或某些任意时间戳,如1900-01-01 00:00:00 简

在BigQuery中,我有
String
列,其中包含时间戳数据。在查询中,我想将其转换为
Timestamp
列。
我知道,BigQuery有
PARSE_TIMESTAMP
TIMESTAMP
函数。问题是,这些数据来自外部源,所以我需要做好准备,以防输入的
String
可能不是正确的时间戳。
在查询中使用这些函数时,如果输入数据格式错误,则查询将失败。
有没有一种方法可以让这个查询在输入数据错误的情况下通过?例如,将不正确的格式更改为
null
或某些任意时间戳,如
1900-01-01 00:00:00


简单的regexp检查是不够的。例如,
2020-02-29 00:00:00
是一个完全正确的时间戳,但
2019-02-29 00:00:00
是不正确的。

您需要使用SAFE作为前缀,以便为无效数据获取空值

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

[
  {
    "tt": null
  }
]
如果你用保险箱开始一个功能。前缀,它将返回NULL 而不是一个错误。保险箱。前缀仅防止来自 带前缀的函数本身:它不能防止在 计算参数表达式。保险箱。前缀只能防止错误 这是由于函数输入值引起的,例如“值” “超出范围”错误;其他错误,如内部或系统错误, 可能仍然会发生。如果函数未返回错误,请选择SAFE。有 对输出没有影响。如果函数从未返回错误,如 兰德,那就安全了。没有效果


您需要使用SAFE作为前缀,以便为无效数据获取空值

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

[
  {
    "tt": null
  }
]
如果你用保险箱开始一个功能。前缀,它将返回NULL 而不是一个错误。保险箱。前缀仅防止来自 带前缀的函数本身:它不能防止在 计算参数表达式。保险箱。前缀只能防止错误 这是由于函数输入值引起的,例如“值” “超出范围”错误;其他错误,如内部或系统错误, 可能仍然会发生。如果函数未返回错误,请选择SAFE。有 对输出没有影响。如果函数从未返回错误,如 兰德,那就安全了。没有效果