我几乎没有相同的并行流程(如屏幕截图所示)。我在每个相同的流程中都有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 ,所以有什么方法可以一次完成所有转换记录的模式文本?
如果要更改/更新模式文本中的字段之一,是否必须手动更改/更新每个处理器中的字段名称?还是有一种全局方法可以在我拥有的所有并行流中更改字段名称?
有没有办法一劳永逸地更新各种处理器之间的架构文本?
非常感谢您的帮助!谢谢
答案 0 :(得分:2)
在使用Schema Text Field Property
时,您需要手动更改所有ConvertRecord 处理器。
尝试这种方法:
在ConvertRecord处理器中,将架构访问策略用作
Use Schema Name Property
然后设置 AvroSchemaRegistry 并通过添加新属性来定义架构
我已将sch
添加为schema.name并定义了Avro模式。
在GetFile Processor之后,使用UpdateAttribute
处理器并向流文件添加 schema.name
属性(例如,值为sch)。
通过这种方式,我们在所有 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链接。