支持从avsc架构文件

时间:2015-10-29 14:08:02

标签: java maven schema avro

我有两个架构文件

首先是position.avsc

{
"type":"enum", "name": "Position", "namespace": "avro.examples.baseball",
    "symbols": ["P", "C", "B1", "B2", "B3", "SS", "LF", "CF", "RF", "DH"]
}

其次是player.avsc

{
"type":"record", "name":"Player", "namespace": "avro.examples.baseball",
  "fields": [
   {"name": "number", "type": "int"},
   {"name": "first_name", "type": "string"},
   {"name": "last_name", "type": "string"},
   {"name": "position", "type": {"type": "array", "items": "avro.examples.baseball.Position"} }
  ]
}

我可以在avdl

中导入这些架构
@namespace("avro.examples.baseball")
protocol Baseball {
   import schema "position.avsc";
   import schema "player.avsc";
}

但我想在 json 中定义上述协议,并在协议文件中导入这些模式。 这将有助于模式的可重用性

1 个答案:

答案 0 :(得分:3)

可以使用两种类型的文件指定Avro idl架构

  1. AVPR
  2. AVDL
  3. 如果是avpr文件,我们无法导入外部架构。所有必需的模式必须存在于同一文件中。

    对于avdl,我们可以从avsc文件导入外部模式。

    我已为avro 1.7.7

    验证了这一点