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

Python中如何生成符合Avro timestamp-micros逻辑类型的long型时间戳?

解决Avro timestamp-micros类型数据写入问题

错误原因

你直接传入Python原生datetime对象不符合Schema要求——该字段的Schema定义是[null, {type: "long", logicalType: "timestamp-micros"}],要求传入的是从UTC epoch(1970-01-01 00:00:00)开始计算的微秒级时间戳(long类型),或是通过Avro逻辑类型适配的带时区datetime对象。

两种可行解决方案

方案1:手动计算微秒级时间戳(转long类型)

直接计算UTC时间对应的微秒数,转为整数后传入:

import datetime

def get_utc_timestamp_micros():
    # 定义UTC epoch时间点
    epoch = datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc)
    # 获取当前UTC时间
    current_utc = datetime.datetime.now(datetime.timezone.utc)
    # 计算时间差并转为微秒数,返回整数
    return int((current_utc - epoch).total_seconds() * 1_000_000)

# 写入数据时调用函数
schema_parsed = make_avsc_object(schema)

with open('images.avro', 'wb') as f:
    writer = DataFileWriter(f, DatumWriter(), schema_parsed)
    writer.append({'image_id': 'image-1', 'image_byte': a, 'update_time': get_utc_timestamp_micros()})
    writer.append({'image_id': 'image-2', 'image_byte': a, 'update_time': get_utc_timestamp_micros()})
    writer.close()

方案2:利用Avro逻辑类型自动转换(更简洁)

如果使用avro-python3库,可通过LogicalDatumWriter自动处理带时区的datetime对象,无需手动计算时间戳:

from avro.datafile import DataFileWriter
from avro.io import LogicalDatumWriter
import datetime

schema_parsed = make_avsc_object(schema)

with open('images.avro', 'wb') as f:
    # 使用LogicalDatumWriter替代默认的DatumWriter,支持逻辑类型转换
    writer = DataFileWriter(f, LogicalDatumWriter(), schema_parsed)
    # 必须传入带UTC时区的datetime对象,不能用无时区的datetime.now()
    writer.append({'image_id': 'image-1', 'image_byte': a, 'update_time': datetime.datetime.now(datetime.timezone.utc)})
    writer.append({'image_id': 'image-2', 'image_byte': a, 'update_time': datetime.datetime.now(datetime.timezone.utc)})
    writer.close()

注意事项

  • 必须使用UTC时间:Avro的timestamp-micros逻辑类型基于UTC标准,使用本地时间会导致时间偏差。
  • 若要传入null值,直接写update_time: None即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:40:28