【问题标题】:Apache Nifi - `ConvertJSONToSQL` possible duplicatesApache Nifi - `ConvertJSONToSQL` 可能重复
【发布时间】:2017-02-27 20:09:16
【问题描述】:

请在下面找到我的流程,

ExecuteSQL -> SplitAvro -> ConvertAvroToJSON -> ConvertJSONToSql -> PutSQL

注意ConvertJSONToSQL 处理器接收5403 并发送10804。有人可以解释一下这里发生了什么吗?我希望看到 IN 和 OUT 计数与CovertAvroToJSON 处理器相同。这个增加的数字将直接影响我的最终输出表,在该表中我可以看到所有记录的重复项。

ConvertJSONToSQL 处理器注入可能重复的 SQL 插入语句?

2/28 更新 我取出了SplitAvro 处理器,并且填充的记录没有重复!!!!请在下面找到流程,

ExecuteSQL -> ConvertAvroToJSON -> ConvertJSONToSql -> PutSQL

但我还没有弄清楚确切的问题!

【问题讨论】:

  • 请提供更多详细信息以帮助我们解决您的问题。如果可以,请将流程导出为模板并将其发布到gist.github.com
  • @Andy,对不起,我注意到模板包含有关我正在连接的数据库的机密信息。那么,我应该删除这些信息并与您分享 xml 吗?这会有帮助吗?
  • NiFi 模板导出不包含任何“敏感”值(我不是指逻辑定义,在这种情况下最终由您确定,而是标记为 sensitive 的处理器属性i>(即数据库密码等)不导出)。
  • 好的。我想我正在尝试做错事来导出。您能解释一下如何导出流程吗?
  • 通常您使用LogAttribute 处理器来调试这些问题并检查队列以确定为什么有比预期更多的流文件(显然尝试更小规模的调试)。

标签: apache-nifi


【解决方案1】:

您的流/数据是否有可能即使在 SplitAvro 和 ConvertAvroToJSON 之后,流文件也包含 JSON 数组?根据文档,“如果输入是 JSON 元素的数组,则数组中的每个元素都作为单独的 FlowFile 输出到 'sql' 关系”。

也许尝试 ConvertAvroToJSON -> SplitJSON 而不是 SplitAvro -> ConvertAvroToJSON。如果您仍在“顶级”获取数组,则 ConvertJsonToSQL 仍将为数组中的每个元素创建一个流文件。在这种情况下,您可能需要另一个 SplitAvro 或(或者)一个 SplitJson。

【讨论】:

  • 感谢您的回复。我已从原始流程中取出SplitAvro 处理器,一切正常。有趣的是,这是如何产生不同的。我更正/更新的流程是ExecuteSQL -> ConvertAvroToJSON -> ConvertJSONToSql -> PutSQL。这将加载接收器数据库而没有任何重复记录。
  • 你应该可以用ExecuteSQL -> PutDatabaseRecord替换所有这些,后者处理SQL的生成和执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多