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

Apache Avro C++ 1.11是否支持local-timestamp-millis逻辑类型?

Apache Avro C++ 1.11 处理local-timestamp-millis逻辑类型问题

问题情况

  • 使用Apache Avro C++ 1.11版本,尝试创建包含local-timestamp-millis逻辑类型的文件
  • 编译带该逻辑类型的JSON schema时,compileJsonSchema函数无法识别此类型,逻辑类型返回值为NONE
  • 替换为timestamp-millis时,逻辑类型可被正确识别并设置
  • 库中没有对应本地时间戳的LogicalType枚举值,想了解是否可以将local-timestamp-millis作为LogicalType::TIMESTAMP_MILLIS处理

编译Schema的代码

std::istringstream ist(json);
avro::ValidSchema schema;
avro::compileJsonSchema(ist, schema);

使用的JSON Schema输入

{ "type": "record", "name": "Test", "fields": [{ "type": "string", "name": "textField"},{ "type": {"type": "long", "logicalType": "local-timestamp-millis"}, "name": "DATE"}]}

解答

Avro C++ 1.11确实没内置支持local-timestamp-millis逻辑类型,这就是编译时逻辑类型返回NONE的原因。

至于能不能把它当LogicalType::TIMESTAMP_MILLIS用,得看你的业务场景:

  • 从数据存储层面来说,两者都是用long类型存储毫秒数,二进制格式完全一致,单纯做序列化/反序列化操作的话,这么处理不会损坏数据。
  • 但要注意语义差异:timestamp-millis是UTC绝对时间戳,带时区信息,对应唯一的绝对时间点;local-timestamp-millis是本地时间,不带时区,只表示“某时某分某秒”,不对应唯一的绝对时间。如果你的业务不涉及跨时区数据交互,或者全链路都统一使用同一个时区,临时这么处理可以正常工作;但如果涉及跨时区场景,这么做会导致时间语义混乱,出现数据错误。

如果需要长期支持local-timestamp-millis,有两种可行方案:

  • 升级到Avro C++ 1.12及以上版本:1.12版本开始正式添加了LOCAL_TIMESTAMP_MILLIS等本地时间相关的逻辑类型枚举
  • 自定义逻辑类型处理:手动解析schema中的logicalType字段,在序列化/反序列化时自行处理时间的转换逻辑,绕过库内置的逻辑类型判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:42:46