Avro 导出 - 基准日期时间不是模式的示例

Avro export - The datum datetime is not an example of the schema

我正在尝试使用 avro-python3 库将我的数据导出到 python3 中的 avro 文件。我对日期时间类型有疑问。

这是我的代码:

import json
from datetime import datetime
import avro
from avro.datafile import DataFileWriter
from avro.io import DatumWriter

schema = {
        'name': 'test',
        'type': 'record',
        'fields': [{'name': 'updated_at', 'type': {"type": "long", "logicalType": "timestamp-millis"}}]
    }

schema_parsed = avro.schema.parse(json.dumps(schema))

with open('test.avro', 'wb') as f:
    writer = DataFileWriter(f, DatumWriter(), schema_parsed)

    writer.append({'updated_at': datetime(2022, 3, 25, 2, 39, 20, 736)})

    writer.close()

我收到以下错误:

avro.io.AvroTypeException: The datum {'updated_at': datetime.datetime(2022, 3, 25, 2, 39, 20, 736)} is not an example of the schema {
  "type": "record",
  "name": "test",
  "fields": [
    {
      "type": {
        "type": "long",
        "logicalType": "timestamp-millis"
      },
      "name": "updated_at"
    }
  ]
}

有知识渊博的人可以帮助我解决我做错的问题吗?

通过调试 avro 包解开了谜团。

日期时间值必须是时区感知的才能正确分配给字段格式。

所以这有效:

datetime(2022, 3, 25, 2, 39, 20, 736, tzinfo=timezone.utc)