如何将一个CSV中的一行与另一个CSV文件中的所有行进行比较?

时间:2016-11-18 09:07:08

标签: sql-server csv apache-nifi

我有两个CSV文件:

  1. Identity(no,name,Age)有10行
  2. Location(Address,no,City)有100行
  3. 我需要提取行并检查no中带有Identity CSV文件的Location列。

    Identity CSV文件中获取单行,并在Identity.no CSV文件中检查Location.no Location行有100行。

    如果匹配,请合并name, Age, Address, City

    中的Identity, Location

    注意:我需要从Identity获取第1行,将其与Location CSV文件中的100行进行比较,然后获取第2行将其与100行进行比较。它将在Identity CSV文件中继续最多10行。

    整体结果转换为Json。然后将结果移到SQL Server。

    是否可以在Apache Nifi中使用?

    任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用DistributedMapCache功能在NiFi中执行此操作,该功能实现了用于查找的键/值存储。该设置需要一个分布式地图缓存,以及两个流 - 一个用您的地址记录填充缓存,另一个用no字段查找地址。

  1. DistributedMapCache由两个控制器服务定义,DistributedMapCacheServerDistributeMapCacheClientService。如果您的数据集很小,您可以使用" localhost"作为服务器。

  2. 填充缓存需要读取地址文件,拆分记录,提取no密钥,并将键/值对放入缓存。近似流程可能包括GetFile - > SplitText - > ExtractText - > UpdateAttribute - > PutDistributedMapCache

  3. 查找您的身份记录实际上与上面的流程非常相似,因为它需要读取身份文件,拆分记录,提取no密钥,然后提取地址记录。处理器流程可能包括GetFile - > SplitText - > ExtractText - > UpdateAttribute - > FetchDistributedMapCache

  4. 您可以使用AttributesToJSON或者ExecuteScript将整个或部分从CSV转换为JSON。