FileMakerGoとcsv

前のページで

これをFileMaker Goでインポートするのに非常に時間がかかったという話をしたのですが、やっと私なりに解決しました。

サンプルにあるソフトはこの方法を使って処理するようになっています。

データは2万件程度あります。

元ファイルを分割するとかなり早く終わるので、いったい何が違うのだ?データ量が倍になれば処理にかかる時間も倍になるなら分かるのですが、倍どころの時間では終わりません。

そこで試しに1ファイル2000件の分割したファイルではなく、元ファイルの1万行目から2000件のデータを取り込むとどうなるのかな?と試したところ・・・・遅!

もしかして、

GetValue関数を使って、1行目のデータを吸いこんだら2行目・・・・で最後の行までという処理の場合、1行読み込んだらまた1行目から数えなおして2行目、次はまた1行目から・・・1万行目・・・と、この〇行目を検索するのに時間がとられているのでは?

とか勝手に思いまして、それなら取り込んだ行は削除して、常に1行目を取り込む仕組みに変えればいいの?と修正したところ、(達磨落としを逆さまにしたみたいな感じといえばいいかな?それとも、ところてん?)処理時間がかなり短縮されました。

※上のデータの場合、以前の仕組みだとiPhone8で60分程度かかっていたものが12分程度で終わるようになりました。因みにiPhone11proで7分、SEで18分位でした。

それを踏まえて検索すると、ちゃんとそのようなことを書いてくださっている先達が・・・。といいますか、そこは作成していた時にも見ていたのですが、意味が分かんなくてスルーしてたんですよ・・・。

とはいえ、まだ10分前後かかります。

ではファイルを分割したらどうなの?ということで、1ファイル5000行に分割したものを取り込んでみると、1分前後で終わりました。2万件だと4倍ですから、もう少しなんとかできるということになります。

ただ、CSVファイルを分割しないといけないというのは当然手間なわけで、たとえ先に分割したCSVファイルを準備したとしても、分割しただけ同じ取り込み作業を繰り返す必要が出てくるのですが、よくよく考えたら、貼り付けたら自動で分割するようにすればいいわけで・・・。

気が付いてしまうとなんてことなかったりするんですけどね。

ただこれもバランスがありまして、色々試した結果、最終的には2万件のデータがiPhone8で70秒前後で取り込めるようになりました。GetValue関数のみで行う場合に比べ、実に1/50に短縮です。(GetValue関数は2000件が目安とどなたか書いてくださってたような気がします。実際そんな感じかな。)

データによってはPCのFileMakerを使ったファイルのインポートとそんなに時間が変わらない場合も。

データ取り込むだけで1時間とか、今思えばそんなソフト誰も使わないとおもいますが、当時は思いつかなっかたのです。

csvのファイルインポートで苦労されてる方の参考になったでしょうか?