BigQuery是否支持解析微秒级以上时间戳?求最优解决方案
BigQuery解析纳秒级时间戳的优雅处理方案
BigQuery原生的TIMESTAMP()和PARSE_TIMESTAMP()函数仅支持解析最多6位小数的微秒级时间串,直接传入9位小数的纳秒级时间会触发报错。以下是无需自行编写复杂解析器的实用处理方式:
1. 截断多余小数位到微秒级
由于BigQuery的TIMESTAMP类型本身仅保留微秒精度,可直接将时间串中超过6位的小数部分截断,再用TIMESTAMP()函数解析:
正则表达式截断法
SELECT TIMESTAMP(REGEXP_REPLACE("2023-07-20T12:32:36.123456789Z", r'(\.\d{6})\d+Z', r'\1Z'))
固定位置截取法
通过字符串定位截取前27位(对应"YYYY-MM-DDTHH:MM:SS.FFFFFFZ"格式):
SELECT TIMESTAMP(SUBSTRING("2023-07-20T12:32:36.123456789Z", 1, 27))
2. 拆分时间戳与纳秒部分(如需保留完整精度信息)
如果需要保留纳秒级的原始数据,可将时间串拆分为TIMESTAMP类型的微秒部分和单独存储的纳秒余数:
WITH input_data AS ( SELECT "2023-07-20T12:32:36.123456789Z" AS timestamp_string ) SELECT TIMESTAMP(REGEXP_EXTRACT(timestamp_string, r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}Z')) AS microsecond_ts, CAST(REGEXP_EXTRACT(timestamp_string, r'\.\d{6}(\d{3})Z') AS INT64) AS nanos_remainder FROM input_data
注:BigQuery的TIMESTAMP类型底层仅支持微秒精度,因此即使解析纳秒级字符串,最终存储也会自动丢弃超过6位的小数部分,截断处理是符合该类型特性的合理方案。
内容的提问来源于stack exchange,提问作者WonderfulWonder
相关产品推荐
相关产品推荐

