(57)【要約】【課題】処理要求にデータベース統合装置で定義されていない関数が含まれていても、その関数の所属先データソースに関数の実行をさせて、処理要求に対する処理結果を端末装置に返す。【解決手段】データベース・システムは、所属先判定部と、プログラム生成部と、プログラム実行部とを有する。所属先判定部は、端末装置から送信された処理要求を受信し、この処理要求に含まれる関数の所属先データソースを判定し、その判定結果である所属先判定結果を出力する。プログラム生成部は、端末装置から送信された処理要求を解釈して、プログラムを生成し、これを出力する。プログラム実行部は、プログラム及び所属先判定結果に基づいて、プログラムに含まれる関数の実行を当該関数の所属先データソースに指示し、所属先データソースから関数の実行結果を取得し、関数の実行結果からプログラムの実行結果を生成し、プログラムの実行結果を端末装置に送信する。【選択図】図１
2015022388.tif 000002
【特許請求の範囲】
【請求項１】
端末装置から送信された処理要求を受信し、この処理要求に含まれる関数の所属先データソースを判定し、その判定結果である所属先判定結果を出力する判定手段と、
前記端末装置から送信された処理要求を解釈して、プログラムを生成し、これを出力する生成手段と、
前記プログラム及び前記所属先判定結果に基づいて、前記プログラムに含まれる関数の実行を当該関数の所属先データソースに指示し、所属先データソースから関数の実行結果を取得し、前記関数の実行結果からプログラムの実行結果を生成し、前記プログラムの実行結果を前記端末装置に送信する実行手段と
を有するデータベース・システム。
【請求項２】
前記判定手段は、関数の引数の全てが同一のデータソースに所属する場合、当該データソースをその関数の所属先データソースと判定する、請求項1に記載のデータベース・システム。
【請求項３】
前記判定手段は、関数の引数それぞれの所属先データソースを判定し、最も多く所属先データソースとして判定されたデータソースを当該関数の所属先データソースと判定し、関数の所属先データソースが記憶していない引数である外部引数に対応するデータを記憶しているデータソースから当該外部引数に対応するデータを前記所属先データソースに送信して記憶させ、前記前記所属先データソースに当該関数の計算を実行させる、請求項1に記載のデータベース・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載の実施の形態は、データベース・システムに関する。
【背景技術】
【０００２】
ネットワークの普及発展に伴って多種多様のデータがネットワーク上に蓄積されるようになり、このようなデータを組み合わせて処理することによりデータマイニング等のデータ分析手法で、有用有益な分析が行われるようになってきている。
【０００３】
データ分析を行う場合には、複数のデータベースに格納された情報を組み合わせて処理する関数を計算する必要が生ずる場合がある。そのような必要に応じて、複数のデータベースを統合するデータベース統合サーバが提供される
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】ＩＢＭ、″フェデレーテッド・システムでの関数マッピング″、［online］、2009年3月30日、［平成25年7月12日検索］、インターネット〈URL：http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.swg.im.iis.db.fed.sysconfig.doc%2Ftopics%2Fcfpfun01.html&lang%3Dja〉
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ユーザから送信された処理要求に、データベース統合サーバ上で定義されていない関数（ＳＱＬ関数など）が含まれている場合には、たとえ各データベースにその関数の引数に相当するデータが存在していても、データベース統合サーバは、関数の所属不明のためエラーを出力してしまうという問題があった。
【０００６】
本発明の一の実施の形態は、端末装置から送信された処理要求に、データベース統合サーバで定義されていない関数が含まれていても、その関数の所属先データソースに関数の実行をさせて、処理要求に対する処理結果を端末装置に返すことが可能する技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一の実施の形態はデータベース・システムとして提案される。データベース・システムは、判定手段と、生成手段と、実行手段とを有する。
【０００８】
判定手段は、端末装置から送信された処理要求を受信し、この処理要求に含まれる関数の所属先データソースを判定し、その判定結果である所属先判定結果を出力する。生成手段は、端末装置から送信された処理要求を解釈して、プログラムを生成し、これを出力する。実行手段は、プログラム及び所属先判定結果に基づいて、プログラムに含まれる関数の実行を当該関数の所属先データソースに指示し、所属先データソースから関数の実行結果を取得し、関数の実行結果からプログラムの実行結果を生成し、プログラムの実行結果を端末装置に送信する。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態に係るデータベース・システムの構成例を示す機能ブロック図
【図２】カラム所属先テーブルのデータ構成例を示す図
【図３】所属先判定結果のデータ構成例を示す図
【図４】データベース・システムの主要動作の例を示したフローチャート
【図５】プログラム生成処理の一例を示すフローチャート
【図６】関数所属先判定処理の一例を示すフローチャート
【図７】引数所属先判定処理の一例を示すフローチャート
【図８】データベース、テーブル、カラムの関係を示す図
【図９】プログラム実行処理の一例を示すフローチャート
【図１０】第２の実施の形態のプログラム生成処理の一例を示すフローチャート
【図１１】第２の実施の形態の関数所属先判定処理の一例を示すフローチャート
【図１２】第２の実施の形態のプログラム実行処理の一例を示すフローチャート
【図１３】第２の実施の形態における関数ｆ（a1, b1, b2）の処理例を示す図
【図１４】第２の実施の形態における関数ｇ（a1, a2,ｆ（a1, b1, b2））の処理例を示す図
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施の形態に係るデータベース・システムを説明する。  ［０．用語の定義］  
本明細書で使用する用語の定義を述べる。
（１）関数
「関数」とは、引数と呼ばれるデータを受け取り、定められた通りの処理を実行して結果を返す一連の命令若しくは命令群をいう。
（２）テーブル
「テーブル」とは、データベースに格納される情報のまとめであって、データ要素（値）の集合を垂直な列と水平の行のモデルで構成したものをいう。
【００１１】
［１．第１の実施の形態］  
本発明の第１の実施の形態について説明する。本発明の第１の実施の形態は、データベース・システムとして提案される。
［１．１．第１の実施の形態の構成例］  
【００１２】
図１に第１の実施の形態に係るデータベース・システムの構成例を示す機能ブロック図を掲げる。なお、機能ブロック図中に示す構成要素は、各装置の機能を機能ごとにまとめてブロックとして捉えたものであり、各装置が各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続されている」とは、データ、情報、命令などの送受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。本明細書中の他の機能ブロック図の説明についても同様である。
【００１３】
データベース（DB）・システム１は、端末装置１０と、端末装置１０に接続されたデータベース統合装置２０と、データベース統合装置２０に接続された複数のデータソース３０とを有している。
【００１４】
［１．１．１．端末装置］    
端末装置１０は、データの操作や定義を行うためのデータベース言語（例えばSQL）をデータベース統合装置２０に送信し、データベース統合装置２０からデータベース言語の実行結果を受信して、その実行結果をユーザに提示するアプリケーション１０Ａを有する装置である。この端末装置１０は、コンピュータ、ワークステーション、携帯電話器（スマートフォン含む）、タブレットPC、ゲーム機などの情報処理装置であって、この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読み出し専用メモリ（ROM）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００１５】
［１．１．２．データベース統合装置］  
データベース統合装置２０は、端末装置１０からデータベース言語で記述された処理要求を受信すると、そのデータベース言語を解釈して、実行可能なプログラムを生成するとともに、そのプログラムに含まれている関数及び引数の所属先データソース（データベース、以下単に「所属先データソース」）を判定し、関数及び引数の所属先データソースと判定されたデータソース３０にその関数の実行を指示し、その関数を実行結果をデータソース３０から受信し、受信した実行結果に基づいて前記処理要求に対する結果を端末装置１０に送信する機能を有する。
【００１６】
このデータベース統合装置２０は、コンピュータ、ワークステーション、サーバなどの情報処理装置であって、この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読み出し専用メモリ（ROM）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００１７】
データベース統合装置２０は、所属先判定部２１と、所属先判定部２１に接続されたプログラム生成部２２と、プログラム生成部２２に接続されたプログラム実行部２４と、所属先判定部２１及びプログラム実行部２４に接続された所属先判定結果格納部２３と、プログラム実行部２４に接続された一時結果格納部２５とを有する。所属先判定部２１は実施の形態の判定手段に相当する。プログラム生成部２２は実施の形態の生成手段に相当する。プログラム実行部２４は実施の形態の実行手段に相当する。
所属先判定部２１は端末装置１０と接続可能である。プログラム実行部２４は端末装置１０と接続可能であり、かつ各データソース３０と接続可能である。
【００１８】
所属先判定部２１は、カラム所属先テーブル格納部２１Ａと関数所属先判定部２１Ｂを有している。関数所属先判定部２１Ｂは引数所属先判定部２１Ｃを有している。
プログラム実行部２４は関数実行制御部２４Ａを有している。関数実行制御部２４Ａは関数実行指示部２４Ｂと、関数実行部２４Ｃを有している。
【００１９】
［１．１．２．１．所属先判定部］  
所属先判定部２１は、端末装置１０から送信された処理要求を受信し、この処理要求に含まれる関数の所属先データソース３０を判定し、その判定結果を出力する機能を有する。
【００２０】
所属先判定部２１はカラム所属先テーブル格納部２１Ａを有している。カラム所属先テーブル格納部２１Ａはカラム所属先テーブルを記憶している。カラム所属先テーブルは、データソース３０が有しているテーブルのカラムと、そのテーブルを有しているデータソース３０とを対応付けたデータである。図２にカラム所属先テーブルのデータ構成例を示す。図２において、「a1」「a2」「b1」「b2」「b3」のそれぞれはカラムを特定する情報（例えば、カラム名、属性名、属性IDなど）を示す。「A」「B」は、データソース３０を特定する情報である。カラム所属先テーブルを参照することにより、そのカラムはどのデータソース３０に所属するのかを判定できる。
【００２１】
関数所属先判定部２１Ｂは、プログラムに含まれる関数の所属先データソース３０を判定し、関数とその関数の所属先データソースを対応付けた情報である所属先判定結果を出力する。図３に所属先判定結果のデータ構成例を示す。所属先判定結果は、関数と、その関数の所属先データソース３０とを対にして記憶しているデータである。図３において「f(123)」「g(a1,a2)」「h(a1,a2,b1)」「i(b1,b2,h(a1,a2,a3))」は関数であり、「A」「B」はデータソース３０を特定する情報である。また「所属無し」とは、その関数の所属先データソース３０がないことを示す。
【００２２】
引数所属先判定部２１Ｃは、プログラムに含まれる関数の引数の所属先データソース３０を判定し、その結果を出力する機能を有する。引数は、リテラル値、カラム、関数のいずれかである。引数がリテラル値である場合、引数所属先判定部２１Ｃは所属無しと判定する。引数がカラムである場合、引数所属先判定部２１Ｃはカラム所属先テーブルから当該カラムに対応付けられた所属先データソース３０を取得する。引数が関数である場合、引数所属先判定部２１Ｃは関数所属先判定部２１Ｂによって判定された結果を当該引数の所属先データソース３０と判定する。
なお、関数所属先判定部２１Ｂは、その関数の引数の所属先データソース３０に基づいて、その関数の所属先データソースを決定する。
【００２３】
［１．１．２．２．プログラム生成部］  
プログラム生成部２２は、端末装置１０から送信された処理要求を解釈して、プログラム実行部２４によって実行可能なプログラム（コード）を生成し、これを出力する機能を有する。
【００２４】
［１．１．２．３．所属先判定結果格納部］  
所属先判定結果格納部２３は、所属先判定部２１が出力した所属先判定結果を記憶する機能を有する。所属先判定結果はプログラム実行部２４、より詳しくは関数実行制御部２４Ａによって読みだされる。
【００２５】
［１．１．２．４．プログラム実行部］  
プログラム実行部２４は、プログラム生成部２２によって生成されたプログラム及び所属先判定結果格納部２３に記憶された所属先判定結果に基づいて、プログラムに含まれる関数の実行を当該関数の所属先データソース３０に指示し、所属先データソース３０から関数の実行結果を取得し、プログラムに含まれる関数を実行し、関数の実行結果からプログラムの実行結果を生成し、実行結果を端末装置１０に送信する機能を有する。
【００２６】
プログラム実行部２４は、関数実行制御部２４Ａを有している。関数実行制御部２４Ａは、プログラム中の関数を、その関数の所属先データソース３０に基づいて、関数実行指示部２４Ｂに処理させるか、関数実行部２４Ｃに処理させるかを判定し、判定結果に基づいて関数実行指示部２４Ｂ若しくは関数実行部２４Ｃに関数の実行をさせる機能を有する。
【００２７】
関数実行制御部２４Ａは関数実行指示部２４Ｂ及び関数実行部２４Ｃを有する。関数実行指示部２４Ｂは、所属先判定結果に基づいて、プログラムに含まれている関数の実行を、その関数の所属先データソース３０に指示し、所属先データソース３０から返される関数の実行結果を取得する機能を有する。関数実行部２４Ｃは、プログラムに含まれている関数を実行し、その関数の実行結果を出力する機能を有する。
【００２８】
［１．１．２．５．一時結果格納部］  
一時結果格納部２５はデータソース３０から返された関数の実行結果を一時的に格納する機能を有する。
【００２９】
［１．１．３．データソース］  
データソース３０は、データベースとして機能する装置又はプログラム、アプリケーションであって、ＤＢ側関数実行部３０Ａとデータベース部３０Ｂとを有する。ＤＢ側関数実行部３０Ａは、データベース統合装置２０からの関数実行指示に応じて、データベース部３０Ｂに記憶されたデータの処理を実行する。データベース部３０Ｂは、少なくとも一つのカラムを有するテーブルを用いて、データを記憶する機能を有する。
【００３０】
［１．２．データベース・システムの動作例］  
次に第１の実施の形態に係るデータベース・システム１の動作例を説明する。
［１．２．１．データベース・システムの主要動作］
まず、データベース・システム１の主要動作を説明する。図４はデータベース・システム１の主要動作の例を示したフローチャートである。端末装置１０から処理要求（例えばSQL）を受信する（S10）と、データベース統合装置２０は処理要求から、実行可能な実行用プログラムを生成する（プログラム生成処理：S20）。次にデータベース統合装置２０はステップS20で実行用プログラムの生成が成功したか否かを判定する（S30）。実行用プログラムの生成が成功しなかったと判定した場合（S30, No）、データベース統合装置２０は処理エラーメッセージを端末装置１０に送信する。一方、実行用プログラムの生成が成功したと判定した場合（S30, Yes）、データベース統合装置２０はその実行用プログラムを実行し（プログラム実行処理：S40）、その実行結果を端末装置１０に返して（S50）、処理を終了する。
【００３１】
［２．２．プログラム生成処理］
次に前述のプログラム生成処理（図５、S20）の内容を詳述する。図５はステップS20における処理であるプログラム生成処理の一例を示すフローチャートである。プログラム生成処理において、データベース統合装置２０、より詳しくは所属先判定部２１は、処理要求に関数（例えば、ＳＱＬ関数）が含まれているか否かを判定する（S110）。ステップS110において、処理要求に関数は含まれていないと判定した場合（S110, No）、所属先判定部２１は、プログラム生成部２２に処理要求に応じた実行用プログラムを生成させ（S120）、プログラム生成処理が終了する。一方、ステップS110において、関数が含まれていると判定した場合（S110, Yes）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは関数の所属先判定を行う（関数所属先判定処理：S130）。「関数の所属先判定」とは、関数の所属先データソースがどのデータソース３０であるかを決定する処理をいう。
【００３２】
次に所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは関数の所属先判定ができたか否かを判定する（S140）。関数の所属先判定ができない若しくは失敗したと判定した場合（S140, No）、プログラム生成処理はエラーとなり、実行用プログラムの生成は行われない（図４、S30, No参照）。一方、ステップS130における関数の所属先判定ができた若しくは成功したと判定した場合（S140, Yes）、所属先判定部２１は、処理要求に応じた実行用プログラムであって、関数の所属先データソース３０でその関数を実行させる実行用プログラムをプログラム生成部２２に生成させて（S150）、プログラム生成処理を終了する。
【００３３】
［１．２．３．関数所属先判定処理］
前述の関数所属先判定処理（図５、S130）の内容を詳述する。図６に関数所属先判定処理の一例を示すフローチャートを掲げる。関数所属先判定処理において、所属先判定部２１、より詳しくは引数所属先判定部２１Ｃは、所属先判定対象の関数の引数を読み取る（S210）。次に所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、所属先判定対象となる関数の全部の引数の判定が完了したか否かを判定する（S220）。ステップS220において所属先判定対象となる関数の全部の引数の判定が完了していないと判定した場合（S220, No）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、引数所属先判定部２１Ｃにこの引数の所属先データソースを判定させる（引数所属先判定処理：S230）。次に所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、引数所属先判定部２１Ｃから出力される所属先判定結果を所属先判定結果格納部２３に格納する（S240）。その後所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、ステップS210に戻り未判定の引数の所属先判定を続行する。
【００３４】
一方、ステップS220において所属先判定対象となる関数の全部の引数の判定が完了していると判定した場合（S220, Yes）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、所属先判定結果を参照し、その関数の全引数の所属先データソース数は一つか否かを判定する（S250）。所属先判定結果格納部に記録された各引数の所属先データソースを参照し、全引数の所属先データソースが一致する場合には、当該関数の所属先データソースを引数の所属先データソースと判定する。なお、関数の引数に所属無しの引数（例えばリテラル値）が含まれていたら、その引数は無視して関数の所属先判定を行う。
【００３５】
ステップS250において所属先データソース数は一つであると判定した場合（S250, Yes）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、その関数の所属先データソース３０を所属先判定結果に記述されているデータソース３０であると判定し、関数所属先判定処理を終了する。一方、所属先データソース数は一つでないと判定した場合（S250, No）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、関数所属先判定処理の結果としてエラーを返して、関数所属先判定処理を終了する。
【００３６】
上記関数所属先判定処理の具体例を以下に示す。
（１）関数ｆ（a1, a2）
関数ｆ（a1, a2）は２つの引数a1, a2を有する関数である。引数a1、引数a2は共に所属先データソースをデータソースXとする。所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、この関数の所属先データソース個数は、データソースXの一つであるので、関数ｆ（a1, a2）の所属先データソースをデータソースXと判定する。
【００３７】
（２）関数ｇ（a1, 123）
関数ｇ（a1, 123）は２つの引数a1, 123を有する関数である。引数a1の所属先データソースをデータソースXであり、引数123は所属先のないリテラル値であるものとする。所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、引数123は所属先データソースは無視されるため、この関数の所属先データソース個数は、データソースXの一つであるので、関数ｇ（a1, 123）の所属先データソースをデータソースXと判定する。
【００３８】
（３）関数ｈ（a1, b1, b2）
関数ｈ（a1, b1, b2）は３つの引数a1、b1、b2を有する関数である。引数a1の所属先データソースはデータソースXであり、引数b1、引数b2は共に所属先データソースを、データソースXとは異なるデータソースYであるものとする。所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、この関数の所属先データソース個数は、データソースXと、データソースYの二つであるので、関数ｈ（a1, b1, b2）の所属先データソースは定まらず、エラーを返すことになる。
【００３９】
［１．２．４．引数所属先判定処理］
前述の引数所属先判定処理（図６、S230）の内容を詳述する。図７に引数所属先判定処理の一例を示すフローチャートを掲げる。引数所属先判定処理において、所属先判定部２１、より詳しくは引数所属先判定部２１Ｃは、所属先判定の対象となる引数がリテラル値か、関数か、引数かを判定する（S310）。
【００４０】
ステップS310において、引数がリテラル値であると判定した場合（S310、リテラル）、所属先判定部２１、より詳しくは引数所属先判定部２１Ｃは当該引数の所属先データソースを「所属無し」として出力する。
【００４１】
また、ステップS310において、引数が関数であると判定した場合（S310、関数）、所属先判定部２１、より詳しくは引数所属先判定部２１Ｃはその関数について、関数所属先判定部２１Ｂに所属先データソースを判定させる。関数所属先判定部２１Ｂは個の引数である関数について関数所属先判定処理（図５、S130）を実行し、引数としての関数の所属先データソースを決定し、出力する（S320）。
【００４２】
また、ステップS310において、引数がカラムであると判定した場合（S310、引数）、所属先判定部２１、より詳しくは引数所属先判定部２１Ｃはカラム所属先テーブルからこのカラムの所属先データソースを判定し、出力する（S330）。
【００４３】
ここでデータソース（データベース）、テーブル、カラムの関係について説明する。図８にデータベース、テーブル、カラムの関係を示す図を掲げる。図８には、二つの異なるデータベース、データソースX及びデータソースYが示されている。データソースXはテーブルAを有している。テーブルAは、４つのカラムa1, a2, a3, a4を有している。一方、データソースYはテーブルBを有している。テーブルBは、３つのカラムb1, b2, b3を有している。
【００４４】
［１．２．５．プログラム実行処理］
次に、前述のプログラム実行処理（図１、S40）の内容を詳述する。図９はプログラム実行処理の一例を示すフローチャートである。プログラム実行処理において、プログラム実行部２４は、実行用プログラムを実行し終えたか否かを判定する（S410）。実行用プログラムを実行し終えたと判定した場合（S410, Yes）、プログラム実行部２４はプログラム実行処理を終了する。一方、実行用プログラムを実行し終えていないと判定した場合（S410, No）、プログラム実行部２４は実行用プログラムから１ステップ読み込む（S420）。
【００４５】
次にプログラム実行部２４は、直近のステップS420で読み込んだステップが関数を処理するステップか否かを判定する（S430）。そのステップが関数を処理するステップでないと判定した場合（S430, No）、プログラム実行部２４は、既存手法で実行用プログラムを1ステップ実行し（S460）、その後ステップS410に戻りプログラム実行処理を続行する。一方、そのステップが関数を処理するステップであると判定した場合（S430, Yes）、プログラム実行部２４、より詳しくは関数実行制御部２４Ａは、所属先判定結果格納部２３からこの関数の所属先データソース３０を取得する（S440）。
【００４６】
次にプログラム実行部２４、より詳しくは関数実行制御部２４Ａは、関数実行指示部２４ＢにステップS440で取得したデータソース３０にこの関数を実行させて、このデータソース３０から関数の実行結果を取得する（S450）。このデータソース３０には、関数の実行に必要なデータ（引数、カラム）がそろっているので、データソースはこの関数を問題なく実行できる。その後ステップS410に戻りプログラム実行処理を続行する。
以上で第１の実施の形態の説明を終了する。
【００４７】
［３．第２の実施の形態］
本発明の第２の実施の形態を説明する。本発明の第２の実施の形態は、データベース・システムとして提案される。本発明の第２の実施の形態に係るデータベース・システムは、第１の実施の形態に係るデータベース・システムと基本的には同様の構成及び動作であるが、処理要求に含まれる関数の引数が複数のデータソース３０に所属する場合であっても、処理結果を生成できる点で、異なっている。
【００４８】
［３．１．データベース・システム等の構成例］
本発明の第２の実施の形態に係るデータベース・システム及びその構成要素である端末装置、データベース統合装置、データベース装置の構成は、第１の実施の形態に係るデータベース・システム及びそのその構成要素である端末装置１０、データベース統合装置２０、データソース３０の構成と同様であるので、これらの詳細な説明は省略する。
【００４９】
［３．２．データベース・システムの動作例］
次に第２の実施の形態に係るデータベース・システム１の動作例を説明する。
［３．２．１．データベース・システムの主要動作］
まず、第２の実施の形態に係るデータベース・システムの主要動作を説明する。第２の実施の形態に係るデータベース・システムの主要動作は図４に示した第１の実施の形態に係るデータベース・システム１の主要動作と同様である。
【００５０】
［３．２．２．プログラム生成処理］
次に第２の実施の形態におけるプログラム生成処理（図５、S20）の内容を詳述する。図１０は第２の実施の形態のステップS20における処理であるプログラム生成処理の一例を示すフローチャートである。プログラム生成処理において、データベース統合装置２０、より詳しくは所属先判定部２１は、処理要求に関数が含まれているか否かを判定する（S510）。ステップS510において、処理要求に関数は含まれていないと判定した場合（S510, No）、所属先判定部２１は、プログラム生成部２２に処理要求に応じた実行用プログラムを生成させ（S520）、プログラム生成処理を終了する。一方、ステップS510において、関数が含まれていると判定した場合（S510, Yes）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは関数の所属先判定を行う（関数所属先判定処理：S530）。
【００５１】
次に所属先判定部２１は、処理要求に応じた実行用プログラムであって、関数の所属先データソース３０でその関数を実行させるプログラムである実行用プログラムをプログラム生成部２２に生成させて（S540）、プログラム生成処理を終了する。なお、第２の実施の形態では、一つのデータソース３０上に全ての引数に対応するデータを転送してから、そのデータソース３０に関数を計算させるための実行用プログラムを生成する。
【００５２】
［３．２．３．関数所属先判定処理］
前述の関数所属先判定処理（図１０、S530）の内容を詳述する。図１１に関数所属先判定処理の一例を示すフローチャートを掲げる。
関数所属先判定処理において、所属先判定部２１、より詳しくは引数所属先判定部２１Ｃは、所属先判定対象の関数の引数を読み取る（S610）。次に所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、所属先判定対象である関数の、全部の引数の判定が完了したか否かを判定する（S620）。ステップS620において所属先判定対象となる関数の全部の引数の判定が完了していないと判定した場合（S620, No）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、引数所属先判定部２１Ｃにこの引数の所属先データソースを判定させる（引数所属先判定処理：S630）。
【００５３】
次に所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、引数所属先判定部２１Ｃから出力される所属先判定結果を所属先判定結果格納部２３に格納する（S640）。その後所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、ステップS620に戻り未判定の引数の所属先判定を続行する。
【００５４】
一方、ステップS620において所属先判定対象となる関数の全部の引数の判定が完了していると判定した場合（S620, Yes）、所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、所属先判定結果を参照し、その関数の所属先を判定し、判定結果を出力し、その後関数所属先判定処理を終了する。第２の実施の形態では、所属先判定結果格納部２３に記録された各引数の所属データを参照し、所属が一番多いデータソースをその関数の所属先データソースと判定する。なお、第１の実施の形態と同じく、関数の引数に所属無しの引数（例えばリテラル値）が含まれていたら、その引数は無視して関数の所属先判定を行う。
【００５５】
第２の実施の形態における関数所属先判定処理の具体例を示す。
（１）関数ｆ（a1, a2）  
関数ｆ（a1, a2）は２つの引数a1, a2を有する関数である。引数a1、引数a2は共に所属先データソースをデータソースXとする。この関数の引数の所属先データソースは、データソースXが二つ（のみ）となる。よって、関数所属先判定部２１Ｂは関数ｆ（a1, a2）の所属先データソースを、所属先データソースとして最も多く記録されているデータソースXであると判定する。
【００５６】
（２）関数ｇ（a1, 123）  
関数ｇ（a1, 123）は２つの引数a1, 123を有する関数である。引数a1の所属先データソースをデータソースXであり、引数123は所属先のないリテラル値であるものとする。引数123の所属先データソースは「所属無し」であり、無視されるため、所属先判定結果に記録されるこの関数の引数の所属先データソースは、データソースX一つのみである。よって、関数所属先判定部２１Ｂは関数ｇ（a1, 123）の所属先データソースを、所属先判定結果に所属先データソースとして最も多く記録されているデータソースXであると判定する。
【００５７】
（３）関数ｈ（a1, b1, b2）  
関数ｈ（a1, b1, b2）は３つの引数a1, b1, b2を有する関数である。引数a1の所属先データソースはデータソースXであり、引数b1、引数b2は共に所属先データソースを、データソースXとは異なるデータソースYであるものとする。所属先判定部２１、より詳しくは関数所属先判定部２１Ｂは、この関数の所属先データソースとして、データソースXが一つ、データソースYが二つである。よって関数所属先判定部２１Ｂは関数ｈ（a1, b1, b2）の所属先データソースを、所属先判定結果に所属先データソースとして最も多く記録されているデータソースYであると判定する。
【００５８】
［３．２．４．引数所属先判定処理］  
第２の実施の形態における引数所属先判定処理（図１１、S630）を述べる。第２の実施の形態における引数所属先判定処理は、第１の実施の形態の処理内容（図７参照）と同一であるので、詳しい説明は省略する。
【００５９】
［３．２．５．プログラム実行処理］
次に、第２の実施の形態におけるプログラム実行処理（図１、S40参照）の内容を詳述する。図１２はプログラム実行処理の一例を示すフローチャートである。プログラム実行処理において、プログラム実行部２４は、プログラム生成部２２から実行用プログラムを取得すると、実行用プログラムに含まれる関数のそれぞれについて、所属先判定結果格納部２３から関数の所属先データソースを取得する（S710）。
【００６０】
次にプログラム実行部２４は、関数の所属先データソース３０上にテンポラリテーブルを作成する（S720）。テンポラリテーブルは、一時的にデータを格納させるためのテーブルである。
【００６１】
次にプログラム実行部２４は、その関数の所属先データソースがカラムとして有していない引数（「外部引数」と呼ぶ）について、その外部引数に対応するカラムを有するデータベースから当該カラムのデータ（「外部引数カラムデータ」と呼ぶ）を取得し、この外部引数カラムデータを一時結果格納部２５に格納する（S730）。
【００６２】
次にプログラム実行部２４は、外部引数カラムデータを上記所属先データソース３０に作成されたテンポラリテーブルに格納させる（S740）。この処理によって、所属先データソース３０にその関数の引数全てのデータが用意されたことになる。
【００６３】
次に、プログラム実行部２４、より詳しくは関数実行指示部２４Ｂは、関数の所属先データソース３０にその関数の計算を実行させる（S750）。関数の計算を実行した所属先データソース３０は計算結果をデータベース統合装置２０、より詳しくは関数実行指示部２４Ｂに返す（S760）。
【００６４】
なお、いずれのデータソース３０にも所属せず、データベース統合装置２０において計算可能な関数については、関数実行部２４Ｃがその関数の計算を実行し、計算結果を出力する。
【００６５】
プログラム実行部２４は実行用プログラムに含まれる全ての関数の計算結果を取得すると、それらに基づいて処理結果を生成し、この処理結果を端末装置１０に送信する。
【００６６】
第２の実施の形態では、データベース統合装置２０に接続されたいずれかのデータソース３０がカラムとして有しているデータを引数とする関数であれば、引数が複数のデータソースに分散している関数であっても、自動的に関数の計算結果を取得できることになる。
【００６７】
［３．２．５．１．プログラム実行処理の例１］
第２の実施の形態におけるプログラム実行処理の例を示す。図１３に、関数ｆ（a1, b1, b2）の処理例を示す図を掲げる。
【００６８】
図１３に示す例では、関数ｆ（a1, b1, b2）を計算するものとする。関数ｆ（a1, b1, b2）は３つの引数a1、b1、b2を有する関数である。引数a1の所属先データソースはデータソースXであり、引数b1、引数b2の所属先データソースは、データソースXとは異なるデータソースYであるものとする。
【００６９】
データベース統合装置２０、より詳しくはプログラム実行部２４は、所属先判定結果から関数ｆ（a1, b1, b2）の所属先データソースをデータソースYと判定する（図１２、S710参照）。3つの引数a1、b1、b2の所属先データソースの個数は、データソースXが1個、データソースYが2個で、最も多い個数のデータベースはデータソースYだからである。
【００７０】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、データソースYにテンポラリテーブルを生成させる（S810：図１２、S720参照）。
【００７１】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、データソースXから引数a1に相当するカラムのデータを取得する（S820：図１２、S730参照）。
【００７２】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、ステップS820で取得した引数a1に相当するカラムのデータをデータソースYに送信し、ステップS810において生成させたテンポラリテーブルに引数a1に相当するカラムのデータを格納させる（S830：図１２、S740参照）。
【００７３】
データベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂは、データソースYに関数ｆ（a1, b1, b2）の計算を指示する。関数実行指示部２４Ｂからの指示に応じてデータソースYのＤＢ側関数実行部３０Ａは、関数ｆ（a1, b1, b2）の計算を実行する（S840：図１２、S750参照）。引数b1、b2のデータはもともとデータソースYが有するテーブルBのカラムのデータとして存在しており、外部引数である引数a1のデータは、テンポラリテーブルに格納されてデータソースYに保有された。よって、データソースYのＤＢ側関数実行部３０Ａは、関数ｆ（a1, b1, b2）の計算を実行することができる。
【００７４】
関数ｆ（a1, b1, b2）の計算が完了すると、データソースYのＤＢ側関数実行部３０Ａは関数ｆ（a1, b1, b2）の計算結果をデータベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂに返し、データベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂは関数ｆ（a1, b1, b2）の計算結果を取得する（S850：図１２、S760参照）。
以上で、関数関数ｆ（a1, b1, b2）の計算結果の取得が完了する。
【００７５】
［３．２．５．２．プログラム実行処理の例２］
第２の実施の形態におけるプログラム実行処理の別の例を示す。図１４に、関数ｇ（a1,a2,ｆ（a1, b1, b2））の処理例を示す図を掲げる。関数ｇ（a1, a2, ｆ（a1, b1, b2））は、引数の一つに関数ｆ（a1, b1, b2）を有しており、関数が入れ子になっている。
【００７６】
関数ｇ（a1, a2,ｆ（a1, b1, b2））は、三つの引数a1、a2、ｆ（a1, b1, b2）を有する関数である。引数a1、a2の所属先データソースはデータソースXである。引数の一つである関数ｆ（a1, b1, b2）は３つの引数a1、b1、b2を有する関数である。引数a1の所属先データソースはデータソースXであり、引数b1、引数b2の所属先データソースは、データソースXとは異なるデータソースYであるものとする。
【００７７】
データベース統合装置２０は、関数ｇ（a1, a2,ｆ（a1, b1, b2））を計算する場合、まずその引数であるｆ（a1, b1, b2）の計算を行う。データベース統合装置２０、より詳しくはプログラム実行部２４は、所属先判定結果から関数ｆ（a1, b1, b2）の所属先データソースをデータソースYと判定する（S910：図１２、S710参照）。3つの引数a1、b1、b2の所属先データソースの個数は、データソースXが1個、データソースYが2個で、最も多い個数のデータベースはデータソースYだからである。
【００７８】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、データソースYにテンポラリテーブルを生成させる（S920：図１２、S720参照）。
【００７９】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、データソースXから引数a1に相当するカラムのデータを取得する（S920：図１２、S730参照）。
【００８０】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、ステップS920で取得した引数a1に相当するカラムのデータをデータソースYに送信し、ステップS910において生成させたテンポラリテーブルに引数a1に相当するカラムのデータを格納させる（S930：図１２、S740参照）。
【００８１】
データベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂは、データソースYに関数ｆ（a1, b1, b2）の計算を指示する。関数実行指示部２４Ｂからの指示に応じてデータソースYのＤＢ側関数実行部３０Ａは、関数ｆ（a1, b1, b2）の計算を実行する（S940：図１２、S750参照）。引数b1、b2のデータはもともとデータソースYが有するテーブルBのカラムのデータとして存在しており、外部引数である引数a1のデータは、テンポラリテーブルに格納されてデータソースYに保有された。よって、データソースYのＤＢ側関数実行部３０Ａは、関数ｆ（a1, b1, b2）の計算を実行することができる。
【００８２】
関数ｆ（a1, b1, b2）の計算が完了すると、データソースYは関数ｆ（a1, b1, b2）の計算結果をデータベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂに返し、データベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂは関数ｆ（a1, b1, b2）の計算結果を取得する（S950：図１２、S760参照）。
【００８３】
以上のように関数ｆ（a1, b1, b2）の計算が完了すると、データベース統合装置２０、より詳しくは関数実行制御部２４Ａは、関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算を実行する。
【００８４】
データベース統合装置２０、より詳しくはプログラム実行部２４は、所属先判定結果から関数ｇ（a1, a2,ｆ（a1, b1, b2））の所属先データソースをデータソースXと判定する（図１２、S710参照）。２つの引数a1、a2の所属先データソースはデータソースXであり、残りの一つの引数である関数ｆ（a1, b1, b2）の所属先データソースはデータソースYであるので、最も多い個数のデータソースXが関数ｇ（a1, a2,ｆ（a1, b1, b2））の所属先データソースと判定される。
【００８５】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、データソースXにテンポラリテーブルを生成させる（S960：図１２、S720参照）。
【００８６】
次にデータベース統合装置２０、より詳しくはプログラム実行部２４は、データソースYから取得済みである関数ｆ（a1, b1, b2）の計算結果をデータソースXに送信し、データソースX上に生成させたテンポラリテーブルに関数ｆ（a1, b1, b2）の計算結果を格納させる（S970：図１２、S740参照）。
【００８７】
データベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂは、データソースXに関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算を指示する。関数実行指示部２４Ｂからの指示に応じてデータソースXのＤＢ側関数実行部３０Ａは、関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算を実行する（S980：図１２、S750参照）。引数a1、a2のデータはもともとデータソースXが有するテーブルAのカラムのデータとして存在しており、外部引数である関数ｆ（a1, b1, b2）のデータは、テンポラリテーブルに格納されてデータソースXに保有されている。よって、データソースXのＤＢ側関数実行部３０Ａは、関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算を実行することができる。
【００８８】
関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算が完了すると、データソースXは関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算結果をデータベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂに返し、データベース統合装置２０、より詳しくはプログラム実行部２４の関数実行指示部２４Ｂは関数ｇ（a1, a2,ｆ（a1, b1, b2））の計算結果を取得する（S990：図１２、S760参照）。  
以上で、関数ｇ（a1, a2, ｆ（a1, b1, b2））の計算結果の取得が完了する。
【００８９】
［４．本実施の形態の利点］  
本発明の実施形態に係るデータベース・システムによれば、端末装置から送信された処理要求に、データベース統合装置で定義されていない関数が含まれていても、その関数の所属先データソースに関数の実行をさせて、処理要求に対する処理結果を端末装置に返すことが可能となる。
【００９０】
［５．まとめ、その他］  
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
【符号の説明】
【００９１】
１…データベース・システム；  １０…端末装置；  ２０…データベース統合装置；  ２１…所属先判定部；  ２１Ａ…カラム所属先テーブル格納部  ２１Ｂ…関数所属先判定部２１ＢＣ…引数所属先判定部；  ２２…プログラム生成部；  ２３…所属先判定結果格納部；  ２４…プログラム実行部；  ２４Ａ…関数実行制御部；  ２４Ｂ…関数実行指示部；  ２４Ｃ…関数実行部；  ２５…一時結果格納部；  ３０…データソース；  ３０Ａ…データベース側関数実行部；  ３０Ｂ…データベース部
【図１】
2015022388.tif 000003
【図２】
2015022388.tif 000004
【図３】
2015022388.tif 000005
【図４】
2015022388.tif 000006
【図５】
2015022388.tif 000007
【図６】
2015022388.tif 000008
【図７】
2015022388.tif 000009
【図８】
2015022388.tif 000010
【図９】
2015022388.tif 000011
【図１０】
2015022388.tif 000012
【図１１】
2015022388.tif 000013
【図１２】
2015022388.tif 000014
【図１３】
2015022388.tif 000015
【図１４】
2015022388.tif 000016