Javascript ApacheNIFI 1.3:如何通过htsa.dot.gov API传递vin集?

Javascript ApacheNIFI 1.3:如何通过htsa.dot.gov API传递vin集?,javascript,arrays,apache-nifi,Javascript,Arrays,Apache Nifi,技术伙伴-- 我正在尝试确定最好的方法,以每小时移动数千个VIN,从而解析出与每个VIN关联的特性数组。我有两种方法选择,DecodeVINValuesBatch和DecodeVIN。批处理版本允许使用数组,解码VIN是单个参考。在.NET/C#或JBOSS+DBMS环境中,我知道我会通过首先调用DecodeVINValuesBatch来解决问题,然后在处理过程中,在写入数据集时捕获vPIC集合中的每个值ID。我并不认为集合论在NiFi中会有什么不同,但我不熟悉这个工具,也没有遇到过任何代表在连

技术伙伴--
我正在尝试确定最好的方法,以每小时移动数千个VIN,从而解析出与每个VIN关联的特性数组。我有两种方法选择,DecodeVINValuesBatch和DecodeVIN。批处理版本允许使用数组,解码VIN是单个参考。在.NET/C#或JBOSS+DBMS环境中,我知道我会通过首先调用DecodeVINValuesBatch来解决问题,然后在处理过程中,在写入数据集时捕获vPIC集合中的每个值ID。我并不认为集合论在NiFi中会有什么不同,但我不熟悉这个工具,也没有遇到过任何代表在连续输入流上处理多个集合的例子。我的想法是,我将从InvokeHTTP处理器开始,它捕获VIN+多个其他数据段,同时将数据的多个部分拆分为不同的处理器。其中一个处理器需要将VIN#隔离到另一个InvokeHTTP处理器,以向NHTSA进行外部调用。一方面,在这种情况下,单解码器VIN似乎是更好的选择。另一方面,我想知道如何最好地管理这些数据。我是否应该考虑丢失的数据、重复的数据等——因此准备好成套处理?我正在寻找生产质量NiFi实施的指导和最佳实践。有什么建议吗?

我无法解析您链接到的API,但下面是执行此类行为的一般模式

您认为
InvokeHTTP
处理器是从远程HTTP端点检索数据的最佳候选处理器,这是正确的。生成的flowfile内容将包含来自HTTP调用的响应,例如,它是JSON格式的。如果我对可用API方法描述的理解是正确的,您有两个选择:

  • DecodeVIN
    接受单个VIN值并返回特定VIN的一些数据集
  • DecodeVINValuesBatch
    接受VIN值数组,并返回与提供的VIN对应的数据集数组
  • 如果您试图实现每小时“数千”VIN的吞吐量,我几乎肯定会推荐第二种选择。它将大大减少网络开销(数量级),并减少对拆分记录的无关处理

    为了将数据的传入格式转换为该批处理方法的可接受参数,您应该检查
    ConvertRecord
    处理器以及相关的
    RecordReader
    RecordSetWriter
    控制器服务系列。ApacheNIFI 1.2.0中引入了此功能(并在1.3.0中进行了增强),允许对任意数据流进行独立于其格式的转换、查询和丰富。布莱恩·本德(Bryan Bende)写了一篇好文章,马克·佩恩(Mark Payne)写了大量关于和的文章,这是一个全面的参考资源

    一旦流文件内容被转换为批处理API的正确形式,您可以使用
    InvokeHTTP
    执行查找操作,并处理将包含HTTP响应的传出流文件,或者您可以使用带有
    LookupService
    控制器服务的新
    LookupRecord
    处理器,包括
    ScriptedLookupService
    ,它允许您编写任意Python/Groovy/Ruby代码来执行查找操作(即HTTP调用以丰富记录)

    您可能还对
    PartitionRecord
    感兴趣,它允许根据某些记录路径表达式(即筛选坏数据记录、不相关记录等)对“相似”记录进行分组。最后,为了完整起见,您可能还对
    QueryRecord
    SplitRecord
    UpdateRecord
    处理器感兴趣


    在1.2.0之前,像
    ConvertCSVToJSON
    SplitText
    这样的单独转换处理器可能是必要的,但这种新的范式应该很适合您的用例

    安迪,非常感谢你的全面回复。我真的很感激。我将研究您引用的博客/示例/处理器系列。为了保持一致性,我将更正原始帖子中的url。