【问题标题】:How to add fields to the Avro schema in Apache NiFi?如何在 Apache NiFi 中向 Avro 模式添加字段?
【发布时间】:2023-03-31 17:17:02
【问题描述】:

我可以让 Apache NiFi 通过 CSVReader 生成模式,然后我可以使用 ConvertRecord 将模式写入属性。但是,我随后需要使用 UpdateRecord 添加字段,但这些字段并未添加到流文件或架构属性中。我相信这是因为这些字段不是最初推断的模式的一部分。我无法在注册表中创建架构,因为它是从文件中推断出来的。那么,当架构不包含字段时,如何向记录添加字段呢?

【问题讨论】:

    标签: json csv schema avro apache-nifi


    【解决方案1】:

    我通过使用替换文本处理器向 CSV 添加列来实现相同的效果(这将为 csv 中的标题和值添加相同的值),使用替换模式“逐行”,然后使用更新记录来更新值只有新的栏目才有意义。

    使用这种方法无需事先了解架构。

    【讨论】:

      【解决方案2】:

      您是否使用 InferAvroSchema 不必担心生成架构,或者因为您真的不知道 CSV 文件的架构?如果是前者,则发送一个 CSV,然后将推断的架构复制到 CSVReader 中,并将 UpdateRecord 中的字段添加到写入架构中。

      我写了 NIFI-5524 来介绍基于 UpdateRecord 属性在传出架构中添加/更新字段的自动化。

      【讨论】:

      • 我正在使用它,因为直到运行时我才知道其中一些的完整架构。每次我得到一个新文件时,使用上述方法生成模式是不切实际的。我想使用 NiFi 的主要原因是为了节省时间,但不幸的是,这并不能为我节省太多时间。
      • 似乎答案基本上是目前不可能。我会将其标记为已接受,因为它提到了增强功能。
      【解决方案3】:

      是的,那是因为您的 writer 控制器服务没有在其中定义新字段

      如果您要添加新字段,那么我们需要使用架构编写器控制器服务中包含的其他字段来定义新的 avro 架构

      Schema Access Strategy 更改为

      使用“架构名称”属性(或)使用“架构文本”属性

      然后定义您的新架构,包括其中的新字段,以便更新记录处理器将新字段添加到输出流文件中。

      请查看this 文章,因为我在其中添加了输入数据中不存在的 ts_tz,current_ts..etc 字段并定义了 writer 控制器服务 带有 新的 avro 架构,其中包含 所有新/旧字段

      【讨论】:

      • 我无法定义架构。它是自动生成的。我需要扩展它或让它自动扩展。
      • ...更具体地说,它是由处理器推断的。所以我没有办法准确地重新定义它。
      • 你不能从流文件属性中复制模式文本,然后在 NiFi 之外对其进行编辑并将其上传到模式注册表吗?
      • 否,因为架构在运行时会发生变化。但是在那一点上-您如何在运行时查看流文件属性?在日志中?或者有更好的用户界面来监控这个?
      • 没关系!我在 Data Provenance 界面中看到它。
      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2012-01-09
      • 2017-07-18
      • 2022-12-06
      • 2020-10-01
      相关资源
      最近更新 更多