使用BigQuery Storage Write API传入Datetime字段报错如何解决?
报错成因
- 你参考的字符串格式datetime字面量规则仅适用于BigQuery标准SQL查询场景,不适用于Storage Write API直接写入JSON的场景。
- 触发int64类型不匹配报错的核心原因通常为以下三类:
- 你的BigQuery表中
last_updated列实际配置为INT64(整数)类型,而非你预期的DATETIME类型 - 你构造Storage Write API请求时提交的自定义schema里,误将
last_updated字段声明为INT64类型,和表结构不匹配 - 未开启Storage Write API的JSON字符串解析适配,API默认要求DATETIME类型传入微秒级时间戳整数,因此校验不通过
- 你的BigQuery表中
- 你第二种加了单引号的转义写法属于SQL语法范畴,在JSON写入场景属于格式错误,完全不需要使用。
解决方法
你可以根据自己的技术栈选以下任意一种方案:
方案1:兼容现有字符串格式写入
- 先确认BigQuery表
last_updated列、写入请求提交的schema里,该字段类型均为DATETIME - 在Storage Write API的写入请求配置中,开启JSON格式的DATETIME字符串解析支持,显式指定 datetime 格式为ISO8601
- 去掉JSON字符串中多余的单引号,直接使用
{"last_updated":"2021-09-20T10:15:26.796731"}格式即可正常写入
方案2:使用时间戳整数写入
- 将Java模型中的datetime字段直接序列化为微秒级Unix时间戳整数,示例格式为
{"last_updated": 1632132926796731},无需额外配置API参数即可直接写入DATETIME类型列
内容的提问来源于stack exchange,提问作者Nacho
相关产品推荐
相关产品推荐

