Upgrade to Pro — share decks privately, control downloads, hide ads and more …

巨大データにデカ仕方

HANACCHI
November 30, 2020
710

 巨大データにデカ仕方

巨大なDataTable処理での工夫を紹介

HANACCHI

November 30, 2020
Tweet

Transcript

  1. 自己紹介 • 小﨑 肇(こざき はじめ⇒[ハナ]肇⇒はなっち!) • 60歳 もうすぐ61歳 • 東京都豊島区⇒神奈川県川崎市中原区

    • 趣味 自転車だったけど、最近はINGRESS • 職歴 ⮚ かなり前に今の会社に入社。 ちょっと前に退社! ⮚ ちょっと前の翌日に今の会社に入社(契約社員)。 ⮚ UiPath歴は、2018年4月より ⮚ UiPath japan MVP 2019 Holder!! ⮚ UiPath japan MVP 2020 Holder!! Presented By [email protected]
  2. Yマスタ(10列) MYキー MYix MYix MXix 仕様:メインを中心に、 サブA、サブBからの情報をCSVに設定する。 その際に配列項目の位置は、 Xマスタ、Yマスタから取得する Xマスタ(10列)

    MXキー MXix サブA(50列) K SA情報 サブB(50列) K SB情報 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150) メイン(170列) K A情報 MXキー MYキー
  3. MYix MXix 方法:それぞれの情報をDataTable型に展開し、 「データテーブルの結合」にて情報を結合する。 ⇒EXCEL VBAなどでもできるが、 キー一致までのロジックが二重LOOPとなり、性能が出ない。 出力(324列) K A情報

    SA情報 SB情報 X(1)~(30) Y(1)~(150) メイン(170列) K A情報 MXキー MYキー サブA(50列) K SA情報 メイン(170列) K A情報 MXキー MYキー Yマスタ(10列) MYキー MYix Xマスタ(10列) MXキー MXix Xマスタ(10列) MXキー MXix サブB(50列) K SB情報 サブA(50列) K SA情報 サブB(50列) K SB情報 Yマスタ(10列) MYキー MYix
  4. 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150) メイン(170列) K A情報

    MXキー MYキー サブA(50列) K SA情報 MYix MXix 予定:結合してしまえば、 出力レイアウトへの加工は 「データテーブルのマージ(Ingone)」で簡単! メイン(170列) K A情報 MXキー MYキー Yマスタ(10列) MYキー MYix Xマスタ(10列) MXキー MXix Xマスタ(10列) MXキー MXix サブB(50列) K SB情報 サブA(50列) K SA情報 サブB(50列) K SB情報 Yマスタ(10列) MYキー MYix
  5. メイン(170列) K A情報 MXキー MYキー サブB(50列) K H1 S1情報 K

    H2 S2情報 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150) サブA(50列) K SA情報 MYix MXix メイン(170列) K A情報 MXキー MYキー Yマスタ(10列) MYキー MYix Xマスタ(10列) MXキー MXix Xマスタ(10列) MXキー MXix サブA(50列) K SA情報 サブB(50列) K SB情報 Yマスタ(10列) MYキー MYix 想定外の出来事!その1  メインファイルが 巨大! ⇒「結合」していくと列増大でメモリオーバー  メイン:サブB=1: n! ⇒「結合」していくと件数倍増でメモリオーバー
  6. 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150) メイン(170列) K A情報

    MXキー MYキー サブA(50列) K SA情報 MYix MXix メイン(170列) K A情報 MXキー MYキー Yマスタ(10列) MYキー MYix Xマスタ(10列) MXキー MXix Xマスタ(10列) MXキー MXix サブB(50列) K H1 S1情報 K H2 S2情報 サブA(50列) K SA情報 サブB(50列) K SB情報 Yマスタ(10列) MYキー MYix メモリオーバーフロー対策 ⇒必要な列だけに事前処理!(EXCEL-VBA) ⇒突合順を組み換え、中間ファイル化して、 別ロボ作成! 想定外の出来事!その1  メインファイルが 巨大!  メイン:サブB=1: n!
  7. MYix MXix 対策:ロボ分割! 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150)

    メイン(170列) K A情報 MXキー MYキー サブA(2列) K SA情報 メイン(30列) K A情報 Yマスタ(10列) MYキー MYix Xマスタ(10列) MXキー MXix Xマスタ(10列) MXキー MXix サブB(5列) K SB情報 Yマスタ(10列) MYキー MYix サブA(2列) K SA情報 サブB(5列) K SB情報 メイン(30列) K A情報 Xマスタ(10列) MXキー MXix Yマスタ(10列) MYキー MYix ロボ1 ロボ2
  8. MYix MXix 想定外の出来事!その2 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150)

    メイン(170列) K A情報 MXキー MYキー サブA(2列) K SA情報 メイン(30列) K A情報 Yマスタ(10列) MYキー MYix Xマスタ(10列) MXキー MXix Xマスタ(10列) MXキー MXix サブB(5列) K SB情報 Yマスタ(10列) MYキー MYix サブA(2列) K SA情報 サブB(5列) K SB情報 メイン(30列) K A情報 Xマスタ(10列) MXキー MXix Yマスタ(10列) MYキー MYix ロボ1 ロボ2
  9. MYix MXix 出力(324列) K A情報 SA情報 SB情報 X(1)~(30) Y(1)~(150) サブA(2列)

    K SA情報 サブB(5列) K SB情報 サブA(2列) K SA情報 サブB(5列) K SB情報 メイン(30列) K A情報 Xマスタ(10列) MXキー MXix Yマスタ(10列) MYキー MYix ロボ2 想定外の出来事!その2  「データテーブルのマージ(Ingone)」 ⇒基のデータテーブルの倍くらいのメモリ余裕が必要!  あとはレイアウト変更後、テキストファイルに出力するだけ! (業務ロジック処理)  元データテーブルから、指定行単位ごとに処理をしよう!
  10. 指定行単位ごとに処理(例えば3行) 1 A 2 B 3 C 4 D 5

    E 6 F 7 G ① 緑DT = 青DT.Clone ② 緑DT.ImortRow = 青DT.Rows(0) 1 A 2 B 3 C 4 D 5 E 6 F 7 G 1 A ③ 青DT.Remove(0) 2 B 3 C 4 D 5 E 6 F 7 G 1 A 指定行単位まで 4 D 5 E 6 F 7 G 1 A 2 B 3 C 業務ロジック処理 ⑧ 緑DTで処理 ④ 緑DT.ImortRow ⑥ 緑DT.ImortRow ⑤ 青DT.Remove(0) ⑦ 青DT.Remove(0) 4 D 5 E 6 F 7 G ⑨ 緑DT.Clear 7 G 業務ロジック処理 • 緑DTで処理(最終データ) 残DTが存在したら
  11. Knowledge • 入力ファイルは、必要な情報のみに加工する (必要列情報は、ロボ内部に保有せず、EXCELで制御する) • 出力レイアウト変更する際は、「データ行の追加」ではなく、 「データテーブルのマージ」を使うと便利。その為、入力列名 を出力列名に合わせておく (改名列情報は、ロボ内部に保有せず、EXCELで制御する) •

    1:nマッチングがあるかどうかを確認し、それを優先し処理 する(ダメな場合、早めに対策を練ることができる) • 中間ファイルとして保存する場合は、CSVとする。Excelにする と、前後空白がトリムされてしまう場合がある(See. 付録)
  12. Appendix … 前後空白も文字列 Seq CSVファイル CSV EXCEL Result 1 <--FULL-->

    0/<--FULL-->/ 0/<--FULL-->/ TRUE 2 <--RIGHT 1/<--RIGHT / 1/<--RIGHT / TRUE 3 LEFT--> 2/ LEFT-->/ 2/ LEFT-->/ TRUE 4 <--FULL--> 3/<--FULL-->/ 3/<--FULL-->/ TRUE 5 <--RIGHT 4/<--RIGHT / 4/<--RIGHT / TRUE 6 LEFT--> 5/ LEFT-->/ 5/ LEFT-->/ TRUE 7 '<--FULL--> 6/'<--FULL-->/ 6/'<--FULL-->/ TRUE 8 '<--RIGHT 7/'<--RIGHT / 7/'<--RIGHT / TRUE 9 ' LEFT--> 8/' LEFT-->/ 8/' LEFT-->/ TRUE 10 '<--FULL--> 9/'<--FULL-->/ 9/'<--FULL-->/ TRUE 11 '<--RIGHT 10/'<--RIGHT / 10/'<--RIGHT / TRUE 12 ' LEFT--> 11/' LEFT-->/ 11/' LEFT-->/ TRUE
  13. Seq CSVファイル CSV EXCEL Result 13 123 12/123/ 12/123/ TRUE

    14 456 13/ 456/ 13/456/ FALSE 15 789 14/789 / 14/789/ FALSE 16 "123" 15/123/ 15/123/ TRUE 17 " 456" 16/ 456/ 16/456/ FALSE 18 "789 " 17/789 / 17/789/ FALSE 19 '123 18/'123/ 18/'123/ TRUE 20 ' 456 19/' 456/ 19/' 456/ TRUE 21 '789 20/'789 / 20/'789 / TRUE 22 "'123" 21/'123/ 21/'123/ TRUE 23 "' 456" 22/' 456/ 22/' 456/ TRUE 24 "'789 " 23/'789 / 23/'789 / TRUE Appendix … 前後空白も数値(引用符があるとExcelでもOK)
  14. Appendix … 前後空白も0から始まる数字(引用符があるとExcelでもOK) Seq CSVファイル CSV EXCEL Result 25 001

    24/001/ 24/1/ FALSE 26 002 25/ 002/ 25/2/ FALSE 27 003 26/003 / 26/3/ FALSE 28 "004" 27/004/ 27/4/ FALSE 29 " 005" 28/ 005/ 28/5/ FALSE 30 "006 " 29/006 / 29/6/ FALSE 31 '007 30/'007/ 30/'007/ TRUE 32 ' 008 31/' 008/ 31/' 008/ TRUE 33 '009 32/'009 / 32/'009 / TRUE 34 "'010" 33/'010/ 33/'010/ TRUE 35 "' 011" 34/' 011/ 34/' 011/ TRUE 36 "'012 " 35/'012 / 35/'012 / TRUE