You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery使用TIMESTAMP_SECONDS处理JSON提取值时出现签名不匹配错误

解决JSON秒级时间转日期的报错问题

问题原因

TIMESTAMP_SECONDS()函数要求输入数值类型的时间戳,但JSON_EXTRACT_SCALAR提取出的秒数是字符串格式(例如'1646985600'),类型不匹配导致了函数签名错误或"无效时间戳"的提示。

解决方案

先把字符串格式的秒数转换成整数类型,再进行时间戳和日期的转换。推荐用SAFE_CAST处理,避免个别非法值导致整个查询失败。

修改后的查询语句:

SELECT DATE(TIMESTAMP_SECONDS(SAFE_CAST(JSON_EXTRACT_SCALAR(data, '$.fechaCierre._seconds') AS INT64))) AS fechaCierre
FROM db 
LIMIT 10

额外说明

  1. 简化JSON提取:不需要嵌套JSON_EXTRACT和JSON_EXTRACT_SCALAR,直接用完整路径$.fechaCierre._seconds就能提取到目标值。
  2. 安全转换:如果能保证所有秒数字符串都是合法整数,可以用CAST( ... AS INT64)代替SAFE_CAST,但SAFE_CAST会把转换失败的行返回NULL,不会中断整个查询,容错性更强。
  3. 分步验证:可以拆分步骤查看每一步的结果,方便排查问题:
SELECT 
  JSON_EXTRACT_SCALAR(data, '$.fechaCierre._seconds') AS 字符串秒数,
  SAFE_CAST(JSON_EXTRACT_SCALAR(data, '$.fechaCierre._seconds') AS INT64) AS 数值秒数,
  TIMESTAMP_SECONDS(SAFE_CAST(JSON_EXTRACT_SCALAR(data, '$.fechaCierre._seconds') AS INT64)) AS 时间戳,
  DATE(TIMESTAMP_SECONDS(SAFE_CAST(JSON_EXTRACT_SCALAR(data, '$.fechaCierre._seconds') AS INT64))) AS fechaCierre
FROM db 
LIMIT 10

内容的提问来源于stack exchange,提问作者Elha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:05:27