【新規性喪失の例外の表示】特許法第30条第2項適用 平成29年7月3日”https://github.com/yahoojapan/multiple−dimension−spread/commits/master?after=4c96e0493556539c28ae92a9fffabc8a30f21454+69”
【文献】
加藤 慶信 外4名,軽い!速い! ビッグデータ 分析システムの作り方,日経SYSTEMS,日本,日経BP社 Nikkei Business Publications,Inc.,2013年 9月26日,第246号/2013年10月号,p.42-p.59
(58)【調査した分野】(Int.Cl.,DB名)
前記変換部は、それぞれが互いに異なる数値型のデータ形式で定義された同じデータ項目に対応する二以上のカラムデータに関して、所望のタイミングで前記数値型のうち桁の多い方のデータ形式に揃えて一つのカラムデータを再構成する、
請求項1から3のうちいずれか1項記載のデータ管理装置。
少なくとも前記カラムデータに含まれるデータ本体を、入力されたデータ要求に含まれるデータ項目ごとに前記記憶部から読み出して出力するデータ利用者インターフェースを更に備える、
請求項1から4のうちいずれか1項記載のデータ管理装置。
前記データ利用者インターフェースは、指定されたデータ項目を含まないレコードに関しては、当該データ項目に対応するデータを、該当するデータが存在しないことを示す任意の形態のデータで埋める、
請求項5記載のデータ管理装置。
前記データ利用者インターフェースは、指定されたデータ項目が、前記カラムデータとして設定されていないデータ項目である場合、当該データ項目についてのデータを全て、該当するデータが存在しないことを示す任意の形態のデータで埋める、
請求項5または6記載のデータ管理装置。
前記データ利用者インターフェースは、所定のデータ項目におけるデータ本体が設定条件を満たすレコードを特定可能な情報を前記記憶部から読み出す要求を受け付け、前記所定のデータ項目のカラムデータに含まれるデータセットのデータ本体を順に検索し、データ本体が設定条件を満たすレコードを特定可能な情報を出力する、
請求項5から7のうちいずれか1項記載のデータ管理装置。
【発明を実施するための形態】
【0011】
以下、図面を参照し、本発明のデータ管理装置、データ管理方法、およびプログラムの実施形態について説明する。データ管理装置は、クライアントから受信したデータを記憶装置に保管すると共に、データ送信元のクライアント、或いは他のクライアントからの要求に応じたデータを記憶装置から読み出して提供する装置である。データ管理装置をDBMS(データベース管理システム)と称してもよい。クライアントには、エンドユーザの使用する端末装置において動作するアプリケーションプログラムと協調して動作するアプリケーションサーバ(以下、フロントエンドサーバと称する)、蓄積されたデータを統計データなどとして利用するデータ利用者サーバなどが含まれる。
【0012】
先に、本発明の概念的側面について説明する。近年のHadoopはhiveやprestoに代表される"SQL on Hadoop"でRDB的にhdfsにアクセスすることが主流であり、過去に言われていた「非構造な大量のデータ」のファイルを直接扱うケースはまれになってきた。一方、格納されるデータは、取得時には非構造な「ログ」であることがほとんどである。そこで、多くの場合「規則性のある非構造データ」としてデータを取得・加工することになる。この、「規則性のある非構造データ」の代表がjsonやxmlであり、これは「ネストを含むkey value形式」で表現でき、これは木構造として見ることができる。
図1は、jsonフォーマットによるログの一例を示す図であり、
図2は
図1のログを木構造で表現した図である。木構造による表現は「ネストを含むkey value形式」の抽象化に適している。
図3は、jsonフォーマットによるログの他の一例を示す図であり、
図4は
図3のログを木構造で表現した図である。
【0013】
図4で示すように、「ネストを含むkeyvalue」は(x, z)平面で、配列に関してはy方向に次元を拡張する事が可能であり、多次元空間での木構造は「ネストを含むkeyvalue形式」、すなわちschemaを表現するのに適している事がわかる。この「多次元空間での木構造」をデータフォーマット(json, xml, avro, message pack等)から切り離して抽象化したオブジェクトにしたものが「schemaobject」である。
【0014】
一方、Hadoopに代表される分散型ストレージは、当初は大量の非構造データに対し高スループット高レイテンシでアクセスすることを主眼に設計・開発されたが、近年では、高スループットかつ低レイテンシを実現するために、データを構造化して配置するケースが増えてきている。hdfs上に構造化する際はカラムナーと呼ばれる、RDB的なデータを永続化するファイルフォーマットが一般的であり、代表的なものとしてhive ORC file、apache parquetがある。カラムナーファイルのデータを木構造で表現すると、
図5に示すような「root直下のみの階層しかない2次元木」で描くことができる。
図5は、カラムナーファイルのデータを木構造で表現した図である。
【0015】
カラムナーファイルフォーマットの利点は、「カラム毎にアクセスすることによる省コスト可」であり、メモリ・CPU・IOどの観点でも、Hadoopで馴染みのある他の非構造データ用のファイルフォーマットを凌駕する。一方で、カラムナーファイルには「データに構造化を強制する」という弱点がある。前述のとおり、データは取得時には非構造な「ログ」であり、構造化しようにも「多次元的な木構造」という高度な表現は不可能である。
【0016】
この問題を解決するのが、本発明で採用する方式である。これは、多次元的な(木構造で言うと深さ方向の)広がりをもつデータを永続化することができるファイルフォーマットである。前述したschemaobjectをそのまま記述する形式を取るので、「ネストを含むkey valueの配列」という表現力を保ったままデータを保持することができる。
【0017】
一般に、データのカラムナフォーマットの弱点は「データの構造化」の部分であり、多次元的なデータを二次元へ次元圧縮するロジックと処理をどこかで実装する必要がでてきてしまい、それが俗にいう「スキーマ」である。スキーマの管理や変更には大きなコストが伴う。本発明の方式では、次元圧縮処理が不要であるため、データの保存においては、この「スキーマ問題」から解放される。また、カラムナファイルでは構造上不可能な、配列やStruct型の「特定の値」へのアクセスも、そのカラムを全展開することなく木の探索としてアクセスできる点でも大きな利点がある。
【0018】
以下、具体的な構成および機能について説明する。
図6は、データ管理装置の一例であるデータベースサーバ100の使用環境と構成の一例を示す図である。エンドユーザの使用する一以上の端末装置10は、フロントエンドサーバ20と通信する。端末装置10では、アプリケーションプログラムが動作し、アプリケーションプログラムの実行に必要なデータをフロントエンドサーバ20との間で送受信する。フロントエンドサーバ20は、端末装置10から取得したデータのうち保存が必要なデータを、プロキシサーバ30を介してデータベースサーバ100に送信して保管させる。また、フロントエンドサーバ20は、アプリケーションプログラムの実行に必要なデータをデータベースサーバ100から読み出し、端末装置10に送信する。このような、一以上の端末装置10とフロントエンドサーバ20との組み合わせが複数存在する。それぞれのフロントエンドサーバ20は、JSON(JavaScript(登録商標) Object Notation)、MySQLなどの任意の形式で、データベースサーバ100に対してデータの書き込み要求または読み出し要求を行う。
【0019】
一方、データ利用者サーバ50は、フロントエンドサーバ20から収集されたデータのうち、利用規約によって統計処理などに利用することが許可されているデータを、データベースサーバ100から取得する。なお、フロントエンドサーバ20とデータ利用者サーバ50の区別は厳密なものである必要はなく、フロントエンドサーバ20の一部がデータ利用者サーバ50として動作することがあってもよい。また、データ利用者サーバ50は、プロキシサーバ30を介してデータベースサーバ100と通信してもよい。
図6に示す各装置は、インターネット、WAN(Wide Area Network)、LAN(Local Area Network)などのネットワークを介して相互に通信可能に接続されている。
【0020】
データベースサーバ100は、例えば、図示しないNIC(Network Interface Card)などの通信インターフェースの他、フロントエンドインターフェース110と、データ利用者インターフェース120と、記憶部150とを備える。フロントエンドインターフェース110およびデータ利用者インターフェース120は、それぞれ、CPU(Central Processing Unit)などのプロセッサがプログラム(ソフトウェア)を実行することにより実現される。また、これらの機能部のうち一方または双方は、LSI(Large Scale Integration)やASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などのハードウェアにより実現されてもよいし、ソフトウェアとハードウェアが協働することで実現されてもよい。
【0021】
フロントエンドインターフェース110は、例えば、解釈部112と、変換部114とを備える。解釈部112は、フロントエンドサーバ20から取得されるデータを抽象化する。また、解釈部112は、フロントエンドサーバ20にデータを提供する際には、抽象化されたデータを、フロントエンドサーバ20に対応した形式に変換する。変換部114は、行指向型のデータを列指向型のデータに変換して記憶部150に記憶部150に記憶させる。データ利用者インターフェース120は、データ利用者サーバ50から取得した要求に応じたデータを記憶部150から読み出し、データ利用者サーバ50に送信する。これらの機能の詳細については後述する。
【0022】
記憶部150は、例えば、キャッシュメモリ152と、不揮発性メモリ154とを備える。キャッシュメモリ152は、RAM(Random Access Memory)、レジスタ、フラッシュメモリなどで実現される。また、不揮発性メモリ154は、HDD(Hard Disk Drive)、フラッシュメモリなどで実現される。不揮発性メモリ154には、列志向型データ154Aが格納される。記憶部150は、データベースサーバ100がネットワークを介してアクセス可能なNAS(Network Attached Storage)であってもよい。
【0023】
[フロントエンドインターフェース]
以下、フロントエンドインターフェース110の機能について説明する。フロントエンドインターフェース110の解釈部112は、フロントエンドサーバ20ごとに定義が異なるデータを、一つの共通する形式に変換する。
図7は、解釈部112の機能について説明するための図である。ここでは、Markというユーザ名(name)を有するユーザの年齢(age)が30才であるというデータを示している。これに対し、
図7の下図は、データベースサーバ100が扱うことのできる抽象化されたデータを模式的に示している。解釈部112は、
図7に例示したように、フロントエンドサーバ20から取得されたデータ格納要求を解釈し、抽象化する処理を行って、データを変換部114に渡す。なお、stringやintは後述するデータ形式である。
【0024】
フロントエンドインターフェース110により抽象化されたデータは、特に処理を加えなければ、行指向型のデータ構造を有するものとなるのが通常である。変換部114は、抽象化したデータを更に、列指向型のデータ構造に変換し、列志向型データ154Aとして記憶部150の不揮発性メモリ154に記憶させる。
【0025】
図8は、変換部114の機能について説明するための図(その1)である。ここでは、レコード1〜レコード3の3つのレコードがフロントエンドサーバ20から取得され、解釈部112によって抽象化されたものとする。レコード1は、データ項目としてid(識別情報)、name(ユーザ名)、sex(性別)を含んでいる。また、レコード2は、データ項目としてid、name、age(年齢)を含んでおり、レコード3は、データ項目としてid、nameを含んでいる。これらの抽象化されたレコードは、例えばレコード番号に対応付けられてキャッシュメモリ152に格納される。
【0026】
キャッシュメモリ152に一定量のデータが格納されると、変換部114は、これらを予め配列が確保されていない列指向型のデータ構造で管理しながら不揮発性メモリ154に記憶させる。列志向型のデータ構造において、一単位のデータ(以下、データセット)は、IndexとValueの組み合わせを含む。データセットに含まれるIndexとValueは、互いに対応付けられて不揮発性メモリ154に記憶される。「互いに対応付けられて」とは、例えば、格納場所を示すアドレス情報が、メモリ空間において連続して、あるいはポインタを介して辿ることができる位置に書き込まれていることをいう。このデータセットの格納態様は、「多次元空間での木構造」をデータフォーマット(json, xml, avro, message pack等)から切り離して抽象化したオブジェクトにしたschemaobjectを、メモリ空間にそのまま格納することに相当する。
【0027】
Indexとは、Valueすなわちデータ本体が、そのテーブル(データのより大きい管理単位)において、何レコード目から抽出されたものであるかを示す情報(換言すると、オフセット情報)である。Indexは、「インデックス情報」の一例である。同じデータ項目のデータセットは、例えば、論理構造に関して近い位置で、不揮発性メモリ154に記憶される。「論理構造に関して近い位置で」とは、例えば、あるデータセットを参照した後に、次のデータセットを参照するために、メモリ空間における連続したアドレスを参照すればよい、あるいは一つまたは少数のポインタを辿るだけで参照することができることをいう。
【0028】
以下、同じデータ項目の一以上のデータセット、すなわち列志向型で管理される一以上のデータセットのことをカラムデータと称する。
図8の例では、データ項目「id」についてレコード1、2、3のデータセットが、データ項目「name」についてレコード1、2、3のデータセットが、データ項目「sex」についてレコード1のデータセットが、データ項目「age」についてレコード2のデータセットが、それぞれカラムデータとして管理される。
【0029】
また、カラムデータには、そのデータ項目のデータ形式などを記述したヘッダが付与される。データ形式には、[string(文字列)]、[int(整数)]、[long(桁の長い整数)]、[float(小数点表記)]、[double(桁の長い小数点表記)]などがある。
【0030】
更に別のレコードを記憶する要求が取得された場合、変換部114は、以下の手法でデータを管理する。変換部114は、(手法1)既に管理されているデータ構造に追加する形でデータを管理してもよいし、(手法2)キャッシュメモリ152から不揮発性メモリ154にデータを移すごとに管理するデータを区分してもよい。以下では手法1について説明する。手法2を採用する場合、データの読み出しの際に適宜、データの結合処理が行われる。
【0031】
図9は、変換部114の機能について説明するための図(その2)である。ここでは、更に、レコード4〜レコード6の3つのレコードがフロントエンドサーバ20から取得され、解釈部112によって抽象化されたものとする。レコード4は、データ項目としてname、age、jobを含んでいる。また、レコード5は、データ項目としてid、name、sexを含んでおり、レコード6は、データ項目としてid、name、jobを含んでいる。これらの抽象化されたレコードは、キャッシュメモリ152に格納される。
【0032】
キャッシュメモリ152に一定量のデータが格納されると、変換部114は、これらを列指向型のデータ構造で管理しながら不揮発性メモリ154に記憶させる。ここで、レコード4〜6には、レコード1〜3には含まれていなかったjob(職業)というデータ項目が含まれている。この場合、変換部114は、新たなカラムデータを設定し、データを管理する。
図9の例では、データ項目「id」についてレコード1、2、3、5、6のデータセットが、データ項目「name」についてレコード1、2、3、4、5、6のデータセットが、データ項目「sex」についてレコード1のデータセットが、データ項目「age」についてレコード2、4、5のデータセットが、データ項目「job」についてレコード4、6のデータセットが、それぞれカラムデータとして管理される。
【0033】
このようにデータを管理することで、例えば、「全ユーザのjobを取得したい」といった要求がデータ利用者サーバ50から取得された場合、データベースサーバ100(データ利用者インターフェース120)は、他のデータ項目(id、name、age、sex、…)のカラムデータを参照せずに、データ項目「job」のカラムデータを読み出すことができる。この結果、読み出しに要する時間を短縮し、データ利用のニーズに迅速に対応することができる。なお、不揮発性メモリ154がHDDである場合、シーク時間が短くなるように、ひとまとまりの論理構造を、例えば同じトラック内に保持するようにすると好適であるが、これに限定されるものではない。
【0034】
また、例えば、データベースサーバ100(データ利用者インターフェース120)は、所定のデータ項目におけるValue(データ本体)が設定条件を満たすIndex(レコードを特定可能な情報)を記憶部150から読み出す要求を受け付け、結果を返すことができる。具体的には、「ageのValueが45以上のレコードを取得したい」といった要求がデータ利用者サーバ50から取得された場合、他のデータ項目(id、name、sex、job…)を参照せずに、データ項目「age」のカラムデータに含まれるIndexを読み出すことができる。この場合、データベースサーバ100(データ利用者インターフェース120)は、「age」のカラムデータから順にデータセットを読み出し、Valueの示す値が45以上であるデータセットのIndexを抽出する。この抽出したIndexは、「age」が45以上であるレコードに対する付番であるため、データベースサーバ100は、例えば、列志向型データ154Aとは別に保存されているレコードごとのデータを検索し、「age」が45以上であるレコードを取得することができる。
図9の例では、Indexが4と5であるデータセットが条件に該当するため、データベースサーバ100は、4番目のレコードと5番目のレコードを抽出する。
【0035】
また、
図8および
図9に示すように、変換部114は、Indexが列方向に連続しない場合でも、連続しないIndexを含むデータセットの間に空のメモリ領域を設けない。これによって、データベースサーバ100は、データを読み出す際にメモリ領域をスキップする処理などを省略することができ、処理速度を向上させることができる。また、本実施形態では、データセットに含まれるIndexとValueとを互いに対応付けて不揮発性メモリ154に記憶させるため、予め設定されたデータ項目に関するデータセットでなくても列志向型データ154Aに追加することができる。すなわち、任意のタイミングで自由にデータ項目を追加することができる。
【0036】
図10は、変換部114により実行される処理の流れの一例を示すフローチャートである。まず、変換部114は、不揮発性メモリ154への書き込みタイミングが到来するまで待機する(S100)。不揮発性メモリ154への書き込みタイミングとは、前述したようにキャッシュメモリ152に一定量のデータが格納されたタイミング、データベースサーバ100がシャットダウンされるタイミング、直近までの集計処理が依頼されたタイミングなど、任意に定義することができる。
【0037】
不揮発性メモリ154への書き込みタイミングが到来すると、変換部114は、キャッシュメモリ152に格納されたレコードを一つ選択し(S102)、そのレコードに含まれるデータ項目を一つ選択する(S104)。そして、変換部114は、選択したデータ項目が、既に管理済のデータ項目であるか否かを判定する(S106)。
【0038】
選択したデータ項目が、既に管理済のデータ項目である場合、変換部114は、そのデータ項目の末尾にIndexとValueを追加する(S108)。一方、選択したデータ項目が、既に管理済のデータ項目でない場合、変換部114は、列を新たに設定(定義)し、設定した列にIndexとValueを書き込む(S110)。
【0039】
次に、変換部114は、選択されているレコードの全てのデータ項目を選択したか否かを判定する(S112)。選択されているレコードの全てのデータ項目を選択していない場合、S104に処理が戻される。選択されているレコードの全てのデータ項目を選択した場合、変換部114は、キャッシュメモリ152に格納されている全てのレコードを選択したか否かを判定する(S114)。キャッシュメモリ152に格納されている全てのレコードを選択していない場合、S102に処理が戻される。キャッシュメモリ152に格納されている全てのレコードを選択した場合、本フローチャートの1ルーチンの処理が終了する。
【0040】
[拡張機能]
変換部114は、同じデータ項目について、データ形式が異なるが、統合可能なデータ形式であるデータが入力された場合、これらをキャストして一つのカラムデータにしてもよい。統合可能なデータ形式とは、例えば、int(整数)とlong(桁の長い整数)の組、あるいはfloat(小数点表記)とdouble(桁の長い小数点表記)の組である。変換部114は、それぞれが互いに異なる数値型のデータ形式で定義された同じデータ項目に対応する二以上のカラムデータに関して、所望のタイミングで数値型のうち桁の多い方のデータ形式に揃えて一つのカラムデータを再構成する。
【0041】
図11は、変換部114のキャスト機能について説明するための図である。例えば、「times(ログイン回数)」のようなデータ項目について、レコード10、15、17ではデータ形式[int]で入力され、レコード22でValueの桁が長いためデータ形式[long]で入力された場合、当初のカラムデータは
図11の上図のように二つに分けて設定される。この場合、変換部114は、任意のタイミングで、データ項目[int]のデータセットのデータ形式を[long]に変更して統合する。これによって、データ形式の異なるデータセットについても、例えば合計を求めるような統計処理を効率的に行うことができる。
【0042】
変換部114は、例えば、データ形式として[array]が指定されている場合、複数のデータ項目を分割してカラムデータとする。すなわち、変換部114は、入力されたレコードが階層構造を含む場合、階層構造をカラムデータの形成するメモリ空間に展開して記憶部150に記憶させる。
図12は、変換部114のデータ分割機能について説明するための図である。図示するように、変換部114は、[array]形式の「date」を構成する「yy」と「mm」と「dd」をそれぞれデータ項目とし、親空間(上位空間)とは別のメモリ空間(子空間(下位空間))において、カラムデータとして列志向型で管理する。この場合、変換部114は、親空間における[array]に対応するカラムデータのValueに、子空間におけるオフセット情報であるChildIndexの先頭値と、length(何カラム目まで該当するデータがあるかを示す値)とを格納する。
図12の例では、親空間のデータ項目「date」のIndex=10のデータセットにおけるValueの「ChildIndex(7,2)」は、子空間におけるChildIndex=7および8のデータセットが対応することを示している。また、変換部114は、それらが[array]からの派生であることを示す情報を、子空間におけるカラムデータに付加しておく。これによって、元々は次元数が他のデータ項目よりも多い(階層構造の)入力データを、フラットなデータ構造で管理することができる。
【0043】
[データ利用者インターフェース]
以下、データ利用者インターフェース120の機能について説明する。データ利用者インターフェース120は、例えば、データ利用者サーバ50からの要求に応じて、表形式のデータ(配列データ)を提供する。データ利用者サーバ50からの要求は、任意のデータ項目を指定して行われる。この際に、データ利用者インターフェース120は、指定されたデータ項目を含まないレコードに関しては、そのデータ項目に対応するデータを「null」(或いはブランクなど、「該当データ無し」を示す任意の形態であってよい)とした表形式のデータを生成してデータ利用者サーバ50に提供する。また、データ利用者インターフェース120は、指定されたデータ項目が既に管理されているデータ項目の中に無い場合、エラーを返すのではなく、そのデータ項目についてのデータを全て「null」(或いはブランクなど、「該当データ無し」を示す任意の形態であってよい)とした表形式のデータを生成してデータ利用者サーバ50に提供する。なお、データ利用者サーバ50からの要求は、例えば所定の拡張子を指定することで行われてよい。
【0044】
例えば、
図9に示すようなデータが列志向型データ154Aとして不揮発性メモリ154に格納されている状態で、データ項目[sex、age、job、hobby(趣味)]を指定したデータの要求があったとする。この場合、データ利用者インターフェース120による出力データのイメージは、
図13のようになる。
図13は、データ利用者インターフェース120による出力データのイメージを示す図である。図示するように、データ利用者インターフェース120による出力データは、データの有無に拘わらず、レコードごと且つデータ項目ごとにデータを配列化して表したデータである。これによって、データベースサーバ100は、データ利用者サーバ50のニーズに応じた形式でデータを提供することができる。
【0045】
図14は、データ利用者インターフェース120により実行される処理の流れの一例を示すフローチャートである。まず、データ利用者インターフェース120は、データの要求を取得するまで待機する(S200)。データの要求を取得すると、データ利用者インターフェース120は、スキーマ情報154Bから、現時点でのレコードの最大数を取得する(S202)。この最大数をnとする。次に、データ利用者インターフェース120は、データの要求に含まれるデータ項目数×nの配列を定義する(S204)。この配列が、出力データの枠組みとなる。
【0046】
次に、データ利用者インターフェース120は、データの要求からデータ項目を一つ選択し(S206)、選択したデータ項目が、既に列志向型データ154Aに設定済であるか否かを判定する(S208)。データ利用者インターフェース120は、選択したデータ項目が、既に列志向型データ154Aに設定済でない場合、当該データ項目のデータを全てnullにする(S210)。
【0047】
一方、選択したデータ項目が、既に列志向型データ154Aに設定済である場合、データ利用者インターフェース120は、列志向型データ154Aから、現在選択されているデータ項目のデータを一つ読み出す(S212)。次に、データ利用者インターフェース120は、S212において読み出し可能なデータが存在しなかったか否かを判定する(S214)。S212において読み出し可能なデータが存在した場合、データ利用者インターフェース120は、その読み出しに至るまでにレコード番号が飛ばされたか否かを判定する(S216)。レコード番号が飛ばされた場合、データ利用者インターフェース120は、飛ばされたレコード番号のデータをnullにする(S218)。そして、データ利用者インターフェース120は、列志向型データ154Aから読み出したデータをS204で設定した配列に含める(S220)。
【0048】
S210の処理を行った後、或いは、S214において肯定的な判定を得た後、データ利用者インターフェース120は、繰り返しS206が行われる中で全てのデータ項目を選択したか否かを判定する(S222)。全てのデータ項目を選択していない場合、S206に処理が戻される。一方、全てのデータ項目を選択した場合、データを出力する(S224)。この段階で、配列における全てのデータに、列志向型データ154Aから読み出されたデータ、或いはnullが格納されている筈である。
【0049】
以上説明した本発明のデータ管理装置、データ管理方法、およびプログラムによれば、入力されたレコードを解釈してデータ項目とデータ本体との対応関係が認識可能な抽象表現に変換し、データ項目ごとに、データ本体とレコードを特定可能なインデックス情報とを対応付けたデータセットを、カラムデータとして記憶部150に記憶させることにより、非構造的な入力データについて列志向型としての利用を可能にしつつ、入力レコードの特定も容易に行うことができる。
【0050】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。