NiFi架构文本属性中的“更改/更新字段名称”跨各种并行流

时间:2018-12-11 05:01:39

标签: schema etl updates apache-nifi

我几乎没有相同的并行流程(如屏幕截图所示)。我在每个相同的流程中都有convertRecord,在记录读取器中,我已使用“架构文本字段属性”作为访问策略并指定了“架构文本”。例如:

   {
 "type": "record",

 "name": "AVLRecord0",

 "fields" : [

    {"name": "TimeOfDay", "type": "string", "logicalType":"timestamp-millis"},
    {"name":"Field1", "type": "double"},
    {"name":"Field2", "type": "double"},
    {"name":"Field3", "type": "double"},
    {"name": "Filename", "type": "string"}
]

}

让我们说一下我在各种并行流ConvertRecord中使用的上述架构,现在我想将一个字段名称从 Field更新为Field_Name ,所以有什么方法可以一次完成所有转换记录的模式文本?

如果要更改/更新模式文本中的字段之一,是否必须手动更改/更新每个处理器中的字段名称?还是有一种全局方法可以在我拥有的所有并行流中更改字段名称?

有没有办法一劳永逸地更新各种处理器之间的架构文本?

非常感谢您的帮助!谢谢

enter image description here

1 个答案:

答案 0 :(得分:2)

在使用Schema Text Field Property时,您需要手动更改所有ConvertRecord 处理器。

尝试这种方法:

在ConvertRecord处理器中,将架构访问策略用作

Use Schema Name Property

然后设置 AvroSchemaRegistry 并通过添加新属性来定义架构

enter image description here

我已将sch添加为schema.name并定义了Avro模式。

在GetFile Processor之后,使用UpdateAttribute处理器并向流文件添加 schema.name 属性(例如,值为sch)。

  • 现在,读取器控制器服务中的模式访问策略已使用Use Schema Name Property and Schema Registry as AvroSchemaRegistry`进行设置。 enter image description here

通过这种方式,我们在所有 ConvertRecord 处理器上 未定义架构 ,而我们指的是相同在AvroSchemaRegistry中定义的架构,以防万一您想更改一个字段名称,很容易进入注册表并更改值。

流量:

1.GetFile
2.UpdateAttribute //add schema.name attribute
3.ConvertRecord //define/use AvroSchemaRegistry and access strategy as schemaname property
..other processors

有关定义/使用AvroSchemaRegistry的更多详细信息,请参见this链接。