初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-01-06 10:38:00

gon
Guest

CSVのインポートにものすごく時間がかかる件

いつもお世話になっております
毎日この掲示板で勉強していますがなかなか上達いたしません

いつもお世話になっております 高知食糧株式会社東川です質問ばかりで申し訳ありません

FilemakerServerのスケジュールでCSVデータのインポートを毎日を行っています
問題はこのインポートにものすごく時間がかかっているということなのです
アドミンコンソールのログを見ても10時間程度かかっています
スクリプトやテーブルの構成の変更で解消できるものなのでしょうか?
ご教授のほどよろしくお願いいたします


データの構成は
CSVファイル(URDTA.csv):59フィールド10万レコード程度
Filemaker側のテーブル[URDTA]:65フィールド320万レコード(現在)
CSVファイルのフィールドから計算する計算フィールドと集計フィールドが複数あります
また、CSVファイルはオフコンからの出力で固定長で出力されており、無駄なスペースを取り除くためテーブル側でTrimやGetAsNumberをかけています

インポートは2つのフィールドが一致するものを更新し、そうでないものを追加しています
使っているスクリプトは
・ユーザによる強制終了を許可 [ オフ ]
・エラー処理 [ オン ]
・レイアウト切り替え [ 「URDTA」 (URDTA) ]
・全レコードを表示
・変数を設定 [ $inpfilepath; 値:"filewin:" & Get ( ドキュメントパス ) & "URDTA.csv" ]
・レコードのインポート [ ソース: 「$inpfilepath」; ターゲット: 「URDTA」; 方法: 一致するレコードを更新; 一致しないレコードを追加する; 文字セット: 「シフト JIS」; フィールドデータのインポート順: ソースフィールド 1 の一致 URDTA::売上伝票№ ソースフィールド 2 の一致 URDTA::行№ ソースフィールド 3 のインポート ・・・・・
・全レコードを表示
・レイアウト切り替え [ 「menu」 (URDTA) ]

#2 2017-01-06 10:51:26

Shin
Member

Re: CSVのインポートにものすごく時間がかかる件

> CSVファイルはオフコンからの出力で固定長
というのは、各要素が固定長ということですか。

> 無駄なスペースを取り除くためテーブル側でTrimやGetAsNumberをかけています
は、自動入力の計算式で、それとも別のやり方?

時々、ファイルの最適化保存を行っていらっしゃいますか。ファイル内のフラグメンテーションによって、ファイルへのアクセスは非常に遅くなる事があります。

Offline

#3 2017-01-06 11:12:40

gon
Guest

Re: CSVのインポートにものすごく時間がかかる件

>というのは、各要素が固定長ということですか。
各要素は固定長です
使い辛いのでTrim等をかけています

>自動入力の計算式で、それとも別のやり方?
自動入力です「計算値自動入力 既存値を置き換え」
あ、伝票番号や顧客コード、日付コード等は索引を「すべて」にしています、、、これが原因?

>時々、ファイルの最適化保存を行っていらっしゃいますか。ファイル内のフラグメンテーションによって、ファイルへのアクセスは非常に遅くなる事があります。
サーバに置いてあるfmpファイルはどうすれば最適化できるのでしょうか?
アクティビティーの画面で「閉じる」で良いのでしょうか?

#4 2017-01-06 11:17:09

qb_dp
Member

Re: CSVのインポートにものすごく時間がかかる件

「インポート|一致するレコードの更新」は、かなり遅くなりますね。

更新するCSVファイルを別テーブルにキーのみインポートし、
実テーブルの対照レコードを判別・削除し、

「インポート|レコードの追加」でインポートした方が時間は短くなります。

がしかし、毎日10万件のレコードを追加・削除は、しない方が良いかどうか...?そこまで多くの件数を管理したことが無いので...。

あと、索引が多いとレコード削除が遅くなります。


あとは、必要のない過去のデータを退避する(可能なら)とか。

Offline

#5 2017-01-06 11:35:13

qb_dp
Member

Re: CSVのインポートにものすごく時間がかかる件

10万レコード  -> 320万レコード(全レコード)(インポート|一致するレコードの更新)
では、時間がかかるので、
10万レコード  -> 20万レコード(対象レコード)(インポート|一致するレコードの更新)
にすれば、短縮できます。
更新する対象のレコードが期間などで検索できれば、良いですが。

Offline

#6 2017-01-06 11:42:31

gon
Guest

Re: CSVのインポートにものすごく時間がかかる件

毎日作成されるCSVデータは当月1日から本日までのレコードです
オフコン側で月次更新が行われるまでは過去(当月内)のレコードも変更がある場合があります
それで毎日データを更新・追加を行っています

今までインポートされたテーブル(現在3年分があります)から当月分のものだけを別テーブルにエクスポートし、そのテーブルにCSVデータをインポートして追加更新を行い、元のテーブルの当月分を削除して、別テーブルのレコードをインポート(新規レコードとして追加)するのはどんなもんでしょうか?

思い付きなので詳しくは考えていないのですけれど、、(あいかわらず日曜大工です)

#7 2017-01-06 11:47:28

qb_dp
Member

Re: CSVのインポートにものすごく時間がかかる件

当月内ということであれば、検索して対象レコードを減らしてから、
「インポート|一致するレコードの更新」とするだけでもかなり早くなると思われます。

Offline

#8 2017-01-06 12:20:48

yaya
Member

Re: CSVのインポートにものすごく時間がかかる件

CSVには当月分の全データが入っているのだから、「一致するレコードの更新」をする必要はなく、当月分のデータを削除後、インポートすれば良いように見えます。
照合が不要になる分、読み込みは速くなる。ただし、削除に時間がかかるので、トータルで速くなるかどうかは分からない。

Offline

#9 2017-01-06 13:38:40

yaya
Member

Re: CSVのインポートにものすごく時間がかかる件

削除・追加だと凄まじいフラグメンテーションが起こるなー。

ならば、「既存のレコードを更新」ならどうでしょう。追加と所要時間は変わらないし、削除の必要も無いし、フラグメンテーションも起こらない。

Offline

#10 2017-01-06 14:31:10

gon
Guest

Re: CSVのインポートにものすごく時間がかかる件

皆様アドバイスありがとうございます

当月分というのはオフコン側で月次更新するまでは変化しません
今日1/6ではまだ月次更新が行われていないためオフコン側の当月は2016/12となっています
Filemaker側での当月は2017/01となってしまい、月次更新も決まった日に行われるわけではないので(15日前後)自動絞り込みは無理のようです

もう少し考えてみます

先ほど質問した問題ですが、FiemakerServerにホストされているfmpファイルの最適化はどうすればよいでしょうか?

#11 2017-01-06 16:10:00

Shin
Member

Re: CSVのインポートにものすごく時間がかかる件

FMS でホストしているファイルの最適化は、一度サーバーを止めるか、ファイルを閉じて、FMP で開き、最適化保存します。

対象とするレコードは先月以降の物に限られるのでは。先月以降のレコードを抽出しておけば良いでしょう。
また、テーブル内に、加工しない生データを入れておくフィールドと、実利用する加工した計算フィールドを作ればいかがでしょう。少しだけ早くなるかもしれません。

Offline

#12 2017-01-06 16:36:57

gon
Guest

Re: CSVのインポートにものすごく時間がかかる件

ありがとうございます
FMS上では(AdminConsoleからは)直接最適化はできないということなのですね

オフコンのUSB掃き出しの構成も変えてもらうように頼んでみました
FM上のテーブルで先月以降のものに絞り込んだ状態でインポートするようにしてみます

どうなったかはまた報告させていただきます

#13 2017-01-06 16:52:13

yaya
Member

Re: CSVのインポートにものすごく時間がかかる件

CSVファイルが日付順に並んでいれば、先頭行から日付を取得して、その日以降のレコードを検索しておいて既存レコードの更新できますね。
日付順になってなければ、良い方法思いつきません。

Offline

#14 2017-01-06 17:35:43

qb_dp
Member

Re: CSVのインポートにものすごく時間がかかる件

当月分というのはオフコン側で月次更新するまでは変化しません
今日1/6ではまだ月次更新が行われていないためオフコン側の当月は2016/12となっています
Filemaker側での当月は2017/01となってしまい、月次更新も決まった日に行われるわけではないので(15日前後)自動絞り込みは無理のようです

データに日付が、入っていないのでしょうか?
当月分というか、「2016/12」のデータをインポートする時は、FileMaker側で「2016/12」のデータを検索し対象レコードとしておけばよいのですが。

それにしても10時間とは、時間がかかりすぎのような...、原因の切り分けのためにもShinさんがおっしゃっているように自動処理無しでインポートしてみては?

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 549.74 KiB (Peak: 570.28 KiB) ]