InferAvroSchema Avro Record Name 基于流属性
InferAvroSchema Avro Record Name based on flow attribute
我有一个通用进程组,它将根据我提供的文件推断 avro 模式。但我想将 Avro 记录名称设置为与我提供的文件名相对应的名称。所以我使用了 ${filename}。但是 InferAvroSchema 出错说记录名称是空的。请注意,在此之前,我已经将 属性 "filename" 设置为 flowfile 属性并且它有一个值,因为我使用 ReplaceText 测试它以查看 ${filename}
是否有值
不幸的是,这看起来像是 InferAvroSchema 中的错误。许多属性支持表达式语言,但处理器不会根据传入的流文件评估它们。所以它最终只能使用直接输入到 属性(非 EL)中的值,或者来自系统或环境属性的值,这对这些属性中的很多都没有真正意义。
我为这个问题创建了这个 JIRA:
https://issues.apache.org/jira/browse/NIFI-2465
解决方法是所有对 evaluateAttributeExpressions() 的调用都应该传入如下流文件:
context.getProperty(CSV_HEADER_DEFINITION).evaluateAttributeExpressions(inputFlowFile).getValue()
我有一个通用进程组,它将根据我提供的文件推断 avro 模式。但我想将 Avro 记录名称设置为与我提供的文件名相对应的名称。所以我使用了 ${filename}。但是 InferAvroSchema 出错说记录名称是空的。请注意,在此之前,我已经将 属性 "filename" 设置为 flowfile 属性并且它有一个值,因为我使用 ReplaceText 测试它以查看 ${filename}
是否有值不幸的是,这看起来像是 InferAvroSchema 中的错误。许多属性支持表达式语言,但处理器不会根据传入的流文件评估它们。所以它最终只能使用直接输入到 属性(非 EL)中的值,或者来自系统或环境属性的值,这对这些属性中的很多都没有真正意义。
我为这个问题创建了这个 JIRA: https://issues.apache.org/jira/browse/NIFI-2465
解决方法是所有对 evaluateAttributeExpressions() 的调用都应该传入如下流文件:
context.getProperty(CSV_HEADER_DEFINITION).evaluateAttributeExpressions(inputFlowFile).getValue()