因此,在 BigQuery SQL 中,以下语句有效:
SELECT TIMESTAMP("2023-07-20T12:32:36.238140Z")
然而,这个却没有:
SELECT TIMESTAMP("2023-07-20T12:32:36.238140463Z")
它产生“无效时间戳:'2023-07-20T12:32:36.238140463Z'”
标准 BigQuery SQL TIMESTAMP 函数似乎无法解析超过微秒的日期时间。
是否有最佳实践或其他优雅的方法来处理这个问题? 我可以考虑编写自己的解析器,但这似乎有点矫枉过正......
对于微秒,你必须这样做,然后它就会正常工作:
SELECT TIMESTAMP("2023-07-20T12:32:36.238140Z") => produces => 2023-07-20 12:32:36.238140 UTC
(您的样本中有多余的数字,因此您的样本不起作用)
如果您想从上面提取微秒,这将起作用:
SELECT extract(microsecond from TIMESTAMP("2023-07-20T12:32:36.238140Z")) => produces => 238140
显然在 BQ 中,你不能走几分之一微秒。所以这就是为什么。我认为你必须创建自己的解析器,但可以使用 parse_timestamp 方法来创建你自己的自定义规则
WITH input AS (SELECT "2023-07-20T12:32:36.238140463Z" AS timestampStr)
SELECT
timestampStr,
PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%E3*Z', timestamp_str) AS parsedTimestamp
FROM input;