2017-02-03 21 views
2

私はCSVファイルを取得するフローに取り組んでいます。私はレコードをCSVレコードの最初のフィールドに基づいて異なるディレクトリに入れたいと思っています。 EXのためにNiFi:ExtractTextの正規表現がデータの代わりにCSVヘッダを取得する

、CSVファイルには、私が最初のフィールドすなわち、国のフィールド値を取得したいこの

country,firstname,lastname,ssn,mob_num 
US,xxxx,xxxxx,xxxxx,xxxx 
UK,xxxx,xxxxx,xxxxx,xxxx 
US,xxxx,xxxxx,xxxxx,xxxx 
JP,xxxx,xxxxx,xxxxx,xxxx 
JP,xxxx,xxxxx,xxxxx,xxxx 

ようになります。これらのレコードを特定のディレクトリに入れます。米国の記録は米国のディレクトリに、英国の記録は英国のディレクトリに、などになります。

私は今持っている流れがある:

GetFile ---->SplitText(行分割数= 1つの&ヘッダ行数= 1)---->ExtractText(ライン=(+)。 )---->PutFile(ディレクトリ= \ tmp \ data \ $ {行:getDelimitedField(1)})。私は別の目的のためにすべての分割ファイルに複製されるヘッダーファイルが必要です。だから私はそれらが必要です。

到着したCSVファイルは、ヘッダーが正常に複数のフローファイルに分割されます。しかし、私がExtractTextプロセッサで与えた正規表現は、レコードの代わりに分割されたフローファイルのCSVヘッダに対して評価します。だから、アメリカやイギリスを「行」属性にする代わりに、私はいつも「国」を取得します。したがって、すべてのファイルは\tmp\data\countryになります。これを解決する方法を教えてください。

答えて

1

私はgetDelimitedFieldが単線でしか動かず、分割ファイル内の改行を過ぎていないと考えています。

私はExtractTextを変更して正規表現で国コードを探し、ファイルの内容を属性として含める必要性を避けるために少し異なるアプローチを提唱します。

^.*\n+(\w+)の正規表現を使用すると、コンマまでの最初の行と最初の単語セットを取得し、キャプチャグループ1で指定した属性名(たとえばcountry.1)に配置します。

私はそれをチェックアウトし、あなたが知っているだろうあなたがhttps://github.com/apiri/nifi-review-collateral/blob/master/stackoverflow/42022249/Extract_Country_From_Splits.xml

+0

で入手探している値を取得する必要がありますテンプレートを作成しました –

関連する問題