(57)【要約】【課題】業務処理に影響を与えずにデータ転送を効率化する。【解決手段】分散処理管理装置１０は、ソースファイル５を解析し、処理で参照される参照項目の参照項目名を抽出する。次に分散処理管理装置１０は、複数のレコードそれぞれから、参照項目名以外の項目名を有する非参照項目のデータを削除する処理が記述された削除プログラム７を生成する。また分散処理管理装置１０は、複数のレコードそれぞれに対して、非参照項目のデータが存在していた位置にダミーデータを挿入する処理が記述された挿入プログラム８を生成する。そして分散処理管理装置１０は、複数のサーバに対して、処理プログラムに基づく分散並列処理を実行させると共に、レコードを送信する場合、送信前に、削除プログラム７に従って、送信されるレコードからデータを削除させ、レコードを受信した場合、挿入プログラム８に従って、受信したレコードにダミーデータを挿入させる。【選択図】図１
2018018323.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
複数のサーバに分散格納されている複数のレコードに対して実行する処理が記述された処理プログラムのソースファイルを解析し、各レコード内の複数の項目のうち、前記処理で参照される参照項目の参照項目名を抽出し、
送信するレコードから、前記参照項目名以外の項目名を有する非参照項目のデータを削除する処理が記述された削除プログラムを生成し、
前記非参照項目のデータが削除されたレコードに対して、前記非参照項目のデータが存在していた位置にダミーデータを挿入する処理が記述された挿入プログラムを生成し、
前記複数のサーバに対して、前記処理プログラムに基づいて、前記複数のレコードに対する前記処理を分散して実行させると共に、前記複数のレコードのうちのいずれかのレコードを送信する場合、送信前に、前記削除プログラムに従って、送信する該レコードから前記非参照項目のデータを削除させ、前記非参照項目のデータが削除されたレコードを受信した場合、前記挿入プログラムに従って、受信した該レコード内の前記非参照項目のデータが存在していた位置に、ダミーデータを挿入させる、
分散処理管理方法。
【請求項２】
前記抽出では、前記ソースファイルに、参照する項目の項目名として、複数の項目が属する項目集合を示す集団項目名が記述されている場合、前記複数の項目のそれぞれの項目名を前記参照項目名として抽出する、
請求項１記載の分散処理管理方法。
【請求項３】
前記抽出では、前記ソースファイルに、前記参照項目の前記参照項目名と、前記参照項目が属する項目集合を示す集団項目名とが記述されている場合、前記集団項目名を付与した前記参照項目名を抽出し、
前記削除プログラムの生成では、前記参照項目名の項目のうち、前記集団項目名の項目集合に属していない項目を、前記非参照項目に含める、
請求項１または２記載の分散処理管理方法。
【請求項４】
前記抽出では、前記ソースファイルに、前記参照項目内の参照する部分を指定する参照部指定が記述されている場合、前記参照部指定を付与した前記参照項目名を抽出し、
前記削除プログラムの生成では、前記参照項目名に対応する前記参照項目内のデータから、前記参照部指定で指定されていない非参照部分を削除する処理の記述を、前記削除プログラム内に含め、
前記挿入プログラムの生成では、前記参照項目内の前記非参照部分にダミーデータを挿入する処理の記述を、前記挿入プログラムに含める、
請求項１乃至３のいずれかに記載の分散処理管理方法。
【請求項５】
前記抽出では、前記ソースファイルに、前記参照項目名で繰り返し出現する複数の項目のうちの、出現順を指定して前記参照項目が指定されている場合、前記参照項目の前記出現順を付与した前記参照項目名を抽出し、
前記削除プログラムの生成では、前記参照項目名で繰り返し出現する複数の項目のうち、前記出現順で示される順番に出現する項目以外の項目を前記非参照項目に含める、
請求項１乃至４のいずれかに記載の分散処理管理方法。
【請求項６】
コンピュータに、
複数のサーバに分散格納されている複数のレコードに対して実行する処理が記述された処理プログラムのソースファイルを解析し、各レコード内の複数の項目のうち、前記処理で参照される参照項目の参照項目名を抽出し、
送信するレコードから、前記参照項目名以外の項目名を有する非参照項目のデータを削除する処理が記述された削除プログラムを生成し、
前記非参照項目のデータが削除されたレコードに対して、前記非参照項目のデータが存在していた位置にダミーデータを挿入する処理が記述された挿入プログラムを生成し、
前記複数のサーバに対して、前記処理プログラムに基づいて、前記複数のレコードに対する前記処理を分散して実行させると共に、前記複数のレコードのうちのいずれかのレコードを送信する場合、送信前に、前記削除プログラムに従って、送信する該レコードから前記非参照項目のデータを削除させ、前記非参照項目のデータが削除されたレコードを受信した場合、前記挿入プログラムに従って、受信した該レコード内の前記非参照項目のデータが存在していた位置に、ダミーデータを挿入させる、
処理を実行させる分散処理管理プログラム。
【請求項７】
複数のサーバに分散格納されている複数のレコードに対して実行する処理が記述された処理プログラムのソースファイルを解析し、各レコード内の複数の項目のうち、前記処理で参照される参照項目の参照項目名を抽出する抽出手段と、
送信するレコードから、前記参照項目名以外の項目名を有する非参照項目のデータを削除する処理が記述された削除プログラムを生成する削除プログラム生成手段と、
前記非参照項目のデータが削除されたレコードに対して、前記非参照項目のデータが存在していた位置にダミーデータを挿入する処理が記述された挿入プログラムを生成する挿入プログラム生成手段と、
前記複数のサーバに対して、前記処理プログラムに基づいて、前記複数のレコードに対する前記処理を分散して実行させると共に、前記複数のレコードのうちのいずれかのレコードを送信する場合、送信前に、前記削除プログラムに従って、送信する該レコードから前記非参照項目のデータを削除させ、前記非参照項目のデータが削除されたレコードを受信した場合、前記挿入プログラムに従って、受信した該レコード内の前記非参照項目のデータが存在していた位置に、ダミーデータを挿入させる制御手段と、
を有する分散処理管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理管理方法、分散処理管理プログラム、および分散処理管理装置に関する。
【背景技術】
【０００２】
コンピュータシステムの規模が大きくなると、取り扱うデータ量も膨大となる。このような大規模なデータを効率的に分散処理・管理する技術として、例えばＨａｄｏｏｐがある。Ｈａｄｏｏｐは、大規模データの分散処理を支えるＯＳＳ（Open Source Software）のフレームワークであり、主に分析処理で活用されている。このＨａｄｏｏｐを基幹系のバッチ処理に適用することにより、大規模バッチ処理の高速化が実現できる。なお基幹バッチ業務をＨａｄｏｏｐ上で動作させる場合、ユーザ既存資産に手を加えることなく、従来と同様の処理結果を出力することが求められる。
【０００３】
大規模データの処理に有用な技術としては、例えば複数入力を処理対象とする外部プログラムを分散処理システムで実行させる際の制約を緩和する技術がある。また、効率的に未使用データ項目の数を削減することを可能とする技術もある。
【０００４】
ユーザ既存資産を有効に利用する技術としては、例えば、レガシーシステムのプログラムを効率的に変換する技術がある。またアプリケーションプログラムの修正を要する影響箇所を効率よく特定する技術もある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−７８０８５号公報
【特許文献２】特開２００４−１１８７８９号公報
【特許文献３】特開２０１０−１３４４８７号公報
【特許文献４】特開２０００−３３９１４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、ユーザの既存資産はＨａｄｏｏｐ上で実行するために最適化されているわけではない。そのため、ユーザの既存資産をそのままＨａｄｏｏｐフレームワークに載せると、Ｈａｄｏｏｐの性能を十分に引き出すことができない。例えばＨａｄｏｏｐは通常複数のマシンで処理を分散実行するため、処理過程においてマシン間のデータ転送が発生する。ユーザの既存資産では、処理途中でのマシン間のデータ転送を想定しておらず、既存資産の業務処理をＨａｄｏｏｐフレームワークで実行すると、大量のデータ転送が発生することがある。その結果、データ転送処理がボトルネックとなり、システム全体の処理効率が低下する。
【０００７】
なお、レコード内の複数の項目のうち、業務処理で参照していない項目のデータは、マシン間で転送しなくてもよい。そこで転送前の処理においてレコード内の非参照項目のデータを削除することも考えられる。しかしながら、既存資産の業務処理では、レコード内の一部の項目のデータが転送前に削除されるとレコードのデータ構造が変わってしまい、転送後の業務処理において業務処理を正しく実施することができない。
【０００８】
１つの側面では、本発明は、業務処理に影響を与えずにデータ転送を効率化することを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、コンピュータが以下の処理を実行する分散処理管理方法が提供される。
コンピュータは、複数のサーバに分散格納されている複数のレコードに対して実行する処理が記述された処理プログラムのソースファイルを解析し、各レコード内の複数の項目のうち、処理で参照される参照項目の参照項目名を抽出する。次にコンピュータは、送信するレコードから、参照項目名以外の項目名を有する非参照項目のデータを削除する処理が記述された削除プログラムを生成する。またコンピュータは、非参照項目のデータが削除されたレコードに対して、非参照項目のデータが存在していた位置にダミーデータを挿入する処理が記述された挿入プログラムを生成する。そしてコンピュータは、複数のサーバに対して、処理プログラムに基づいて、複数のレコードに対する処理を分散して実行させると共に、複数のレコードのうちのいずれかのレコードを送信する場合、送信前に、削除プログラムに従って、送信する該レコードから非参照項目のデータを削除させ、非参照項目のデータが削除されたレコードを受信した場合、挿入プログラムに従って、受信した該レコード内の非参照項目のデータが存在していた位置に、ダミーデータを挿入させる。
【発明の効果】
【００１０】
１態様によれば、業務処理に影響を与えずにデータ転送を効率化することができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る分散管理装置の構成例を示す図である。
【図２】第２の実施の形態のシステム構成例を示す図である。
【図３】第２の実施の形態に用いるファイルサーバのハードウェアの一構成例を示す図である。
【図４】ファイルサーバの機能の一例を示すブロック図である。
【図５】レコード参照情報の生成例を示す図である。
【図６】レコード変換プログラムの生成例を示す図である。
【図７】ダミー挿入プログラムの生成例を示す図である。
【図８】レコード変換プログラムとダミー挿入プログラムとの配布状況を示す図である。
【図９】複数のファイルサーバが連携して業務処理を実施する場合の処理の流れの一例を示す図である。
【図１０】業務処理の具体例の前半を示す図である。
【図１１】業務処理の具体例の後半を示す図である。
【図１２】ＣＰＵ負荷と通信負荷との関係を示す図である。
【図１３】集団項目の参照（集団項目名の参照）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。
【図１４】集団項目の参照（集団項目の子要素の参照）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。
【図１５】集団項目の参照（集団項目名と子要素の参照が混在）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの不適切な生成例を示す図である。
【図１６】集団項目の参照（集団項目名と子要素の参照が混在）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。
【図１７】項目名の重複がある場合の不適切なレコード参照情報生成例を示す図である。
【図１８】項目名の重複がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。
【図１９】項目の部分参照がある場合におけるレコード変換プログラムとダミー挿入プログラムとの不適切な生成例を示す図である。
【図２０】項目の部分参照がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。
【図２１】ＯＣＣＵＲＳ句使用時におけるレコード変換プログラムとダミー挿入プログラムとの不適切な生成例を示す図である。
【図２２】ＯＣＣＵＲＳ句使用時におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。
【図２３】レコード参照情報生成処理の手順の一例を示すフローチャートである。
【図２４】項目名解析処理の手順の一例を示すフローチャートである。
【図２５】項目名解析後処理の手順の一例を示すフローチャートである。
【図２６】レコード変換プログラム生成処理の手順の一例を示すフローチャートである。
【図２７】抽出レコード定義処理の手順の一例を示すフローチャートである。
【図２８】ＣＳＶファイルを解析する業務処理の例を示す図である。
【図２９】ＣＳＶファイルを解析するプログラムのソースファイルの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず、第１の実施の形態について説明する。
【００１３】
図１は、第１の実施の形態に係る分散管理装置の構成例を示す図である。分散処理管理装置１０は、記憶手段１１、抽出手段１２、削除プログラム生成手段１３、挿入プログラム生成手段１４、および制御手段１５を有する。
【００１４】
記憶手段１１は、複数のサーバ１〜３に分散格納されている複数のレコード（レコード群９）に対して実行する処理が記述された処理プログラムのソースファイル５を記憶する。レコード群９内の各レコードは、複数の項目を含んでいる。各項目は、項目名によって識別される。
【００１５】
なお、処理プログラムは、レコード群９のすべての項目が削除されずに残っていることを前提として、レコード群９に対する処理が記述されている。従って、レコード群９に存在していた項目が削除されると、処理プログラムに基づく処理が、レコード群９内のレコードに対して正しく実行されない可能性がある。
【００１６】
抽出手段１２は、ソースファイル５を解析し、処理で参照されるレコード内の参照項目の項目名（参照項目名）を抽出する。例えば抽出手段１２は、参照項目名をリストアップした項目名一覧６を生成する。
【００１７】
削除プログラム生成手段１３は、削除プログラム７を生成する。削除プログラム７には、レコード群９を構成する複数のレコードそれぞれから、参照項目名以外の項目名を有する非参照項目のデータを削除する処理が記述されている。
【００１８】
挿入プログラム生成手段１４は、挿入プログラム８を生成する。挿入プログラム８には、非参照項目のデータが削除された複数のレコードそれぞれに対して、非参照項目のデータが存在していた位置にダミーデータを挿入する処理が記述されている。
【００１９】
制御手段１５は、複数のサーバ１〜３に対して、処理プログラムに基づいて、レコード群９内の複数のレコードに対する処理を分散して実行させる。その際、制御手段１５は、複数のサーバ１〜３に対して、レコード群９内の複数のレコードのうちのいずれかのレコードを送信する場合、送信前に、削除プログラム７に従って、送信されるレコードからデータを削除させる。また、制御手段１５は、複数のサーバ１〜３に対して、非参照項目のデータが削除された場合、挿入プログラム８に従って、受信した該レコードにダミーデータを挿入させる。
【００２０】
このような分散処理管理装置１０によれば、ソースファイル５に基づいて、サーバ１〜３で管理されているレコード群９の各レコードの項目のうち、処理プログラムに基づく処理で参照される参照項目の参照項目名が、項目名一覧６にリストアップされる。次に、レコードから参照項目以外の項目を削除する処理が記述された削除プログラム７と、削除された項目のダミーデータをレコードに挿入する処理が記述された挿入プログラム８とが生成される。そして、複数のサーバ１〜３により、レコード群９内のレコードに対する処理プログラムに基づく処理が、分散して実行される。
【００２１】
例えば複数サーバ１〜３それぞれは、自身が保持するレコードから、削除プログラム７に従って、非参照項目を削除する。図１の例では、項目名「ID」、「個数」以外の各項目が削除される。次に複数のサーバ１〜３それぞれは、例えばレコードの項目名「ID」の項目の値をキーとして、各レコードの処理を担当するサーバへ、レコードを転送する。図１の例では、「ID」の値が「AAA」のレコードはサーバ１に転送され、「ID」の値が「CCC」のレコードはサーバ２に転送され、「ID」の値が「BBB」のレコードと「ID」の値が「EEE」のレコードとはサーバ３に送信される。
【００２２】
複数サーバ１〜３それぞれは、レコードを受信すると、受信したレコードの、削除された項目があった位置にダミーデータを挿入する。そして複数サーバ１〜３それぞれは、ダミーデータの挿入により、すべての項目が存在する状態のレコードを処理対象として、処理プログラムに従った処理を実行する。図１の例では、ＩＤごとの個数の集計処理が行われ、合計値が出力されている。
【００２３】
このように、分散処理管理装置１０を用いることで、分散処理におけるサーバ１〜３間で転送処理の対象となるレコードから非参照項目のデータを削除し、非参照項目のデータ長を短くすることができる。その結果、データ転送効率が向上する。
【００２４】
しかも、転送後にダミーデータを挿入しているため、業務処理に影響を与えずに済む。すなわち、集計などの処理を実行するプログラムは、レコード群９のレコード内に、すべての項目が揃っていることを前提として処理が記述されているため、項目が削除されてしまうと、誤った処理を実行する可能性がある。図１の例では、ダミーデータが挿入されていることで、集計などの処理の実行時には、すべての項目が揃っており、処理プログラムを修正しなくても、正しく処理を実施することができる。
【００２５】
なお、ソースファイル５に、参照項目の項目名として、複数の項目の集合を示す集団項目名が記述されている場合があり得る。この場合、抽出手段１２は、例えば複数の項目それぞれの項目名を参照項目名として抽出する。これにより、集団項目名で参照項目が指定されていても、参照される各項目を正しく抽出できる。
【００２６】
また、ソースファイル５に、参照する項目の項目名と、該項目が属する項目集合を示す集団項目名とが記述されている場合があり得る。この場合、抽出手段１２は、例えば、ソースファイル５から、集団項目名を付与した参照項目名を抽出する。次に削除プログラム生成手段１３は、参照項目名の項目のうち、集団項目名の項目集合に属していない項目を、非参照項目に含める。そして削除プログラム生成手段１３は、非参照項目のデータを削除する処理が記述された削除プログラム７を生成する。これにより、異なる集団項目名に属する複数の項目に同じ項目名が付けられていても、それらの項目を区別し、参照項目を正しく認識できる。その結果、転送されるレコード内に無駄な項目が含まれることが抑止され、データ転送の効率化が図れる。
【００２７】
また、ソースファイル５に、参照する項目の項目名と、該項目内の参照する部分を指定する参照部指定とが記述されている場合があり得る。この場合、抽出手段１２は、例えば参照部指定を付与した該項目名を、参照項目名として抽出する。削除プログラム生成手段１３は、参照項目名に対応する項目内のデータから、参照部指定で指定されていない非参照部分を削除する処理の記述を、削除プログラム７内に含める。また挿入プログラム生成手段１４は、参照項目名に対応する項目内の非参照部分にダミーデータを挿入する処理の記述を、挿入プログラム８に含める。これにより、１つの項目内の一部のみが参照される場合、参照されない部分のデータを削除してレコードを転送することができる。その結果、転送されるレコードの項目内に無駄なデータが含まれることが抑止され、データ転送の効率化が図れる。
【００２８】
また、ソースファイル５に、参照項目名で繰り返し出現する複数の項目のうちの、出現順を指定して参照項目が指定されている場合があり得る。この場合、抽出手段１２は、例えば、ソースファイル５から、参照項目の出現順を付与した参照項目名を抽出する。削除プログラム生成手段１３は、参照項目名に対応する複数の項目のうちの出現順に対応する項目以外の項目を非参照項目に含め、非参照項目を削除する処理が記述された削除プログラム７を生成する。これにより、参照項目名で繰り返し出現する複数の項目のうちの一部の項目のみが参照される場合であっても、参照されない項目を正しく削除してレコードを転送することができる。その結果、転送されるレコードに無駄な項目が含まれることが抑止され、データ転送の効率化が図れる。
【００２９】
なお、抽出手段１２、削除プログラム生成手段１３、挿入プログラム生成手段１４、および制御手段１５は、例えば分散処理管理装置１０が有するプロセッサにより実現することができる。また、記憶手段１１は、例えば分散処理管理装置１０が有するメモリまたはストレージ装置により実現することができる。
【００３０】
また図１の例では、サーバ１〜３とは別に分散処理管理装置１０が設けられているが、サーバ１〜３のうちの１台を、分散処理管理装置１０として機能させてもよい。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、Ｈａｄｏｏｐにおけるデータ転送の効率化を図るものである。
【００３１】
図２は、第２の実施の形態のシステム構成例を示す図である。ネットワーク２０を介して、業務サーバ３０、端末装置３１、および複数のファイルサーバ１００，２００，３００が接続されている。業務サーバ３０は、企業の業務に関する情報を処理するコンピュータである。業務サーバ３０は、処理に使用する情報を、ファイルサーバ１００，２００，３００に格納する。端末装置３１は、ユーザが使用するコンピュータである。ユーザは、端末装置３１を用いて、業務サーバ３０やファイルサーバ１００，２００，３００に処理の実行を指示する。
【００３２】
ファイルサーバ１００，２００，３００は、Ｈａｄｏｏｐを構成するコンピュータである。ファイルサーバ１００，２００，３００は、Ｈａｄｏｏｐを用いて、情報の処理を行う。例えばファイルサーバ１００，２００，３００は、バッチ処理により、売り上げの集計処理を行う。
【００３３】
図３は、第２の実施の形態に用いるファイルサーバのハードウェアの一構成例を示す図である。ファイルサーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３４】
メモリ１０２は、ファイルサーバ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３５】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３６】
ストレージ装置１０３は、内蔵した記憶媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３７】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３８】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３９】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４０】
機器接続インタフェース１０７は、ファイルサーバ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００４１】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４２】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した分散処理管理装置１０も、図３に示したファイルサーバ１００と同様のハードウェアにより実現することができる。
【００４３】
ファイルサーバ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。ファイルサーバ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、ファイルサーバ１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またファイルサーバ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４４】
次に、複数のファイルサーバ１００，２００，３００が連携して、効率的に情報処理を実行するための機能について説明する。
図４は、ファイルサーバの機能の一例を示すブロック図である。ファイルサーバ１００は、ＨＤＦＳ（Hadoop Distributed File System）部１１０、MapReduce部１２０、プログラム記憶部１３０、レコード参照情報生成部１４０、及びレコード変換プログラム生成部１５０を有する。
【００４５】
ＨＤＦＳ部１１０は、業務に関する情報を記憶する。ＨＤＦＳ部１１０は、他のファイルサーバ２００，３００が有するＨＤＦＳ部と連携して、１つのファイルシステム（ＨＤＦＳ）として機能する。
【００４６】
MapReduce部１２０は、ＨＤＦＳで管理されている情報に対して処理を実施する。例えばMapReduce部１２０は、他のファイルサーバ２００，３００が有するMapReduce部と連携して、Map処理、Shuffle&Sort処理、Reduce処理を実施する。Map処理は、ＨＤＦＳ部１１０から、指定されたレコードを抽出する処理である。Map処理において、抽出したレコードに対して何らかの業務処理を実施することもできる。Shuffle&Sort処理は、抽出したレコードを特定のキーに基づいて複数のグループにまとめ、各グループの処理を担当するファイルサーバにレコードを送信する処理である。Reduce処理は、Shuffle&Sort処理によって送られたレコードに対して、売り上げの集計などの処理を施し、ＨＤＦＳ部１１０に格納する処理である。
【００４７】
プログラム記憶部１３０は、ＨＤＦＳで管理している情報に対して処理を施すために使用するプログラムを記憶する。例えばプログラム記憶部１３０は、業務処理プログラム４０、ソースファイル５０、レコード変換プログラム６０、およびダミー挿入プログラム７０を記憶する。業務処理プログラム４０は、ＨＤＦＳで管理している情報に対して施す処理の手順が機械語で記述されたプログラムである。ソースファイル５０は、ソースプログラムを含む電子ファイルである。ソースプログラムは、業務処理プログラム４０で実行される処理が、高級言語で記述されたプログラムである。ソースプログラムは、例えばＣＯＢＯＬ（COmmon Business Oriented Language）やＪａｖａ（登録商標）で記述される。ソースプログラムをコンパイルすることで、業務処理プログラム４０が生成される。このプログラム記憶部１３０は、図１に示した記憶手段１１の一例である。
【００４８】
レコード変換プログラム６０は、Shuffle&Sort処理によって転送するレコードのデータ量を削減するための処理手順が記述されたプログラムである。レコード変換プログラム６０は、ソースファイル５０に基づいて、レコード変換プログラム生成部１５０によって生成される。なお、レコード変換プログラム６０は、図１に示した削除プログラム生成手段１３の一例である。
【００４９】
ダミー挿入プログラム７０は、Shuffle&Sort処理によって転送されたレコードにダミーデータを挿入する手順が記述されたプログラムである。ダミー挿入プログラム７０は、ソースファイル５０に基づいて、レコード変換プログラム生成部１５０によって生成される。なお、ダミー挿入プログラム７０は、図１に示した挿入プログラム生成手段１４の一例である。
【００５０】
レコード参照情報生成部１４０は、ソースファイル５０に基づいて、ＨＤＦＳで管理されている各レコード内の複数の項目値のうち、業務処理で参照する項目値を示すレコード参照情報を生成する。レコード参照情報生成部１４０は、生成したレコード参照情報をレコード変換プログラム生成部１５０に送信する。このレコード参照情報生成部１４０は、図１に示した抽出手段１２の一例である。
【００５１】
レコード変換プログラム生成部１５０は、レコード参照情報に基づいて、レコード変換プログラム６０とダミー挿入プログラム７０とを生成する。レコード変換プログラム生成部１５０は、生成したレコード変換プログラム６０とダミー挿入プログラム７０とを、プログラム記憶部１３０に格納する。またレコード変換プログラム生成部１５０は、生成したレコード変換プログラム６０とダミー挿入プログラム７０とを、他のファイルサーバ２００，３００に送信し、業務処理実行時に、各プログラムをファイルサーバ２００，３００で実行させる。このレコード変換プログラム生成部１５０は、図１に示した削除プログラム生成手段１３、挿入プログラム生成手段１４、および制御手段１５を包含する機能の一例である。
【００５２】
なお、図４に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図４に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００５３】
このような機能をファイルサーバ１００が有している。そして他のファイルサーバ２００，３００も、ファイルサーバ１００と同様の機能を有する。これにより、複数のファイルサーバ１００，２００，３００により、データ分散処理を効率的に実施することができる。なお、レコード参照情報の生成処理とレコード変換プログラムの生成処理とは、業務処理の開始前に、いずれか１つのファイルサーバが実施すればよい。以下、ファイルサーバ１００がレコード参照情報の生成処理とレコード変換プログラムの生成処理とを実施するものとして、レコード参照情報の生成とレコード変換プログラムの生成とについて具体的に説明する。
【００５４】
図５は、レコード参照情報の生成例を示す図である。レコード参照情報生成部１４０は、ソースファイル５０を取得する。例えばレコード参照情報生成部１４０は、業務処理のソースファイル名の指定入力を受け付け、指定されたソースファイル５０をプログラム記憶部１３０から読み取る。ソースファイル５０には、「FILE SECTION」において、業務処理で使用するＨＤＦＳ部１１０内に保持されているレコード定義が記述されている。レコード定義には、各レコードの項目名（通番、売上日時など）が含まれる。レコード参照情報生成部１４０は、「FILE SECTION」からレコード定義を取得し、レコード参照情報８０に転記する。
【００５５】
またソースファイル５０内には、「PROCEDURE DIVISION」として、レコードに対して実施する処理が記述されている。レコード参照情報生成部１４０は、「PROCEDURE DIVISION」の各行の記述を解析し、レコード定義中の項目名が含まれるか否かを判断する。レコード定義中の項目名が含まれる場合、レコード参照情報生成部１４０は、その項目名をレコード参照情報８０に追加する。
【００５６】
図５の例では、「IF ID = …」の記述のうちの「ID」がレコード定義の項目名に該当する。そのため「ID」が、レコード参照情報８０に追加されている。同様に「ADD 個数 TO 合計」の記述のうちの「個数」がレコード定義の項目名に該当する。そのため「個数」が、レコード参照情報８０に追加されている。なお、「ID」や「個数」以外の、ＣＯＢＯＬ予約語や、レコード定義に含まれないユーザ定義項目は、レコード参照情報８０への追加対象外である。
【００５７】
このようにして、ソースファイル５０に記述されているソースコードで実際に参照しているレコードの項目名が、レコード参照情報８０に追加される。これにより、レコード参照情報８０には、業務処理で使用するＨＤＦＳ部１１０のレコード定義と、業務処理において参照するレコードの項目名とが含まれることとなる。このようなレコード参照情報８０に基づいて、レコード変換プログラム６０とダミー挿入プログラム７０とが生成される。
【００５８】
図６は、レコード変換プログラムの生成例を示す図である。レコード変換プログラム生成部１５０は、レコード参照情報８０をレコード参照情報生成部１４０から取得する。
レコード変換プログラム生成部１５０は、レコード参照情報８０内のレコード定義を、レコード変換プログラム６０に転記する。
【００５９】
次にレコード変換プログラム生成部１５０は、レコード参照情報８０に登録されている各項目名を抽出し、抽出した項目名に対応する抽出レコード定義を、レコード変換プログラム６０に追加する。抽出レコード定義の属性には、抽出された項目名を含むレコード定義の属性が転記される。また抽出レコード定義では、項目名が、抽出された項目名の前に「C-」という文字列を追加した項目名（C-項目名）に変換される。例えば、項目名「ID」に応じて、抽出レコード定義「02 C-ID PIC X(3)」が、レコード変換プログラム６０に追加される。
【００６０】
さらにレコード変換プログラム生成部１５０は、ＨＤＦＳ内のレコードの読み出し文「READ 売り上げレコード」をレコード変換プログラム６０に追加する。その次にレコード変換プログラム生成部１５０は、レコード参照情報８０に登録されている各項目名に対応する変換ＭＯＶＥ文を、レコード変換プログラム６０に追加する。変換ＭＯＶＥ文は、項目名で示されるレコードの値を、C-項目名で示されるレコードに設定する処理の命令文である。変換ＭＯＶＥ文では、「MOVE  項目名  TO  C-項目名」というフォーマットで記載される。例えば項目名「ID」に応じて、変換ＭＯＶＥ文「MOVE ID TO C-ID」が、レコード変換プログラム６０に追加される。
【００６１】
最後にレコード変換プログラム生成部１５０は、転送対象レコードの書き込み文「WRITE C-売り上げレコード」を、レコード変換プログラム６０に追加する。
このようにして、レコード変換プログラム６０が生成される。レコード変換プログラム６０を生成したとき、レコード変換プログラム生成部１５０は、生成したレコード変換プログラム６０に対応するダミー挿入プログラム７０を生成する。
【００６２】
図７は、ダミー挿入プログラムの生成例を示す図である。レコード変換プログラム生成部１５０は、レコード参照情報８０をレコード参照情報生成部１４０から取得する。
レコード変換プログラム生成部１５０は、レコード参照情報８０内のレコード定義を、ダミー挿入プログラム７０に転記する。
【００６３】
次にレコード変換プログラム生成部１５０は、レコード参照情報８０に登録されている各項目名を抽出し、抽出した項目名に対応する抽出レコード定義を、ダミー挿入プログラム７０に追加する。抽出レコード定義の属性には、抽出された項目名を含むレコード定義の属性が転記される。また抽出レコード定義では、項目名が、抽出された項目名の前に「C-」という文字列を追加した項目名（C-項目名）に変換される。例えば、項目名「ID」に応じて、抽出レコード定義「02 C-ID PIC X(3)」が、ダミー挿入プログラム７０に追加される。
【００６４】
さらにレコード変換プログラム生成部１５０は、転送対象レコードの読み出し文「C-READ 売り上げレコード」をダミー挿入プログラム７０に追加する。その次にレコード変換プログラム生成部１５０は、レコード参照情報８０に登録されている各項目名に対応する変換ＭＯＶＥ文を、ダミー挿入プログラム７０に追加する。変換ＭＯＶＥ文は、C-項目名で示されるレコードの値を、項目名で示されるレコードに設定する処理の命令文である。変換ＭＯＶＥ文では、「MOVE C-項目名 TO 項目名」というフォーマットで記載される。例えば項目名「ID」に応じて、変換ＭＯＶＥ文「MOVE C-ID TO ID」が、ダミー挿入プログラム７０に追加される。
【００６５】
最後にレコード変換プログラム生成部１５０は、ＨＤＦＳ内へのレコードの書き込み文「WRITE 売り上げレコード」を、ダミー挿入プログラム７０に追加する。
このようにして、ダミー挿入プログラム７０が生成される。レコード変換プログラム６０とダミー挿入プログラム７０との間で相違するのは、レコードの読み出し文、変換ＭＯＶＥ文、およびレコードの書き込み文である。レコード変換プログラム６０のレコードの読み出し文における読み出しの対象はＨＤＦＳ内のレコードであり、ダミー挿入プログラム７０のレコードの読み出し文における読み出しの対象は転送対象のレコードである。レコード変換プログラム６０の変換ＭＯＶＥ文は、ＨＤＦＳ内のレコードの値を、転送対象のレコードへ設定する命令であり、ダミー挿入プログラム７０の変換ＭＯＶＥ文は、転送対象のレコードの値を、ＨＤＦＳのレコードへ設定する命令である。レコード変換プログラム６０のレコードの書き込み文における書き込みの対象は転送対象のレコードであり、ダミー挿入プログラム７０のレコードの書き込み文における書き込みの対象はＨＤＦＳ内のレコードである。
【００６６】
このようにして生成されたレコード変換プログラム６０とダミー挿入プログラム７０とは、プログラム記憶部１３０に格納される。また、業務処理の実施に先立って、レコード変換プログラム６０とダミー挿入プログラム７０とは、他のファイルサーバ２００，３００に配布される。
【００６７】
図８は、レコード変換プログラムとダミー挿入プログラムとの配布状況を示す図である。図８に示すように、ファイルサーバ１００が他のファイルサーバ２００，３００へ、生成したレコード変換プログラム６０とダミー挿入プログラム７０とを配布する。ファイルサーバ２００，３００は、受信したレコード変換プログラム６０とダミー挿入プログラム７０とを、例えばストレージ装置に格納する。
【００６８】
これにより、システム内の全ファイルサーバ１００，２００，３００が、レコード変換プログラム６０とダミー挿入プログラム７０を有することができる。そして全ファイルサーバ１００，２００，３００が、分散処理によって業務処理を並列実行するとき、レコード変換プログラム６０に基づくレコード変換処理と、ダミー挿入プログラム７０に基づくダミー挿入処理とが行われる。なお、業務処理は、例えばバッチ処理として、予め指定された日時に実行が開始される。
【００６９】
図９は、複数のファイルサーバが連携して業務処理を実施する場合の処理の流れの一例を示す図である。各ファイルサーバ１００，２００，３００は、業務処理プログラム４０に基づいて業務処理を実施するとき、まずMap処理（ステップＳ１０）により、ＨＤＦＳ９０からレコードを読み出す。読み出す対象は、業務処理プログラム４０に示されているレコード定義に対応するレコードである。なお各ファイルサーバ１００，２００，３００は、ＨＤＦＳ９０内のレコードのうち、ファイルサーバ自身が管理しているレコードを、Map処理で読み出す。
【００７０】
Map処理では、業務処理（ステップＳ１１，Ｓ１１ａ，Ｓ１１ｂ）とレコード変換処理（ステップＳ１２，Ｓ１２ａ，Ｓ１２ｂ）とが行われる。例えばファイルサーバ１００では、MapReduce部１２０が業務処理プログラム４０に従って、Shuffle&Sort処理の前に実施する業務処理（ステップＳ１１）を行う。このとき実施する業務処理は、レコードの加工や抽出処理である。そして業務処理が完了すると、MapReduce部１２０は、レコード変換プログラム６０に従って、レコード変換処理（ステップＳ１２）を行う。レコード変換処理では、業務処理によりＨＤＦＳ９０から読み出した全レコードから、抽出レコード定義で示された項目のみを含むレコードが、転送対象のレコードとして抽出される。ただし、業務処理は省略可能である。業務処理が省略された場合、レコード変換処理では、ＨＤＦＳ９０内の全レコードのうち、抽出レコード定義で示された項目のみを含むレコードが、転送対象のレコードとして抽出される。
【００７１】
各ファイルサーバ１００，２００，３００は、Map処理が終了すると、Shuffle&Sort処理（ステップ２０）を行う。Shuffle&Sort処理では、所定のキーに基づいて、転送対象のレコードの処理を実施するファイルサーバが判断され、各レコードが、そのレコードに対する処理を実施するファイルサーバに送信される。
【００７２】
Shuffle&Sort処理の後、各ファイルサーバ１００，２００，３００で、Reduce処理（ステップＳ３０）が行われる。Reduce処理では、ダミー挿入処理（ステップＳ３１，Ｓ３１ａ，Ｓ３１ｂ）と業務処理（ステップＳ３２，Ｓ３２ａ，Ｓ３２ｂ）とが行われる。例えばファイルサーバ１００では、MapReduce部１２０がダミー挿入プログラム７０に従って、受信したレコードにダミーデータを挿入する（ステップＳ３１）。ダミーデータは、レコード変換処理によって削除された項目の位置に挿入される。そしてMapReduce部１２０は、業務処理プログラム４０に従って、Shuffle&Sort処理後に実施する業務処理（ステップＳ３２）を行う。Reduce処理内で実施される業務処理は、例えば、所定のキーで纏められたレコードの値の集計である。そしてMapReduce部１２０は、業務処理の結果を、ＨＤＦＳ部１１０に格納する。各ファイルサーバ１００，２００，３００がReduce処理を実施することで、業務処理結果がＨＤＦＳ９０に格納される。
【００７３】
以下、図１０，図１１を参照して、分散処理中の通信の効率化について、具体例を用いて説明する。
図１０は、業務処理の具体例の前半を示す図である。ＨＤＦＳ９０内のレコードは、複数のデータブロック９１〜９３が分類されている。データブロック９１は、ファイルサーバ１００が管理している。データブロック９２は、ファイルサーバ２００が管理している。データブロック９３は、ファイルサーバ３００が管理している。
【００７４】
業務処理が開始されると、各ファイルサーバ１００，２００，３００は、自身が管理しているブロック内のレコードに対してMap処理を行う。図１０の例では、Map処理内のレコード変換処理において、全レコードから、「AAA」などの文字列が設定された項目と、「100」などの数値が設定された項目との２つの項目を残し、他の項目のデータが削除されている。
【００７５】
そして、Shuffle&Sort処理（ステップＳ２０）により、文字列を振り分けのキーとして、転送対象のレコードが、各ファイルサーバ１００，２００，３００に転送される。図１０の例では、文字列「AAA」を含むレコードが、ファイルサーバ１００に転送されている。文字列「BBB」を含むレコードが、ファイルサーバ３００に転送されている。文字列「CCC」を含むレコードが、ファイルサーバ２００に転送されている。文字列「EEE」を含むレコードが、ファイルサーバ３００に転送されている。
【００７６】
図１１は、業務処理の具体例の後半を示す図である。Shuffle&Sort処理によって振り分けられたレコードは、各ファイルサーバ１００，２００，３００において、ダミーデータが挿入され、その後、業務処理が実施される。ダミーデータが挿入されたことで、業務処理では、レコード変換処理前のレコードと同じ構造のレコードとして、受信したレコードを取り扱うことができる。その結果、例えばキーごとの値の集計（合計値の算出）を、正しく行うことができる。
【００７７】
このようにShuffle&Sort処理における転送前に、レコード変換処理によって各レコードのデータ量を削減することで、転送されるデータの総量を抑制することができる。しかも、データ転送後に、ダミー挿入処理によって、削除した項目にダミーデータを挿入することで、その後の業務処理では、すべての項目を含むレコードとして取り扱うことができる。その結果、レコード変換処理を行っても、業務処理プログラム４０を、修正せずに済む。すなわち、ダミーデータの挿入を行わないと、各レコード内の項目が、業務処理プログラム４０のレコード定義と一致しなくなり、業務処理プログラム４０を正しく実行することができない。ダミー挿入処理によって削除した項目にダミーデータを挿入すれば、各レコードの構造がレコード定義通りとなり、業務処理プログラム４０を正しく実行できる。
【００７８】
ここで、分散処理において、通信効率を改善することの重要性について説明する。
図１２は、ＣＰＵ負荷と通信負荷との関係を示す図である。図１２の上段に示すように、業務処理で処理するデータ量が増加すると、通信負荷とＣＰＵ負荷とは、共に処理するデータ量に対し線形に増加する。このため、通信とＣＰＵの負荷の比は変化しない。そこで、データ量が増加すると、ファイルサーバのノード数を増やし、分散処理によって１ノード当たりの処理負荷を低下させることが考えられる。
【００７９】
図１２の中段に示すように、ノード数が増加した場合、個々のノードが処理するデータ量が減少するため、データ加工のＣＰＵ負荷は相対的に減少する。このとき、個々のノードに対するデータ通信量も減少するが、データ通信経路が完全に並列化されていない限り経路の一部がボトルネックとなる。その結果、並列化しても通信負荷は変化しない。
【００８０】
そこで、図１０に示すように、レコード変換処理により、Shuffle&Sort処理でのデータ転送量を削減することで、図１２の下段に示すように、通信負荷を軽減することができる。その結果、データ転送がボトルネックとなって、分散処理の効率が向上しなくなることを抑止できる。
【００８１】
なお、図５に示したソースファイル５０は、ＣＯＢＯＬで記述されている。ソースファイル５０がＣＯＢＯＬで記述されている場合、レコード変換プログラムとダミー挿入プログラムの生成する際に、以下のようなＣＯＢＯＬ独自の文法が障害となる。
１）集団項目の参照（集団項目の上位階層名での参照、上位・下位階層の参照混在）
２）項目名の重複（レコード定義に含まれる項目名が他の項目と重複している）
３）項目の部分参照（各項目の特定領域のみ参照している）
４）ＯＣＣＵＲＳ句の使用（データを反復宣言している）
これらの障害の内容と対処方法とについて、以下に説明する。
【００８２】
まず、集団項目を参照している場合について説明する。ＣＯＢＯＬでは複数の項目の集合体（集団項目）を定義することが可能である。これは、Ｃ言語の構造体に相当する。ＣＯＢＯＬのソースコードにおいて、レコード定義に集団項目が含まれるとき、集団項目名を参照している場合、集団項目の下位構造の要素（子要素）を参照している場合、集団項目名と子要素との両方の参照が混在している場合とがある。それぞれの場合についての対処方法を、図１３〜図１６に示す。
【００８３】
図１３は、集団項目の参照（集団項目名の参照）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。図１３に示したソースファイル５１内の項目「売上日付」は、「年」、「月」、「日」の集合である。すなわち、項目「売上日付」は、集団項目である。
【００８４】
ソースファイル５１において集団項目の項目名が参照対象として記述されている場合、その集団項目の子要素についても処理の対象となる。このような場合に、ソースファイル５１に記載されている項目名のみを抽出したのでは、子要素の抽出漏れが発生する。
【００８５】
そこで、レコード参照情報生成部１４０は、生成するレコード参照情報８１内に、子要素の項目名を追加する。図１３の例では、「売上日付」の記述に応じて、「売上日付」に加え、「年」、「月」、「日」が追加されている。このようにして生成したレコード参照情報８１に基づいて、レコード変換プログラム生成部１５０がレコード変換プログラム６１とダミー挿入プログラム７１とを生成することで、抽出レコード定義として、子要素の定義を含めることができる。なお、変換ＭＯＶＥ文では、集団項目であることを特に考慮することなくコードを生成すればよい。
【００８６】
図１４は、集団項目の参照（集団項目の子要素の参照）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。図１４に示したソースファイル５２では、集団項目「売上日付」の子要素の項目名「年」が、参照対象として記述されている。
【００８７】
このように集団項目中の特定の子要素のみが参照されている場合、レコード参照情報生成部１４０は、通常通り、参照対象とされている項目名のみを、レコード参照情報８２に追加する。すなわち、上位の集団項目名の追加は行わない。このようにして生成したレコード参照情報８２に基づいて、レコード変換プログラム生成部１５０がレコード変換プログラム６２とダミー挿入プログラム７２とを生成することで、抽出レコード定義として、子要素の定義を含めることができる。なお、変換ＭＯＶＥ文では、集団項目であることを特に考慮することなくコードを生成すればよい。
【００８８】
図１５は、集団項目の参照（集団項目名と子要素の参照が混在）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの不適切な生成例を示す図である。図１５に示したソースファイル５３では、集団項目「売上日付」の項目名と、その子要素の項目名「年」が、参照対象として記述されている。
【００８９】
このように、ソースファイル５３中に集団項目名と子要素の項目名との両方が記載されている場合、図１３、図１４に示した処理に従って項目名の抽出を行うと、図１５に示すようなレコード変換プログラム６３とダミー挿入プログラム７３が生成される。この場合、抽出レコード定義で項目名が重複してしまい、生成されるレコード変換プログラムがコンパイルできない問題が発生する。図１５の例では、抽出レコード定義において子要素「年」に関する記述が重複している。なお、名前の重複は、項目名に通し番号を付けるなどの工夫で容易に回避可能だが、子要素の情報は親要素に含まれるため、抽出レコード定義に無駄な領域が作られ、変換前のレコードよりも領域サイズが増えてしまう。
【００９０】
また、レコード変換プログラム６３とダミー挿入プログラム７３との変換ＭＯＶＥ文において、不要な抽出項目のための無駄な転記処理が発生する。図１５の例では、変換ＭＯＶＥ文「MOVE 売上日付 TO C-売上日付」により、集団項目全体の転記処理が行われる。すなわち、子要素「年」のレコードの値も転記される。そのため、変換ＭＯＶＥ文「MOVE 年 TO C-年」は無駄な処理である。
【００９１】
図１６は、集団項目の参照（集団項目名と子要素の参照が混在）がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。図１６の例では、レコード参照情報生成部１４０は、ソースファイル５３を解析後、レコード参照情報８３ａを走査し、集団項目の親要素が指定されていた場合、子要素の参照情報を削除する。図１６の例では、項目名「売上日付」が子要素を持ち、子要素には項目名「年」が含まれるため、レコード参照情報８３ａから「年」の記述が削除される。
【００９２】
このようにして生成されたレコード参照情報８３ａに基づいてレコード変換プログラム６３ａとダミー挿入プログラム７３ａとを生成することで、重複した抽出レコード定義や、無駄な変換ＭＯＶＥ文の記述が抑止された適切なプログラムが生成される。
【００９３】
以上のようにして集団項目の参照がある場合であっても、レコード変換プログラムとダミー挿入プログラムとを適切に生成することができる。
次に、項目名の重複がある場合について説明する。
【００９４】
図１７は、項目名の重複がある場合の不適切なレコード参照情報生成例を示す図である。ＣＯＢＯＬの文法上、まったく同じ項目名の重複使用が認められている。ただし、装飾語（ＯＦ／ＩＮ  〜）により一意に同定できることが前提である。図１７の例では、ソースファイル５４において、集団項目「記録日付」の子要素として項目名「年」のレコード定義があると共に、集団項目「売上日付」の子要素として項目名「年」のレコード定義がある。
【００９５】
このように項目名の重複使用があるとき、図１７に示すソースファイル５４では、「 IF 年 OF 売上日付 = 2015…」という記述でレコードの参照が行われている。これは、集団項目「売上日付」の子要素「年」を参照することを示している。しかし、ソースファイル５４に記述されている項目名だけに着目すると、項目名「売上日付」の項目が参照されていると誤認識されるという問題が発生する。実際には、項目名「売上日付」全体の参照は行われておらず、レコード参照情報８４に記載された「売上日付」は、不要な項目である。すなわち、レコード参照情報８４に「売上日付」が記載されていると、図１３に示したように「売上日付」に含まれる全項目が抽出レコード定義として抽出される。そして「売上日付」中の参照されていない「月」や「日」の項目に対応するレコードまでも、Shuffle&Sort処理で転送されてしまう。
【００９６】
図１８は、項目名の重複がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。図１８の例では、レコード参照情報生成部１４０は、ソースファイル５４に装飾語（ＯＦ／ＩＮ  〜）が書かれていた場合、それに続く親要素は抽出対象外とし、レコード参照情報８４ａに装飾語を含める機構を追加する。図１８の例では、装飾語「ＯＦ」に続く「売上日付」は抽出対象外とされ、項目名「年」を抽出する際に装飾語を含めて「年 OF 売上日付」という記述が抽出され、装飾語を含めた項目名がレコード参照情報８４ａに追加されている。このようなレコード参照情報８４ａに基づいてレコード変換プログラム６４とダミー挿入プログラム７４とを作成することで、各プログラムには、集団項目と参照される項目名との抽出レコード定義、および装飾語を含む変換ＭＯＶＥ文が記述される。このようなレコード変換プログラム６４とダミー挿入プログラム７４とに基づいて、レコード変換処理とダミー挿入処理とを実行することで、レコード内の無駄な項目を除外してデータを転送でき、データ転送量が削減される。
【００９７】
このようにして、項目名に重複がある場合でも、無駄なデータの転送を抑制し、効率的なデータ転送が可能となる。
次に、項目の部分参照がある場合について説明する。
【００９８】
図１９は、項目の部分参照がある場合におけるレコード変換プログラムとダミー挿入プログラムとの不適切な生成例を示す図である。ＣＯＢＯＬでは各項目に対し、データを部分的に参照することが可能である。ソースファイル５５中に部分参照の記述がある場合、単純に項目名を抽出すると部分的に参照しているデータにもかかわらずすべての領域を保持対象とされ、データ削減効果が得られないという問題が発生する。図１９の例では、ソースファイル５５中に「データ(1:5) 」という記述がある。この記述のうち、括弧内が、参照する部分を指定する参照部指定であり、項目名「データ」のうちの１ビット目から５ビット目までを参照することを意味している。しかし、項目名を単純に抽出すると、レコード参照情報８６には、項目名「データ」のみが追加される。すると、レコード変換プログラム６６とダミー挿入プログラム７６とには、データ全体を処理対象とした変換ＭＯＶＥ文が挿入される。その結果、実際には不使用となるような無駄な領域を含むデータ全体が、Shuffle&Sort処理で転送されてしまう。
【００９９】
図２０は、項目の部分参照がある場合におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。項目名に部分参照が含まれている場合、レコード参照情報生成部１４０は、ソースファイル５５に参照対象として記述されている項目名を、部分参照状況を含めて、レコード参照情報８５ａに追加する。このようにして生成されたレコード参照情報８５ａに基づいて、レコード変換プログラム生成部１５０は、レコード変換プログラム６５ａとダミー挿入プログラム７５ａとに、部分参照状況を含めて、抽出レコード定義と変換ＭＯＶＥ文とを追加する。これにより、レコード変換処理では、参照対象の項目の中の参照されるビットのみが残され、不使用のビットが削除される。
【０１００】
このようにして、項目の部分参照がある場合において、Shuffle&Sort処理における転送データ量が削減され、通信の効率化が図られる。
次に、ＯＣＣＵＲＳ句が使用されている場合について説明する。
【０１０１】
図２１は、ＯＣＣＵＲＳ句使用時におけるレコード変換プログラムとダミー挿入プログラムとの不適切な生成例を示す図である。ＣＯＢＯＬのレコード定義では、特定の構造が繰り返される場合、ＯＣＣＵＲＳ句を使用して繰り返し分の要素の記述を省略することができる。このようなＯＣＣＵＲＳ句が使用されている場合、単純に項目名を抽出するとＯＣＣＵＲＳの全要素を参照することになり、データ削減効果が得られないという問題が発生する。例えば図２１の例では、ソースファイル５６で定義されている１０個のテーブルのうち、実際に使用するのは、テーブル配列上の出現順が５番目と１０番目のテーブルのみである。このときレコード参照情報８６に項目名「テーブル」を追加した場合、レコード変換プログラム６６とダミー挿入プログラム７６とには、全テーブルを処理対象とした変換ＭＯＶＥ文が挿入される。その結果、Shuffle&Sort処理において、すべてのテーブルが転送対象とされてしまう。
【０１０２】
図２２は、ＯＣＣＵＲＳ句使用時におけるレコード変換プログラムとダミー挿入プログラムとの適切な生成例を示す図である。項目名にＯＣＣＵＲＳの特定要素の参照が含まれている場合、レコード参照情報生成部１４０は、ソースファイル５５に参照対象として記述されている項目名を、ＯＣＣＵＲＳ参照状況も含めて、レコード参照情報８６ａに追加する。レコード参照情報８６ａに基づいて、レコード変換プログラム生成部１５０は、レコード変換プログラム６６ａとダミー挿入プログラム７６ａとに、ＯＣＣＵＲＳ参照情報を考慮した抽出レコード定義と抽出ＭＯＶＥ文とを追加する。
【０１０３】
このようにして、項目名にＯＣＣＵＲＳの特定要素の参照が含まれている場合において、Shuffle&Sort処理における転送データ量が削減され、通信の効率化が図られる。
以下、レコード参照情報生成処理とレコード変換プログラム生成処理との詳細な手順を、フローチャートを参照して説明する。
【０１０４】
まず、レコード参照情報生成処理について説明する。
図２３は、レコード参照情報生成処理の手順の一例を示すフローチャートである。以下、図２３に示す処理をステップ番号に沿って説明する。
【０１０５】
［ステップＳ１０１］レコード参照情報生成部１４０は、実行する業務処理プログラムのソースファイルを取得する。例えばレコード参照情報生成部１４０は、ユーザから指定されたソースファイルを、プログラム記憶部１３０から読み出す。
【０１０６】
［ステップＳ１０２］レコード参照情報生成部１４０は、ソースファイル内の「FILE SECTION」からレコード定義を取得する。
［ステップＳ１０３］レコード参照情報生成部１４０は、レコード参照情報に、ソースファイルから読み出したレコード定義を転記する。
【０１０７】
［ステップＳ１０４］レコード参照情報生成部１４０は、ソースファイル内の「PROCEDURE DIVISION」の各行に対して、ステップＳ１０５〜Ｓ１０６の処理を実行する。
［ステップＳ１０５］レコード参照情報生成部１４０は、処理対象の行に、レコード定義中の項目名が含まれるか否かを判断する。項目名が含まれる場合、処理がステップＳ１０６に進められる。項目名が含まれない場合、処理がステップＳ１０７に進められる。
【０１０８】
［ステップＳ１０６］レコード参照情報生成部１４０は、処理対象の行に含まれている項目名を解析対象として、項目名解析処理を実施する。この処理の詳細は後述する（図２４参照）。
【０１０９】
［ステップＳ１０７］レコード参照情報生成部１４０は、「PROCEDURE DIVISION」内のすべての行に対して、ステップＳ１０５〜Ｓ１０６の処理の実行が完了したら、処理をステップＳ１０８に進める。
【０１１０】
［ステップＳ１０８］レコード参照情報生成部１４０は、項目名解析後処理を実施する。この処理の詳細は後述する（図２５参照）。
以上のような手順によって、レコード参照情報が生成される。
【０１１１】
次に、項目名解析処理について詳細に説明する。
図２４は、項目名解析処理の手順の一例を示すフローチャートである。以下、図２４に示す処理をステップ番号に沿って説明する。
【０１１２】
［ステップＳ１１１］レコード参照情報生成部１４０は、処理対象の行に、解析対象の項目名を装飾する装飾語（ＯＦ／ＩＮ〜）が含まれるか否かを判断する。装飾語が含まれる場合、処理がステップＳ１１２に進められる。装飾語が含まれない場合、処理がステップＳ１１３に進められる。
【０１１３】
［ステップＳ１１２］レコード参照情報生成部１４０は、解析対象の項目名に装飾語を付与する。この場合、装飾語付きの項目名が、レコード参照情報への追加対象となる。またレコード参照情報生成部１４０は、解析対象の項目名に装飾している項目名を抽出対象から除外する。図１８の例であれば、ソースファイル５４の「PROCEDURE DIVISION」における「IF 年 OF 売上日付  = 2015…」という記述から、項目名「年」に装飾語「OF 売上日付」が付与され、項目名「年 OF 売上日付」がレコード参照情報への追加対象となる。そして装飾している「売上日付」が項目名解析処理の対象から除外される。項目名解析処理の対象から除外された「売上日付」は、レコード参照情報へ、単独の要素として抽出されることが抑止される。
【０１１４】
［ステップＳ１１３］レコード参照情報生成部１４０は、解析対象の項目名が、部分参照の記述を含むか否かを判断する。部分参照の記述が含まれる場合、処理がステップＳ１１４に進められる。部分参照の記述が含まれない場合、処理がステップＳ１１５に進められる。
【０１１５】
［ステップＳ１１４］レコード参照情報生成部１４０は、解析対象の項目名に部分参照の記述を付与する。この場合、部分参照付きの項目名が、レコード参照情報への追加対象となる。図２０の例であれば、ソースファイル５５の「PROCEDURE DIVISION」に記述されている部分参照を含む項目名「データ(1:5)」が、レコード参照情報への追加対象である。
【０１１６】
［ステップＳ１１５］レコード参照情報生成部１４０は、解析対象の項目名がＯＣＣＵＲＳの特定要素の参照を含むか否かを判断する。ＯＣＣＵＲＳの特定要素の参照を含む場合、処理がステップＳ１１６に進められる。ＯＣＣＵＲＳの特定要素の参照を含まない場合、処理がステップＳ１１７に進められる。
【０１１７】
［ステップＳ１１６］レコード参照情報生成部１４０は、解析対象の項目名に、ＯＣＣＵＲＳ参照情報を付与する。この場合、ＯＣＣＵＲＳ参照情報付きの項目名が、レコード参照情報への追加対象となる。図２２の例であれば、ソースファイル５６の「PROCEDURE DIVISION」に記述された項目名「テーブル(5)」が、レコード参照情報への追加対象である。
【０１１８】
［ステップＳ１１７］レコード参照情報生成部１４０は、解析対象の項目名を、レコード参照情報に追加する。
以上の処理が、「PROCEDURE DIVISION」内の各項目名に対して実施されることで、レコード参照情報内に、業務処理によって参照されるレコード内の項目を示す項目名が、参照対象としてリストアップされる。以下、参照対象の項目名のリストを、項目名一覧と呼ぶ。
【０１１９】
次に、項目名解析後処理について詳細に説明する。
図２５は、項目名解析後処理の手順の一例を示すフローチャートである。以下、図２５に示す処理をステップ番号に沿って説明する。
【０１２０】
［ステップＳ１２１］レコード参照情報生成部１４０は、レコード参照情報を、プログラム記憶部１３０から読み出す。
［ステップＳ１２２］レコード参照情報生成部１４０は、レコード参照情報から、重複してリストアップされた項目名を、１つだけ残し削除する。例えば付与された情報（装飾語など）も含めて同一の項目名が複数ある場合、１つ項目名を残し，他の項目名が削除される。
【０１２１】
［ステップＳ１２３］レコード参照情報生成部１４０は、項目名一覧内の各項目について、ステップＳ１２４〜Ｓ１２５の処理を実行する。
［ステップＳ１２４］レコード参照情報生成部１４０は、処理対象の項目名が、子要素を持つ項目の項目名か否かを判断する。子要素を持つか否かは、レコード参照情報に転記されたレコード定義に基づいて判断することができる。子要素を持つ場合、処理がステップＳ１２５に進められる。子要素を持たない場合、処理がステップＳ１２６に進められる。
【０１２２】
［ステップＳ１２５］レコード参照情報生成部１４０は、参照対象の項目名一覧から、子要素の項目名を削除する。図１６の例では、レコード参照情報８３ａ内の処理対象の項目名が「売上日付」のとき、「売上日付」の子要素である項目名「年」が、レコード参照情報８３ａの項目名一覧から削除される。
【０１２３】
［ステップＳ１２６］レコード参照情報生成部１４０は、項目名一覧内のすべての項目名についてステップＳ１２４〜Ｓ１２５の処理が完了すると、項目名解析後処理を終了する。
【０１２４】
以上のようにして、レコード参照情報が生成される。生成されたレコード参照情報は、レコード変換プログラム生成部１５０に送信される。そしてレコード変換プログラム生成部１５０は、レコード参照情報に基づいて、レコード変換プログラムとダミー挿入プログラムとを生成する。
【０１２５】
図２６は、レコード変換プログラム生成処理の手順の一例を示すフローチャートである。以下、図２６に示す処理をステップ番号に沿って説明する。
［ステップＳ２０１］レコード変換プログラム生成部１５０は、新規のＣＯＢＯＬソースファイル６７を作成する。
【０１２６】
［ステップＳ２０２］レコード変換プログラム生成部１５０は、ＣＯＢＯＬソースファイル６７へ、ヘッダ情報を追加する。
［ステップＳ２０３］レコード変換プログラム生成部１５０は、レコード参照情報を受け取る。
【０１２７】
［ステップＳ２０４］レコード変換プログラム生成部１５０は、レコード参照情報に記述されているレコード定義を、ＣＯＢＯＬソースファイル６７に転記する。
［ステップＳ２０５］レコード変換プログラム生成部１５０は、ＣＯＢＯＬソースファイル６７に、入出力ファイルの初期処理と、各レコードの読み込み処理とを追加する。
【０１２８】
［ステップＳ２０６］レコード変換プログラム生成部１５０は、レコード参照情報の項目名一覧内の各項目名について、ステップＳ２０７〜Ｓ２０８の処理を実行する。
［ステップＳ２０７］レコード変換プログラム生成部１５０は、処理対象の項目名について、抽出レコード定義処理を実行する。この処理の詳細は後述する（図２７参照）。
【０１２９】
［ステップＳ２０８］レコード変換プログラム生成部１５０は、ＣＯＢＯＬソースファイル６７に、変換ＭＯＶＥ文を追加する。追加される変換ＭＯＶＥ文は、「MOVE 項目名 TO C-項目名」という記述となる。ただし、ステップＳ２０７の抽出レコード定義処理において転記先項目名に変更があった場合、変更後の項目名が使用される。
【０１３０】
［ステップＳ２０９］レコード変換プログラム生成部１５０は、項目名一覧内のすべての項目に対してステップＳ２０７〜Ｓ２０８の処理が完了すると、処理をステップＳ２１０に進める。
【０１３１】
［ステップＳ２１０］レコード変換プログラム生成部１５０は、ＣＯＢＯＬソースファイル６７に後始末処理を追加する。
このような手順で生成したＣＯＢＯＬソースファイル６７をコンパイルすることで、実行形式のレコード変換プログラムが生成される。
【０１３２】
図２７は、抽出レコード定義処理の手順の一例を示すフローチャートである。以下、図２７に示す処理をステップ番号に沿って説明する。
［ステップＳ２２１］レコード変換プログラム生成部１５０は、処理対象の項目名に装飾語（ＯＦ／ＩＮ〜）が含まれるか否かを判断する。装飾語が含まれる場合、処理がステップＳ２２２に進められる。装飾語が含まれない場合、処理がステップＳ２２３に進められる。
【０１３３】
［ステップＳ２２２］レコード変換プログラム生成部１５０は、処理対象の項目名を装飾する上位要素を、親要素としてＣＯＢＯＬソースファイル６７に追加する。図１８に示した例では、レコード参照情報８４ａ内の装飾語が付与された項目名「年 OF 売上日付」に基づいて、子要素「年」の上位項目「売上日付」に対応する抽出レコード定義「02  C-売上日付」が、レコード変換プログラム６４に追加されている。
【０１３４】
［ステップＳ２２３］レコード変換プログラム生成部１５０は、処理対象の項目名が、部分参照の記述を含むか否かを判断する。部分参照の記述が含まれる場合、処理がステップＳ２２４に進められる。部分参照の記述が含まれない場合、処理がステップＳ２２５に進められる。
【０１３５】
［ステップＳ２２４］レコード変換プログラム生成部１５０は、処理対象の項目名に対応する抽出レコード定義を、ＣＯＢＯＬソースファイル６７に追加する。この際、抽出レコード定義に設定する項目型は、レコード定義から転記される。項目長は、部分参照の記述に含まれる項目長が転記される。また部分参照の記述に対応する抽出レコード定義の名前は、「C-項目名Ｎ」である。ここで、Ｎは、部分参照の記述に対応する抽出レコード定義を識別するための、１以上の整数である。図２０に示した例では、レコード参照情報８５ａ内に、部分参照の記述が付与された項目名「データ(1:5)」がある。この項目名「データ(1:5)」における部分参照の記述は、識別番号「１」に置き換えられ、抽出レコード定義「02 C-データ1 PIC X(5)」が、レコード変換プログラム６５ａに追加されている。その後、処理対象の項目名に対する抽出レコード定義処理が終了する。
【０１３６】
［ステップＳ２２５］レコード変換プログラム生成部１５０は、処理対象の項目名がＯＣＣＵＲＳの特定要素の参照の記述を含むか否かを判断する。ＯＣＣＵＲＳの特定要素の参照の記述を含む場合、処理がステップＳ２２６に進められる。ＯＣＣＵＲＳの特定要素の参照の記述を含まない場合、処理がステップＳ２２７に進められる。
【０１３７】
［ステップＳ２２６］レコード変換プログラム生成部１５０は、処理対象の項目名に対応する抽出レコード定義を、ＣＯＢＯＬソースファイル６７に追加する。この際、レコード変換プログラム生成部１５０は、レコード定義から、該当する項目名の属性を転記し、項目名の前に「C-」の文字列を追加した情報を、抽出レコード定義として、ＣＯＢＯＬソースファイル６７に追加する。またレコード変換プログラム生成部１５０は、追加した抽出レコード定義の項目名の末尾に、ＯＣＣＵＲＳ参照要素番号を追記する。その後、処理対象の項目名に対する抽出レコード定義処理が終了する。図２２の例では、レコード参照情報８６ａ内の項目名「テーブル(5) 」に基づいて、ＯＣＣＵＲＳ参照要素番号を含む抽出レコード定義「02 C-テーブル5 」が、レコード変換プログラム６６ａに追加されている。
【０１３８】
なお、処理対象の項目名が集団項目の項目名の場合、レコード変換プログラム生成部１５０は、子要素に対応する抽出レコード定義についても、ＣＯＢＯＬソースファイル６７に追加する。図２２の例では、集団項目の項目名「テーブル」に基づいて、子要素である「日付」、「情報」に対応する抽出レコード定義についても、レコード変換プログラム６６ａに追加されている。
【０１３９】
ステップＳ２２６の処理後、処理対象の項目名に対する抽出レコード定義処理が終了する。
［ステップＳ２２７］レコード変換プログラム生成部１５０は、処理対象の項目名に対応する抽出レコード定義を、ＣＯＢＯＬソースファイル６７に追加する。例えばレコード変換プログラム生成部１５０は、レコード定義から、該当する項目名の属性を転記し、項目名の前に「C-」の文字列を追加した情報を、抽出レコード定義として、ＣＯＢＯＬソースファイル６７に追加する。図６の例において、処理対象の項目名が「ID」の場合、「02 C-ID PIC X(3)」という抽出レコード定義が追加される。
【０１４０】
また、処理対象の項目名に装飾語が付与されている場合、装飾語の記述を除いた項目名が、抽出レコード定義に含められる。図１８の例では、レコード参照情報８４ａ内の装飾語が付与された項目名「年 OF 売上日付」に基づいて、装飾語「OF 売上日付」を除いた項目名「年」を用いた抽出レコード定義「03 C-年 PIC 9(4)」が、レコード変換プログラム６４に追加されている。
【０１４１】
このようにして、レコード変換プログラムが生成される。
ダミー挿入プログラムは、レコード変換プログラム生成処理とほぼ同じ処理によって生成することができる。ダミー挿入プログラム生成処理の、レコード変換プログラム生成処理との相違点は、ステップＳ２０８の処理である。ダミー挿入プログラム生成処理では、追加される変換ＭＯＶＥ文の記述が「MOVE C-項目名 TO 項目名」となる。
【０１４２】
生成されたレコード変換プログラムとダミー挿入プログラムを用いて、分散処理による業務処理を実行することで、図９〜図１１に示したように、データ転送量が削減される。その結果、業務処理の効率化が図られる。
【０１４３】
［その他の実施の形態］
第２の実施の形態では、ソースファイルがＣＯＢＯＬのコードで記述されている場合の例であるが、他の言語で記述されたソースファイルであっても、同様の処理を適用可能である。例えば、Ｊａｖａ（登録商標）によるＣＳＶファイルの解析を考える。
【０１４４】
図２８は、ＣＳＶファイルを解析する業務処理の例を示す図である。図２８に示すように、ＣＳＶファイルの場合であっても、業務処理で使用していないデータ（例では１，２，４，５カラム目）を送らないことでデータ転送量が軽減できる。
【０１４５】
この場合、業務処理プログラムとして、ＣＳＶファイルを解析して売上を集計するプログラムが用いられる。
図２９は、ＣＳＶファイルを解析するプログラムのソースファイルの一例を示す図である。図２９には、業務処理プログラムがＪａｖａ（登録商標）のコードで記述されたソースファイル５７が示されている。このようなソースコードの場合において参照対象の項目を抽出する手順を、以下に示す。
【０１４６】
まずレコード変換プログラム生成部１５０は、入力ファイル(input.csv)を読み込む処理が記述された命令文（命令１）を、ソースファイル５７から抽出する。そしてレコード変換プログラム生成部１５０は、入力ファイルが関連付けられたReader変数(br)を記録する。
【０１４７】
次にレコード変換プログラム生成部１５０は、記録されたReaderからデータを読み込む処理(br.readLine)が記述された命令文（命令２）を、ソースファイル５７から抽出する。そしてレコード変換プログラム生成部１５０は、抽出した命令における転記先変数(line)を記録する。
【０１４８】
次にレコード変換プログラム生成部１５０は、転記先変数をＣＳＶカラムごとに分解する処理(line.split)が記述された命令文（命令３）を、ソースファイル５７から抽出する。そしてレコード変換プログラム生成部１５０は、その命令文における格納先変数(row)を記録する。
【０１４９】
次にレコード変換プログラム生成部１５０は、格納先変数を参照している処理(row[])が記述された命令文（命令４、命令５）を、ソースファイル５７から抽出し、何カラム目のレコードが参照されているかを記録する。このようにして、参照されている項目が特定できる。
【０１５０】
なお、図２９に示すソースファイル５７は一例であり、命令１〜５の各処理には複数の書き方が存在する。ソースファイル５７を解析する際には、命令１〜５それぞれの書き方を考慮して解析すればよい。
【０１５１】
このようにソースファイル５７を解析することで、ＣＯＢＯＬ以外の言語であっても、業務処理のソースファイルに基づいて、レコード変換プログラムとダミー挿入プログラムとを作成することができる。
【０１５２】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１５３】
１〜３  サーバ
５  ソースファイル
６  項目名一覧
７  削除プログラム
８  挿入プログラム
９  レコード群
１０  分散処理管理装置
１１  記憶手段
１２  抽出手段
１３  削除プログラム生成手段
１４  挿入プログラム生成手段
１５  制御手段
【図１】
2018018323.tif 000003
【図２】
2018018323.tif 000004
【図３】
2018018323.tif 000005
【図４】
2018018323.tif 000006
【図５】
2018018323.tif 000007
【図６】
2018018323.tif 000008
【図７】
2018018323.tif 000009
【図８】
2018018323.tif 000010
【図９】
2018018323.tif 000011
【図１０】
2018018323.tif 000012
【図１１】
2018018323.tif 000013
【図１２】
2018018323.tif 000014
【図１３】
2018018323.tif 000015
【図１４】
2018018323.tif 000016
【図１５】
2018018323.tif 000017
【図１６】
2018018323.tif 000018
【図１７】
2018018323.tif 000019
【図１８】
2018018323.tif 000020
【図１９】
2018018323.tif 000021
【図２０】
2018018323.tif 000022
【図２１】
2018018323.tif 000023
【図２２】
2018018323.tif 000024
【図２３】
2018018323.tif 000025
【図２４】
2018018323.tif 000026
【図２５】
2018018323.tif 000027
【図２６】
2018018323.tif 000028
【図２７】
2018018323.tif 000029
【図２８】
2018018323.tif 000030
【図２９】
2018018323.tif 000031