如何将字段添加到 Apache NiFi 中的 Avro 模式?
How to add fields to the Avro schema in Apache NiFi?
我能够让 Apache NiFi 通过 CSVReader 生成模式,然后我可以使用 ConvertRecord 将模式写出到属性中。但是,我随后需要使用 UpdateRecord 添加字段,但这些字段并未添加到流文件或架构属性中。我相信这是因为这些字段不是最初推断的模式的一部分。我无法在注册表中创建架构,因为它是从文件中推断出来的。那么,当架构不包含字段时,如何向记录添加字段?
是的,那是因为您的 writer controller 服务没有定义新字段。
如果您要添加新字段,那么我们需要定义新的 avro 架构,其中包含架构编写器控制器服务中的附加字段。
将模式访问策略更改为
Use 'Schema Name' Property (or) Use 'Schema Text' Property
然后定义包含新字段的新架构,以便更新记录处理器将新字段添加到输出流文件。
请查看 this 文章,因为我在其中添加了 ts_tz、current_ts..etc 字段存在于输入数据中,并使用 new avro schema 定义了 writer controller service,其中包括 all new/old其中的字段。
您使用 InferAvroSchema 是为了不必担心生成架构,还是因为您真的不知道 CSV 文件的架构?如果是前者,则发送一个 CSV,然后将推断的模式复制到 CSVReader 中,并将 UpdateRecord 中的字段添加到写入模式中。
我写了 NIFI-5524 来介绍基于 UpdateRecord 属性的传出架构中 adding/updating 字段的自动化。
我通过使用替换文本处理器向 CSV 添加列来实现相同的目的(这将为 header 和 csv 中的值添加相同的值),使用替换模式 "Line-By-Line" 然后使用更新记录仅将新列的值更新为有意义的值。
使用此方法无需事先了解架构。
我能够让 Apache NiFi 通过 CSVReader 生成模式,然后我可以使用 ConvertRecord 将模式写出到属性中。但是,我随后需要使用 UpdateRecord 添加字段,但这些字段并未添加到流文件或架构属性中。我相信这是因为这些字段不是最初推断的模式的一部分。我无法在注册表中创建架构,因为它是从文件中推断出来的。那么,当架构不包含字段时,如何向记录添加字段?
是的,那是因为您的 writer controller 服务没有定义新字段。
如果您要添加新字段,那么我们需要定义新的 avro 架构,其中包含架构编写器控制器服务中的附加字段。
将模式访问策略更改为
Use 'Schema Name' Property (or) Use 'Schema Text' Property
然后定义包含新字段的新架构,以便更新记录处理器将新字段添加到输出流文件。
请查看 this 文章,因为我在其中添加了 ts_tz、current_ts..etc 字段存在于输入数据中,并使用 new avro schema 定义了 writer controller service,其中包括 all new/old其中的字段。
您使用 InferAvroSchema 是为了不必担心生成架构,还是因为您真的不知道 CSV 文件的架构?如果是前者,则发送一个 CSV,然后将推断的模式复制到 CSVReader 中,并将 UpdateRecord 中的字段添加到写入模式中。
我写了 NIFI-5524 来介绍基于 UpdateRecord 属性的传出架构中 adding/updating 字段的自动化。
我通过使用替换文本处理器向 CSV 添加列来实现相同的目的(这将为 header 和 csv 中的值添加相同的值),使用替换模式 "Line-By-Line" 然后使用更新记录仅将新列的值更新为有意义的值。
使用此方法无需事先了解架构。