【问题标题】:How can I define Avro Schema to catch keys which may come or may not?如何定义 Avro Schema 来捕获可能会出现或不会出现的键?
【发布时间】:2020-06-24 09:22:26
【问题描述】:

我正在尝试自动化 NiFi 中的一项任务,我有 n 条可能的记录。

{
 "id":"foo",
 "date":"2020-06-24",
 "key_1":
    {
     "bar":"value1"
    }
}

其他例子:

{
 "id":"foo",
 "date":"2020-06-24",
 "key_2":
    {
     "bar":"value2"
    }
}

等等。我假装做的是使用 MergeRecord 像这样按 id 和 date 混合这些值:

[
    {
     "id":"foo",
     "date":"2020-06-24",
     "key_1":
        {
         "bar":"value1"
        }
    },
    {
     "id":"foo",
     "date":"2020-06-24",
     "key_2":
        {
         "bar":"value2"
        }
    }, 
    ...
]

但这就是我所拥有的:

[
    {
     "id":"foo",
     "date":"2020-06-24",
     "key_1":
        {
         "bar":"value1"
        },
     "key_2":null,
     "key_3":null,...
    },
    {
     "id":"foo",
     "date":"2020-06-24",
     "key_1":null,
     "key_2":
        {
         "bar":"value2"
        }
    },
    "key_3":null,
    ...
]

这是我的 avro 架构:

{"name":"foo",
 "type":"record",
 "fields":[
    {"name":"id","type":"string"},
    {"name":"date","type":"string"},
    {"name":"key_1",
     "type":["null",{
        "name":"key_1", "type":"record",
        "fields":[
            {"name":"bar","type":"double"}
        ]
     }]},
    {"name":"key_2",
     "type":["null",{
        "name":"key_2", "type":"record",
        "fields":[
            {"name":"bar","type":"double"}
        ]
     }]},
    {"name":"key_3",
     "type":["null",{
        "name":"key_3", "type":"record",
        "fields":[
            {"name":"bar","type":"double"}
        ]
     }]},
     ...
   ],
}

我不知道即使有任何方式可以说 NiFi 某些密钥可能会出现或可能不会出现。将其定义为 null 类型是我的最佳选择

【问题讨论】:

    标签: schema apache-nifi avro


    【解决方案1】:

    可空字段将是您的最佳选择。真正的 Avro 在这里完成了大部分繁重的工作。有一个稀疏的记录很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 2020-12-05
      • 2019-03-05
      • 2010-10-14
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2014-06-22
      相关资源
      最近更新 更多