FileMakerでの定期的なインポートの最適化

FileMakerではExcelやCSV、XMLやODBCなどから定期的にインポートを書けることができます。

ただ、それぞれの動きは大きく異なります。それぞれの最適解を探ります。

スポンサーリンク

ファイルからのインポート

CSV、Excelなどから定期的なインポートをする場合、スクリプトでのインポートになります。

設定は非常にカンタンで、インポートの画面で「定期的なインポートとして設定」にチェックマークを入れるだけ。

 

ただし定期的なインポートを選んだ場合、普通のインポート時には出てくる「インポート順の指定(カラムの設定)」画面が出ません。これは自動で生成されるスクリプトの流れを見るとなぜかわかります。

 

生成されたスクリプトは

  1. インポート用レイアウトの切り替え
  2. 全レコードを削除
  3. ファイルの全レコードを読み込み
  4. もとのレイアウトに戻す

となっています。

毎回毎回すべてのデータを削除して読み直しているのですね。

もちろんスクリプトワークスペースを開き、インポート部分(レコードのインポート)を編集すれば、上記のカラム設定や追加設定が可能です。

さらに注意することがあります。

全レコード削除になっているため、差分のみをインポートした場合、先に入っていたのが消されて、差分のみが残ることになります。

多分この動作は想像していない人が多いのではないでしょうか。

 

またもう一点問題があります。それはインポート時間。

1万行程度のファイルなら数秒で終わるのですが、100万行単位のファイルでは何分も時間がかかります。

例えば200万行50カラムを超える500MB程度のファイルを読み込むと、10分以上(パソコンによっては20分近く)の時間がかかります。

ということは、10分おきに自動で読み込ませた場合、1回目の読み込みが終わる前に2回目が始まることになり、FileMakerはずっと読み込み中となります。

さらに毎回レコードが消え、全部が読み直されるので、はっきり言ってそのままでは使えません。

FileMaker側でインデックスを調整したりしましたが、毎回ファイル全体を読み込みなおすため、大幅なスピードアップはできませんでした。

 

定期的な取り込みは、書き出し側でなるべく最小限になるように調節したうえで、スクリプトの修正が必要です。

  • すべてを消去を停止する
  • 「更新」モードにし、新しいレコードは追加オプションを付ける。

最低限この2点は確認が必要でしょう。

 

1つのエクセルに常時みんなで編集を加えていて最小限にできない、という場合は、1日の終わりで取り込んだり、コピーから取り込んだり、かなりの工夫が必要です。

最適なのはODBC経由

試行錯誤を繰り返した結果、もっともうまく動作したのはODBC経由でした。

ODBC経由なら、もともとのDBから更新されたものだけ(当日分だけ、1時間ごとの分だけ)を読みだすことができ、また、キーによって有無も判定できます。

  • 1時間分ごとに読み出し
  • 存在するものは変更があればカラム内容を上書き
  • 存在しないものは追加

という理想の組み合わせが可能です。読み込むカラムの指定も可能です。

また、FileMaker Serverの自動化も完全に動作します。(※設計しているマシンのDSNと、FileMaker Server側のDSNを完全に合わせる必要があります)

 

例えばエクセルの場合でも、ODBCから読み出すことが可能です。ODBCデータソースアドミニストレータを見てみてください。

あえてODBC経由で読み込ませることで、Excelの制限をうまく超えることができるかもしれません。

コメント