Apache NiFi 1.3:我将如何通过 htsa.dot.gov API 传递 vin #s 集?
Apache NiFi 1.3: How would I approach passing sets of vin #s through the htsa.dot.gov API?
各位技术人员--
我正在尝试确定每小时通过 https://vpic.nhtsa.dot.gov/api/ 移动数千个 VIN# 以解析与每个关联的功能数组的最佳方法。我有两种方法选择,DecodeVINValuesBatch 和 DecodeVIN。批处理版本允许一个数组,DecodeVIN 是一个单一的参考。在 .NET/C# 或 JBOSS + DBMS 环境中,我知道我会通过首先调用 DecodeVINValuesBatch 来解决问题,然后在处理过程中,在写入时捕获 vPIC 集合中的每个值 ID出数据集。我不认为集合论在 NiFi 中有任何不同——但我不熟悉这个工具——并且没有遇到任何代表解决连续输入流上处理多个集合的例子。我对此的想法是,我将从 InvokeHTTP 处理器开始,该处理器捕获 VIN# 和其他多个数据,同时将数据的多个部分拆分到不同的处理器中。其中一个处理器需要将 VIN# 隔离到另一个 InvokeHTTP 处理器,以便向 NHTSA 发出外部呼叫。一方面,在这种情况下,单个 DecodeVIN 似乎是更好的选择。另一方面,我想知道如何最好地管理这些数据。我是否应该考虑遗漏的数据、重复数据等——因此准备成套处理?我正在寻找生产质量 NiFi 实施的指导和最佳实践。有什么建议吗?
我无法解析您链接到的 API,但这是执行此类行为的一般模式。
您是正确的,InvokeHTTP
处理器是从远程 HTTP 端点检索数据的最佳选择。生成的流文件内容将包含来自 HTTP 调用的响应,例如,我们假设它采用 JSON 格式。如果我对您对可用 API 方法的描述的理解是正确的,那么您有两个选择:
DecodeVIN
接受单个 VIN 值和 returns 特定 VIN 的一些数据集
DecodeVINValuesBatch
接受 VIN 值数组和 returns 与提供的 VIN 对应的数据集数组
如果您试图达到每小时 "several thousand" VIN 的吞吐量,我几乎肯定会推荐第二个选项。它将大大减少网络开销(数量级)并减少对拆分记录的无关处理。
为了将传入的数据格式转换为该批处理方法可接受的参数,您应该检查 ConvertRecord
处理器和关联的 RecordReader
和 RecordSetWriter
控制器服务家庭。此功能在 Apache NiFi 1.2.0 中引入(并在 1.3.0 中得到增强)并允许独立于其格式转换、查询和丰富任意数据流。 Bryan Bende 写的很好 introductory guide to using the components, Mark Payne has written extensively on the record conversion process and realtime querying, and the RecordPath Guide 是一个综合性的参考资源。
一旦流文件内容被转换为适合批处理的格式 API,您可以使用 InvokeHTTP
执行查找操作,并处理将包含 HTTP 响应的传出流文件,或者您可以将新的 LookupRecord
处理器与 LookupService
控制器服务一起使用,包括 ScriptedLookupService
允许您编写任意 Python/Groovy/Ruby 代码来执行查找操作(即 HTTP 调用丰富记录)。
您可能还对 PartitionRecord
感兴趣,它允许根据某些 RecordPath 表达式对 "like" 记录进行分组(即过滤不良数据记录、不相关记录等)。最后,为了完整起见,还有您可能感兴趣的 QueryRecord
、SplitRecord
和 UpdateRecord
处理器。
在 1.2.0 之前,可能需要单独的转换处理器,如 ConvertCSVToJSON
和 SplitText
,但这种新范例应该很适合您的用例。
各位技术人员-- 我正在尝试确定每小时通过 https://vpic.nhtsa.dot.gov/api/ 移动数千个 VIN# 以解析与每个关联的功能数组的最佳方法。我有两种方法选择,DecodeVINValuesBatch 和 DecodeVIN。批处理版本允许一个数组,DecodeVIN 是一个单一的参考。在 .NET/C# 或 JBOSS + DBMS 环境中,我知道我会通过首先调用 DecodeVINValuesBatch 来解决问题,然后在处理过程中,在写入时捕获 vPIC 集合中的每个值 ID出数据集。我不认为集合论在 NiFi 中有任何不同——但我不熟悉这个工具——并且没有遇到任何代表解决连续输入流上处理多个集合的例子。我对此的想法是,我将从 InvokeHTTP 处理器开始,该处理器捕获 VIN# 和其他多个数据,同时将数据的多个部分拆分到不同的处理器中。其中一个处理器需要将 VIN# 隔离到另一个 InvokeHTTP 处理器,以便向 NHTSA 发出外部呼叫。一方面,在这种情况下,单个 DecodeVIN 似乎是更好的选择。另一方面,我想知道如何最好地管理这些数据。我是否应该考虑遗漏的数据、重复数据等——因此准备成套处理?我正在寻找生产质量 NiFi 实施的指导和最佳实践。有什么建议吗?
我无法解析您链接到的 API,但这是执行此类行为的一般模式。
您是正确的,InvokeHTTP
处理器是从远程 HTTP 端点检索数据的最佳选择。生成的流文件内容将包含来自 HTTP 调用的响应,例如,我们假设它采用 JSON 格式。如果我对您对可用 API 方法的描述的理解是正确的,那么您有两个选择:
DecodeVIN
接受单个 VIN 值和 returns 特定 VIN 的一些数据集DecodeVINValuesBatch
接受 VIN 值数组和 returns 与提供的 VIN 对应的数据集数组
如果您试图达到每小时 "several thousand" VIN 的吞吐量,我几乎肯定会推荐第二个选项。它将大大减少网络开销(数量级)并减少对拆分记录的无关处理。
为了将传入的数据格式转换为该批处理方法可接受的参数,您应该检查 ConvertRecord
处理器和关联的 RecordReader
和 RecordSetWriter
控制器服务家庭。此功能在 Apache NiFi 1.2.0 中引入(并在 1.3.0 中得到增强)并允许独立于其格式转换、查询和丰富任意数据流。 Bryan Bende 写的很好 introductory guide to using the components, Mark Payne has written extensively on the record conversion process and realtime querying, and the RecordPath Guide 是一个综合性的参考资源。
一旦流文件内容被转换为适合批处理的格式 API,您可以使用 InvokeHTTP
执行查找操作,并处理将包含 HTTP 响应的传出流文件,或者您可以将新的 LookupRecord
处理器与 LookupService
控制器服务一起使用,包括 ScriptedLookupService
允许您编写任意 Python/Groovy/Ruby 代码来执行查找操作(即 HTTP 调用丰富记录)。
您可能还对 PartitionRecord
感兴趣,它允许根据某些 RecordPath 表达式对 "like" 记录进行分组(即过滤不良数据记录、不相关记录等)。最后,为了完整起见,还有您可能感兴趣的 QueryRecord
、SplitRecord
和 UpdateRecord
处理器。
在 1.2.0 之前,可能需要单独的转换处理器,如 ConvertCSVToJSON
和 SplitText
,但这种新范例应该很适合您的用例。