google-bigquery - BigQuery - 使用默认值将字符串转换为时间戳
问题描述
在 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
不正确。
解决方案
您需要使用 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
推荐阅读
- docker - People are connecting through my private network
- node.js - 在 node.js 服务器上存储 mp4 文件的位置?
- java - 我似乎为我的简单计数器程序做的一切都是正确的,但是当我在命令行上运行程序时没有任何反应
- java - 从 RestFB 的帖子中获取用户 ID 评论
- google-cloud-functions - Would it be possible that we have one Google Cloud function listen to multiple topics?
- c++ - Vector of derived class objects using shared_ptr
- python - 无法调用 canvas.show()
- python - 如何循环回到程序的开头?Python
- python - 为什么多个 on_message 事件不起作用?
- geometry - 将点从一个坐标变换到另一个坐标