CSVファイルの新古を比較して、差分レコードを抽出したい

Avatar
Makoto

皆さん

CSVファイルを取込する処理をやりたいですが、

INPUTファイルはいつも全権です。

dataspiderで差分を判断して、抽出することはどのように処理すればよいのでしょうか?

この記事は役に立ちましたか?

0が役に立ったといっています

コメント

  • Avatar
    sakusakupanda
    コメントアクション Permalink

    2つのファイルを比較する機能は、なかったような…。

    差分のデータは、INPUTデータにどのように取り込まれているのでしょう?
    例えば、後続行に追加されていくのであれば、前回のINPUTファイルのデータ行数以降を、今回のINPUTファイルから抽出する方法が取れそうですね。

     

    混在しているのであれば…うーん、別のアプリを使って差分行だけ抽出したほうが早いかも?!

     

    0
  • Avatar
    宇佐見直人
    コメントアクション Permalink

    CSVとSalesforceのデータを読み込んで、Joinして、Salesforceにアップデートとインサートをしてたりします。

    CSVを出す元になっているシステムがあって、そのシステムとSalesforceがお互いのデータのIDを持っているようにして、
    CSV側のIDがSalesforce側になければ作成、
    CSV側のIDがSalesforce側にあれば更新。
    みたいな動きをしています。

    具体的にはforeachでループを回す際に
    「Salesforce側のIDがないこと」を条件にしてます。

    (ほんとはCSVの元になってるDBから直接selectしたいんですが、
     エディションの問題で直接いじれません。)

    0
  • Avatar
    Makoto
    コメントアクション Permalink

    CSVデータ中には一部が修正されたものがあるので、データ内容を比較しなければならないと思います。

    例:

    第1回
    ID,Name,Department
    001,ABC,開発場
    002,DEF,開発場

    第2回
    ID,Name,Department
    001,ABC,開発場
    002,DEF,営業部
    003,XYZ,開発部

    抽出したいものは以下の通りです:

    差分の抽出対象
    002,DEF,営業部
    003,XYZ,開発部

    dataspiderで対応できませんかな?

    0
  • Avatar
    sakusakupanda
    コメントアクション Permalink

    ご提示の例のようにIDが振られているのであれば、

    データを昇順に並び替えののち、上から1行ずつ読み取って内容を比較する・一致しなければCSVファイルに書き込む、を繰り返すのであれば、Dataspiderで出来そうですね!

    1
  • Avatar
    Makoto
    コメントアクション Permalink

    それは内容を比較するために2つファイルを一緒に1行ずつ読みとりますね。それはいけませんか?

    CSVファイルを読み取り、繰り返し処理で1行ずつデータを追加書き込みを行う処理です、

    2つファイル一緒に1行ずつ読み取って比較することはどのように処理すればよいのでしょうか?

    0
  • Avatar
    宇佐見直人
    コメントアクション Permalink

    2つのファイルがあるのであれば、

    1.ツールパレット内の「変換>基本>結合」で結合する
    2.「基本>処理>変数代入」を使ってスクリプト変数にIDを入れる
    3.foreachループの中に「基本>フロー>繰り返し(条件指定)」
      を使って、条件に一致する場合だけ処理する

    といった進め方はどうでしょう。

    CSVファイルの比較ではないのですが、
    以下が参考になるかもしれません。

    ■ディレクトリに存在するファイル名を判定し、拡張子ごとに処理を分岐したい
    https://dstn.appresso.com/hc/ja/articles/115004282687-%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%97-%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%81%94%E3%81%A8%E3%81%AB%E5%87%A6%E7%90%86%E3%82%92%E5%88%86%E5%B2%90%E3%81%97%E3%81%9F%E3%81%84

    0
  • Avatar
    tencho
    コメントアクション Permalink

    こちらでも差分抽出ができると思います。

    https://dstn.appresso.com/hc/ja/articles/115004431928-%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%84%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%97%E3%81%9F%E3%81%84

     

    1
  • Avatar
    Makoto
    コメントアクション Permalink
    宇佐見直人さん
     
    これは順番でファイルを読み取りますね。
    しかし、ファイルを比較するのため、両方を読み込むと思います。
     
    繰り返す3回の場合:

    Loop 1
    File 1 File 2
    ID,Name,Department ID,Name,Department
    001,ABC,開発場 = 001,ABC,開発場

    Loop 2
    File 1 File 2
    ID,Name,Department ID,Name,Department
    002,DEF,開発場 <> 002,DEF,営業部
    --> 抽出 -> ファイル書き込み

    Loop 3
    File 1 File 2
    ID,Name,Department ID,Name,Department
    なし <> 003,XYZ,開発部
    --> 抽出 -> ファイル書き込み

    0
  • Avatar
    宇佐見直人
    コメントアクション Permalink

    私のサンプルURLだと繰り返しですね
    tenchoさんのリンクの差分抽出のほうがよりスマートそうです
    どうでしょう

    0
  • Avatar
    おかべ
    コメントアクション Permalink

    Makoto さん

    こんな処理でどうでしょう?

    1. CSVファイル複数カラムを使ってキーを作る。(下図参照)2つのファイルで実施。
    2. 上記で作ったふたつのファイルをtenchさんのリンクで紹介のある処理で差分抽出する。

    1
  • Avatar
    宇佐見直人
    コメントアクション Permalink

    おかべさんの方法、たしかに更新の有無がはっきりしますね!

    0
  • Avatar
    Makoto
    コメントアクション Permalink

    ありがとうございます。

    それは更新を判断できますね。

    1.全てのColumnを結合しするkeyを追加して

    2.  そのkeyでOr-Intergrateのマージを実施する

    しかし、それで古い行も新しい行も出力しますね。

    たとば:

    002,DEF,開発場 <> 002,DEF,営業部

    002DEF開発場, 002,DEF,開発場

    002DEF営業部, 002,DEF,営業部

    実際は【002DEF営業部, 002,DEF,営業部】のみ出力したいです。

    マージする時には条件を追加できるかな?

    [002]の番号でキーとしてマージするが、情報が差異があれば新しいものを出力する

    そのはできるかな?

    0
  • Avatar
    Makoto
    コメントアクション Permalink

    皆さん
    ありがとうございます。

    以下の処理で解決できました:

    - merge : キーで両方ファイルの項目を追加する
     例: ID, old_item1, old_item2 , new_item1, new_item2

    - mapping: 繰り返し(条件指定):old_item1 != new_item1 OR old_item2 != new_item2

    それで新規追加のレコードも更新のレコードも抽出できました

    2

サインインしてコメントを残してください。