この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
「CSV データにヌル文字が含まれているので除去したい。」といったケースを想定します。
sample.csv
"1","tazwH4","Bp1u9c","^@","zvgqxv","4vZsGm"
"2","9dgxtO","^@","igteYw","OJJExr","1qbLiq"
"3","6zGFbt","U2mcRn","2UxMsA","fHeV0u","4gFq5N"
"4","yfwwl9","ECAa7R","MVYkRt","^@","wUsAR1"
"5","^@","ZeH0qX","HHc666","0uNCZN","tMXdQ2"
"6","1DbpX8","zwQDKd","DX7gJc","ZQaSQ5","kYpduT"
"7","MTGv4I","^@","WanWZE","PNRUXW","^@"
"8","iR6st5","xfSfF8","^@","Ai9qps","GjFZY6"
"9","uYFSVU","94KFYc","^@","^@","kW22tH"
"10","kHcYXy","^@","^@","GI6Xs7","2MZOyv"
※「^@」はヌル文字を表しています。
Talend で値を置換する際には「tReplace」コンポーネントを使用しますが、各カラム毎に置換条件を設定するのは大変ですよね。
そんな時には CSV ファイルのロードに「tFileInputDelimited」ではなく「tFileInputFullRow」を使用します。
tFileInputFullRow
今回は以下のようなジョブをサンプルとして用意しました。
上段のサブジョブではヌル文字をデータに含んだ CSV ファイルを生成し、下段のサブジョブでヌル文字の置換および新規 CSV ファイルへ出力を行っています。
ここで重要なのが下段左端のコンポーネント「tFileInputFullRow」です。
このコンポーネントはテキストの1行を1データとして入力し後続のコンポーネントへ渡します。
スキーマを見てみると
「line」というカラム一つのみですね。「tFileInputDelimited」では CSV のセパレータを認識して1行を複数カラムからなるレコードとして表現しますが、こちらは1行を1データとして表現していることが分かります。
これを「tReplace」で処理します。
「line」に対してのみヌル文字を置換する設定をするのみで済みます。(1行に複数のヌル文字が存在しても全て置換してくれます。)
データを1行表現から CSV 区切り表現へ変換するには「tExtractDelimitedFields」コンポーネントを利用します。
後は「tFileOutputDelimited」で新たな CSV ファイルとして出力すれば完了です。
out.csv
"1","tazwH4","Bp1u9c","","zvgqxv","4vZsGm"
"2","9dgxtO","","igteYw","OJJExr","1qbLiq"
"3","6zGFbt","U2mcRn","2UxMsA","fHeV0u","4gFq5N"
"4","yfwwl9","ECAa7R","MVYkRt","","wUsAR1"
"5","","ZeH0qX","HHc666","0uNCZN","tMXdQ2"
"6","1DbpX8","zwQDKd","DX7gJc","ZQaSQ5","kYpduT"
"7","MTGv4I","","WanWZE","PNRUXW",""
"8","iR6st5","xfSfF8","","Ai9qps","GjFZY6"
"9","uYFSVU","94KFYc","","","kW22tH"
"10","kHcYXy","","","GI6Xs7","2MZOyv"
ヌル文字が除去出来ました!
まとめ
今回のように「tReplace」は正規表現を用いて置換を行えるので「メールアドレスのマスキング」等、他にも様々な用途で使えそうです。また「tExtractDelimtiedFields」を使用すれば CSV 区切りデータとして表現し直す事が出来るので、後続コンポーネントで行える処理の選択肢が増えるのもポイントですね。