(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
素データから、前記素データを階層化した、異なるデータ型の組合せであるタプルと、同じデータ型の並びであるリストからなる階層化データと、前記階層化データのデータ構造を現すスキーマ情報とを出力する階層化処理部と、
前記階層化データと前記スキーマ情報から、属性別に分割された属性別データを出力するデータ分割処理部と、
前記階層化処理部が出力する前記スキーマ情報と前記データ分割処理部が出力する前記属性別データを記憶する記憶部と、
データ分析処理を記述したデータ分析スクリプトと、前記スキーマ情報と、属性別に分割された前記属性別データとから元の階層構造を復元して、再構成された階層化データを出力する階層化データ復元処理部と、
前記データ分析スクリプトと再構成された前記階層化データとから分析処理を行い、分析結果を出力する分析処理部とを備え、
前記記憶部が記憶する前記属性別データは、データが格納されているファイル群と、前記ファイル群のファイル名を管理するファイル名管理テーブルから構成され、前記ファイル群は、１つのファイルにつき１つの属性のデータのみを格納する、
ことを特徴とするデータ処理装置。
【請求項２】
請求項１記載のデータ処理装置であって、
前記ファイル群は、それぞれの属性に関して、前記スキーマ情報のリストの深さに対応して、データがリスト構造で階層化されている、
ことを特徴とするデータ処理装置。
【請求項３】
請求項２記載のデータ処理装置であって、
前記ファイル群は、属性ごとにデータが格納されているファイルが順序付けされており、
任意の二属性に関し、前記ファイルを順序付けられた順に開き、適切な区切りごとに読むことにより、前記階層化データにおける当該二属性間の対応が復元できる、
ことを特徴とするデータ処理装置。
【請求項４】
請求項３記載のデータ処理装置であって、
前記スキーマ情報は、前記階層化データの個々の要素のデータ型を保持し、前記リストの要素のデータ型に関しては、先頭の要素のデータ型のみを保持する、
ことを特徴とするデータ処理装置。
【請求項５】
請求項１記載のデータ処理装置であって、
前記ファイル群は、個々のファイルの最大サイズが設定されている、
ことを特徴とするデータ処理装置。
【請求項６】
請求項１に記載のデータ処理装置であって、
複数のコンピュータから構成される分散計算環境における前記コンピュータ各々が前記階層化処理部及び前記データ分割処理部を備える、
ことを特徴とするデータ処理装置。
【請求項７】
請求項１記載のデータ処理装置であって、
前記ファイル群は、個々のファイルの最大サイズが設定されている、
ことを特徴とするデータ処理装置。
【請求項８】
請求項１に記載のデータ処理装置であって、
前記分析処理部は、前記スキーマ情報と前記ファイル名管理テーブルを更新し、属性の追加処理を行うことができる、
ことを特徴とするデータ処理装置。
【請求項９】
請求項１に記載のデータ処理装置であって、
複数のコンピュータから構成される分散計算環境における前記コンピュータ各々が、前記階層化データ復元処理部と前記分析処理部とを備える、
ことを特徴とするデータ処理装置。
【請求項１０】
処理部と記憶部とを備えたデータ処理装置におけるデータ処理方法であって、
前記処理部は、
素データから、前記素データを階層化した階層化データと、階層化データのデータ構造を現すスキーマ情報とを出力し、
前記階層化データと前記スキーマ情報から、属性別に分割された属性別データを出力し、
前記スキーマ情報と前記属性別データを前記記憶部に記憶し、
前記階層化データは、異なるデータ型の組合せであるタプルと、同じデータ型の並びであるリストとからなり、
前記記憶部に記憶される前記スキーマ情報は、前記階層化データの個々の要素のデータ型を保持し、リストの要素のデータ型に関しては、先頭の要素のデータ型のみを保持し、
前記記憶部に記憶される前記属性別データは、データが格納されているファイル群と、前記ファイル群のファイル名を管理するファイル名管理テーブルから構成され、前記ファイル群は、１つのファイルにつき、１つの属性のデータのみを格納し、
前記処理部は、
データ分析処理を記述したデータ分析スクリプトと、前記スキーマ情報と、属性別に分割された前記属性別データとから元の階層構造を復元して、再構成された階層化データを出力し、
前記データ分析スクリプトと、出力された前記再構成された階層化データとから分析処理を行い、その分析結果を出力する、
ことを特徴とするデータ処理方法。
【請求項１１】
請求項１０記載のデータ処理方法であって、
前記ファイル群は、それぞれの属性に関して、前記スキーマ情報のリストの深さに対応して、データがリスト構造で階層化されている、
ことを特徴とするデータ処理方法。
【請求項１２】
請求項１１記載のデータ処理方法であって、
前記ファイル群は、属性ごとにデータが格納されているファイルが順序付けされており、
任意の２属性に関しファイルを順序付けられた順に開き、適切な区切りごとに読むことにより、前記階層化データにおける２属性間の対応が復元できる、
ことを特徴とするデータ処理方法。
【請求項１３】
請求項１２記載のデータ処理方法であって、
前記処理部は、
前記データ分析スクリプトに基づき、データ分析に利用する属性を特定し、データ分析に利用しない属性のファイルは読み込まず、
前記ファイル群から読み込んだリストで階層化されているデータを、深さ指定の転置処理によりデータ構造を変え、
前記再構成された階層化データは、データ分析に利用しない属性値は任意の値となっている、
ことを特徴とするデータ処理方法。
【請求項１４】
請求項１０に記載のデータ処理方法であって、
前記ファイル群は、個々のファイルの最大サイズが設定されている、
ことを特徴とするデータ処理方法。
【請求項１５】
請求項１０に記載のデータ処理方法であって、
前記処理部は、
前記スキーマ情報と前記ファイル名管理テーブルを更新し、属性の追加処理を行うことができる、
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関し、特に、階層化された大量のデータを高速にデータ分析処理することができるデータ処理技術に関する。
【背景技術】
【０００２】
企業や自治体は業務ログやセンサデータなどのデータを大量に保持しており、これら大量データから有益な情報を抽出したいというニーズがある。ＩＴ技術の発達により、収集されるデータの量が大きくなっており、また実際のデータは、例えばＸＭＬ(Extensible Markup Language)データのように、階層化されている。そこで階層構造を持つ大量のデータに対して、複雑なデータ分析処理を高速に行う技術が求められている。
【０００３】
特許文献１には、データの開始位置などの情報をインデックスファイルに管理することで、木構造型のデータが格納されたＣＳＶ(Comma Separated Values)ファイルから、データを高速に検索および抽出する技術が示されている。しかしながらこの技術では、特定の複数種のフィールドだけが必要な場合でも、すべてのフィールドのデータを読み込み必要がある。
【０００４】
特許文献２および特許文献３には、クロス集計に特化したデータ保持方法を用いることで、任意次元でのクロス集計を高速にする技術が示されている。しかしながらこれらの技術では、クロス集計に特化しており、クロス集計以外の複雑なデータ分析処理を高速に行うことができない。また階層化されたデータ構造を持つデータに対して高速に処理を行うことができない。
【０００５】
特許文献４には、属性値の値ごとにその値がファイル中のどこにあるかを記したインデックスを持ち、特定のフィールドが特定の値を持つレコードを高速に検索する技術が示されている。しかしながらこの技術では、それぞれのフィールドの取り得る値の数が少なく、かつレコード検索の目的でのみ高速化が有効である。特に、すべてのレコードの特定のフィールドの値が必要な処理を高速に行うことができない。また階層化されたデータ構造を持つデータに対して高速に処理を行うことができない。
【０００６】
特許文献５および特許文献６には、フィールドごとに連続してファイルにデータを格納し、特定のフィールドのみが必要な処理を高速に行う技術が示されている。しかしながらこの技術は、階層化されたデータ構造を持つデータに対しては高速に処理を行うことができない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−１６２５４５号公報
【特許文献２】特開２００２−１９７０９９号公報
【特許文献３】特開２００１−２２７６６号公報
【特許文献４】特開２００１−４３２３７号公報
【特許文献５】特開平１１−１５４１５５号公報
【特許文献６】特開２００１−２２６１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
前述した従来技術には、階層構造を持つデータに対して、複雑なデータ分析処理を高速に行うことができるものはない。
【０００９】
大量のデータを処理する場合、データ読み込みおよびデータ書き込みがボトルネックとなって処理速度が低下する。そこで、階層構造を持つデータに対して、データの読み込み量と書き込み量を減らすこと、および１つの処理に利用するデータを連続して読み込むようにデータを格納することが課題となる。
【００１０】
本発明は、上記に鑑みてなされたものであって、階層構造を持つ大量のデータに対して、複雑なデータ分析処理を高速に行うデータ処理装置、及び処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成するため、本発明においては、データ処理を行うデータ処理装置であって、素データから、この素データを階層化した、異なるデータ型の組合せであるタプルと同じデータ型の並びであるリストからなる階層化データと、この階層化データのデータ構造を現すスキーマ情報とを出力する階層化処理部と、階層化データとスキーマ情報から、属性別に分割された属性別データを出力するデータ分割処理部と、階層化処理部が出力するスキーマ情報とデータ分割処理部が出力する属性別データを記憶する記憶部とを備え、記憶部が記憶する属性別データは、データが格納されているファイル群と、ファイル群のファイル名を管理するファイル名管理テーブルから構成され、ファイル群は、１つのファイルにつき１つの属性のデータのみを格納するデータ処理装置を提供する。
【００１２】
また、本発明においては、上述のファイル群は、それぞれの属性に関して、スキーマ情報のリストの深さに対応して、データがリスト構造で階層化され、また、このファイル群は、属性ごとにデータが格納されているファイルが順序付けされており、任意の二属性に関し、ファイルを順序付けられた順に開き、適切な区切りごとに読むことにより、階層化データにおける当該二属性間の対応が復元できるデータ処理装置を提供する。
【００１３】
更に、上記の目的を達成するため、本発明は、データ分析処理を記述したデータ分析スクリプトと、スキーマ情報と、属性別に分割された属性別データとから元の階層構造を復元して、再構成された階層化データを出力する階層化データ復元処理部と、データ分析スクリプトと再構成された階層化データとから分析処理を行い、分析結果を出力する分析処理部とを更に備えるデータ処理装置を提供する。
【００１４】
すなわち、上記の目的を達成するため、本発明の好適な態様においては、データを処理するデータ処理装置であって、データ分析処理を記述したデータ分析スクリプトと、再構成される階層化データのデータ構造を現すスキーマ情報と、属性別に分割された属性別データとから元の階層構造を復元して、再構成された階層化データを出力する階層化データ復元処理部と、データ分析スクリプトと、再構成された階層化データとから分析処理を行う分析処理部とを備え、復元すべき階層構造は、異なるデータ型の組合せであるタプルと、同じデータ型の並びであるリストとからなる再帰構造を持ち、スキーマ情報は、復元すべき階層構造の個々の要素のデータ型を保持し、リストの要素のデータ型に関しては、先頭の要素のデータ型のみを保持し、属性別データは、データが格納されているファイル群と、ファイル群のファイル名を管理するファイル名管理テーブルから構成され、このファイル群は、１つのファイルにつき１つの属性のデータのみを格納し、それぞれの属性に関して、スキーマ情報のリストの深さに対応して、データがリスト構造で階層化されており、またこのファイル群は、属性ごとにデータが格納されているファイル群が順序付けされており、任意の２属性に関しファイルを順序付けられた順に開き、適切な区切りごとに読むことにより、復元すべき２属性間の対応が復元でき、上述の階層化データ復元処理部における階層化データ復元処理は、データ分析に利用する属性を特定し、データ分析に利用しない属性のファイルは読み込まず、ファイル群から読み込んだリストで階層化されているデータを、深さ指定の転置処理によりデータ構造を変え、再構成された階層化データは、データ分析処理に利用しない属性値は任意の値となっているデータ処理装置を提供する。
【発明の効果】
【００１５】
本発明によれば、階層構造を持つデータに対し、処理に必要なデータのみを連続して読み込むことができるため、ファイル読み込み量を低減でき、処理速度が向上する。特にフィールド数が増えても処理速度が極度に低下することがない。
【００１６】
またフィールドの追加処理に関しても、全フィールドを書き込む必要はなく、追加すべきフィールドのみを新しいファイルに出力することができるため、データ書き込み量を低減でき、処理速度が向上する。
【００１７】
更に、ＭａｐＲｅｄｕｃｅなどの分散計算環境にも構成を変更することなく適用できるため、分散処理によりさらに処理速度を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】第１の実施例に係わる、データを前処理してコンピュータ上で管理する形式に変換する装置のブロック図である。
【図２】第１の実施例に係わる、データ分析のソースコードを受け取ってデータ分析を実行する装置のブロック図である。
【図３】第１の実施例に係わる、素データの例を示した図である。
【図４】第１の実施例に係わる、ＸＭＬ形式によるデータ表現の例を示した図である。
【図５】第１の実施例に係わる、階層化データの例を示した図である。
【図６】第１の実施例に係わる、データ構造の模式図である。
【図７】第１の実施例に係わる、想定されるデータ分析の例を示す図である。
【図８】第１の実施例に係わる、スキーマ情報の例を示した図である。
【図９】第１の実施例に係わる、属性別データの例を示した図である。
【図１０】第１の実施例に係わる、属性値が格納されるファイルの内容を示した図である。
【図１１】第１の実施例に係わる、データ分割処理のフローチャート図である。
【図１２】第１の実施例に係わる、再帰関数ｐａｒｓｅのフローチャート図である。
【図１３】第１の実施例に係わる、ｐａｒｓｅ関数の作用を示す図である。
【図１４】第１の実施例に係わる、データ分析ソースコードの例を示す図である。
【図１５】第１の実施例に係わる、データ分析プログラムの動作例を示す図である。
【図１６】第１の実施例に係わる、階層化データ復元処理のフローチャート図である。
【図１７】第１の実施例に係わる、必要な属性と特定する処理を示した図である。
【図１８】第１の実施例に係わる、階層化データ復元処理の動作例を示した図である。
【図１９】第１の実施例に係わる、再帰関数ｂｕｉｌｄのフローチャート図である
【図２０】第１の実施例に係わる、深さを指定した転置処理の例を示した図である。
【図２１】第１の実施例に係わる、分析処理のフローチャート図である。
【図２２】第１の実施例に係わる、追加する属性のスキーマ上の位置を特定する処理を示した図である。
【図２３】第２の実施例に係わる、分散計算環境におけるシステム構成例を示した図である。
【図２４】第１、２の実施例に係わる、コンピュータの一構成を示す図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照して本発明の実施例を説明する。なお、本明細書において、コンピュータ等のデータ処理装置が、その処理部においてプログラムによって実現する機能処理を、「処理部」や「手段」と表現する場合がある。たとえば、データの「階層化処理」を「階層化処理部」等と呼ぶ。
【００２０】
［実施例１］
第１の実施例は、１つのコンピュータ上で、階層構造を持つデータに対して、データ分析処理を高速に行うデータ処理装置を示す。
【００２１】
以下、第１の実施例のデータ処理装置について説明する。本実施例のデータ処理装置は、事前にデータを前処理してコンピュータ上で管理する形式に変換する装置と、データ分析のスクリプト、ソースコードを受け取ってデータ分析を実行する装置とからなる。事前にデータを前処理してコンピュータ上で管理する形式に変換する装置に関しては図１を用いて後述する。データ分析のスクリプト、ソースコードを受け取ってデータ分析を実行する装置に関しては、図２を用いて後述する。
【００２２】
なお、本実施例のデータ処理装置で使用するコンピュータは、汎用のコンピュータであり、例えば、図２４に示す構成を持つものである。図２４を簡単に説明すると、２４００はコンピュータを示しており、入力部であるキーボードやマウス等の入力デバイス２４０１、インターネットなどのネットワークに接続するためのインタフェース部であるネットワークデバイス２４０２、処理部である中央処理部（Central Processing Unit：ＣＰＵ）２４０３、記憶部である主記憶部２４０４と補助記憶部２４０５等が内部のバス２４０６に接続される構成を持つ。その他必要に応じて、出力部となる表示デバイスなどが追加される。ＣＰＵ２４０３は、記憶部に記憶或いはダウンロードされるプログラムを実行することにより、以下詳述するような各種のデータ分析処理を行う。
【００２３】
さて、図１は、事前にデータを前処理してコンピュータ上で管理する形式に変換する装置の構成例を示すブロック図である。図１に示す装置を構成するコンピュータは図２に示す装置を構成するコンピュータと同一、或いは別個であっても良い。図１において、階層化処理１０１とデータ分析処理１０３は、上述したＣＰＵ２４０３におけるプログラム処理として実現される処理部である。図２以降の図面における各処理ブロックも、上述したＣＰＵ２４０３のプログラム処理として実現される処理部である。
【００２４】
また、素データ１００、階層化データ１０２、スキーマ情報１０５、属性別データ１０６は上述した主記憶部２４０４や補助記憶部２４０５などの記憶部に蓄積、保持される。すなわち、素データ１００を受け取り、処理部による階層化処理１０１により、階層化データ１０２とスキーマ情報１０５が出力される。続いて、階層化データ１０２とスキーマ情報１０５から、処理部によるデータ分割処理１０３により、属性別データ１０６が出力される。
【００２５】
第１の実施例では、図１に示す前処理は、素データ１００に対し一度だけ実行され、分析対象となるデータはスキーマ情報１０５と属性別データ１０６の組１０４の形式でコンピュータ上に管理される。なお階層化データ１０２とスキーマ情報１０５を入力として受け取った場合には、階層化処理１０１は行わずに、データ分割処理１０３のみを行うことも可能である。
【００２６】
以下では素データ１００として、図３に示すデータを例にとって説明する。しかしながら、本実施例は、図３に示すデータ以外のデータにも適用可能であるとは明らかである。図３に示す素データ１００は、ユーザが体につけた加速度センサのログを表している。ログには素データ１００の上一行目に示す、「ユーザＩＤ」、「行動」、「日付」、「時刻」、「ｘ方向の加速度」、「ｙ方向の加速度」、「ｚ方向の加速度」の値が記録されている。図３には１ユーザ分しか示されていないが、実際には複数のユーザのデータがある。
【００２７】
図１の階層化処理１０１では、図３に示すような表形式の素データ１００を、階層構造を持つデータ形式に変換する。階層構造を持つデータとして、例えば上述したＸＭＬが挙げられる。図３に示す素データ１００を、ユーザＩＤと行動と日付をキーとしてグループ化し、ＸＭＬ形式に変換したものを図４に示す。
【００２８】
図３に示すデータから図４に示すＸＭＬ形式のデータを生成するには、まずユーザＩＤが同一の行をグループ化し、続いてそれぞれのグループごとに、さらに行動と日付が同一の行をグループ化する。階層化処理１０１の内容は、本実施例のデータ分析処理を実施する実施者が、データ分析目的にあわせて決定する。例えば、データ分析処理の実施者は、ＸＭＬのタグ名やグループ化のためのキーとなる属性を決定する。
【００２９】
図５は、図４のＸＭＬデータにおいて、ＸＭＬタグを括弧に置き換えたデータである。ただし異なるデータの組合せには小括弧“（”と“）”と使っており、一方、同じデータ型の繰り返しには、大括弧“［”と“］”を使って表している。以下では、小括弧で表される異なるデータの組合せをタプルと呼び、大括弧で表される同じデータ型の繰り返しはリストと呼ぶ。本実施例では、データを、リストとタプルで階層的（再帰的）に表現する。図５では、例として小括弧と大括弧でリストとタプルによる階層構造を表現しているが、小括弧と大括弧以外にも、ＸＭＬを含む多くの表現により、リストとタプルによる階層構造を表現することが可能である。
【００３０】
図６は、図５に示すデータのデータ構造を１ユーザ分だけ６００として模式的に表したものである。データ構造６００では、タプルはＴで表し、リストはＬで表している。各ノードの名前は、図４に示すＸＭＬデータのＸＭＬタグ名に対応している。リストの要素は、同じデータ型の繰り返しであるので、省略して先頭の要素だけ書くことにする。
【００３１】
図７は、第１の実施例のデータ処理装置において、想定されるデータ分析の例を示している。図７に示す例においては、第１回目の分析では、素データに階層化処理１０１を施したデータ７００に対して、図４に示すＸＭＬデータにおけるｌｏｇタグ間で時刻の値の差を計算することにより時間間隔が算出され、時間間隔が追加されたデータ７０１が出力される。図７の７０１において、追加された値には下線を引いてある。第２回目の分析では、時間間隔が追加されたデータ７０１に対し、図４に示すＸＭＬデータにおけるｌｏｇｓタグごとに、時刻と時間間隔を抽出しクラスタリングを行う。クラスタリングはｋ−ｍｅａｎｓなどの公知の方法を用いて行う。第３回目の分析では、時間間隔が追加されたデータ７０１に対し、図４に示すＸＭＬデータにおけるｌｏｇｓタグ内のｘ方向の加速度の平均が算出され、ｘ方向の加速度の平均が追加されたデータ７０２が出力される。図７の７０２において、追加された値には下線を引いてある。図７の７０１と７０２を比較して分かるように、データは任意の階層に追加され得る。第４回目の分析では、ｘ方向の加速度の平均が追加されたデータ７０２に対し、行動とｘ方向の加速度の平均を抽出し相関分析を行う。相関分析は、相関係数の算出など公知の方法を用いて行う。
【００３２】
図７に示すデータ分析の例では、少数の特定の属性の値のみを用いて処理が行われ、算出された値は、新しい属性値として任意の階層に追加されるか、あるいは他の公知の処理に渡される。第１の実施例では、少数の特定の属性のみを利用するデータ分析において、データを前処理して属性値ごとに分割してデータを保持することにより、処理を高速化することが可能となる。
【００３３】
図８は、素データとして図３に示すデータを想定した場合の、スキーマ情報１０５である。図６で模式的に示したデータ構造を、括弧で表現し、プログラムで扱いやすくしたものである。図８に示すスキーマ情報は、図４に示すＸＭＬデータのタグのみを抜き出したものであり、本実施例の実施者が決定した階層化処理１０１を実行することにより、自動的に生成することが可能である。
【００３４】
図９は、素データとして図３に示すデータを想定した場合の、階層化データ１０２とスキーマ情報１０５から、データ分割処理１０３により生成される属性別データ１０６の例を示している。属性別データ１０６は、ファイル名管理テーブル９００と属性値が格納されているファイル（９０１、９０２、９０３など）で管理されている。９０１は、図４に示すＸＭＬデータのｕｓｅｒ−ｉｄタグの値が格納されているファイル群である。９０２は、図４に示すＸＭＬデータのｔｉｍｅタグの値が格納されているファイル群である。９０３は、図４に示すＸＭＬデータのxタグの値が格納されているファイル群である。ファイル名管理テーブル９００には、図４に示すＸＭＬデータのタグの値が、どのファイルに格納されているかが管理されている。例えば、ファイル名管理テーブル９００を参照することにより、図４に示すＸＭＬデータのｔｉｍｅタグの値が、ｆｉｌｅ＿ｔｉｍｅ＿０．ｔｘｔ、ｆｉｌｅ＿ｔｉｍｅ＿１．ｔｘｔに順に格納されていることがわかる。
【００３５】
図１０は、素データとして図３に示すデータを想定した場合の、属性値が格納されているファイルの内容を示している。同図上段の１０００はｆｉｌｅ＿ｕｓｅｒ−ｉｄ＿０．ｔｘｔの内容を示している。ユーザＩＤが、１行に１ユーザの単位で記述されている。同図中段の１００１はｆｉｌｅ＿ｔｉｍｅ＿０．ｔｘｔの内容を示している。時刻が、１行に１ユーザの単位で記述されている。１ユーザにおいて、時刻のデータは図６のｌｏｇｓとｓｅｓｓｉｏｎｓで、２重にリストで階層化されているので、１行のデータは深さ２のリストになる。同図下段の１００２はｆｉｌｅ＿ｘ＿０．ｔｘｔの内容を示している。ｘ方向の加速度が、１行に１ユーザの単位で記述されている。１ユーザにおいて、ｘ方向の加速度のデータは図６のｌｏｇｓとｓｅｓｓｉｏｎｓで２重にリストで階層化されているので、１行のデータは深さ２のリストになる。
【００３６】
図１１は、ＣＰＵで実行される図１のデータ分割処理１０３のフローチャートである。まずスキーマ情報１０５に基づき、書き込み用ファイルを開き、ファイル名管理テーブルを初期化する（Ｓ１１００）。例えば、図８に示すスキーマ情報の場合は、ｆｉｌｅ＿ｕｓｅｒ−ｉｄ＿０．ｔｘｔ、ｆｉｌｅ＿ａｃｔｉｏｎ＿０．ｔｘｔ、ｆｉｌｅ＿ｄａｔｅ＿０．ｔｘｔ、ｆｉｌｅ＿ｔｉｍｅ＿０．ｔｘｔ、ｆｉｌｅ＿ｘ＿０．ｔｘｔ、ｆｉｌｅ＿ｙ＿０．ｔｘｔ、ｆｉｌｅ＿ｚ＿０．ｔｘｔを書き込み用ファイルとして開く。また、これらのファイル名をファイル管理テーブル９００に書き込む。例えば、図８に示すスキーマ情報を読み込むと、１番最初にｕｓｅｒ−ｉｄという文字列がある。よってｆｉｌｅ＿ｕｓｅｒ−ｉｄ．ｔｘｔを書き込み用ファイルとして開き、ファイル管理テーブル９００に、属性フィールドがｕｓｅｒ−ｉｄ、ファイル名フィールドが｛ｆｉｌｅ＿ｕｓｅｒ−ｉｄ．ｔｘｔ｝であるレコードを追加する。
【００３７】
次に、階層化データ１０２から１ユーザ分のデータを読み込む（Ｓ１１０１）。以下では、読み込む階層化データは、図５に示すように括弧で階層が表現されていると想定する。しかしながら、括弧以外の、例えばＸＭＬなどの任意の階層構造を表現できるデータ形式においても、本実施例の実現が可能であることは明らかである。
【００３８】
続いて、読み込んだ階層化データ１０２に対し,構造解析を行い、属性ごとに分解してファイルに書き込む（Ｓ１１０２）。Ｓ１１０２の処理は、読み込んだ階層化データ１０２を引数として、再帰関数ｐａｒｓｅを呼ぶことにより実行する。再帰関数ｐａｒｓｅに関しては、図１２を用いて後述する。
【００３９】
続いて、まだ読み込んでいないデータがあるかどうかで条件分岐する（Ｓ１１０３）。まだ読み込んでいないデータがない場合には、データ分割処理１０３は終了となる。まだ読み込んでいないデータがある場合には、書き込み用ファイルのいずれかが、予め設定された最大ファイルサイズを超えているかどうかで条件分岐する（Ｓ１１０４）。最大ファイルサイズを超えていない場合には、処理Ｓ１１０１に戻る。最大ファイルサイズを超えた場合には、最大ファイルサイズを超えた属性に関して、書き込み用の新しいファイルを開く（Ｓ１１０５）。例えば、ｆｉｌｅ＿ｄａｔｅ＿０．ｔｘｔが最大ファイルサイズを超えた場合には、新しくｆｉｌｅ＿ｄａｔｅ＿１．ｔｘｔを書き込み用ファイルとして開く。続いて、最大ファイルサイズを超えた属性に関して、新しく開いた書き込み用ファイル名を、ファイル名管理テーブル９００に追加する（Ｓ１１０６）。
【００４０】
例えば、ｆｉｌｅ＿ｄａｔｅ＿０．ｔｘｔが最大ファイルサイズを超えた場合には、ファイル名管理テーブル９００の、属性フィールドがｄａｔｅのレコードの、ファイル名のフィールドを、｛ｆｉｌｅ＿ｄａｔｅ＿０．ｔｘｔ、ｆｉｌｅ＿ｄａｔｅ＿１．ｔｘｔ｝に変更する。ファイル名は左から古い順に並ぶようにする。よって左から順に読めば、階層化データのユーザ順と同じ順になる。また最大ファイルサイズを指定することにより，データが複数のファイルに分割されて保存されるため，データのバックアップ・複製や分散処理が容易になる．Ｓ１１０６の処理が終わったら、Ｓ１１０１の処理に戻る。
【００４１】
図１２は、処理Ｓ１１０２で呼ばれる再帰関数ｐａｒｓｅのフローチャートである。処理Ｓ１１０２において、再帰関数ｐａｒｓｅは階層化データ１０２を引数として呼び出される。まず引数の１番上の階層のデータ型により条件分岐する（Ｓ１２００）。引数のデータ型が値の場合には、その値自体をタプルに入れて返す（Ｓ１２０１）。ｐａｒｓｅ関数は階層構造のデータに対し、再帰的に呼び出されるため、階層構造の一番下で呼び出されるときには、引数に値のみが入った状態で呼び出される。
【００４２】
条件分岐Ｓ１２００において、引数のデータ型がリストの場合には、リストの各要素ａ［ｉ］に対して、ｐａｒｓｅ（ａ［ｉ］）を再帰的に呼び出し、返された値をそれぞれｂ［ｉ］とする（Ｓ１２０２）。続いて、処理Ｓ１２０２で得られたｂ［ｉ］を転置して返す（Ｓ１２０３）。例えば、ｐａｒｓｅ（［１  ２  ３］）を実行する場合、引数がリストなので、［１  ２  ３］の要素である１、２、３に対してそれぞれｐａｒｓｅを再帰的に呼び出し、ｐａｒｓｅ（１）、ｐａｒｓｅ（２）、ｐａｒｓｅ（３）を計算する。ここでｐａｒｓｅ（１）は、引数が値なので、分岐Ｓ１２００により処理Ｓ１２０１に分岐し、値１をタプルに入れたｂ［０］＝（１）が返される。同様に、ｂ［１］＝（２）、ｂ［２］＝（３）となる。ここでｂ［ｉ］の転置を取ると、ｂ［ｉ］を行列と見なして、
［（１）  （２）  （３）］  →  （［１  ２  ３］）
と変換する。ここで行列と考えると、［（１）  （２）  （３）］は、３行１列の行列であるのに対し、（［１  ２  ３］）は１行３列の行列であり、転置になっている。
【００４３】
条件分岐Ｓ１２００において、引数のデータ型がタプルの場合には、リストの各要素ａ［ｉ］に対して、ｐａｒｓｅ（ａ［ｉ］）を再帰的に呼び出し、返された値をそれぞれｂ［ｉ］とする（Ｓ１２０４）。続いて、ｂ［ｉ］を連結したタプルを返す。例えば、ｐａｒｓｅ（（１  ２  ３））を実行する場合、引数がタプルなので、（１  ２  ３）の要素である１、２、３に対してそれぞれｐａｒｓｅを再帰的に呼び出し、ｐａｒｓｅ（１）、ｐａｒｓｅ（２）、ｐａｒｓｅ（３）を計算する。ここでｐａｒｓｅ（１）は、引数が値なので、分岐Ｓ１２００により処理Ｓ１２０１に分岐し、値１をタプルに入れたｂ［０］＝（１）が返される。同様に、ｂ［１］＝（２）、ｂ［２］＝（３）となる。ここでｂ［ｉ］を連結すると、
（（１）  （２）  （３））  →  （１  ２  ３）
となる。
【００４４】
図１３は、ｐａｒｓｅ関数の作用を示している。図１３上段に示すように、スキーマ情報１０５にｐａｒｓｅ関数を適用すると、スキーマ情報の中にある属性名（図４のＸＭＬデータのタグ名に対応）が順番に抽出される（１３００）。属性名には、リストの深さに対応した数の大括弧が付けられる。例えば、属性timeはスキーマ情報１０５においてリストの深さ２の場所にあるので、出力されるデータ１３００においても大括弧が２つ付けられて出力される。
【００４５】
図１３下段に示すように、階層化データ５００にｐａｒｓｅ関数を適用すると、図１０に示したファイルに書き込む形式でデータが出力される。出力されるデータ１３０１においては、属性ごとにデータが分解されている。また１３００と１３０１では、属性名と属性値の順番が対応しているので、どのデータをどのファイルに書き込めばよいか分かるようになっている。
【００４６】
以下では図１４に示すデータ分析ソースコードの例にとって説明する。図１４ではプログラム言語ＬＩＳＰでデータ分析ソースコードを書いているが、本実施例はＬＩＳＰ以外のプログラム言語で書いたスクリプト、データ分析ソースコードにも適用可能であることは明らかである。またデータ分析の内容に関しても、本実施例は図１４に示す以外の分析処理においても適用可能であることは明らかである。１４００はデータ分析の内容を記述したものであり、１４００の例では、ｘ方向の加速度の平均を算出する処理を記述している。１４０１は１４００の処理により得られた値をどう扱うかを記述したものであり、１４０１の例では、１４００の処理で得られた値を（２ｎｄ  （ｃａｒ  （４ｔｈ  （ｕｓｅｒ））））に示す位置に、“ａｖｅ−ｘ”という属性名で追加する処理を記述している。２ｎｄはタプルの中の２番目の要素を返す関数であり、３ｒｄはタプルの中の３番目の要素を返す関数であり、４ｔｈはタプルの中の４番目の要素を返す関数である。その他の図１４に含まれるプログラムの命令は、ＬＩＳＰでは標準的に利用されるものであるので、個々の命令の詳細の説明は省く。
【００４７】
図１５は、プログラム１４００の動作例を示している。階層化データ１５００をプログラム１４００に入力すると、ｘ方向の平均が計算され、結果がリストになった１５０１が出力される。
【００４８】
本実施例では、階層化データは事前に属性ごとに分割され、図９に示したような属性別データ１０６の形式で管理される。そのため、データ分析プログラムを適用する前に、データ構造を復元する必要がある。
【００４９】
図２は、データ分析のスクリプトであるソースコードを受け取ってデータ分析を実行する装置の構成例を示すブロック図である。データ分析ソースコード２００と図１に示した処理で得られたスキーマ情報１０５と属性別データ１０６から、階層化データ復元処理２０１により再構成された階層化データ２０２を得る。続いてデータ分析ソースコード２００と再構成された階層化データ２０２を用いて、分析処理２０３を行う。分析処理２０３の処理結果は、記憶部に記憶、或いは上述した出力部から出力される。分析処理に属性の追加が含まれる場合には、スキーマ情報１０５と属性別データ１０６を更新する。
【００５０】
図１６は、階層化データ復元処理２０１のフローチャートである。まずデータ分析ソースコード２００を解析して、必要な属性名を特定する（Ｓ１６００）。例えば、図１４の１４００のデータ分析プログラムには、データの階層構造をたどる関数として、階層構造の上から順に２ｎｄ、３ｒｄ、２ｎｄがある。そこで図８に示したスキーマ情報において、図１７に示すように階層構造１７００を上から順に２ｎｄ、３ｒｄ、２ｎｄとたどることで、必要な属性名が特定できる。図１４のデータ分析プログラム１４００の例では、１つの属性のみ必要であるが、２つ以上の属性が必要な場合でも同様にして必要な属性名を特定できる。
【００５１】
次にファイル名管理テーブル９００を参照して、特定した属性名のデータが格納されているファイル名を特定し、各属性に関し１番目（最も左）のファイルを開く（Ｓ１６０１）。続いて各ファイルから１行分のデータを読み込む（Ｓ１６０３）。図１０に示した属性別データの例では、１行のデータは１ユーザ分のデータに相当する。ここでデータ分析プログラムに必要な属性しか読み込まないため、１ユーザの全属性を読み込む場合に比べて、データ入力量が低減される。図１４に示したデータ分析ソースコードの例であれば、最も深い階層に４つの属性があり、実際にはそのうち１つの属性のデータしか読み込まないため、データ入力量は１／４に低減される。
【００５２】
続いてスキーマ情報にファイルから読み込んだデータを埋め込む（Ｓ１６０３）。続いて階層構造を再構成する（Ｓ１６０４）。図１８は、処理Ｓ１６０３と処理１６０４の例を示している。処理１６０３により、ファイルｆｉｌｅ＿ｔｉｍｅ＿０．ｔｘｔ（１００１）から読み込んだ１ユーザ分のデータを、スキーマ情報１０５に埋め込んだデータが１８００である。スキーマ情報１０５のｘの部分にファイルｆｉｌｅ＿ｔｉｍｅ＿０．ｔｘｔ（１００１）の１行分がクオートで囲まれて挿入され、その他の属性のところにはｎが挿入されている。処理１６０４により、階層構造を再構成したデータが１８０１である。処理１６０４は、属性のデータをスキーマ情報１０５に埋め込んだデータを引数として、再帰関数ｂｕｉｌｄを呼ぶことで実行する。再帰関数ｂｕｉｌｄに関しては、図１９を用いて後述する。データ１８０１は、もとのデータ１５００の分析処理に利用したい値をｎで置き換えたものであるので、データ分析プログラムをデータ１８０１に適用すれば、データ１５００に適用したときと同じ結果が得られる。
【００５３】
図１６の階層化データ復元処理２０１の説明に戻る。処理１６０４の次は、ファイルのいずれかが末尾まで読まれたかどうかで条件分岐する（Ｓ１６０５）。ファイルのいずれもまだ末尾まで読まれていない場合は、処理Ｓ１６０２に戻る。ファイルのいずれかが末尾まで読まれた場合には、末尾まで読まれた属性に関して、まだ開いていないファイルがあるかどうかで、さらに条件分岐する（Ｓ１６０６）。末尾まで読まれた属性に関して、まだ開いていないファイルがない場合には終了となる。末尾まで読まれた属性に関して、まだ開いていないファイルがある場合には、その属性に関して、ファイル名管理テーブル９００を参照して、次（今開いているファイルの右）のファイルを開き（Ｓ１６０７）、処理Ｓ１６０２に戻る。ファイル名管理テーブル９００のファイル名のフィールドのファイルを左から順に開き１行ずつ読めば、階層化データのユーザ順と同じ順になる。よって読み込む属性が２つ以上の場合でも，ファイルを左から順番に開き１行ずつ読むことにより，処理Ｓ１６０２で読み込む属性データは，同一ユーザのデータとなる．これにより，ファイルの中を連続的に読み込むだけで，同一ユーザの属性間の対応をとることができ，ＲＤＢのＪＯＩＮ相当の処理をすることなく，高速にデータを読み込むことができる．
図１９は、処理Ｓ１６０４で呼ばれる再帰関数ｂｕｉｌｄのフローチャートである。処理Ｓ１６０４において、再帰関数ｂｕｉｌｄは属性のデータをスキーマ情報１０５に埋め込んだデータを引数として呼び出される。まず引数の１番上の階層のデータの方により条件分岐する（Ｓ１９００）。引数が値またはｎまたはクオートで囲まれたリストの場合には、引数自体をそのまま返す（Ｓ１９０１）。ｂｕｉｌｄ関数は階層構造のデータに対し、再帰的に呼び出されるため、階層構造の一番下で呼び出されるときには、値またはｎまたはクオートで囲まれたリストを引数として呼び出される。
条件分岐Ｓ１９００において、引数のデータ型がクオートで囲まれていないリストの場合には、リストの各要素ａ［ｉ］に対して、ｂｕｉｌｄ（ａ［ｉ］）を再帰的に呼び出し、返された値をそれぞれｂ［ｉ］とする（Ｓ１９０２）。続いて、処理Ｓ１２０２で得られたｂ［ｉ］をリストの深さの位置で転置して返す（Ｓ１９０３）。 処理１９０３の詳細については、図２０を用いて後述する。
【００５４】
条件分岐Ｓ１９００において、引数のデータ型がタプルの場合には、タプルの各要素ａ［ｉ］に対して、ｂｕｉｌｄ（ａ［ｉ］）を再帰的に呼び出し、返された値をそれぞれｂ［ｉ］とする（Ｓ１９０４）。続いて、処理Ｓ１９０４で得られたｂ［ｉ］を各要素とするリストを返す（Ｓ１９０５）。
【００５５】
図１８の１８００のデータに対してｂｕｉｌｄ関数を適用した場合を例として、処理Ｓ１９０３を説明する。ｂｕｉｌｄ関数は再帰的に呼び出されていき、
ｂｕｉｌｄ（（ｎ  “［［８．５２  ７．２５］  ［０．１５  ０．１１］］”  ｎ  ｎ））
が呼ばれるときには、１８００において、（ｎ  “［［８．５２  ７．２５］  ［０．１５  ０．１１］］”  ｎ  ｎ）の外側には大括弧が２つあるため、リストの階層は深さ２である。ｂｕｉｌｄ（（ｎ  “［［８．５２  ７．２５］  ［０．１５  ０．１１］］”  ｎ  ｎ））を実行すると、まず処理Ｓ１９０４により、タプルの各要素に対してｂｕｉｌｄ関数が実行され、各要素はｎかクオートで囲まれたリストなので、処理１９０１によりそのまま返され、図２０上段の２０００に示すように、ｂ［０］＝ｎ、ｂ［１］＝“［［８．５２  ７．２５］  ［０．１５  ０．１１］］”、ｂ［２］＝ｎ、ｂ［３］＝ｎとなる。ここで処理１９０３を実行すると、前述した通り、リストの階層は深さ２なので、ｂ［ｉ］を深さ２で転置して、図２０上段の２００１に示すように、
“［［（ｎ  ８．５２  ｎ  ｎ）  （ｎ  ７．２５  ｎ  ｎ）］
［（ｎ  ０．１５  ｎ  ｎ）  （ｎ  ０．１１  ｎ  ｎ）］］“
が得られる。ここで要素数が不足する場合にはｎが自動的に追加される。深さ１で転置した場合は、
“［（ｎ  ［８．５２  ７．５２］  ｎ  ｎ）
（ｎ  ［０．１５  ０．１１］  ｎ  ｎ）］“
となる。深さ１で転置した場合と、深さ２で転置した場合を比べると、深さ２で転置した場合は、タプルがリストの深さ２の位置まで入り込んでいることがわかる。深さを指定した転置は、公知の方法により行う。例えば、数式処理ソフトＭａｔｈｅｍａｔｉｃａでは深さを指定して転置する組込み関数が利用できる。
【００５６】
一方、
ｂｕｉｌｄ（（ｎ  ｎ  “［［（ｎ  ８．５２  ｎ  ｎ）  （ｎ  ７．２５  ｎ  ｎ）］  ［（ｎ  ０．１５  ｎ  ｎ）  （ｎ  ０．１１  ｎ  ｎ）］］“））
が呼ばれるときには、リストの階層は深さ１である。従って、再帰的にｂｕｉｌｄを呼び出して得られたｂ［ｉ］（図２０下段の２００２）に対し、深さ１で転置、図２０下段の２００３が得られる。
【００５７】
図２１は、図２に示した分析処理２０３のフローチャートに一例である。まず属性の追加をする分析処理かどうかで条件分岐する（Ｓ２１００）。属性の追加をしない分析処理の場合は、階層化データ復元処理２０１により再構成された階層化データ２０２に対し、データ分析ソースコード２００を適用することにより、分析結果が得られ（Ｓ１６０１）、続いてそれを出力する（Ｓ１６０２）。
【００５８】
条件分岐Ｓ２１００において、属性の追加を行う分析処理の場合は、まずスキーマ情報１０５をたどり、属性を追加するスキーマ上の場所を確定し、スキーマ情報１０５を更新する（Ｓ２１０３）。例えば、図１４に示すデータ分析処理の場合、図２２に示すように、１４０１に記述されている（２ｎｄ  （ｃａｒ  （４ｔｈ  （ｕｓｅｒ））））から、スキーマ構造２２００をたどり、追加する属性“ａｖｅ−ｘ”の場所を確定する。図２２では、新しく追加する属性“ａｖｅ−ｘ”は点線で囲まれた四角形の場所に追加される。これに従い、スキーマ情報１０５を
（ｕｓｅｒ
［（ａｃｔｉｏｎ  ｄａｔｅ
［（ｔｉｍｅ  ｘ  ｙ  ｚ）］
ａｖｅ−ｘ）］）
と変更する。
【００５９】
次に、ファイル管理テーブル９００に追加する属性の情報を追加する（Ｓ２１０４）。例えば属性ａｖｅ−ｘを追加する場合には、属性フィールドがａｖｅ−ｘで、ファイル名のフィールドが｛ｆｉｌｅ＿ａｖｅ−ｘ＿０．ｔｘｔ｝であるレコードを、ファイル管理テーブル９００に追加する。続いて、データ分析ソースコード２００を適用することにより、分析結果が得られる（Ｓ２１０５）。
【００６０】
続いて、得られた結果をファイルに出力する（Ｓ２１０６）。ただしデータ分割処理１０３と同様、ファイルが最大サイズを超えたら、その都度、新しい書き込み用ファイルを開き、ファイル管理テーブル９００にそのファイル名を追加する。スキーマ情報１０５を更新する方法をとることにより，全データをファイルに出力する必要はなく，新たに追加する属性のデータのみをファイルに出力するだけでよい．これによりファイル出力量を低減することができる。
【００６１】
また、条件分岐Ｓ２１００において、属性の追加を行なわない分析処理の場合は、データ分析ソースコード２００を適用することにより、分析結果を得（
Ｓ２１０１）、その結果を図示を省略した上述の出力部に出力（Ｓ２１０２）、或いは記憶部２４０４、あるいは２４０５に記憶することは言うまでもない。
【００６２】
［実施例２］
第２の実施例では、コンピュータが複数ある分散計算環境で、階層構造を持つデータに対して、データ分析処理を高速に行う。なお、これらのコンピュータとしては、例えば実施例１で説明した図２４のコンピュータなどを用いれば良い。
【００６３】
以下、第２の実施例のデータ処理装置について説明する。本実施例のデータ処理装置は、各コンピュータ上の記憶部でスキーマ情報１０５と属性別データ１０６を保持し、各コンピュータがデータ分析のスクリプトであるソースコードを受け取って、各コンピュータ上のＣＰＵでデータ分析を実行する。
【００６４】
図２３は、第２の実施例の構成例を示すブロック図である。２３００、２３０１、２３０２は、ｎ台のコンピュータから構成される分散計算環境を模式的に表したものであり、例えば２３００は１台目のコンピュータ、２３０１は２台目のコンピュータ、２３０２はｎ台目のコンピュータである。これらのコンピュータとしては、実施例１同様、図２４に一例を示した汎用のコンピュータが利用できることは言うまでもない。各コンピュータ上で、スキーマ情報１０５と属性別データ１０６を保持している。クライアントからデータ分析ソースコード２００が各コンピュータに送られると、各コンピュータ上で図２に示した装置によりデータ分析が実行される。本実施例の構成は、公知の多くの分散計算システム上で実施可能であることは明らかである。例えばＭａｐＲｅｄｕｃｅ分散計算環境で実施することが可能である。
【００６５】
また図１に示した装置を、分散計算環境の各コンピュータ２３００、２３０１、２３０２が持ち、階層化処理１０１とデータ分割処理１０３を各コンピュータ上で実行することも可能である。この場合、事前に素データ１００を分散計算環境の各コンピュータに配置しておき、各コンピュータ上で、階層化処理１０１とデータ分割処理１０３を各コンピュータ上で実行する。公知の多くの分散計算システム上で実施可能であることは明らかである。例えばＭａｐＲｅｄｕｃｅ分散計算環境で実施することが可能である。
【産業上の利用可能性】
【００６６】
以上詳述した本発明は、データ処理装置に関し、特に、階層化された大量のデータを高速にデータ分析処理することができるデータ処理技術として有用である。
【符号の説明】
【００６７】
１００…素データ
１０１…階層化処理
１０２…階層化データ
１０３…データ分割処理
１０４…組
１０５…スキーマ情報
１０６…属性別データ
２００…データ分析ソースコード
２０１…階層化データ復元処理
２０２…再構成された階層化データ
２０３…分析処理
２３００、２３０１、２３０２、２４００…コンピュータ
２４０１…入力デバイス
２４０２…ネットワークデバイス
２４０３…ＣＰＵ
２４０４…主記憶部
２４０５…補助記憶部
２４０６…バス。
【図１】
0005544118.tif 000002
【図２】
0005544118.tif 000003
【図３】
0005544118.tif 000004
【図４】
0005544118.tif 000005
【図５】
0005544118.tif 000006
【図６】
0005544118.tif 000007
【図７】
0005544118.tif 000008
【図８】
0005544118.tif 000009
【図９】
0005544118.tif 000010
【図１０】
0005544118.tif 000011
【図１１】
0005544118.tif 000012
【図１２】
0005544118.tif 000013
【図１３】
0005544118.tif 000014
【図１４】
0005544118.tif 000015
【図１５】
0005544118.tif 000016
【図１６】
0005544118.tif 000017
【図１７】
0005544118.tif 000018
【図１８】
0005544118.tif 000019
【図１９】
0005544118.tif 000020
【図２０】
0005544118.tif 000021
【図２１】
0005544118.tif 000022
【図２２】
0005544118.tif 000023
【図２３】
0005544118.tif 000024
【図２４】
0005544118.tif 000025