質問
CSVファイルのマージ処理で、既存のCSVに差分データを追記したいです。
Or-Appendマージを使用すると重複レコードも追記されてしまいますが、重複を避けて日付順にソートする方法はありますか?
処理イメージとしては、Aファイルから差分取得したBファイルの内容を、Aファイルに追記します。
出力時は日付順とし、ID=06のレコードのように後から確定したレコードについても日付順にソートします。
また、ID=04,05に関しては、既にAファイルに存在するため、重複レコードは追記対象外とします。
<入力イメージ>
Aファイル(オリジナルファイル)
ID,日付,名称
01,2025-11-01,田中銀行
02,2025-11-01,佐藤商店
03,2025-11-02,田中銀行
04,2025-11-02,高橋建設
05,2025-11-03,高橋建設
Bファイル(差分連携ファイル)
ID,日付,名称
04,2025-11-02,高橋建設
05,2025-11-03,高橋建設
06,2025-11-02,佐藤商店
07,2025-11-03,高橋建設
08,2025-11-04,田中銀行
09,2025-11-05,山田保険
<出力イメージ>
Aファイル(オリジナルファイル)
ID,日付,名称
01,2025-11-01,田中銀行
02,2025-11-01,佐藤商店
03,2025-11-02,田中銀行
04,2025-11-02,高橋建設
06,2025-11-02,佐藤商店
05,2025-11-03,高橋建設
07,2025-11-03,高橋建設
08,2025-11-04,田中銀行
09,2025-11-05,山田保険
回答
Or-Appendマージロジックを使用した場合、重複するレコードも出力されてしまいます。
そのため、後続で[集計]処理を配置することで重複分を削除し、[ソート]処理を使用してソートすることをご検討ください。
以下にスクリプト実装例をご紹介いたします。
あくまで一例となりますので、お客様のご要件に合わせて適宜ご調整ください。
■処理概要
1. CSVファイルを読み取ります
2. [マージ]処理内で[Or-Appendマージ]ロジックを使用してCSVデータをマージします
3. 後続処理のため、マージした結果をマッピングしなおします
4. [集計]処理でIDが重複しているレコードを除きます
5. [ソート]処理で「日付」→「ID」の順で昇順でソートします
6. CSVファイルに5の結果を書き込みます
■スクリプト実装イメージ

■設定手順
1. 2つの[CSVファイル読み取り]処理でAファイルとBファイルを読み取ります
CSVファイルに列名(ヘッダ)が含まれる場合、最初の行は値として取得しないようにします
2.[マージ]処理を配置し、[Or-Appendマージ]ロジックを用いて下図のようにマッピングします

3.[マージ]処理の後続に[集計]処理を配置し、データフローとプロセスフローをつなぎます
その際、マッピングを追加します マッピングの内容は下図のとおりです

※入力データの各columnには"1"からはじまるインデックスを付与してください
インデックスは各columnの編集画面より付与することができます
4.[集計]処理のプロパティを以下のように設定します
・必須設定:ID
・集計設定:(※カッコの中は関数を意味します)
列1:日付(最初の値)
列2:名称(最初の値)
・出力設定 - 出力を手動で設定:有効
・出力設定 - 出力対象設定:
列1:ID
列2:日付
列3:名称
5.[集計]処理の後続に[ソート]処理を配置します
各設定値は以下のように設定します
・必須設定:(※カッコの中はデータ型を意味します)
列1:日付(日付//時間)
列2:名称(文字列)
・出力設定: - 出力を手動で設定:無効
6.[CSVファイル書き込み]処理でAファイルを対象にして「上書き」を設定します
なお、書き込み設定のオプションから列名を挿入するかどうか設定することができます
参考:Or-Appendマージ
コメント
0件のコメント
記事コメントは受け付けていません。