BigQuery - 使用默认值将字符串转换为时间戳
Posted
技术标签:
【中文标题】BigQuery - 使用默认值将字符串转换为时间戳【英文标题】:BigQuery - convert String to Timestamp with default value 【发布时间】:2020-01-24 15:02:24 【问题描述】:在 BigQuery 中,我有 String
列,其中包含时间戳数据。在查询中,我想将其转换为 Timestamp
列。
我知道,BigQuery 有 PARSE_TIMESTAMP
和 TIMESTAMP
函数。问题是,这些数据来自外部来源,所以我需要做好准备,输入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 时