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

201130 巨大データテーブルのデカ仕方 はなっち!さん

Avatar for comucal comucal
November 30, 2020

201130 巨大データテーブルのデカ仕方 はなっち!さん

Avatar for comucal

comucal

November 30, 2020
Tweet

More Decks by comucal

Other Decks in Technology

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