(57)【特許請求の範囲】
【請求項１】
各項目に関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記項目ごとに、前記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を記憶する記憶部と、前記記憶部に接続されたデータベース管理部とを有するカラムストア型データベース管理システムであって、
前記記憶部は、第１の表形式データに対応し、第１の項目に係る前記値リストと前記値番号配列とを含む第１のデータ構造を記憶し、
前記データベース管理部は、入力の第２の表形式データから前記記憶部に記憶するための第２のデータ構造を作成するデータ構造作成部を有し、
前記データ構造作成部は、前記第１のデータ構造の前記第１の項目に係る前記値リストを利用して前記第２のデータ構造の第１の項目に係る前記値リストを作成する、
カラムストア型データベース管理システム。
【請求項２】
前記データベース管理部は、
前記第２の表形式データの前記レコードの前記第１の項目から、前記第１のデータ構造の前記第１の項目に存在しない新しい項目値を抽出し、
前記第２のデータ構造の前記第１の項目に係る前記値リストを作成するために、前記新しい項目値をソートした結果と前記第１のデータ構造の前記第１の項目に係る前記値リストとをマージする、
請求項１に記載のカラムストア型データベース管理システム。
【請求項３】
前記データベース管理部は、前記第２の表形式データのレコードの項目ごとに、当該項目に係る前記値リストを前記第１の表形式データの対応する項目に係る前記値リストを利用して作成するか否かを定義する継承列定義に基づいて、前記データ構造作成部を制御する継承制御部を有する、
請求項１または２に記載のカラムストア型データベース管理システム。
【請求項４】
前記データベース管理部は、ユーザから参照可能な継承列履歴情報部を有し、
前記データ構造作成部は、前記第２のデータ構造の第１の項目に係る前記値リストと前記第１のデータ構造の第１の項目に係る前記値リストとの一致度を算出して前記継承列履歴情報部に記録する、
請求項１乃至３の何れかに記載のカラムストア型データベース管理システム。
【請求項５】
前記データベース管理部は、ユーザから参照可能な一致率情報部と、前記第１のデータ構造以外の他の表形式データのデータ構造から、前記第２のデータ構造の第１の項目以外の項目の項目値との一致率が閾値以上に高い項目を検出し、検出結果を前記一致率情報部に記録する一致率検出部とを有する、
請求項１乃至３の何れかに記載のカラムストア型データベース管理システム。
【請求項６】
前記第１のデータ構造の前記第１の項目に係る前記値リストは、前記第２の表形式データの前記レコードの前記第１の項目に存在する全ての項目値を有するマスタテーブルに係る値リストである場合、前記データ構造作成部は、前記第１のデータ構造の前記第１の項目に係る前記値リストそのものを前記第２のデータ構造の第１の項目に係る前記値リストとして使用する、
請求項１に記載のカラムストア型データベース管理システム。
【請求項７】
各項目に関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記項目ごとに、前記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を記憶する記憶部と、前記記憶部に接続されたデータベース管理部とを有するカラムストア型データベース管理システムにおけるデータロード方法であって、
前記記憶部は、第１の表形式データに対応し、第１の項目に係る前記値リストと前記値番号配列とを含む第１のデータ構造を記憶し、
前記データベース管理部は、入力の第２の表形式データから前記記憶部に記憶するための第２のデータ構造を作成し、
前記第２のデータ構造の作成では、前記データベース管理部は、前記第１のデータ構造の前記第１の項目に係る前記値リストを利用して前記第２のデータ構造の第１の項目に係る前記値リストを作成する、
データロード方法。
【請求項８】
各項目に関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記項目ごとに、前記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を記憶する記憶部と、前記記憶部に接続されたデータベース管理部とを有し、前記記憶部は、第１の表形式データに対応し、第１の項目に係る前記値リストと前記値番号配列とを含む第１のデータ構造を記憶している、カラムストア型データベース管理システムにおける前記データベース管理部を構成するコンピュータを、
入力の第２の表形式データから前記記憶部に記憶するための第２のデータ構造を作成し、該作成では、前記第１のデータ構造の前記第１の項目に係る前記値リストを利用して前記第２のデータ構造の第１の項目に係る前記値リストを作成するデータ構造作成部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カラムストア型データベース管理システム、データロード方法、およびプログラムに関する。
【背景技術】
【０００２】
リレーショナルデータベース管理システム（ＲＤＢＭＳ）は、幾つかの項目からなるレコードの集合である表として情報を蓄積する方式のデータベースシステムである。項目、レコード、表は、それぞれ列、行、テーブルとも呼ばれる。リレーショナルデータベース管理システムには、一般的な行指向のリレーショナルデータベース管理システムと、カラムストア型データベース管理システムと呼ばれる列指向のリレーショナルデータベース管理システムとがある。前者の一般的なリレーショナルデータベース管理システムは、行方向にデータをまとめて扱うため、追加、更新、削除を伴うオンライントランザクション処理に適している。他方、後者のカラムストア型データベース管理システムは、列方向にデータをまとめて扱うため、列を抜き出して操作する集計処理や検索などに適している。本発明は、後者のカラムストア型データベース管理システムの改良に関する。
【０００３】
列方向にデータをまとめて扱うカラムストア型データベース管理システムでは、列ごとに、重複するデータを排除して保持するデータ構造を採用している。例えば、ＦＡＳＴ構造と呼ばれるデータ構造では、表形式データの項目ごとに、項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、レコードの順番に上記項目値番号を指定する情報が格納されている値番号配列とを有している（例えば特許文献１参照）。
【０００４】
図１９は、１つの表形式データとそれに対応するＦＡＳＴ構造データの例を示している。この例の表形式データは、学籍番号、名前、生年月日、性別という各項目（各列）に関連する項目値を含むレコード（行）の配列として表されている。また、ＦＡＳＴ構造データは、行番号を表す順序集合と、列ごとの値リストおよび値番号配列のペアとから構成されている。ある項目に係る値リストには、当該項目に存在する項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている。例えば、性別の項目に係る値リストには、０と１の項目値番号に対応して、男と女という項目値が格納されている。また、ある項目に係る値番号配列には、レコードの順番に項目値番号を指定する情報が格納されている。例えば、性別の項目に係る値番号配列には、レコードの順番に１、０、０、０、１、１、０、０、１、０という項目値番号を指定する情報が格納されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３５８１８３１号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＦＡＳＴ構造を用いたカラムストア型データベース管理システムでは、新しい表形式データを記憶部にロードする際、その表形式データをＦＡＳＴ構造に変換しなければならない。表形式データをＦＡＳＴ構造に変換するためには、その表形式データの項目ごとに、値リストと値番号配列とを作成する必要がある。値リストは、項目に係る全ての項目値をマージソートなどの一般的なソート方法を用いて重複を排除してソートすることにより作成できる。また値番号配列は、項目の各項目値をその項目の値リストと突き合わせていくことで作成できる。しかし、値番号配列の作成に要する計算量のオーダＯがｎであるのに対して、値リストの作成に要する計算量のオーダＯはｎ×ｌｏｇ ｎになる。ここで、ｎは表形式データの行数である。このため、表形式データをＦＡＳＴ構造に変換するのに要する計算量のオーダはｎ×Ｌｏｇ ｎになり、行数ｎの多い表形式データでは、各項目に係る値リストの作成に長時間を要し、その結果、新しい表形式データの高速なロードが困難になるという課題があった。
【０００７】
本発明の目的は、上述した課題、すなわち、表形式データの高速なロードは困難である、という課題を解決するカラムストア型データベース管理システムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の一実施形態に係るカラムストア型データベース管理システムは、
各項目に関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記項目ごとに、前記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を記憶する記憶部と、前記記憶部に接続されたデータベース管理部とを有するカラムストア型データベース管理システムであって、
前記記憶部は、第１の表形式データに対応し、第１の項目に係る前記値リストと前記値番号配列とを含む第１のデータ構造を記憶し、
前記データベース管理部は、入力の第２の表形式データから前記記憶部に記憶するための第２のデータ構造を作成するデータ構造作成部を有し、
前記データ構造作成部は、前記第１のデータ構造の前記第１の項目に係る前記値リストを利用して前記第２のデータ構造の第１の項目に係る前記値リストを作成する。
【０００９】
本発明の他の実施形態に係るデータロード方法は、
各項目に関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記項目ごとに、前記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を記憶する記憶部と、前記記憶部に接続されたデータベース管理部とを有するカラムストア型データベース管理システムにおけるデータロード方法であって、
前記記憶部は、第１の表形式データに対応し、第１の項目に係る前記値リストと前記値番号配列とを含む第１のデータ構造を記憶し、
前記データベース管理部は、入力の第２の表形式データから前記記憶部に記憶するための第２のデータ構造を作成し、
前記第２のデータ構造の作成では、前記データベース管理部は、前記第１のデータ構造の前記第１の項目に係る前記値リストを利用して前記第２のデータ構造の第１の項目に係る前記値リストを作成する。
【００１０】
本発明の他の実施形態に係るプログラムは、
各項目に関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記項目ごとに、前記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を記憶する記憶部と、前記記憶部に接続されたデータベース管理部とを有し、前記記憶部は、第１の表形式データに対応し、第１の項目に係る前記値リストと前記値番号配列とを含む第１のデータ構造を記憶している、カラムストア型データベース管理システムにおける前記データベース管理部を構成するコンピュータを、
入力の第２の表形式データから前記記憶部に記憶するための第２のデータ構造を作成し、該作成では、前記第１のデータ構造の前記第１の項目に係る前記値リストを利用して前記第２のデータ構造の第１の項目に係る前記値リストを作成するデータ構造作成部、
として機能させる。
【発明の効果】
【００１１】
本発明は上述した構成を有するため、表形式データを高速にロードすることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施形態に係るカラムストア型データベース管理システムのブロック図である。
【図２】本発明の第２の実施形態に係るカラムストア型データベース管理システムにおいて、第１のデータ群の列のＶＬを利用して、第２のデータ群の列のＶＬ、ＶＮｏを作成する手順を示す図である。
【図３】本発明の第２の実施形態に係るデータベース管理システムのブロック図である。
【図４】本発明の第２の実施形態においてパーティションで区切りたい時系列データのテーブルを作成するクエリの例を示す図である。
【図５】本発明の第２の実施形態における継承列定義部の内容例を示す図である。
【図６】本発明の第２の実施形態における入力となるＣＳＶファイルの内容例を示す図である。
【図７】本発明の第２の実施形態におけるロード手順を示すフローチャートである。
【図８】本発明の第２の実施形態において第２のデータ群のデータを１つずつ順に調べ、第１のデータ群のＶＬのデータと突き合わせながら、新規データを抽出する手順の具体例を示す図である。
【図９】本発明の第２の実施形態において第２のデータ群のＶＮｏを作成する手順の具体例を示す図である。
【図１０】本発明の第３の実施形態に係るデータベース管理システムのブロック図である。
【図１１】本発明の第３の実施形態における継承列履歴情報部の内容の一例を示す図である。
【図１２】本発明の第３の実施形態において、継承列ごとに閾値を設定するクエリの例と、そのクエリに基づいて作成された継承列定義の例とを示す図である。
【図１３】本発明の第４の実施形態に係るデータベース管理システムのブロック図である。
【図１４】本発明の第４の実施形態におけるＶＬ一致率情報部の内容の一例を示す図である。
【図１５】本発明の第４の実施形態における継承列定義部の内容の一例を示す図である。
【図１６】本発明の第５の実施形態に係るデータベース管理システムのブロック図である。
【図１７】本発明の第５の実施形態における売上テーブルの定義の例を示す図である。
【図１８】本発明の第５の実施形態におけるマスタ列定義部の内容例を示す図である。
【図１９】表形式データとそれに対応するＦＡＳＴ構造データの例を示す図である。
【発明を実施するための形態】
【００１３】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態に係るカラムストア型データベース管理システム１００は、記憶部１１０と、記憶部１１０に接続されたデータベース管理部１２０とを有する。
【００１４】
記憶部１１０は、表形式データに対応するデータ構造を記憶する機能を有する。表形式データは、各項目に関連する項目値を含むレコードの配列として表される。これに対して、データ構造は、上記項目ごとに、上記項目値を一意に特定する項目値番号に対応して当該項目における項目値が格納されている値リスト（以下、ＶＬと呼ぶ）と、レコードの順番に上記項目値番号を指定する情報が格納されている値番号配列（以下、ＶＮｏと呼ぶ）とを含んで構成される。
【００１５】
データベース管理部１２０は、表形式データを入力し、記憶部１１０に記憶するためのデータ構造を作成するデータ構造作成部１２１を有する。データ構造作成部１２１は、記憶部１１０に新たに記憶するためのデータ構造の項目に係るＶＬを、記憶部１１０に既に記憶されているデータ構造の項目に係るＶＬを利用して作成する機能を有する。
【００１６】
記憶部１１０は、例えばコンピュータのメモリやハードディスクなどの記憶装置で構成される。またデータベース管理部１２０は、例えば、コンピュータの演算処理部を構成するマイクロコンピュータおよびその上で実行されるプログラムにより構成される。
【００１７】
次に本実施形態の動作を説明する。
【００１８】
初期の状態として、第２の表形式データ１３０のロードが行われる以前にロードされた第１の表形式データのデータ構造１１１が記憶部１１０に記憶されている。また、データ構造１１１は、項目ｉに係るＶＬ１１２と項目ｉに係るＶＮｏ１１３とを含んでいる。
【００１９】
データベース管理部１２０のデータ構造作成部１２１は、第２の表形式データ１３０を入力すると、記憶部１１０に記憶するための第２の表形式データのデータ構造１１４を作成する。その際、データ構造作成部１２１は、第１の表形式データのデータ構造１１１の項目ｉに係るＶＬ１１２を利用して、第２の表形式データのデータ構造１１４の項目ｉに係るＶＬ１１５を作成する。例えば、データ構造作成部１２１は、第２の表形式データ１３０のレコードの項目ｉから、第１の表形式データのデータ構造１１１の項目ｉに存在しない新しい項目値を抽出し、この抽出した新しい項目値をソートした結果とＶＬ１１２とをマージすることによって、ＶＬ１１５を作成する。またデータ構造作成部１２１は、作成したＶＬ１１５と第２の表形式データ１３０の項目ｉの項目値とから、第２の表形式データのデータ構造１１４の項目ｉに係るＶＮｏ１１６を作成する。そして、データ構造作成部１２１は、作成したデータ構造１１４を記憶部１１０に記憶する。
【００２０】
このように本実施形態によれば、第２の表形式データ１３０を高速にロードすることができる。
【００２１】
その理由は、データ構造作成部１２１は、第１の表形式データのデータ構造１１１の項目ｉに係るＶＬ１１２を利用して、第２の表形式データのデータ構造１１４の項目ｉに係るＶＬ１１５を作成するためである。例えば、第２の表形式データ１３０のレコードの項目ｉの項目値の全てが、第１の表形式データのデータ構造１１１の項目ｉに係るＶＬ１１２に存在する場合、ＶＬ１１２をそのままＶＬ１１５に使用することができる。これは極端な例であるが、第２の表形式データ１３０のレコードの項目ｉの項目値と第１の表形式データのレコードの項目ｉの項目値との重複度が高いほどに、上記抽出される新しい項目値の数が少なくなるため、第２の表形式データ１３０のレコードの項目ｉの項目値を使って最初からＶＬ１１５を作成する場合に比べて計算量を大幅に削減することができる。
【００２２】
以下、第１の実施形態をより具体化した他の実施形態について説明する。
【００２３】
[第２の実施形態]
次に本発明の第２の実施形態について説明する。本実施形態では、カラムストア型データベースにおいて、過去のデータと重複度の高いデータをロードする際に、他の列や過去の情報を参照することで、その処理時間を短縮する。
【００２４】
＜本実施形態が解決しようとする課題＞
データベースの運用方法として、１ケ月の売上データや商品継承テーブルの入れ替え等、ひとまとまりのデータ群を一括でロードする、といったことはよくある。ＦＡＳＴ構造のように、テーブルの列ごとに、成分を分解してデータを保持するようなカラムストア型データベースでは、上記のようなデータ群を一括でロードした際には、そのデータ群からＶＬ（およびＶＮｏ）を一から作成して保持することになる。このＶＬ（およびＶＮｏ）の作成処理は、データサイズが大きくなるほど時間がかかる。
【００２５】
本実施形態では、ひとまとまりの新しいデータ群を一括ロードする際に、その新しいデータ群とデータの種類が多く重複していると思われる、既にＦＡＳＴ構造化されているデータ群の列のＶＬを利用することにより、新しくロードするデータ群の列のＶＬ（およびＶＮｏ）の作成時間を短縮することを目的としている。以下、既にＦＡＳＴ構造化されているデータ群を第１のデータ群、新しくロードするデータ群を第２のデータ群と呼んで区別する。
【００２６】
＜本実施形態の概要＞
本実施形態において、第１のデータ群の列のＶＬを利用して、第２のデータ群の列のＶＬ、ＶＮｏを作成する手順を図２に示す。本実施形態では、利用しようとする第１のデータ群のＶＬ（以後、継承ＶＬと呼ぶ。また、その列を継承列と呼ぶ。）に存在するデータは、重複排除を行いソート済みの形式で格納している。このため、まず、新しくロードするデータ群（Ｎ個）を検索し、継承ＶＬのデータ（Ｘ個）に存在しない新たなユニークデータ（Ｙ個）を抽出する（手順１）。次に、抽出したデータ（Ｙ個）を重複排除してソートする（手順２）。これにより、部分的なＶＬデータ（Ｚ個）ができる。次に、部分的なＶＬデータ（Ｚ個）と継承ＶＬとをマージすることにより、第２のデータ群の列のＶＬ（Ｘ＋Ｚ個）を作成する（手順３）。これによって、第１のデータ群の列のデータ（Ｎ個）を重複排除してソートしてＶＬを作成する方法に比べて処理時間が短縮できる。継承ＶＬのデータと第２のデータ群とが多く共通している（一致率が高い）ほど、効果は大きくなる。最後に、第２のデータ群のデータ（Ｎ個）を手順３で作成したＶＬ（Ｘ＋Ｚ個）と突き合わせながら、第２のデータ群の列のＶＮｏを作成する（手順４）。
【００２７】
利用する継承列の選出方法は複数考えられる。これについては後述する。
【００２８】
＜本実施形態の構成＞
図３は本実施形態に係るデータベース管理システム２００の全体構成を示すブロック図である。図３を参照すると、データベース管理システム２００は、クライアントアプリケーション２１０からクエリを受け付け、それを解析して処理し、結果をクライアントアプリケーション２１０に返す。データベース管理システム２００は、主な機能部として、クエリ解析部２０１、クエリ処理部２０２、データ格納部２０３、継承列定義部２０４、ＶＬ継承制御部２０５、およびデータ構造生成部２０６を有する。これらの各部２０１〜２０６は、例えば、データベース管理システム２００を構成するコンピュータとその上で動作するプログラムとで実現することができる。
【００２９】
データベース管理システム２００では、クエリの解析はクエリ解析部２０１で行い、クエリの処理はクエリ処理部２０２で行う。クエリ処理部２０２は、データ格納部２０３にＦＡＳＴ構造で格納されているデータを適宜、読み出したり、更新したりする。継承列定義部２０４は、どのテーブルのどの列が継承列として定義されているかの定義情報を保持している。ＶＬ継承制御部２０５は、ロードデータ中の複数列のうち、どの列が継承列の継承ＶＬを利用するかを判断する機能を有する。データ構造生成部２０６は、新しいロードデータのＶＮｏ、ＶＬを生成する機能を有する。
【００３０】
次に、本実施形態の動作を説明する。以下では、ＶＬが既存のものと一致する確率が高いケースとして、１つの論理テーブルを複数の物理テーブルに分けて格納するパーティショニングの方式を採用した場合を用いて説明する。より具体的には、パーティションにより一定区間ごとに区切られているテーブルに対して、新しい区間データをロードする場合を考える。なお、本発明は、列間のＶＬ一致率が高ければ実施できるため、パーティショニングに適用が限定されるものではない。
【００３１】
売上データなどの長期間のデータを１つのテーブルで管理することは良くある。この際、データ量の増加によって、検索や集計処理の性能が劣化する、管理が複雑になる、といった問題がでてくる。こういった問題の１つの対応策として、テーブルをパーティションで区切るという処置がある。一例として、一番古い１ヶ月分のレコードをすべて削除することを考えると、上記処置を取っていない場合は、全売上データの中から対象区間のレコードがどこに存在するかを検索し、それぞれを削除する処理が必要になる。これに対して、上記処置を取っている場合には、すでに１ヶ月分のデータがまとまりになっているため、そのまとまりを削除する処理だけでよくなる。
【００３２】
この場合、テーブル定義が同じの為、前区間の継承列のＶＬが継承ＶＬとして有効である可能性が高い。何故なら、前１ヶ月で売れた商品の種類と新規１ヶ月で売れた商品の種類が似ている、などの傾向があるためである。ただし、列の特性によっては、有効でないこともあるため、テーブル定義時に、ユーザが継承列と成りうる列を明示的に指定するようにする。
【００３３】
まず初めに、パーティションで区切りたい時系列データのテーブルを作成するクエリをクライアントアプリケーション２１０から発行する。その際、継承列を同時に指定するようにする。図４は、そのクエリ例である。このクエリは、売上テーブルを作成し、日付の列の値に応じて、２０１４年の月別にパーティションを分ける、ということを表している。「ｐ２０１４ＸＸ」（ＸＸは０１〜１２の何れかが入る）の部分がパーティション名である。このクエリは擬似的なものであり、実際の正しい構文はＤＢＭＳに依存する。ここまでの定義は一般的なものである。本実施形態では、列名、データ型の後ろに、継承列となる列を表すために「ＩＮＨＥＲＩＴＡＮＣＥ」というキーワードを付け加えている。クエリ解析部２０１はこのクエリを読み取ると、継承列定義部２０４に、図５に示すような継承列とテーブルの情報を格納する。格納方法は、外部ファイル、専用のテーブルなどが考えられる。
【００３４】
図４では、「商品名」、「個数」、「金額」の列に継承列指定がされており、その他の列、すなわち「売上ｉｄ」、「ユーザ名」、「日付」の列には継承列指定はない。これらの列を継承列指定から除外した理由は、以下の通りである。但し、以下の理由はあくまで例であり、データの特性により変わりうる。
【００３５】
「売上ｉｄ」：昇順の連番であることが多く、前区間と新しい区間ではまったく別の値が付与されており、１つも重複しないと考えられるため。
「ユーザ名」：商品やユーザ数にもよるが、何かしらの商品を購入する間隔が１ヶ月よりも長いユーザはある程度存在すると考え、前区間と新しい区間であまりユーザの重複が見られないと予想されるため。
「日付」：区間は月別で分けられているため、前区間と新しい区間で日付が重複することはない。
【００３６】
さて、この売上テーブルに新しく１ヶ月分のデータをロードする場面を考える。ロードは、クライアントアプリケーション２１０からＣＳＶ形式のような外部ファイルを指定したロード専用のクエリをデータベース管理システム２００に発行することで行われる。図６はそのＣＳＶファイルの内容例である。この例では、２０１４年１１月分のデータである。
【００３７】
図７はロード手順を示すフローチャートである。データベース管理システム２００は、クエリ処理部２０２により１ヶ月前のデータが存在するか否かを判定し（ステップＳ２０１）、存在しない場合、データ構造生成部２０６により従来通りの方法で列ごとにＶＮｏ、ＶＬを作成する（ステップＳ２０２）。一方、存在する場合、ＶＬ継承制御部２０５により列の定義を順に確認する（ステップＳ２０３）。そして、キーワード「ＩＮＨＥＲＩＴＡＮＣＥ」が付与されていない列に対しては、データ構造生成部２０６により従来通りの方法で当該列のＶＮｏ、ＶＬを作成する（ステップＳ２０５）。またキーワード「ＩＮＨＥＲＩＴＡＮＣＥ」が付与されている列に対しては、データ構造生成部２０６により継承ＶＬを利用して当該列のＶＮｏ、ＶＬを作成する（ステップＳ２０６）。ＶＬ継承制御部２０５により全ての列のＶＮｏ、ＶＬの作成が完了したか否かが判定され、完了していなければステップＳ２０３に戻って上述した処理と同様の処理を繰り返す。完了していれば図７の処理を終える。
【００３８】
次に、ステップＳ２０６において、継承列の継承ＶＬを利用してＶＬおよびＶＮｏを作成する手順（図２の手順１〜手順４）の詳細を説明する。
【００３９】
前提として、１０月の「商品名」列の継承ＶＬが１万件、１１月のデータ件数が１００万件とし、「商品列」を対象に、ＣＰＵコア数４で並列に処理を行うものとする。
【００４０】
手順１の詳細
まず、図８に示すように、１１月のデータ件数を４分割して２５万件ずつとし、ＣＰＵコアにそれぞれ割り振る。そして、１つのＣＰＵコアはその２５万件のデータに対し、先頭から１件ずつデータを確認していき、それが１０月の継承ＶＬに含まれるかどうかを調べ、含まれない場合（つまり、その商品は１０月に売り上げが１つも無かった）は、１１月の新規データとして抜き出す。最終的に、合計８０００件（ＣＰＵコア１による抜き出し２１００件、ＣＰＵコア２による抜き出し１９００件、ＣＰＵコア３による抜き出し１８００件、ＣＰＵコア４による抜き出し２２００件の合計）の１１月の新規データを抜き出したとする（図８参照）。
【００４１】
手順２の詳細
次に、この８０００件のデータを重複排除しながらソートして１１月の新規データＶＬ（部分的なＶＬ）を作成する。この処理は、マージソートなどの一般的なソート方法を用い、重複データを消していくことで行える。この処理によって、１１月の新規データＶＬが１００件になったとする。
【００４２】
手順３の詳細
手順２で作成した分的なＶＬは、１１月に新たに出現したデータのみに関するＶＬなので、１０月にも出現していたデータ（継承ＶＬ）１万件とマージする。どちらのＶＬもソートされているため、２つのＶＬを上から順番に比較するだけでマージは可能である。その結果、サイズ１０１００（１００００＋１００）件の１１月のＶＬができる。
【００４３】
ただし、このＶＬには、本来不要である「１０月に売り上げがあったが、１１月に売り上げが無かった商品データ」が混じっていることに注意が必要である。この本来不要なデータはこのタイミングでは削除しないこととする。ただし、これらのデータは、新しい月のデータをロードするたびに蓄積されていってしまうため、ユーザが運用シナリオを検討し、定期的に（例えば１年に１回）ＶＮｏ、ＶＬの作り変えを行い、その時に削除するようにすることが望ましい。ＶＮｏ、ＶＬの作り変えは、従来方法を用いて行う。
【００４４】
手順４の詳細
最後に、１１月のＶＬを用いて、１１月のＶＮｏを作成する。図９に示すように、１１月のデータ件数を４分割して２５万件ずつとし、ＣＰＵコアにそれぞれ割り振る。そして、１つのＣＰＵコアはその２５万件のデータに対し、先頭から１件ずつデータを確認していき、それが１１月のＶＬのどの添え字番号に存在するかを調べ、見つけた添え字番号をＶＮｏデータの値とする。
【００４５】
＜効果の説明＞
このように本実施形態によれば、継承ＶＬと新たに作成するＶＬの一致度が高いほど、重複排除してソートする範囲が従来手法よりも小さくて済み、ＶＬ（およびＶＮｏ）の作成処理時間が短縮する。その結果、新しいデータ群の一括ロード処理時間が短縮する。
【００４６】
[第３の実施形態]
次に本発明の第３の実施形態について説明する。本実施形態に係るデータベース管理システムでは、過去のロード実行時のＶＬデータ一致率を履歴として保持する機能を有し、ＶＬデータ一致率が低く、高い改善効果が望めない列に対しては、継承列指定を外すかどうかをユーザが容易に判断できるようにする。また、本実施形態に係るデータベース管理システムは、ＶＬデータ一致率がある閾値を下回ったらユーザにその旨の情報を提示するか、自動で継承列指定を外す機能を有する。
【００４７】
ユーザは、前区間のデータと新規区間のデータのＶＬ一致率が高いかどうかを考えて、継承列の指定を行う。しかし、実際に運用を続けた結果、前区間と新規区間でＶＬデータの一致があまりなくて効果がでない場合が考えられる。そこで、本実施形態では、過去の継承列のＶＬデータ一致率を履歴として保存しておき、継承列指定を解除するかどうかをユーザが判断しやすいようにする。また、設定した閾値を下回っている列がある場合、ロード時にそれをユーザに通知する、または自動で継承列指定を外す、というようにしても良い。
【００４８】
図１０は、本実施形態に係るデータベース管理システム３００のブロック図である。本実施形態に係るデータベース管理システム３００が、第２の実施形態に係るデータベース管理システム２００と相違するところは、継承列履歴情報部３０１を有する点にある。
【００４９】
継承列履歴情報部３０１は、月ごとのロードにおける、継承列のＶＬデータ一致率を格納する機能を有する。この継承列履歴情報部３０１には、ロードを実施するごとに新しくデータが追加される。継承列履歴情報部３０１は、メモリ上のテーブルなどが考えられるが、外部ファイルなどの他の記憶領域でも構わない。
【００５０】
図１１は継承列履歴情報部３０１の内容の一例を示す。この例では、売上テーブルに存在する継承列である商品名、個数、金額の過去５ヶ月間のロードに対する、ＶＬ一致率の履歴を表形式で表している。例えば、表の３行目３列目は、２０１４年２月分のデータをロードした際に、個数の列では、｛（１月分の継承ＶＬ数）／（２月分のＶＬ数）｝×１００＝９９．００パーセントのＶＬが一致した、ということを表している。このＶＬ一致率は、例えばデータ構造生成部２０６で作成され、継承列履歴情報部３０１に記録される。この継承列履歴情報は、クライアントアプリケーション２１０から自由に参照することが可能である。
【００５１】
今、３月のデータのロードを実施した後、ユーザが継承列履歴情報を見て、金額の列のＶＬ一致率が閾値（例えば９５％）より低いことに気づいたとする。そして、ユーザは、継承列定義部２０４の情報を変えるクエリ（ＡＬＴＥＲ  ＴＡＢＬＥなど）の発行によって、金額の列を継承列から削除したとする。そうすると、データ構造生成部２０６は、４月以降、金額の列のＶＮｏ、ＶＬの作成には継承ＶＬを使用しなくなる。また４月以降に、継承列履歴情報部３０１を更新する際、データ構造生成部２０６は、金額の列の該当箇所には、図１１に示すようにＮＵＬＬを入れる。
【００５２】
ある列が一定の閾値（９９％など）を下回った場合、その旨を一括ロードする際にユーザに提示するように構成してもよい。あるいは、ある列が一定の閾値（９９％など）を下回った場合、データ構造生成部２０６は、当該列については継承列を利用してＶＬを作成する処理を停止するようにしてよい。具体的には、例えばデータ構造生成部２０６は自動で継承列定義を解除し、従来手法でＶＮｏ、ＶＬを作成するようにしてもよい。従来手法で行うようにした場合、継承列定義部２０４から該当する継承列の定義を削除する。
【００５３】
あるいは、上記閾値を列ごとにユーザが設定できるようにしても良い。図１２は、継承列ごとに閾値を設定するクエリの例と、そのクエリに基づいて作成された継承列定義の例とを示す。図４に示すクエリおよび図５に示す継承列定義と比較して、図１２に示すクエリおよび継承列定義には、９９、９５、９５といった閾値が括弧付きで付記されている。
【００５４】
本実施形態によれば、ユーザは、継承列履歴情報部３０１の内容を参照することにより、継承列指定した列ごとの最新のＶＬデータ一致率を確認することができる。そのため、ユーザは、最新の情報に基づいて、該当する列のＶＮｏ、ＶＬ作成処理を、継承ＶＬを利用する方法、利用しない方法のどちらで行うかを決定できる。そして、ＶＬデータ一致率が低く、高い改善効果が望めなくなった継承列に対しては、継承列指定を外す操作を行うことにより、処理時間が速い方の方法を選択することができ、一括ロードの全体処理時間を短縮することができる。
【００５５】
また本実施形態によれば、ある列が一定の閾値（９９％など）を下回った場合、当該列については継承列を利用してＶＬを作成する処理を自動で停止させることができる。
【００５６】
[第４の実施形態]
次に本発明の第４の実施形態について説明する。本実施形態に係るデータベース管理システムでは、任意のタイミングで、ＶＬ一致率が高そうなテーブルの列をサーチし、検出結果を保存してユーザに提示することで、ユーザが継承列指定を判断できるようにする。または、任意のタイミングで、ＶＬ一致率がある閾値を上回っているテーブルの列をサーチし、検出結果を保存してユーザに提示することで、ユーザが継承列指定を判断できるようにする。または、任意のタイミングで、ＶＬ一致率がある閾値を上回っているテーブルの列をサーチし、自動で継承列として指定するようにする。
【００５７】
継承列として指定しなかった列であっても、継承ＶＬとして利用可能な他の列が存在することが考えられる。例えば、売上テーブルのユーザ名の列は、第２の実施形態では継承列としては除外したが、論理テーブルを構成する物理テーブル以外の別テーブルとして、ユーザ名のマスタテーブルがほとんどの場合に存在するはずであり、かつ、その中の列のユーザ名には全ユーザが網羅されているはずである。そのため、マスタテーブルのユーザ名の列のＶＬを継承ＶＬとして使用すれば、ＶＬ一致率は１００％になる。
【００５８】
図１３は、本実施形態に係るデータベース管理システム４００のブロック図である。本実施形態に係るデータベース管理システム４００が、第２の実施形態に係るデータベース管理システム２００と相違するところは、ＶＬ一致率走査部４０１とＶＬ一致率情報部４０２とを有する点にある。
【００５９】
ＶＬ一致率走査部４０１は、定期的に（例えば、システム負荷が低い夜間など）、継承列定義部２０４にテーブル名が定義されているテーブルの列（以下、対象列と記す。図５の例では売上テーブルの列）とＶＬ一致率が高そうな他のテーブルの列を自動で探索する機能を有する。例えば、ＶＬ一致率走査部４０１は、一例としては、対象列と同じスキーマ、同じ列名、同じデータ型の条件をすべて満たす列の組を探し、それぞれの列のＶＬと対象列のＶＬとを比較し、第３の実施形態と同様にＶＬ一致率を算出する。ＶＬ一致率走査部４０１は、算出した結果をＶＬ一致率情報部４０２に書き込む。ＶＬ一致率情報部４０２は、メモリ上のテーブルなどが考えられるが、外部ファイルなどの他の記憶領域でも構わない。
【００６０】
図１４は、ＶＬ一致率情報部４０２の内容の一例を示す。この例のＶＬ一致率情報部４０２は、複数のレコードを格納し、各レコードは、マスタ側テーブル名、対象テーブル名、列名、ＶＬ一致率、検出日、といった項目を有する。例えば、２行目のエントリは、売上テーブルのユーザ名が、ユーザマスタというテーブルのユーザ名に対して、ＶＬ一致率が１００％であったことが、２０１４年１月３日に検出されたことを表している。ＶＬ一致率情報部４０２は、クライアントアプリケーション２１０から自由に参照することが可能である。この情報をユーザが見て、ユーザ名の一致率が高いことに気付いたとすると、ユーザが次回以降の売上テーブルのデータロード時は、ユーザ名の列のＶＮｏ、ＶＬ作成に、ユーザマスタというテーブルの売上の列のＶＬを継承ＶＬとして利用してロードを行うことが考えられる。
【００６１】
図１５は、本実施形態の継承列定義部２０４の内容の一例を示す。別テーブルの列を継承ＶＬで利用するため、継承側テーブル名と列名とが定義されている。このような継承列定義を作成するために、例えば一括ロードを行うクエリでは、継承側テーブル名と列名とを指定する、などの方法が考えられる。
【００６２】
また、ＶＬ一致率走査部４０１は、検出したＶＬ一致率が所定の閾値（９９％など）を超えていれば、一括ロード時などにその旨をユーザに提示するようにしても良い。あるいは、ＶＬ一致率走査部４０１は、検出したＶＬ一致率が所定の閾値（９９％など）を超えていれば、継承列定義部２０４を図１５に示したような内容に自動で書き換えるようにしても良い。あるいは、ＶＬ一致率情報部４０２に継承列定義部２０４の機能を持たせるようにしても良い。例えば、ＶＬ一致率情報部４０２に図１４に破線で示すような継承フラグの項目（初期値はＦａｌｓｅ）を追加し、ＶＬ一致率走査部４０１は、検出したＶＬ一致率が所定の閾値（９９％など）を超えていれば、継承フラグの値をＦａｌｓｅからＴｒｕｅに変更する。ＶＬ継承制御部２０５は、ＶＬ一致率情報部４０２において、継承フラグの値がＴｒｕｅになったエントリに記載された売上テーブルの列は、同エントリのマスタ側テーブル名に記載されたテーブルの列を継承ＶＬとして利用するように制御する。
【００６３】
このように本実施形態によれば、ロードする対象のテーブルの列とＶＬ一致率が高い列を有する別のテーブルをサーチしてユーザに提示するため、ユーザは、広範囲のテーブル群から継承ＶＬを発見することができ、その結果、一括ロードの全体処理時間が短縮する。
【００６４】
また本実施形態によれば、ロードする対象のテーブルの列とＶＬ一致率が閾値以上高い列を有する別のテーブルを検出して、自動的に継承ＶＬに利用するように構成でき、その結果、一括ロードの全体処理時間が短縮する。
【００６５】
[第５の実施形態]
次に本発明の第５の実施形態について説明する。本実施形態に係るデータベース管理システムでは、新たにロードする列のデータ種類をすべて網羅しているような列が他テーブルに存在するとき、その列のＶＬを新規ロードする列のＶＬとすることで、新規ＶＬの作成処理を実質的に省いている。以下、第２の実施形態で説明した商品テーブルの商品名の列を例にとり説明する。
【００６６】
第２の実施形態では、商品名の列を継承列として定義し、図２の手順１〜手順４を実施して、１１月のＶＮｏ、ＶＬを作成した。４つの手順のうち、手順１〜手順３は１１月のＶＬを作成するための処理である。ここで、この列の性質を考えた場合、売上テーブルとは別に、商品名を全て網羅した、商品マスタテーブルの商品名の列というものが存在するのが一般的である。この商品マスタテーブルの商品名の列のＶＬを、そのまま１１月の商品名の列のＶＬとすることで、手順１〜手順３の処理を省き、最初から手順４の処理を実施することでＶＮｏ、ＶＬの作成処理が完了する。以下、商品マスタテーブル側の商品名の列をマスタ列と呼ぶ。この場合は、売上テーブルの１０月のロード時から１１月の新規ロード時までの間に商品マスタテーブルの商品名の列が最新になっている必要がある。
【００６７】
図１６は、本実施形態に係るデータベース管理システム５００のブロック図である。本実施形態に係るデータベース管理システム５００が、第２の実施形態に係るデータベース管理システム２００と相違するところは、マスタ列定義部５０１を有する点にある。
【００６８】
マスタ列定義部５０１は、どのテーブルのどの列をマスタ列として利用するかの定義情報を格納している。
【００６９】
図１７は、売上テーブルの定義の例を示す。図１７に示されるように、商品名の列定義の後ろに、「ＭＡＳＴＥＲ［商品マスタ．商品名］」という記述がある。この記述は、商品マスタテーブルの商品名の列をマスタ列とし、そのＶＬを、売上テーブルの商品名の列のＶＬとして利用することを定義している。この売上テーブルの定義を解析したクエリ解析部２０１は、図１８に示すようなマスタ列定義をマスタ列定義部５０１に書き込む。
【００７０】
手順としては、売上テーブルのデータをロードする前に、商品マスタのテーブルに新規商品データをロードしておき、マスタ列のＶＬを更新しておく。そして、１１月の売上データを一括ロードする。
【００７１】
商品名の列のＶＮｏ、ＶＬの作成時は、手順１〜手順３の処理を省き、商品マスタのテーブルの商品名の列のＶＬを利用して手順４を実施して、ＶＮｏを作成する。
【００７２】
第２の実施形態に比べ、手順１〜手順３の処理が省かれる分、該当列のＶＮｏ、ＶＬの作成処理が速い。しかし、すべての列に対して、手順１〜手順３の処理を省いてよいということではない。
【００７３】
まず、個数や金額といった不特定の数値列については、マスタとなる列が存在することはほぼないため、上記手法は利用できない。
【００７４】
次に、マスタＶＬのサイズが新規にロードするデータの種類数と乖離しすぎていると、性能的に問題となる。例えば、商品マスタのテーブルの商品名の種類が１０万件、１１月に売上があった商品の種類が５０００件だったとする。本実施形態の手法を用いないで、第２の実施形態の手法を利用すると、１１月の商品名の列のＶＬは約５０００件になるが、本実施形態の手法だと１０万件となる。この１０万件には、１１月に売上が無かった商品のデータを多分に含んでいるため、例えば検索処理を行う際に、走査するＶＬデータ数が無駄に多くなり、性能劣化を起こす。
【００７５】
最後に、データの整合性の問題がある。クライアントアプリケーション２１０から送られてくるデータが常に正しいとは限らない。ときには、データ群の中にゴミとなる不要なデータが混じっていたり、逆に必要なデータが欠如していたりすることがある。そういった問題を考慮するならば、手順１〜手順３をあえて行うということも考えられる。例えば、商品マスタに新商品データをロードした際に、ロードすべき新商品データが１つ欠如しており、さらに１１月にその新商品の売上が１つ以上あった場合を考える。手順１〜手順３を行う場合、１１月の新規データ抽出処理をする時点で、その欠如した新商品データを抽出することで１１月のＶＬに組み込むことが可能だが、本実施形態の手法では、ＶＮｏを作る際に、その新商品データがＶＬに含まれていないため、ＶＮｏが作成できずデータの不整合が生じる。この場合は、本実施形態の方法での処理を止め、最初から第２の実施形態の方法で処理をやり直すこととなる。
【００７６】
このように本実施形態によれば、手順１〜手順３の新規ＶＬデータ抽出処理を省くことができ、その分、列のＶＮｏ、ＶＬの作成処理時間が短縮する。
【００７７】
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。
【産業上の利用可能性】
【００７８】
本発明は、ＦＡＳＴ構造を用いたカラムストア型データベース管理ステムに利用できる。特に、あるまとまったデータを一括ロードする際に、許容できる処理時間が定められており（何時から何時までというようにメンテナンス時間が決められている場合など）、その許容時間内にロード処理が終わらないといったときに有効である。即ち、本発明を利用して、ロード処理時間を短縮させ、許容時間内に収めることが可能である。
【符号の説明】
【００７９】
１００、２００、３００、４００、５００…カラムストア型データベース管理システム
１１０…記憶部
１１１…第１の表形式データのデータ構造
１１２…項目ｉに係る値リスト（ＶＬ）
１１３…項目ｉに係る値番号配列（ＶＮｏ）
１１４…第２の表形式データのデータ構造
１１５…項目ｉに係る値リスト（ＶＬ）
１１６…項目ｉに係る値番号配列（ＶＮｏ）
１２１…データ構造作成部
１３０…第２の表形式データ
２０１…クエリ解析部
２０２…クエリ処理部
２０３…データ格納部
２０４…継承列定義部
２０５…ＶＬ継承制御部
２０６…データ構造生成部
２１０…クライアントアプリケーション
３０１…継承列履歴情報部
４０１…ＶＬ一致率走査部
４０２…ＶＬ一致率情報部
５０１…マスタ列定義部
【図１】
0006459669.tif 000002
【図２】
0006459669.tif 000003
【図３】
0006459669.tif 000004
【図４】
0006459669.tif 000005
【図５】
0006459669.tif 000006
【図６】
0006459669.tif 000007
【図７】
0006459669.tif 000008
【図８】
0006459669.tif 000009
【図９】
0006459669.tif 000010
【図１０】
0006459669.tif 000011
【図１１】
0006459669.tif 000012
【図１２】
0006459669.tif 000013
【図１３】
0006459669.tif 000014
【図１４】
0006459669.tif 000015
【図１５】
0006459669.tif 000016
【図１６】
0006459669.tif 000017
【図１７】
0006459669.tif 000018
【図１８】
0006459669.tif 000019
【図１９】
0006459669.tif 000020