5 返信 最新の回答 日時: Jan 27, 2016 1:00 AM ユーザー:nekokichi

    ファイル→テーブルインポート時の作業ミス回避

    nekokichi

      ファイルからテーブルへのデータインポートをスクリプトで実装する際の

      定石について教えてください。

       

      テキストファイル等からテーブルへインポートする作業を、一般のオペレータに

      やらせる場合です。

      テーブルAにはテキストファイルAをインポートしなければならず、

      テーブルBにはテキストファイルBをインポートしなければならないとします。

      それぞれ、インポートするスクリプトがあり、オペレータはテキストファイルを

      選択するだけです。

       

      このようなときに、間違ってテーブルAにテキストファイルBをインポートして

      しまうという事故がおきます。

       

      このような事故を回避するには、どのような方法をとったらよいのでしょうか。

        • 1. Re: ファイル→テーブルインポート時の作業ミス回避
          user14047

          テキストファイルA と テキストファイルB の命名規則とかはどうですか?

          テーブルA と テーブルB には明確な違いはありますか?

           

          もし、テキストファイルのファイル名に命名規則とテーブルとの関連があるのであれば、

          グローバルなオブジェクトフィールドにファイルを一旦インポートしてファイル名を判断し、オブジェクトフィールドをエクスポートしその エクスポートしたファイルを条件によってインポート先のテーブルを切り分けるのはどうでしょうか?

           

          ファイル名の命名規則とテーブルとの関連はないけど、テーブル構成が全く違って、必ず入る値で判断できる値(例えば、ターブルAのフィールド2にはある規則に基づいた数値しか入らないけど、テーブルBの場合はテキストが入るとか)を見つけて、エラーを出して、インポートしたレコードを対象レコード削除する。

          両方のテーブル共用のテンポラリーなテーブルを設けて、そのテーブルに一旦インポートして、テーブルを切りわけその テンポラリーなテーブルからインポートするようなスクリプトにする。

          などなど...状況に応じて色々な作り方が考えられると思います。

          • 2. Re: ファイル→テーブルインポート時の作業ミス回避
            realworks

            テキストファイルAとテキストファイルBのファイル名は一定ではない、ということですよね?

            (一定ならばスクリプトでファイル名を指定しておくが…ということですよね)

             

            ファイル名が一定でなはないということであれば、ワークテーブルに一旦インポートするようにして、

            テキストファイルA、Bの見出しの次の行には異なるダミーデータが入るようにしておいて、

            取り込んだ後にそのダミーデータが適切かどうかを判断して、不適切ならリトライさせるとかは

            どうでしょう?

             

            適切だったら、ワークテーブルからダミーデータ以外を取り込む。

            • 3. Re: ファイル→テーブルインポート時の作業ミス回避
              nekokichi

              user14047さま

              realworksさま

               

              ありがとうございました。


              テキストファイルをファイルを送ってくるのは取引先なので、

              ファイル名を固定にすることはできないです。

              (できたとしても、新たな人間の手作業が発生するだけで、

              結局は事故につながる。)

              やはり、テンポラリなフィールドに読み込んでから判定する

              しかなさそうですね。

               

              オブジェクトフィールドに読み込んでファイル名を判定する

              という方法、知りませんでした。

              今回の解決には使えませんでしたが、いつか役に立ちそうな

              テクニックですね。参考になります。

              • 4. Re: ファイル→テーブルインポート時の作業ミス回避
                user14047

                テキストファイル名は固定でなくても、例えば、

                テーブルAに入れるテキストファイルは 20160127_発注.csv で、テーブルBに入れるテキストファイルは 20160127_受注.csv

                のように一定の法則があれば、

                PatternCount ( GetContainerAttribute ( オブジェクトフィールド ; "filename" ) ; "発注" )
                
                
                

                のように切り分けできますよね。エクスポートする時には、ファイル名を固定してもいいわけですし。

                 

                あと、このファイル名を取得する方法の利点は、インポート履歴にファイル名を残していくことができるので、うっかり同じファイルをインポートしてしまって、データがダブってしまった。というミスに対応するための作り込みができることですかね。

                • 5. Re: ファイル→テーブルインポート時の作業ミス回避
                  nekokichi

                  本来はインポートするファイル名には規則性を持たせていたのですが、

                  謎の理由でファイル名が変わって届いたことがありました。

                  利用者全員が非プログラマ、パソコンをやっと使っている状態ですので、

                  「ファイル名を変えるな」という通達を出しても、状況的に徹底できない

                  可能性もあるプロジェクトなのです。


                  いずれにしても人間がファイル名を変えることが可能な以上、事故の可能性は

                  あるわけで、チェックは必要な気がします。

                   

                  事前にフィールドのチェックをするのであれば、インポートスクリプトはいくつも

                  わける必要はなく、中身を見て自動でインポート先のテーブルを振り分けるように

                  するのがよさそうですね。