在使用Avro.jl库时,如果出现问题:试图使用append函数向现有的Avro文件添加记录时,只有第一个记录会成功添加,而后续记录似乎被忽略了,这通常是由于使用了open(TailMode, filename, schema)而不是open(AvroOutputFormat, filename, schema)来打开写入器的缘故。
以下是一个示例代码,将“append”函数的第一个参数从tailer更改为data_writer,并使用try-catch块来执行错误处理:
using Avro
using Avro.File
using CodecZlib
# 定义架构
schema = {"namespace":"example.avro",
"type":"record",
"name":"AvroTest",
"fields":[
{"name":"id","type":"int"},
{"name":"name","type":"string"}
]
}
# 建立写入器
filename = "test.avro"
data_writer = open(AvroOutputFormat, filename, schema)
# 添加记录 - 这段代码需要按要求执行多次
record = (id=1, name="test")
try
append(data_writer, record)
catch e
close(data_writer)
error("An error occurred while appending records: $e")
end
# 关闭写入器
close(data_writer)
通过以上更改,使用append函数的所有记录都将正确地添加到现有Avro文件中。