是否可以在 BigQuery 中解析超过微秒的日期时间?

问题描述 投票:0回答:2

因此,在 BigQuery SQL 中,以下语句有效:

SELECT TIMESTAMP("2023-07-20T12:32:36.123456Z")

然而,这个却没有:

SELECT TIMESTAMP("2023-07-20T12:32:36.123456789Z")

它产生“无效时间戳:'2023-07-20T12:32:36.123456789Z'”

标准 BigQuery SQL TIMESTAMP 函数似乎无法解析超过微秒的日期时间。

是否有最佳实践或其他优雅的方法来处理这个问题? 我可以考虑编写自己的解析器,但这似乎有点矫枉过正......

编辑:使用 PARSE_TIMESTAMP 函数

SELECT PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E6SZ", "2022-09-16T14:07:28.123456Z")

也可以正常工作,但是

SELECT PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E7SZ", "2022-09-16T14:07:28.1234567Z")

没有。

编辑:目前看来这个功能不存在。 这里是相同的功能请求...

sql google-bigquery datetime-format
2个回答
0
投票

显然在 BQ 中,默认时间戳函数中的时间不能超过 6 微秒的小数部分。所以这就是为什么。我认为你必须创建自己的解析器,但可以使用 parse_timestamp 方法来创建你自己的自定义规则

WITH input AS (SELECT "2023-07-20T12:32:36.123456789Z" AS timestampStr)

SELECT
  timestampStr,
  PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%E3*Z', timestampStr) AS parsedTimestamp
FROM input;

0
投票

对于微秒,你必须这样做,然后它就会正常工作:

SELECT TIMESTAMP("2023-07-20T12:32:36.123456Z") => produces => 2023-07-20 12:32:36.238140 UTC

(您的样本中有多余的数字,因此您的样本不起作用)

如果您想从上面提取微秒,这将起作用:

 SELECT extract(microsecond from TIMESTAMP("2023-07-20T12:32:36.123456Z")) => produces => 238140

请检查允许的“PART”值:https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions#current_timestamp

最低粒度仅达到微秒。您不能使用任何本机 GBQ 功能来超越此范围。

© www.soinside.com 2019 - 2024. All rights reserved.