假设我有一个AVRO文件,该文件是作为记录编写的,其中一列名为c1
。
当我使用我写的模式读取此文件时,我从c1
获取所有数据。
现在,是否可以使用另一个模式(例如三列)准确读取该文件?一列名为c0
,默认值为null
,一列名为c1
,返回与第一个架构一样的所有值。还有一列名为c2
,别名为c1
,也会返回c1的所有值?
答案 0 :(得分:1)
这可能取决于实现。如果使用JavaScript是一个选项,avsc
将让您按照自己的意愿行事。例如,如果您使用第一个模式编写Avro文件...
$foo
...然后您可以将第二个模式简单地读作...
const writerSchema = {
type: 'record',
name: 'Foo',
fields: [{name: 'c1', type: 'int'}]
};
const encoder = avro.createFileEncoder('data.avro', writerSchema);
// Write a little data.
encoder.write({c1: 123});
encoder.write({c1: 45});
encoder.end({c1: 6789});
...输出将具有您期望的形式:
const readerSchema = {
type: 'record',
name: 'Foo',
fields: [
{name: 'c0', type: ['null', 'int'], 'default': null},
{name: 'c1', type: 'int'},
{name: 'c2', aliases: ['c1'], type: 'int'},
]
};
// Decode the file and print out its data.
avro.createFileDecoder('data.avro', {readerSchema})
.on('data', (val) => { console.log(val); });