如何从两列中的一个字段显示AVRO数据?

时间:2017-11-22 21:06:07

标签: avro

假设我有一个AVRO文件,该文件是作为记录编写的,其中一列名为c1。 当我使用我写的模式读取此文件时,我从c1获取所有数据。

现在,是否可以使用另一个模式(例如三列)准确读取该文件?一列名为c0,默认值为null,一列名为c1,返回与第一个架构一样的所有值。还有一列名为c2,别名为c1,也会返回c1的所有值?

1 个答案:

答案 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); });