空間マッチさせたレコードを、反復マクロをつかって、グループにわける処理をしています。
マクロ前のレコードはおよそ400万件、最初からたくさんのレコードでやるのは大変かと思って、サンプルツールで1万件からスタート。15万件までは想定通りの動きをしてくれて、望んだ結果がかえってきました。
が、それ以上になると2時間たってもうんともスンとも…。
~以上の反復レコードを残して反復が実行されました。というメッセージがでます。
反復マクロには最大の反復回数を10万回、最大反復回数に達した時は残りレコードを出力する設定にしてあります。
WFは都合により添付できないのですが、こんなかんじです。
どんな要因がかんがえられるでしょうか。
お知恵を拝借したいです。
解決済! 解決策の投稿を見る。
@donnaanna さん
メッセージ的に以下のような感じで出ていれば、単純に設定した10万回に達して終わっただけです。
なお、「XXXの反復制限に到達しました。」が出ていない場合はまだ処理の途中です(今回は、恐らくその状況になっているのではないかと思います)。
急に時間がかかり始めるのは、件数(データ量)が多いためメモリに乗り切らず、ストレージに書き出されているためだと思います。メモリ上で実行するのに比べて大幅に時間がかかってしまいます。ただ、処理は継続されますので、時間はかかるかもしれませんが、それが理由で処理が止まることはないはずです・・・(繰り返しマクロではありませんが、過去に数億レコードの処理を行って10時間以上稼働させたこともあります)。
以下、処理時間を短縮するためのTipsです。
・空間マッチさせたレコードとのことですが、マクロの内部的には空間データは使われていないようですので、マクロに入れる際には空間データは抜いて入れたほうが良いと思います(RecordID的なものがふってあれば、処理が終わってからマクロの外で結合すれば良いと思います)。ここで空間データに言及しているのはサイズが大きいというのが理由ですが、他にも内部的に利用していない項目があるのであれば、処理後に結合するほうが高速化されます。
・R Outputが繰り返し出力でしょうか?もしそうであれば、ソートツールがありますが、必ず必要でしょうか?可能であればもう少しデータ量が少ない場所に移すなどしたほうが処理は高速化されると思います。
・今回15万件以上をインプットされているのだと思いますが、最終400万件なので、果たして400万件処理するのに実用的な時間内に終わるのか、ちょっと気になるところです・・・。なるべく繰り返しされるレコードを減らすことが繰り返しマクロの高速化のコツですが、アルゴリズムの見直しは難しいでしょうか?
(1万件と15万件を比較した時に、単純に時間が15倍、ということであれば、400万件処理すると1万件実行した時の時間は400倍になりますが、問題ない時間に収まっていますでしょうか?1万件が例えば1分であれば、400万件は400分なので7時間くらいかかる計算になります)
まず少ない件数で検証されている、ということですのでアプローチ的には非常に良いと思います。
ちなみに、繰り返し回数は1000万回まで設定可能なようです。
なお、非常に単純な繰り返しマクロ(単に1ずつ足すだけ)でも、500万回の繰り返しで20分以上かかるので、1000万回繰り返すだけでも1時間近くかかる感じがします・・・。
回答ありがとうございます。
すみません!
書き忘れていたのですが、
こういったメッセージがでていました。
Rで繰り返されるレコードが増えているということでしょうか
処理をはやくするためのTipsありがとうございます。
カラムは絞っていましたが、ソートなども必ずしも必要でなかったです。
@donnaanna さん
これは、10回繰り返して、その時R出力には2,756,616件のレコードがありました、ということですね・・・。
入力データ数を知らないのでレコード数が増えてるかどうかはわかりませんが、共有いただいたスクショを見る限りはレコードが増えるようなことは無い気がします。
10 でいったん切るのですね、このメッセージは。
エラーでもないし色は青いし…。と思っておりました。
増えているわけではなさそうなら、ひとまず安心しました。
ありがとうございます。