Avro共享记录示例

时间:2018-10-25 19:34:08

标签: hive avro avro-tools

我正在尝试创建一个包含共享记录的架构。

这是我创建的测试架构:

{
    "type": "record",
    "name": "record_a",
    "namespace": "namespace.a",
    "doc": "",
    "fields": [
        {
            "name": "record_field",
            "doc": "some_doc",
            "type": 
                {
                    "type": "record",
                    "name": "record_b",
                    "namespace": "namespace.b",
                    "doc": "some_doc",
                    "fields": [
                        "name": "record_field",
                        "doc": "some_doc",
                        "type":
                            {
                                "type": "record",
                                "name": "record_a",
                                "namespace": "namespace.a",
                                "doc": "",
                                "fields": []
                            }
                    ]
                } 
        }
    ]
}

要分解它:

  • 有2条记录:'record_a''record_b'
  • 'record_a'包含一个记录类型的字段。
  • 该记录称为'record_b'

类似地,'record_b'还包含一个类型为record的字段,称为'record_a'

因此,我想知道这是否可以接受。

在上一次尝试中,我创建了一个共享记录架构:

[{
    "type": "record",
    "name": "a",
    "namespace": "name.space.a",
    "doc": "",
    "fields": [
        {
            "name": "record_field",
            "doc": "",
            "type": "b"
        }
    ]
}, {
    "type": "record",
    "name": "b",
    "namespace": "name.space.a",
    "doc": "",
    "fields": [
        {
            "name": "record_field",
            "doc": "",
            "type": "a"
        }
    ]
}]

在hive上对其进行测试时,上述架构失败。这是我得到的以下错误:

  

返回信号模式以指示问题:“ b”未定义   名称。的       “ record_field”字段的类型必须是定义的名称或{“ type”:...}       表达式。)

这意味着我不能具有引用现有记录的“类型”:“ a”或“ b”。如果它是记录类型,则在模式中应将其生成为“类型”:“记录”,并带有“名称”:“ a”或“名称”:“ b”。有没有办法我可以说:

  1. 记录“ a”包含类型为“ b”的名为“ new_field”的字段
  2. 记录“ b”包含类型为“ a”的名为“ new_field”的字段

我在Avro模式中找不到共享记录的示例。因此,任何链接或解决方案将不胜感激

0 个答案:

没有答案