提问人:Hercules Konsoulas 提问时间:10/25/2023 更新时间:10/25/2023 访问量:28
有没有办法将无头 Avro 消息写入文件,而无需在 Python 中反序列化其二进制内容?
Is there a way to write a headless Avro message to a file without deserializing its binary contents in Python?
问:
我正在使用 Oracle 数据库来存储不同架构的一些 Avro 消息,这些消息表示我的应用程序中的一些 Kafka 事件。由于消息有多种类型,因此我使用一个包含几列的表,并将其整个正文存储在名为 的 CLOB 列中。我现在需要将所有这些消息导出到有效的 Avro 消息的不同文件中。BODY
当我使用类似的东西从数据库中获取这些数据时:
# Return string or bytes instead of a locator (for CLOBs e.g. event.body)
oracledb.defaults.fetch_lobs = False
...
cursor.execute(
'select body from EVENTS' +
(f" where EVENT_TYPE='{event_type}'" if event_type else "") +
" order by CREATED_ON"
)
for body in cursor:
filename = fr'./exported_events/event_{SOME_UNIQUE_ID}.avro'
os.makedirs(os.path.dirname(filename), exist_ok=True)
with open(filename, 'wb+') as file:
fastavro.writer(
file,
fastavro_schema.load_schema(fr"./event_{event_type}.avsc"),
[body]
)
我收到一个错误,说基本上是一个无法迭代的对象。
这似乎我应该先序列化正文,然后再反序列化它,以便将其写入 avro 文件中。body
bytes
有没有办法避免这种情况?
我也尝试过将 转换为字典,但这样做时出现的问题是我的消息包含和类型显然被模块错误地转换,然后在使用架构进行验证时引发错误。body
json.dumps(body)
bytearrays
timestamp-millis
json
答: 暂无答案
评论
body
body
fastavro