2016-11-18 80 views
0

我有兩個CSV文件:如何將一個CSV中的一行與另一個CSV文件中的所有行進行比較?

  1. 其中有10個行
  2. Location(Address,no,City)其中有100行

我需要提取列,並在IdentityLocation CSV文件檢查noIdentity(no,name,Age)

Identity CSV文件獲取單行並檢查Identity.noLocation.noLocation CSV文件中有100行。

如果匹配然後再結合name, Age, Address, CityIdentity, Location

注:我需要得到第一排從IdentityLocation CSV文件有100行比較,然後讓第二排與100行進行比較。在Identity CSV文件中將繼續最多10行。

並將整體結果轉換爲Json.然後將結果移入SQL Server。

在Apache Nifi中可以嗎?

任何幫助表示讚賞。

+0

將csv文件導入到sql server中的兩個表中,然後創建一個光標 – Fourat

+0

@Fourat感謝您的回覆。我必須僅在Apache Nifi中執行這些操作因爲我需要使用nifi處理器將表達式語言支持添加到csv數據中。所以不要在SQL Server中做到這一點 –

+0

對不起,不能幫你Nifi:/ – Fourat

回答

2

您可以使用DistributedMapCache功能在NiFi中執行此操作,該功能爲查找實現鍵/值存儲。該設置需要一個分佈式映射緩存,另外還有兩個流 - 一個用您的地址記錄填充緩存,另一個用no字段查找地址。

  1. 的DistributedMapCache由兩個控制器服務,DistributedMapCacheServerDistributeMapCacheClientService限定。如果你的數據集很小,你可以使用「localhost」作爲服務器。

  2. 填充緩存需要讀取地址文件,拆分記錄,提取no密鑰,並將鍵/值對放入緩存。近似流程可能包括GetFile - > SplitText - > ExtractText - > UpdateAttribute - >PutDistributedMapCache

  3. 查找您的身份記錄實際上與上述流程非常相似,因爲它需要讀取身份文件,拆分記錄,提取密鑰,然後獲取地址記錄。處理器流程可能包括GetFile - > SplitText - > ExtractText - > UpdateAttribute - >FetchDistributedMapCache

您可以從CSV全部或部分轉換成JSON與AttributesToJSON,也許ExecuteScript。

+0

上面的流程只會提取地址文件中的匹配值,但我還需要身份文件中的一些值,比如「no」匹配在這兩個文件應該返回「地址,不,城市,名稱,年齡」。這樣做有可能嗎? – karthik

+0

是的,這是可能的,但NiFi不像數據庫那樣進行關係連接。我上面概述的是從包含身份記錄的流文件中查找匹配地址記錄的一種方法。定義連接的結果需要一個AttributesToJSON,ExecuteScript或者可能只是ReplaceText來格式化你的'地址,否,城市,名稱,年齡'目標。 – James

+0

謝謝,我可以得到的價值。現在我想比較這個結果到另一個CSV ..請提出任何想法。 – karthik

相關問題