(57)【要約】【課題】拡張書式を含む、デリミタで区切られたテキストファイルの読み込みを並列処理で実行することを課題とする。【解決手段】情報処理装置は、複数のプロセスにより、デリミタにより区切られたテキストファイルを分割した複数の分割ファイルそれぞれに対して、拡張書式が有効である場合と無効である場合の双方の場合における、レコード区切り候補を特定する。情報処理装置は、複数の分割ファイルを、先頭部分からの順番に対応した順序で、拡張書式が有効である場合か、無効である場合かの状態をそれぞれ確定することにより、テキストファイルのレコード区切りを確定させる。【選択図】図７
2018132948.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のプロセスにより、デリミタにより区切られたテキストファイルを分割した複数の分割ファイルそれぞれに対して、拡張書式が有効である場合と無効である場合の双方の場合における、レコード区切り候補を特定し、
前記複数の分割ファイルを、先頭部分からの順番に対応した順序で、前記拡張書式が有効である場合か、無効である場合かの状態をそれぞれ確定することにより、前記テキストファイルのレコード区切りを確定させる、
処理を実行する読込プログラム。
【請求項２】
前記複数の分割ファイルそれぞれのサイズは、前記複数のプロセスが動作する前記コンピュータのファイルキャッシュよりも小さいサイズであり、
確定したレコード区切りを記憶領域に蓄積し、
蓄積された前記レコード区切りに基づき、前記複数のプロセスがレコードを読み込む処理を前記コンピュータに実行することを特徴とする請求項１に記載の読込プログラム。
【請求項３】
前記拡張書式は、前記テキストファイルにおいて、改行コードをデータの一部として扱うことを表現する囲み文字であることを特徴とする請求項１または２に記載の読込プログラム。
【請求項４】
前記拡張書式は、ダブルコーテーションであり、前記デリミタは、カンマ区切りであることを特徴とする請求項１または２に記載の読込プログラム。
【請求項５】
コンピュータが、
複数のプロセスにより、デリミタにより区切られたテキストファイルを分割した複数の分割ファイルそれぞれに対して、拡張書式が有効である場合と無効である場合の双方の場合における、レコード区切り候補を特定し、
前記複数の分割ファイルを、先頭部分からの順番に対応した順序で、前記拡張書式が有効である場合か、無効である場合かの状態をそれぞれ確定することにより、前記テキストファイルのレコード区切りを確定させる、
処理を実行する読込方法。
【請求項６】
複数のプロセスにより、デリミタにより区切られたテキストファイルを分割した複数の分割ファイルそれぞれに対して、拡張書式が有効である場合と無効である場合の双方の場合における、レコード区切り候補を特定する特定部と、
前記複数の分割ファイルを、先頭部分からの順番に対応した順序で、前記拡張書式が有効である場合か、無効である場合かの状態をそれぞれ確定することにより、前記テキストファイルのレコード区切りを確定させる確定部と
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、読込プログラム、読込方法および情報処理装置に関する。
【背景技術】
【０００２】
従来から、内部に格納されているデータから該当データを検索し、利用者により指定された演算を行うＤＢＭＳ（DataBase  Management  System）が利用されている。ＤＢＭＳでは、データを格納するために、他のシステムから送信されたファイルからデータを抜き出して格納するデータロード機能（以降では、単にローダと記載する場合がある）を実行する。ローダは、他のシステムからファイルで一括にデータを移送することから、シーケンシャル入出力処理、パイプライン処理、同時実行処理、並列処理などを用いることで、処理速度を高速化する。
【０００３】
以前のコンピュータ資源では、並列処理を用いたファイルの並列読み込みは、利用者の運用設計によりファイルの分割が行われた上で実行される。現在のコンピュータ資源は、従来のコンピュータ資源に比べて、コア数やメモリ（ＲＡＭ：Random  Access  Memory）の容量が増加していることから、単一の容量の大きいファイルを転送して一気にＤＢＭＳに格納することが行われる。このように、現在のコンピュータ資源では、ファイル転送されたファイルをファイルキャッシュであるＲＡＭに格納できるので、ランダムアクセスによるボトルネックが少ない。
【０００４】
このため、近年では、利用者がファイルを分割することなく、ファイルからのデータ入力を並列化して実行することが行われている。具体的には、現在使用されるコンピュータは、任意の並列度分の処理単位により、ファイル転送されてＲＡＭに格納される一つのファイルを分割して、データ読み出しを実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１１６３９５号公報
【特許文献２】特開２０１５−１７０１７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、拡張書式を含む、デリミタで区切られたテキストファイルの読み込みを並列処理で実行すると、処理性能が低下する。
【０００７】
一般的に、ロードの入力ファイルは、システム間でのデータ連携となることから、各項目をカンマなどの区切り文字で区切るとともに一行の末端を改行コードで表すＣＳＶ（Comma−Separated  Values）形式であることが多い。そして、ＣＳＶファイルを並列処理で読み込む場合、区切り文字の認識を確定してから、並列処理を行うことになり、処理性能が区切り文字の認識によりボトルネックとなる。
【０００８】
一つの側面では、拡張書式を含む、デリミタで区切られたテキストファイルの読み込みを並列処理で実行できる読込プログラム、読込方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、読込プログラムは、コンピュータに、複数のプロセスにより、デリミタにより区切られたテキストファイルを分割した複数の分割ファイルそれぞれに対して、拡張書式が有効である場合と無効である場合の双方の場合における、レコード区切り候補を特定する処理を実行させる。読込プログラムは、コンピュータに、前記複数の分割ファイルを、先頭部分からの順番に対応した順序で、前記拡張書式が有効である場合か、無効である場合かの状態をそれぞれ確定することにより、前記テキストファイルのレコード区切りを確定させる処理を実行させる。
【発明の効果】
【００１０】
一実施形態によれば、拡張書式を含む、デリミタで区切られたテキストファイルの読み込みを並列処理で実行できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１にかかる読込処理を説明する図である。
【図２】図２は、実施例１にかかる情報処理装置の機能構成を示す機能ブロック図である。
【図３】図３は、入力されるＣＳＶファイルの一例を示す図である。
【図４】図４は、ブロック共有情報ＤＢに記憶される情報の例を示す図である。
【図５】図５は、解析の具体例を説明する図である。
【図６】図６は、ブロック共有情報の更新例を説明する図である。
【図７】図７は、ＣＳＶ解析の並列処理を説明する図である。
【図８】図８は、ＣＳＶファイルの解析処理の流れを示すフローチャートである。
【図９】図９は、探索処理の流れを示すフローチャートである。
【図１０】図１０は、更新・連携処理の流れを示すフローチャートである。
【図１１】図１１は、実施例２にかかる入力ファイルの割当てを説明する図である。
【図１２】図１２は、実施例２にかかるＣＳＶの解析手法を説明する図である。
【図１３】図１３は、実施例２にかかるブロック共有情報の更新例を説明する図である。
【図１４】図１４は、ハードウェア構成例を説明する図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する読込プログラム、読込方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例１】
【００１３】
［実施例１にかかる読込処理の説明］
実施例１にかかる情報処理装置１０は、複数のＣＰＵ（Central  Processing  Unit）を有し、並列処理を実行するサーバ装置の一例である。例えば、情報処理装置１０は、コンピュータ資源として、４８個以上のＣＰＵ、２５６ＧＢの容量を有するＲＡＭ、で乱アクセスに強い不揮発性メモリ型のディスクなどを有する。
【００１４】
このような情報処理装置１０は、複数のＣＰＵを用いて、他システムから入力されたファイルをＲＡＭに格納してＤＢ（データベース）へ転送する処理を並列に実行する。具体的には、情報処理装置１０は、データ入力処理を並列実行し、エンコード処理を並列実行し、テーブル生成処理を並列実行し、インデックス生成処理を並列実行して、ファイルをＤＢ（ＤＢＭＳ）へ書き込む。
【００１５】
例えば、データ入力処理は、ファイルからＤＢＭＳの１レコード分ずつデータを取り込む処理である。エンコード処理は、データの形をＤＢＭＳのレコード形式に変更する処理である。インデックス生成処理は、テーブルのレコードに対するインデックスを生成する処理であり、インデックスレコードの形式（キーとテーブル領域へのポインタ）への変換、インデックスレコードをキー順にソート、インデックス構成を生成してインデックス領域への書き込みなどを実行する。
【００１６】
そして、データ入力処理の実行に際して、情報処理装置１０は、１度目の並列読み込みによる解析でレコードの切れ目を特定し、この情報を元に、２度の並列読み込みでレコードを抽出してエンコード処理への転送を行う。
【００１７】
ここで、実施例１にかかる読込処理について説明する。図１は、実施例１にかかる読込処理を説明する図である。図１に示すように、情報処理装置１０は、入力ファイルをファイルキャッシュ（ＲＡＭ）に保存する。ここで、入力ファイルは、システム間でのデータ連携で頻繁に使用されるＣＳＶ形式とする。つまり、入力ファイルは、デリミタにより区切られたテキストファイルであり、言い換えると、各項目をカンマなどの区切り文字で区切り、一行の末端を改行コードで示す形式で作成されたファイルである。
【００１８】
そして、情報処理装置１０は、データ入力のプロセスであるプロセスＰ１、Ｐ２、Ｐ３を並列に実行する。具体的には、各プロセスＰ１からＰ３は、デリミタにより区切られたテキストファイルが分割された複数の分割ファイルそれぞれに対して、拡張書式が有効である場合と無効である場合の双方の場合における、レコード区切り候補を特定する。
【００１９】
続いて、各プロセスＰ１からＰ３は、自プロセスが対応する分割ファイルのテキストファイルを先頭部分からの順番に対応した順序で読み込む場合に、分割ファイルにおいて、拡張書式が有効である場合か、無効である場合かの状態を確定することにより、テキストファイルのレコード区切りを確定させる。
【００２０】
つまり、各プロセスＰ１からＰ３は、データの一部とみなす囲み文字の開始（ＯＮ）と仮定した状態と囲み文字の終了（ＯＦＦ）と仮定した状態の２つのパターンで、担当する分割ファイルから改行コードを検出し、レコードの跨り位置を推定してブロック解析情報として保持する。そして、各プロセスＰ１からＰ３は、先行する分割ファイルを担当する先行プロセスによる囲み文字状態の判定結果にしたがって、推定したレコードの跨り位置のいずれかを用いて、レコード範囲を確定する。
【００２１】
その後、各プロセスＰ１からＰ３は、決定したレコードの跨り位置にしたがって、分割ファイルからレコードを抽出して、エンコード処理を実行するプロセスＰＰ１、ＰＰ２、ＰＰ３に転送する。この結果、ＣＳＶの入力ファイルは、ＤＢＭＳ形式に変換されて、ＤＢへ格納される。
【００２２】
したがって、囲み文字で囲まれた中の改行コードと、一行の末端を改行コードとを区別して読み込むことができ、拡張書式を含む、デリミタで区切られたテキストファイルの読み込みを並列処理で実行できる
【００２３】
［機能構成］
図２は、実施例１にかかる情報処理装置の機能構成を示す機能ブロック図である。図２に示すように、情報処理装置１０は、通信部１１、第１記憶部１２、第２記憶部１４、第３記憶部１６、制御部２０を有する。
【００２４】
通信部１１は、他システムや他装置と情報処理装置１０との間の通信を制御する通信インタフェースである。例えば、通信部１１は、図示しない他システムからＣＳＶ形式の入力ファイルを受信して、第１記憶部１２に格納する。
【００２５】
第１記憶部１２は、ＣＳＶ形式の入力ファイル１３を記憶する記憶装置の一例であり、例えばＲＡＭ（ファイルキャッシュ）などである。図３は、入力されるＣＳＶファイル（入力ファイル）の一例を示す図である。図３に示すように、入力ファイル１３は、各項目をカンマなどの区切り文字で区切り、一行の末端を改行コードで示すデータ構造（ＣＳＶ）である。ここで、ダブルコーテーション「“」で囲まれた改行コード「＜ＣＲＬＦ＞」は、データの一部として扱われ、ダブルコーテーション「“」で囲まれていない「＜ＣＲＬＦ＞」は、レコード終端の改行コードを示す。
【００２６】
ここで、ＣＳＶファイルは、先頭から１バイトずつ参照していくと、ダブルコーテーション「“」が囲み文字の開始か終了か判断することができる。一方で、ＣＳＶ形式を複数の処理が同時に読込む場合、サイズによる平坦化を行うことが一般的である。この場合、改行コードを検索して論理的なレコードの切れ目から読みだすことをしないため、レコード途中から読み込みを開始する。すると、論理的なレコードが複数の処理に跨ることになり、以降のエンコード処理などレコード単位の処理ができなくなる。
【００２７】
つまり、並列処理の場合、必ずしもレコードの先頭から処理されるとは限らないことから、ダブルコーテーション「“」が囲み文字の開始か終了か判断できない。例えば、図３の３行目にある「ＨＩＭＥ」から読み込みを開始した場合、現在が囲み文字の範囲内か範囲外かを判断することができないので、次に登場する改行コード「＜ＣＲＬＦ＞」がレコードの終端を示す改行コードか、データとしての改行コードかを判断できない。本実施例では、囲み文字の範囲内か範囲外かを判断して、改行コード「＜ＣＲＬＦ＞」がレコードの終端を示す改行コードか、データとしての改行コードかを特定する。なお、ＣＳＶの仕様は、ＲＦＣ４１８０に準拠したものとする。
【００２８】
第２記憶部１４は、データＤＢ１５を記憶する記憶装置の一例であり、例えばハードディスクなどである。データＤＢ１５は、データをＤＢＭＳのレコード形式で記憶するデータベースである。具体的には、データＤＢ１５は、制御部２０から出力されたデータであって、ＣＳＶ形式の入力ファイルからＤＢＭＳのレコード形式に変換されたデータを記憶する。
【００２９】
第３記憶部１６は、ブロック共有情報１７を記憶する記憶装置の一例であり、第３記憶部１６のメモリ空間は、各入力部から共通で参照できる。ブロック共有情報１７は、後述する読込処理の解析結果を記憶する。図４は、ブロック共有情報１７に記憶される情報の例を示す図である。図４に示すように、ブロック共有情報１７は、「ブロックＮｏ、範囲終了時点の囲み状態（Ａ）、跨りレコードの開始位置（Ｂ）」を対応付けて記憶する。
【００３０】
ここで記憶される「ブロックＮｏ」は、ＣＳＶファイルのレコードのうち、データ入力プロセスに割当てられたブロックを識別する情報である。「範囲終了時点の囲み状態（Ａ）」は、ブロックＮｏで特定されるブロックが終了した時点で、囲み文字の範囲内である「ＯＮ」状態か、囲み文字の範囲外である「ＯＦＦ」状態かを特定する情報である。「跨りレコードの開始位置（Ｂ）」は、現在対象のブロックで検出される最後のレコードの開始位置を特定する情報であり、先頭からのバイト数である。図４の場合、ブロックＮｏ１は、囲み文字の範囲内（ＯＮ）の状態で終了し、最後のレコードが「９９８４バイト」から開始されることを示す。
【００３１】
制御部２０は、情報処理装置１０全体を司る処理部であり、例えばプロセッサなどである。制御部２０は、分割部２５、第１入力部３０、第２入力部４０、第３入力部５０、生成部６０を有する。なお、分割部２５、第１入力部３０、第２入力部４０、第３入力部５０、生成部６０は、プロセッサが実行するプロセスの一例である。
【００３２】
また、第１入力部３０、第２入力部４０、第３入力部５０のそれぞれは、上述したデータ入力のプロセスＰ１、Ｐ２、Ｐ３に対応する。また、生成部６０は、上述したエンコード処理のプロセスＰＰ１、ＰＰ２、ＰＰ３を含む。
【００３３】
分割部２５は、入力ファイル１３を分割して、処理対象のレコードを各入力部に割り振る処理部である。具体的には、分割部２５は、入力処理の並列数に応じて、入力ファイル１３を分割する。図２の例では、分割部２５は、入力ファイル１３を３つに分割し、第１入力部３０、第２入力部４０、第３入力部５０のそれぞれに各分割ファイルを割当てる。
【００３４】
第１入力部３０と第２入力部４０と第３入力部５０は、分割部２５によって割当てられた分割ファイルからＤＢＭＳの１レコード分ずつデータを取り込む処理部である。なお、第１入力部３０と第２入力部４０と第３入力部５０とは、同様の構成を有するので、ここでは、第１入力部３０について説明する。つまり、ローカルバッファ３１とローカルバッファ４１とローカルバッファ５１とは同様の機能を有し、解析部３２と解析部４２と解析部５２とは同様の機能を有し、確定部３３と確定部４３と確定部５３とは同様の機能を有する。
【００３５】
第１入力部３０は、ローカルバッファ３１、解析部３２、確定部３３を有し、割り振られたＣＳＶの分割ファイルを解析して、ＤＢＭＳの１レコード分ずつデータを取り込む処理部である。解析部３２は、特定部の一例であり、確定部３３は、確定部の一例である。
【００３６】
ローカルバッファ３１は、分割ファイルを記憶する記憶領域である。具体的には、ローカルバッファ３１は、プロセスのローカル領域であり、ファイルキャッシュとして機能する。そして、ローカルバッファ３１は、分割部２５によって分割された分割ファイルを保持する。
【００３７】
解析部３２は、囲み文字の開始状態がＯＦＦのパターンである場合と、ＯＮのパターンである場合との２つのパターンを想定し、両方のパターンでＣＳＶの解析を行う処理部である。具体的には、解析部３２は、囲み文字が「ＯＦＦ」の状態で読込が開始されたと想定した状態で、対象のレコードを１バイトずつ参照して、レコードの切れ目（ｂ１）を特定する。また、解析部３２は、囲み文字が「ＯＮ」の状態で読込が開始されたと想定した状態で、対象のレコードを１バイトずつ参照して、レコードの切れ目（ｂ２）を特定する。
【００３８】
ここで、図５を用いて解析手法を説明する。図５は、解析の具体例を説明する図である。図５に示す例では、第１入力部３０（Ｐ１）に、「ＥＨＩＭＥ＜ＣＲＬＦ＞ＷＡＫＡＹＡＭＡ“，ＭＩＫＡＮ＜ＣＲＬＦ＞」が割当てられたとする。
【００３９】
第１に、解析部３２は、囲み状態が「ＯＦＦ」と想定して解析を実行する。具体的には、図５の例１に示すように、解析部３２は、先頭の「Ｅ」から１バイトずつ参照し、はじめの「＜ＣＲＬＦ＞」が登場すると、囲み状態が「ＯＦＦ」であることから改行コードと判定する。続いて、解析部３２は、「“」が登場すると、現状の囲み状態が「ＯＦＦ」であることから囲み状態の開始を示すダブルコーテーションであると判定して、囲み状態を「ＯＮ」に変更する。引き続き、解析部３２は、次の「＜ＣＲＬＦ＞」が登場すると、現状の囲み状態が「ＯＮ」であることからデータと判定する。この結果、解析部３２は、囲み状態が「ＯＦＦ」と想定したときに、改行コード（ｂ１）となる最初の「＜ＣＲＬＦ＞」の１バイト後の位置情報（例えばバイト数）と、最終的な囲み状態「ａ１」＝「ＯＮ」とを収集する。すなわち、解析部３２は、囲み状態が「ＯＦＦ」の状態でプロセスが開始された（呼び出された）場合、最初の「＜ＣＲＬＦ＞」の１バイト後で改行されて、新たなレコードが始まると推定する。
【００４０】
第２に、解析部３２は、囲み状態が「ＯＮ」と想定して解析を実行する。具体的には、図５の例２に示すように、解析部３２は、先頭の「Ｅ」から１バイトずつ参照し、はじめの「＜ＣＲＬＦ＞」が登場すると、現状の囲み状態が「ＯＮ」であることからデータと判定する。続いて、解析部３２は、「“」が登場すると、現状の囲み状態が「ＯＮ」であることから囲み状態の終了を示すダブルコーテーションであると判定して、囲み状態を「ＯＦＦ」に変更する。引き続き、解析部３２は、次の「＜ＣＲＬＦ＞」が登場すると、現状の囲み状態が「ＯＦＦ」であることから改行コードと判定する。この結果、解析部３２は、囲み状態が「ＯＮ」と想定したときに、改行コード（ｂ２）となる最後の「＜ＣＲＬＦ＞」の１バイト後の位置情報（例えばバイト数）と、最終的な囲み状態「ａ２」＝「ＯＦＦ」とを収集する。すなわち、解析部３２は、囲み状態が「ＯＮ」の状態でプロセスが開始された場合、最後の「＜ＣＲＬＦ＞」の１バイト後で改行されて、新たなレコードが始まると推定する。
【００４１】
そして、解析部３２は、特定した（ａ１）と（ｂ１）、（ａ２）と（ｂ２）とを確定部３３に通知する。なお、ここでは、囲み状態が「ＯＦＦ」と「ＯＮ」のそれぞれで、対象レコードを１バイト参照する必要はなく、１回の参照で、１バイトずつ両方の判定を行う。つまり、対象レコードを２回参照する必要はなく、１回の参照で実行できる。
【００４２】
確定部３３は、解析部３２によって解析された情報のいずれを採用するかを確定する処理部である。具体的には、確定部３３は、解析部３２から通知された（ａ１）と（ｂ１）、（ａ２）と（ｂ２）を内部の記憶領域に保持する。そして、確定部３３は、先行ブロックの処理結果を取得する。その後、確定部３３は、先行ブロックが囲み状態「ＯＦＦ」で確定した場合は、（ａ１）と（ｂ１）を採用し、先行ブロックが囲み状態「ＯＮ」で確定した場合は、（ａ２）と（ｂ２）を採用する。
【００４３】
ここで、確定部３３が、情報の確定に伴って、後述するブロックを処理するプロセスへの通知を行う例を説明する。図６は、ブロック共有情報の更新例を説明する図である。図６では、２番目のブロック（分割ファイル）が割当てられたプロセスの例を図示している。
【００４４】
図６に示すように、確定部３３は、処理対象のブロックＮｏ＝（２）に対応付けて、確定部３３が取得した「範囲開始点の囲み状態がＯＦＦの場合」と「範囲開始点の囲み状態がＯＮの場合」とを管理する。具体的には、確定部３３は、「範囲開始点の囲み状態がＯＦＦの場合」として「（ａ１）＝（ＯＮ）、（ｂ１）＝１９８８５（ｂｙｔｅ）」を保持し、「範囲開始点の囲み状態がＯＮの場合」として「（ａ２）＝（ＯＦＦ）、（ｂ２）＝１９２２５（ｂｙｔｅ）」を保持する。その後、確定部３３は、ブロック共有情報１７を監視し、先行するブロックＮｏ＝１（以降では単にブロック１と記載する場合がある）を処理するプロセスによって、ブロック１のブロック共有情報が格納されると、採用する情報を特定する。
【００４５】
図６では、確定部３３は、ブロック共有情報１７を参照することで、ブロック１に対応付けて「範囲終了時点の囲み状態（Ａ）＝ＯＮ」が登録されたことを検出し、自身が対象とするブロック２が「ＯＮ」状態で開始されると判定する。この結果、確定部３３は、「範囲開始点の囲み状態がＯＮの場合」に対応付けられる「（ａ２）＝（ＯＦＦ）、（ｂ２）＝１９２２５（ｂｙｔｅ）」を採用する。そして、確定部３３は、「範囲開始点の囲み状態がＯＦＦの場合」に対応付けられる「（ａ１）＝（ＯＮ）、（ｂ１）＝１９８８５（ｂｙｔｅ）」を破棄する。
【００４６】
そして、確定部３３は、「ブロックＮｏ＝２」と「範囲終了時点の囲み状態（Ａ）＝ＯＦＦ」と「跨りレコードの開始位置（Ｂ）＝１９２２５（ｂｙｔｅ）」とを対応付けて、ブロック共有情報１７に追加する。この結果、ブロック３を担当するプロセスは、自身が対象とするブロック３が「ＯＦＦ」状態で開始されると判定することができる。
【００４７】
また、確定部３３は、確定した情報にしたがって、レコードをローカルバッファ３１から読み出して、生成部６０に出力する。例えば、図６の例では、確定部３３は、再度、ブロック１の跨りレコードの開始位置（Ｂ）である９９８４バイト目から１９２２４バイト目まで１バイトずつ参照して、レコードの区切りを特定する。そして、確定部３３は、９９８４バイト目から１９２２４バイト目までに存在する各レコードを特定して、生成部６０に出力する。なお、プロセスを跨るレコードについては、後続のブロックを処理するプロセスの処理対象とする。例えば、ブロック１とブロック２を跨るレコードについては、ブロック２を処理するプロセスがレコードの転送を実行する。
【００４８】
生成部６０は、確定部３３から入力されたレコードに対して、エンコード処理やインデックス生成処理などを実行する処理部である。そして、生成部６０は、これらの処理を実行することにより、ファイルからＤＢＭＳの１レコード分ずつデータを取り込んで、データＤＢ１５に格納する。
【００４９】
［データ入力（ＣＳＶ分析）の並列処理］
ここで、第１入力部３０と第２入力部４０と第３入力部５０とによる並列処理について説明する。図７は、ＣＳＶ解析の並列処理を説明する図である。図７に示すように、分割部２５によって、入力のＣＳＶファイルがブロック１、ブロック２、ブロック３に分割される。そして、第１入力部３０（プロセスＰ１）にブロック１が割り振られ、第２入力部４０（プロセスＰ２）にブロック２が割り振られ、第３入力部５０（プロセスＰ３）にブロック３が割り振られる。
【００５０】
そして、プロセスＰ１、Ｐ２、Ｐ３は、ブロックの読み込み（Ｒｅａｄ処理）とＣＳＶ解析とを並行して実行する（図７の（１））。具体的には、プロセスＰ１は、先頭のブロック１が割り振られているので、囲み状態が「ＯＦＦ」で呼び出されたときだけを想定して、（ａ１）および（ｂ１）の情報を収集する。プロセス２は、囲み状態が「ＯＦＦ」で呼び出されたことを想定して、（ａ１）および（ｂ１）の情報を収集するとともに、囲み状態が「ＯＮ」で呼び出されたことを想定して、（ａ２）および（ｂ２）の情報を収集する。プロセス３は、囲み状態が「ＯＦＦ」で呼び出されたことを想定して、（ａ１）および（ｂ１）の情報を収集するとともに、囲み状態が「ＯＮ」で呼び出されたことを想定して、（ａ２）および（ｂ２）の情報を収集する。
【００５１】
その後、プロセスＰ２およびプロセスＰ３は、先行ブロックを処理するプロセスのＣＳＶ解析結果を確認して、正しい囲み状態の開始状態を特定する（図７の（２））。具体的には、プロセスＰ２は、プロセスＰ１の最終的な囲み状態の判定結果が「ＯＮ」か「ＯＦＦ」によって、（ａ１）または（ａ２）のいずれかを選択し、（ｂ１）または（ｂ２）のいずれかを選択する。同様に、プロセスＰ３は、プロセスＰ２の最終的な囲み状態の判定結果が「ＯＮ」か「ＯＦＦ」によって、（ａ１）または（ａ２）のいずれかを選択し、（ｂ１）または（ｂ２）のいずれかを選択する。
【００５２】
その後、各プロセスは、囲み状態「（ａ１）または（ａ２）」および跨りレコードの開始位置「（ｂ１）または（ｂ２）」が確定すると、分割ファイルからレコードを読み出して、後続のプロセスに出力する（図７の（３））。例えば、プロセス１は、ブロック１の先頭から（ｂ１）の位置までを再度参照して、ブロック１内の各レコードの範囲を特定しつつ、特定した各レコードをエンコードＰＰ１に出力する。
【００５３】
同様に、プロセス２は、プロセス１が収集した（ｂ１）から、確定させた（ｂ１またはｂ２）の位置までを再度参照して、ブロック２内の各レコードの範囲を特定しつつ、特定した各レコードをエンコードＰＰ２に出力する。同様に、プロセス３は、プロセス２が採用した（ｂ１またはｂ２）から、確定させた（ｂ１またはｂ２）の位置までを再度参照して、ブロック３内のレコードの範囲を特定しつつ、特定した各レコードをエンコードＰＰ３に出力する。なお、ブロック１とブロック２を跨るレコードは、プロセス２が処理し、ブロック２とブロック３を跨るレコードは、プロセス３が処理する。
【００５４】
このようにして、各プロセスによるＣＳＶ解析とレコード読み込みとが並列に実行されて、ＤＢＭＳへデータが格納される。
【００５５】
［処理の流れ］
次に、上述したＣＳＶファイルの解析処理について説明する。ここでは、一例として、第１入力部３０、第２入力部４０、第３入力部５０をまとめてデータ入力部７０として説明する。
【００５６】
図８は、ＣＳＶファイルの解析処理の流れを示すフローチャートである。図８に示すように、分割部２５は、処理開始が指示されると（Ｓ１０１：Ｙｅｓ）、各プロセスの担当範囲を決定する（Ｓ１０２）。具体的には、分割部２５は、入力ファイルであるＣＳＶファイルをプロセスの数に分解し、ブロック番号やサイズ／ファイルオフセットなどを取得して保持する。
【００５７】
続いて、データ入力部７０は、ブロック解析情報を初期化する（Ｓ１０３）。すなわち、データ入力部７０は、ａ１＝ＯＦＦ、ｂ１＝０、ａ２＝ＯＮ、ｂ２＝０とする。
【００５８】
そして、データ入力部７０は、分割されたファイル（分割ファイル）の所定サイズ分をローカルバッファに読み込む（Ｓ１０４）。続いて、データ入力部７０は、読み込んだファイルサイズ（読込量）が０または読み込んだファイルが分割ファイルの終端ではない場合（Ｓ１０５：Ｎｏ）、囲み状態およびレコード跨り位置の検出を行う探索処理を実行する（Ｓ１０６）。
【００５９】
その後、データ入力部７０は、担当領域に残領域がある場合（Ｓ１０７：Ｙｅｓ）、Ｓ１０４以降を繰り返す。例えば、データ入力部７０は、分割ファイルに未処理の領域が存在する場合、未処理の領域をローカルバッファに読み込んで以降の処理を実行する。
【００６０】
一方、データ入力部７０は、担当領域に残領域がない場合（Ｓ１０７：Ｎｏ）、囲み状態およびレコード跨り位置を特定する更新・連携処理を実行する（Ｓ１０８）。
【００６１】
そして、更新・連携処理が終了すると、データ入力部７０は、Ｓ１０４と同様、分割ファイルをローカルバッファに読み込み（Ｓ１０９）、特定された囲み状態およびレコード跨り位置にしたがって、分割ファイルを１バイトずつ参照してレコードを特定し、ローカルバッファからレコードを取り出す（Ｓ１１０）。
【００６２】
その後、データ入力部７０は、担当領域に読込対象のレコードが残っている場合（Ｓ１１１：Ｙｅｓ）、Ｓ１１０以降を繰り返す。一方、データ入力部７０は、担当領域に読込対象のレコードが残っていない場合（Ｓ１１１：Ｎｏ）、プロセスを管理するプロセス管理キューから自プロセスを削除し、先頭のプロセスを呼び出す（Ｓ１１２）。
【００６３】
なお、Ｓ１０５において、データ入力部７０は、読み込んだファイルサイズ（読込量）が０かつ読み込んだファイルが分割ファイルの終端である場合（Ｓ１０５：Ｙｅｓ）、Ｓ１１２を実行する。
【００６４】
（探索処理の流れ）
次に、図８のＳ１０６に該当する探索処理について説明する。図９は、探索処理の流れを示すフローチャートである。図９に示すように、データ入力部７０は、探索位置をバッファ先頭に位置づけ（Ｓ２０１）、位置づけたバイトを参照して、囲み文字か否かを判定する（Ｓ２０２）。
【００６５】
そして、データ入力部７０は、参照したバイトが囲み文字である場合（Ｓ２０２：Ｙｅｓ）、ブロック解析情報の囲み文字の状態（ａ１またはａ２）を更新する（Ｓ２０３）。具体的には、データ入力部７０は、囲み文字が「ＯＮ」で呼ばれたときと「ＯＦＦ」で呼ばれたときを想定してａ１とａ２を更新する。例えば、データ入力部７０は、現在のａ１がＯＦＦの場合、ａ１にＯＮを設定し、現在のａ１がＯＮの場合、ａ１にＯＦＦを設定する。同様に、データ入力部７０は、現在のａ２がＯＦＦの場合、ａ２にＯＮを設定し、現在のａ２がＯＦＦの場合、ａ２にＯＮを設定する。
【００６６】
その後、Ｓ２０２において参照したバイトが囲み文字ではない場合（Ｓ２０２：Ｎｏ）またはＳ２０３の処理が終了した場合、データ入力部７０は、参照したバイトが改行文字か否かを判定する（Ｓ２０４）。
【００６７】
そして、データ入力部７０は、参照したバイトが改行文字であり（Ｓ２０４：Ｙｅｓ）、囲み文字の状態ａ１がＯＦＦである場合（Ｓ２０５：Ｙｅｓ）、ブロック解析情報の跨りレコードの開始位置「ｂ１」に「現オフセット＋１」を設定する（Ｓ２０６）。
【００６８】
一方、データ入力部７０は、参照したバイトが改行文字であり（Ｓ２０４：Ｙｅｓ）、囲み文字の状態ａ１がＯＮであり（Ｓ２０５：Ｎｏ）、囲み文字の状態ａ２がＯＦＦである場合（Ｓ２０７：Ｙｅｓ）、ブロック解析情報の跨りレコードの開始位置「ｂ２」に「現オフセット＋１」を設定する（Ｓ２０８）。
【００６９】
その後、データ入力部７０は、探索位置を１バイト進めて（Ｓ２０９）、進めた位置が読み込んだデータ範囲を越えない場合（Ｓ２１０：Ｎｏ）、Ｓ２０２以降を繰り返す。一方、データ入力部７０は、探索位置を１バイト進めて（Ｓ２０９）、進めた位置が読み込んだデータ範囲を超える場合（Ｓ２１０：Ｙｅｓ）、処理を終了する。
【００７０】
一方、Ｓ２０４において、データ入力部７０は、参照したバイトが改行文字ではない場合（Ｓ２０４：Ｎｏ）、Ｓ２０９以降を実行する。なお、データ入力部７０は、Ｓ２０７において、囲み文字の状態ａ２がＯＦＦでもない場合（Ｓ２０７：Ｎｏ）、Ｓ２０９以降を実行する。
【００７１】
（更新・連携処理の流れ）
次に、図８のＳ１０８に該当する更新・連携処理について説明する。図１０は、更新・連携処理の流れを示すフローチャートである。図１０に示すように、データ入力部７０は、プロセス管理キューの先頭であり、自プロセスの処理順番となった場合（Ｓ３０１：Ｙｅｓ）、ブロック共有情報１７の前ブロックの範囲終了時点の囲み情報（Ａ）を取得する（Ｓ３０２）。
【００７２】
そして、データ入力部７０は、前ブロックの範囲終了時点の囲み情報（Ａ）がＯＦＦである場合（Ｓ３０３：Ｙｅｓ）、担当のブロックＮｏに対応付けて、範囲終了時点の囲み情報（Ａ）にａ１および跨りレコードの開始位置（Ｂ）にｂ１を設定したレコードを、ブロック共有情報１７に追記する（Ｓ３０４）。
【００７３】
一方、データ入力部７０は、前ブロックの範囲終了時点の囲み情報（Ａ）がＯＦＦではなくＯＮである場合（Ｓ３０３：Ｎｏ、Ｓ３０５：Ｙｅｓ）、担当のブロックＮｏに対応付けて、範囲終了時点の囲み情報（Ａ）にａ２および跨りレコードの開始位置（Ｂ）にｂ２を設定したレコードを、ブロック共有情報１７に追記する（Ｓ３０６）。その後、データ入力部７０は、自身をプロセス管理キューの最後に移動させて、新たに先頭になったプロセスを呼び出す（Ｓ３０７）。
【００７４】
なお、データ入力部７０は、前ブロックの範囲終了時点の囲み情報（Ａ）がＯＦＦでもＯＮでもない場合（Ｓ３０３：Ｎｏ、Ｓ３０５：Ｎｏ）、処理を終了する。また、データ入力部７０は、自プロセスの処理順番ではない場合（Ｓ３０１：Ｎｏ）、先行ブロックを処理するプロセスから呼び出されるまで待機する（Ｓ３０８）。
【００７５】
［効果］
上述したように、情報処理装置１０は、１度目の並列読み込みでは、読み込み開始地点における、囲み文字の状態がＯＮとＯＦＦの両方のパターンがあると想定してＣＳＶ解析を行う。ＣＳＶファイルの全ての領域を解析後、後続ブロックを処理するプロセスが、先行ブロックを処理するプロセスの解析完了後の情報を参照する。この情報により、各プロセスは、自担当部分が囲み文字のＯＮまたはＯＦＦのどちらで始まったかを判定し、自身の解析結果に照らし合わせて、終端となる改行コードの位置を決定できる。各プロセスは、２度目の並列読み込みにより、レコードの先頭から読み込みとエンコード部への転送を開始することができる。なお、２度目に読み込む順番は、先頭からの順番に限らず、先頭部分からの順番に対応した順序であればよく、先行ブロックが確定すれば、後続ブロックの読み込みが開始できる。
【００７６】
したがって、情報処理装置１０は、１ファイルの並列読み込みと、並列での終端解析処理を実施できるので、１ファイルであってもローダ処理の並列化を実現できる。また、事前にファイルキャッシュに載らないほど大きいファイルであっても、各プロセスの１度目の読み込みとＣＳＶ解析で範囲を限定することで、２度目の読み込み時には確実にファイルキャッシュを活用できる。
【実施例２】
【００７７】
ところで、実施例１では、プロセス（データ入力部）の数に応じて入力ファイルを分割する例を説明したが、これに限定されるものではない。例えば、各プロセスのファイルキャッシュであるローカルフォルダの大きさにあわせて分割することもできる。
【００７８】
実施例１の場合、割り振られた分割ファイルがファイルキャッシュよりも大きい場合、ＣＳＶ分析を行うために、複数回の入出力を実行することになる。そこで、実施例２では、入力ファイルをファイルキャッシュの大きさにあわせて分割することで、入出力の回数を削減して、並列処理を高速化する例を説明する。
【００７９】
［割当て制御］
図１１は、実施例２にかかる入力ファイルの割当てを説明する図である。図１１の例では、ファイルキャッシュが１ＭＢの例で説明する。この場合、分割部２５は、入力ファイルを１ＭＢずつ分割し、ｎ個の分割ファイルを生成する。そして、分割部２５は、ブロック１をプロセスＰ１に割当て、ブロック２をプロセスＰ２に割当て、ブロック３をプロセスＰ３に割当てる。
【００８０】
その後、プロセスＰ１は、ブロック１に対してのＣＳＶ解析が終了すると、プロセス管理キューの最後に移動してプロセスＰ２を呼び出して、ａ１等の確定を実行させる。その一方で、プロセスＰ１は、ブロック４を読み込んでＣＳＶ解析を実行する。
【００８１】
このように、プロセスＰ１、Ｐ２、Ｐ３の順にブロックｎまで順次割当てて実行することもでき、ａ１等の推定が完了したプロセスから順に残りのブロックを割当てることもできる。
【００８２】
［並列処理］
次に、各プロセス（第１入力部３０と第２入力部４０と第３入力部５０）による並列処理について説明する。図１２は、実施例２にかかるＣＳＶの解析手法を説明する図である。図１２に示すように、分割部２５は、入力ファイルであるＣＳＶファイルを１ＭＢずつ分割する。そして、分割部２５は、第１入力部３０（プロセスＰ１）にブロック１を割り振り、第２入力部４０（プロセスＰ２）にブロック２を割り振り、第３入力部５０（プロセスＰ３）にブロック３を割り振る。
【００８３】
その後、各プロセスは、実施例１と同様、ブロックの読み込み（Ｒｅａｄ処理）とＣＳＶ解析とを並行して実行する（図１２の（１））。続いて、各プロセスは、先行ブロックを処理するプロセスのＣＳＶ解析結果を確認して、正しい囲み状態の開始状態を特定する（図１２の（２））。その後、各プロセスは、囲み状態および跨りレコードの開始位置が確定すると、分割ファイルからレコードを読み出して、後続のプロセスに出力する（図１２の（３））。
【００８４】
ここで、実施例１と異なる点は、実施例１では、ＣＳＶ解析において、ブロック内で登場するレコードのうち、次のブロックとの境界となる最後のレコードの開始位置（跨りレコードの開始位置）を取得したが、実施例２では、ブロック内で登場する全レコードの開始位置を取得する。つまり、実施例２では、ブロック内で、囲み文字がＯＦＦのときの全「ＣＲＬＦ＞」を検出する。実施例１では、分割ファイルが非常に大きくなることがあり、全レコードの開始位置を取得するだけで処理遅延を招く危険性があるが、実施例２では、分割ファイルのサイズが１ＭＢと比較的小さなファイルであることから、処理遅延の危険性も少ない。
【００８５】
具体的には、プロセスＰ１は、先頭のブロック１が割り振られているので、囲み状態が「ＯＦＦ」で呼び出されたときだけを想定して、範囲終了時点の囲み状態（ａ１）を取得するとともに、ブロック１内に登場する各レコードの開始位置（ｂ１＋）を収集する。その後、プロセスＰ１は、ブロック４を読み込んで同様の処理を実行する。なお、この時は、プロセスＰ１は、囲み状態が「ＯＦＦ」で呼び出されたときと、「ＯＮ」で呼び出されたときとを想定して解析する。
【００８６】
プロセス２は、囲み状態が「ＯＦＦ」で呼び出されたことを想定して、範囲終了時点の囲み状態（ａ１）およびブロック２内の全レコードの開始位置（ｂ１＋）の情報を収集するとともに、囲み状態が「ＯＮ」で呼び出されたことを想定して、範囲終了時点の囲み状態（ａ２）および（ｂ２＋）の情報を収集する。その後、プロセスＰ２は、ブロック５を読み込んで同様の処理を実行する。
【００８７】
プロセス３は、囲み状態が「ＯＦＦ」で呼び出されたことを想定して、範囲終了時点の囲み状態（ａ１）およびブロック３内の全レコードの開始位置（ｂ１＋）の情報を収集するとともに、囲み状態が「ＯＮ」で呼び出されたことを想定して、範囲終了時点の囲み状態（ａ２）およびブロック３内の全レコードの開始位置（ｂ２＋）の情報を収集する。その後、プロセスＰ３は、ブロック６を読み込んで同様の処理を実行する。
【００８８】
その後、プロセス２は、ブロック１の範囲終了時点の囲み状態（Ａ）が確定すると、それにしたがって、想定した囲み状態のいずれかを選択する。例えば、プロセス２は、ブロック１の範囲終了時点の囲み状態（Ａ）が「ＯＮ」で確定すると、囲み状態が「ＯＮ」であること想定して収集された範囲終了時点の囲み状態（ａ２）および（ｂ２＋）の情報を採用する。その後、プロセス２は、ブロック２を再度解析する必要はなく、収集した全レコードの開始位置（ｂ２＋）にしたがって、ブロック２から各レコードを読み出して後述のエンコードへ出力する。なお、プロセス３以降も同様の処理を実行する。
【００８９】
［ブロック共有情報の管理］
次に、実施例１とは異なるブロック共有情報１７の管理形態を説明する。実施例２では、実施例１とは異なり、ブロック内の全レコードの開始位置を管理する。図１３は、実施例２にかかるブロック共有情報の更新例を説明する図である。実施例２では、図１３に示すように、各プロセスは、「ブロックＮｏ、ブロックサイズ、範囲開始点の囲み状態がＯＦＦの場合、範囲開始点の囲み状態がＯＮの場合」を対応付けて管理する。
【００９０】
ここで、「ブロックＮｏ」は、処理したブロックを特定する情報である。「ブロックサイズ」は、処理したブロックの大きさである。「範囲開始点の囲み状態がＯＦＦの場合」には、囲み状態がＯＦＦで呼び出されたと想定したときに収集した「範囲終了時点の囲み状態（ａ１）、全レコードの開始位置情報へのアドレス（ｂ１＋）」が設定される。「範囲開始点の囲み状態がＯＮの場合」には、囲み状態がＯＮで呼び出されたと想定したときに収集した「範囲終了時点の囲み状態（ａ２）、全レコードの開始位置情報へのアドレス（ｂ２＋）」が設定される。
【００９１】
図１３の例では、４番目のブロック（分割ファイル）が割当てられたプロセスＰ１の例を図示している。図１３に示すように、プロセスＰ１は、処理対象の「ブロックＮｏ＝（４）、ブロックサイズ＝１ＭＢ」に対応付けて、「範囲開始点の囲み状態がＯＦＦの場合」として「ａ１＝ＯＦＦ、ｂ１＋＝０ｘ０２３４５」を記憶し、「範囲開始点の囲み状態がＯＮの場合」として「ａ２＝ＯＮ、ｂ２＋＝０ｘ１４３２５」を記憶する。
【００９２】
つまり、プロセスＰ１は、囲み状態が「ＯＦＦ」で呼び出されたことを想定して収集したブロック４内の各レコードの開始位置「３１７５３、３２２５１、・・・」を、予め定められるアドレス「０ｘ０２３４５」で開始される領域に記憶する。また、プロセスＰ１は、囲み状態が「ＯＮ」で呼び出されたことを想定して収集したブロック４内の各レコードの開始位置「３０７９０、３３２５５、・・・」を、予め定められるアドレス「０ｘ１４３２５」で開始される領域に記憶する。
【００９３】
そして、プロセスＰ１は、ブロック共有情報１７を監視し、先行するブロック３について、「範囲終了時点の囲み状態（Ａ）＝ＯＮ、跨りレコードの開始位置（Ｂ）＝３９００２」が追加されると、ブロック４は囲み状態が「ＯＮ」で開始されると判定する。この結果、プロセスＰ１は、「範囲開始点の囲み状態がＯＮの場合」に対応付けられるブロック解析情報（ａ２、ｂ２＋）を採用する。つまり、プロセスＰ１は、ブロックＮｏ＝４、ブロックサイズ＝１、範囲終了時点の囲み状態（Ａ）＝ＯＮ、跨りレコードの開始位置（Ｂ）＝４０２２５を対応付けて、ブロック共有情報１７を更新する。なお、跨りレコードの開始位置（Ｂ）には、ブロック４で収集された全レコードの開始位置情報のうち、最も次のブロックに近い最後の開始位置情報が選択される。このようにした新たに登録された情報がブロック５を担当するプロセスＰ２への引き継ぎ情報となる。
【００９４】
［効果］
上述したように、実施例２によれば、１度目の解析で、範囲内全レコードの開始位置をメモリに記憶することで、２度目の解析では改行コードの探索が不要で転送のみとなるため、ＣＰＵの処理量が従来方式と変わらず、並列実行による性能向上が得られる。
【実施例３】
【００９５】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【００９６】
［ＣＳＶの規定］
上記実施例では、拡張書式の一例としてダブルコーテーション、デリミタの一例としてカンマ区切りを用いて説明したが、これに限定されるものではない。囲み文字として何を使用するかを予め指定することもでき、スペースやタブやセミコロンなどをデリミタとして用いることもできる。
【００９７】
［分割サイズの再設定］
実施例２では、ＣＳＶ解析範囲を１ＭＢに限定した例で説明した。この範囲を超える長さのＣＳＶレコード（例えば２ＭＢ）が頻出すると、レコード転送処理（図１２の（３））を実施しないプロセスの処理が頻発して効率が低下する。そこで、図１２の確定処理（２）の結果、初期に決めたＣＳＶ解析範囲のサイズを超えるＣＳＶレコードを検知した場合には、レコード転送処理（図１２の（３））まで完了後、全てのプロセスで一旦同期を取り、ＣＳＶ解析範囲を大きいサイズに再設定する。例えば、初期値１ＭＢでＣＳＶの解析処理を実施中に、確定処理で２ＭＢのＣＳＶレコードを検知した場合には、レコード転送処理完了後に、解析範囲を１０ＭＢに拡張してＣＳＶの解析処理を再実行する。
【００９８】
［システム］
記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００９９】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１００】
［ハードウェア構成］
次に、情報処理装置１０のハードウェア構成例を説明する。図１４は、ハードウェア構成例を説明する図である。図１４に示すように、情報処理装置１０は、通信インタフェース１０ａ、ＨＤＤ（Hard  Disk  Drive）１０ｂ、メモリ１０ｃ、プロセッサ１０ｄを有する。
【０１０１】
通信インタフェース１０ａは、他の装置の通信を制御するネットワークインタフェースカードなどである。ＨＤＤ１０ｂは、プログラムやデータなどを記憶する記憶装置の一例である。
【０１０２】
メモリ１０ｃの一例としては、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）等のＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ等が挙げられる。プロセッサ１０ｄの一例としては、ＣＰＵ（Central  Processing  Unit）、ＤＳＰ（Digital  Signal  Processor）、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＰＬＤ（Programmable  Logic  Device）等が挙げられる。
【０１０３】
また、情報処理装置１０は、プログラムを読み出して実行することで読込方法を実行する情報処理装置として動作する。つまり、情報処理装置１０は、分割部２５、第１入力部３０、第２入力部４０、第３入力部５０、生成部６０と同様の機能を実行するプログラムを実行する。この結果、情報処理装置１０は、分割部２５、第１入力部３０、第２入力部４０、第３入力部５０、生成部６０と同様の機能を実行するプロセスを実行することができる。なお、この他の実施例でいうプログラムは、情報処理装置１０によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【０１０４】
このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ（Magneto−Optical  disk）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することができる。
【符号の説明】
【０１０５】
１０  情報処理装置
１１  通信部
１２  第１記憶部
１３  入力ファイル
１４  第２記憶部
１５  データＤＢ
１６  第３記憶部
１７  ブロック共有情報
２０  制御部
２５  分割部
３０  第１入力部
３１  ローカルバッファ
３２  解析部
３３  確定部
４０  第２入力部
４１  ローカルバッファ
４２  解析部
４３  確定部
５０  第３入力部
５１  ローカルバッファ
５２  解析部
５３  確定部
６０  生成部
【図１】
2018132948.tif 000003
【図２】
2018132948.tif 000004
【図３】
2018132948.tif 000005
【図４】
2018132948.tif 000006
【図５】
2018132948.tif 000007
【図６】
2018132948.tif 000008
【図７】
2018132948.tif 000009
【図８】
2018132948.tif 000010
【図９】
2018132948.tif 000011
【図１０】
2018132948.tif 000012
【図１１】
2018132948.tif 000013
【図１２】
2018132948.tif 000014
【図１３】
2018132948.tif 000015
【図１４】
2018132948.tif 000016