代码之家  ›  专栏  ›  技术社区  ›  derM - not here for BOT dreams

创建新的流文件或重用旧的流文件

  •  0
  • derM - not here for BOT dreams  · 技术社区  · 6 年前

    public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
      FlowFile flowFile = session.get();
      if (flowFile == null) return;
    
      session.write(
                 flowFile,
                 (input, output) -> input.transferTo(output) // Do transfomration here
      );
      session.transfer(REL_SUCCESS, flowFile);
    }
    

    如果我是对的,那么我在那里做的就是用内容的标识替换原始流文件的内容。

    session.create(flowFile);
    

    创建一个新的流文件。

    这让我想,我是否做错了,写在原始的流文件中。做起来很简单,所以感觉很好。但也许最好创建一个新的流文件?

    这将是一些代码,用于创建新的流文件,并写入原始流文件的内容:

    public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
      FlowFile flowFile = session.get();
      if (flowFile == null) return;
    
      FlowFile newFile = session.create(flowFile);
      session.write(
                 newFile,
                 output) -> session.read(flowFile).transferTo(output) // Do transfomration here
      );
      session.transfer(REL_SUCCESS, newFile);
    }
    
    0 回复  |  直到 6 年前
        1
  •  3
  •   maxime G    6 年前

    这取决于您的需求,但通常您应该在原始流文件中编写。

    如果使用 session.create()


    -你想保留流文件,原始的和新的
    -从外部源(kafka、hdfs、FS…)读取

        2
  •  3
  •   daggett    6 年前
    • session.write(flowFile, callback) -对与给定流文件对应的内容执行给定回调。
      • 在不需要原始内容时很有用。
    • session.create()
      • 此方法仅适用于从外部系统接收或创建数据的情况。
    • session.create(parentFlowFile) -在存储库中创建一个新的流文件,该文件没有内容,但具有到parentFlowFile的父链接。新创建的流文件将继承除UUID之外的所有父级属性。
      • 要同时输出原始流文件和新流文件时使用。
      • 或者要从输入创建多个流文件。