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

Posted

技术标签:

【中文标题】BigQuery - 使用默认值将字符串转换为时间戳【英文标题】:BigQuery - convert String to Timestamp with default value 【发布时间】:2020-01-24 15:02:24 【问题描述】:

在 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 是不正确的。

【问题讨论】:

【参考方案1】:

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

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

返回

[
  
    "tt": null
  
]

如果您使用 SAFE 开始功能。前缀,它将返回 NULL 而不是错误。安全。前缀只防止错误 带前缀的函数本身:它不能防止在 评估参数表达式。安全。前缀只防止错误 由于函数输入的值而发生的情况,例如“值 超出范围”错误;其他错误,例如内部或系统错误, 仍可能发生。如果函数没有返回错误,SAFE。拥有 对输出没有影响。如果函数从不返回错误,例如 兰德,然后是安全的。没有效果。

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

【讨论】:

以上是关于BigQuery - 使用默认值将字符串转换为时间戳的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:加载具有日期列数据类型的 avro 文件,只要转换为时间戳

“pyarrow.lib.ArrowInvalid:从时间戳 [ns] 转换为时间戳 [ms] 会丢失数据”在将数据发送到没有架构的 BigQuery 时

如何将数据类型varchar转换为时间戳mysql?

bigquery 使用时区转换字符串日期时间

在 Hive 中将 Long 转换为时间戳

sql server 怎样将字符串转化为时间格式