(57)【要約】【課題】記憶装置、クエリビルダー装置、及び接続装置を含むデータクエリシステムに適用可能なデータクエリ方法を提案する。【解決手段】データクエリ方法、システム及び接続装置である。当該方法は、クエリビルダー装置がＳｐａｒｋＳＱＬクエリコマンド（４１）を接続装置に送信するステップであって、前記ＳｐａｒｋＳＱＬクエリコマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含むステップと、前記接続装置が、前記ＳｐａｒｋＳＱＬクエリコマンドを受信した後、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが記憶装置に存在する場合、第１のＰｈｏｅｎｉｘクエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘクエリコマンドを前記記憶装置（４２）に送信するステップであって、前記インデックステーブルが、ＨＢａｓｅテーブルのメタデータの属性値とＨＢａｓｅテーブルの行キーとの対応関係を記録するためのものであり、前記第１のＰｈｏｅｎｉｘクエリコマンドが、前記テーブル識別子と、前記メタデータと、前記属性値とを含むステップと、前記記憶装置が、前記第１のＰｈｏｅｎｉｘクエリコマンドを受信した後、前記テーブル識別子と前記メタデータとに対応する前記インデックステーブルから、前記属性値に対応する行キーを取得し、前記テーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する行データ（４３）を取得し、前記行データを前記接続装置（４４）に返信するステップと、前記接続装置が、前記行データを取得した後、前記行データを前記クエリビルダー装置（４５）に返信するステップと、を含む。【選択図】図１
2021502655.tif 000002
【特許請求の範囲】
【請求項１】
クエリビルダー装置がＳｐａｒｋＳＱＬクエリコマンドを接続装置に送信するステップであって、前記ＳｐａｒｋＳＱＬクエリコマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含むステップと、
前記接続装置が前記ＳｐａｒｋＳＱＬクエリコマンドを受信した後、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが記憶装置に存在する場合に、第１のＰｈｏｅｎｉｘクエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘクエリコマンドを前記記憶装置に送信するステップであって、前記インデックステーブルがＨＢａｓｅテーブルのメタデータの属性値とＨＢａｓｅテーブルの行キーとの対応関係を記録するためのものであり、前記第１のＰｈｏｅｎｉｘクエリコマンドが、前記テーブル識別子と、前記メタデータと、前記属性値とを含むステップと、
前記記憶装置が前記第１のＰｈｏｅｎｉｘクエリコマンドを受信した後、前記テーブル識別子と前記メタデータとに対応する前記インデックステーブルから前記属性値に対応する行キーを取得し、前記テーブル識別子に対応するＨＢａｓｅテーブルから前記行キーに対応する行データを取得し、前記行データを前記接続装置に返信するステップと、
前記接続装置が前記行データを受信した後、前記行データを前記クエリビルダー装置に返信するステップと、
を含むデータクエリ方法。
【請求項２】
請求項１に記載のデータクエリ方法であって、
前記クエリビルダー装置がＳｐａｒｋＳＱＬ作成コマンドを前記接続装置に送信するステップであって、前記ＳｐａｒｋＳＱＬ作成コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータとを含むステップと、
前記接続装置が前記ＳｐａｒｋＳＱＬ作成コマンドを受信した後、Ｐｈｏｅｎｉｘ作成コマンドを生成し、前記Ｐｈｏｅｎｉｘ作成コマンドを前記記憶装置に送信するステップであって、前記Ｐｈｏｅｎｉｘ作成コマンドが前記テーブル識別子と前記メタデータとを含むステップと、
前記記憶装置が前記Ｐｈｏｅｎｉｘ作成コマンドを受信した後、前記テーブル識別子に対応するＨＢａｓｅテーブルから前記メタデータに対応する属性値と、前記属性値に対応する行キーとを取得し、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを作成し、前記インデックステーブルに前記属性値と前記行キーとの対応関係を記録するステップと、
をさらに含むデータクエリ方法。
【請求項３】
請求項１に記載のデータクエリ方法であって、
前記クエリビルダー装置がＳｐａｒｋＳＱＬ格納コマンドを前記接続装置に送信するステップであって、前記ＳｐａｒｋＳＱＬ格納コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルの少なくとも１つのメタデータと、各メタデータに対応する属性値と、行キーとを含むステップと、
前記接続装置が前記ＳｐａｒｋＳＱＬ格納コマンドを受信した後、各メタデータに対して、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、第１のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第１のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信する操作を行い、前記第１のＰｈｏｅｎｉｘ格納コマンドは、前記テーブル識別子と、前記メタデータと、前記メタデータに対応する属性値と、前記属性値に対応する行キーとを含むものである、ステップと、
前記記憶装置が前記第１のＰｈｏｅｎｉｘ格納コマンドを受信した後、前記テーブル識別子と前記メタデータとに対応するインデックステーブルに前記属性値と前記行キーとの対応関係を記録するステップと、
を含むデータクエリ方法。
【請求項４】
請求項３に記載のデータクエリ方法であって、
前記接続装置が前記ＳｐａｒｋＳＱＬ格納コマンドを受信した後、第２のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第２のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信するステップであって、前記第２のＰｈｏｅｎｉｘ格納コマンドが、前記テーブル識別子と、前記少なくとも１つのメタデータと、前記各メタデータに対応する属性値と、行キーとを含むステップと、
前記記憶装置が前記第２のＰｈｏｅｎｉｘ格納コマンドを受信した後、前記行キーと各メタデータに対応する属性値との対応関係を、前記テーブル識別子に対応するＨＢａｓｅテーブルに記録するステップと、
を含むデータクエリ方法。
【請求項５】
請求項１に記載のデータクエリ方法であって、
前記クエリビルダー装置が前記接続装置にＳｐａｒｋＳＱＬ削除コマンドを送信するステップと、
前記接続装置が前記ＳｐａｒｋＳＱＬ削除コマンドを受信した後、Ｐｈｏｅｎｉｘ削除コマンドを生成し、前記Ｐｈｏｅｎｉｘ削除コマンドを前記記憶装置に送信するステップであって、前記Ｐｈｏｅｎｉｘ削除コマンドが、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含み、又は、前記Ｐｈｏｅｎｉｘ削除コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータとに対応する属性値とを含むステップと、
前記記憶装置が前記Ｐｈｏｅｎｉｘ削除コマンドを受信した後、前記Ｐｈｏｅｎｉｘ削除コマンドがＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを削除し、前記Ｐｈｏｅｎｉｘ削除コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを削除するステップと、
を含むデータクエリ方法。
【請求項６】
請求項１に記載のデータクエリ方法であって、
前記クエリビルダー装置がＳｐａｒｋＳＱＬ取得コマンドを前記接続装置に送信するステップと、
前記接続装置が前記ＳｐａｒｋＳＱＬ取得コマンドを受信した後、Ｐｈｏｅｎｉｘ取得コマンドを生成し、前記Ｐｈｏｅｎｉｘ取得コマンドを前記記憶装置に送信するステップであって、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータとを含み、または、Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含むステップと、
前記記憶装置が前記Ｐｈｏｅｎｉｘ取得コマンドを受信した後、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを前記接続装置に返信し、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから前記属性値に対応する行データを取得し、前記行データを前記接続装置に返信するステップと、
前記接続装置が前記インデックステーブル又は前記行データを受信した後、前記インデックステーブル又は前記行データを前記クエリビルダー装置に返信するステップと、
を含むデータクエリ方法。
【請求項７】
請求項１に記載のデータクエリ方法であって、
前記クエリビルダー装置がＳｐａｒｋＳＱＬ関連クエリコマンドを前記接続装置に送信するステップであって、前記ＳｐａｒｋＳＱＬ関連クエリコマンドが、ＨＢａｓｅテーブルの第１のテーブル識別子と、前記ＨＢａｓｅテーブルに対応する関連ＨＢａｓｅテーブルの第２のテーブル識別子とを含むステップと、
前記接続装置が前記ＳｐａｒｋＳＱＬ関連クエリコマンドを受信した後、第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信するステップであって、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドが第２のテーブル識別子を含むステップと、
前記記憶装置が前記第１のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、前記第２のテーブル識別子に対応する関連ＨＢａｓｅテーブルから全ての第１種の行データを取得し、全ての第１種の行データを前記接続装置に返信するステップであって、各第１種のデータのいずれも少なくとも１つのメタデータに対応する属性値を含むステップと、
各第１種の行データの各メタデータに対し、
第１のテーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、前記接続装置が第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信する操作であって、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドが、前記第１のテーブル識別子と、前記メタデータと、前記メタデータが対応する属性値とを含む操作と、
前記記憶装置が前記第２のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行キーを取得し、前記第１のテーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する第２種の行データを取得し、前記第２種の行データを前記接続装置に返信する操作と、
前記接続装置が前記第１種の行データと前記第２種の行データとを関連付けて前記クエリビルダー装置に返信する操作とを、行うステップと、
を含むデータクエリ方法。
【請求項８】
データクエリシステムであって、
ＳｐａｒｋＳＱＬクエリコマンドを接続装置に送信するためのクエリビルダー装置であって、前記のＳｐａｒｋＳＱＬクエリコマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含むクエリビルダー装置と、
前記ＳｐａｒｋＳＱＬクエリコマンドを受信した後、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが記憶装置に存在する場合に、第１のＰｈｏｅｎｉｘクエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘクエリコマンドを前記記憶装置に送信するための接続装置であって、前記のインデックステーブルがＨＢａｓｅテーブルのメタデータの属性値とＨＢａｓｅテーブルの行キーとの対応関係を記録するためのものであり、前記第１のＰｈｏｅｎｉｘクエリコマンドが、前記テーブル識別子と、前記メタデータと、前記属性値とを含む接続装置と、
前記第１のＰｈｏｅｎｉｘクエリコマンドを受信した後、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行キーを取得し、前記テーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する行データを取得し、前記行データを前記接続装置に送信する前記記憶装置と、を含み、
前記接続装置は、さらに、前記行データを受信した場合に前記行データを前記クエリビルダー装置に返信するためのものである
データクエリシステム。
【請求項９】
請求項８に記載のデータクエリシステムであって、
前記クエリビルダー装置は、さらに、ＳｐａｒｋＳＱＬ作成コマンドを前記接続装置に送信するためのものであり、前記ＳｐａｒｋＳＱＬ作成コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータとを含み、
前記接続装置は、さらに、前記ＳｐａｒｋＳＱＬ作成コマンドを受信した後、Ｐｈｏｅｎｉｘ作成コマンドを生成し、前記Ｐｈｏｅｎｉｘ作成コマンドを前記記憶装置に送信するためのものであり、前記Ｐｈｏｅｎｉｘ作成コマンドが、前記テーブル識別子と、前記メタデータとを含み、
前記記憶装置は、さらに、Ｐｈｏｅｎｉｘ作成コマンドを受信した後、前記テーブル識別子に対応するＨＢａｓｅテーブルから、前記メタデータに対応する属性値と、前記属性値に対応する行キーとを取得し、テーブル識別子と前記メタデータとに対応するインデックステーブルを作成し、前記属性値と前記行キーとの対応関係を前記インデックステーブルに記録するためのものである
データクエリシステム。
【請求項１０】
請求項８に記載のデータクエリシステムであって、
前記クエリビルダー装置は、さらに、ＳｐａｒｋＳＱＬ格納コマンドを前記接続装置に送信するためのものであり、前記ＳｐａｒｋＳＱＬ格納コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルの少なくとも１つのメタデータと、各メタデータに対応する属性値と行キーとを含み、
前記接続装置は、さらに、前記ＳｐａｒｋＳＱＬ格納コマンドを受信した後、各メタデータに対し、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、第１のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第１のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信する操作を行い、前記第１のＰｈｏｅｎｉｘ格納コマンドが、前記テーブル識別子と、前記メタデータと、前記メタデータに対応する属性値と、前記属性値に対応する行キーとを含み、
前記記憶装置は、さらに、前記第１のＰｈｏｅｎｉｘ格納コマンドを受信した後、前記属性値と前記行キーとに対応する関係を、前記テーブル識別子と前記メタデータとに対応するインデックステーブルに記録するためのものである
データクエリシステム。
【請求項１１】
請求項１０に記載のデータクエリシステムであって、
前記接続装置は、さらに、前記ＳｐａｒｋＳＱＬ格納コマンドを受信した後、第２のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第２のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信するためのものであり、前記の第２のＰｈｏｅｎｉｘ格納コマンドが、前記のテーブル識別子と、前記の少なくとも１つのメタデータと、前記の各メタデータに対応する属性値と行キーとを含み、
前記記憶装置は、さらに、前記第２のＰｈｏｅｎｉｘ格納コマンドを受信した後、前記行キー及び各メタデータに対応する属性値の対応関係を、前記テーブル識別子が対応するＨＢａｓｅテーブルに記録するためのものである
データクエリシステム。
【請求項１２】
請求項８に記載のデータクエリシステムであって、
前記クエリビルダー装置は、さらに、ＳｐａｒｋＳＱＬ削除コマンドを前記接続装置に送信するためのものであり、
前記接続装置は、さらに、前記ＳｐａｒｋＳＱＬ削除コマンドを受信した後、Ｐｈｏｅｎｉｘ削除コマンドを生成し、前記Ｐｈｏｅｎｉｘ削除コマンドを前記記憶装置に送信するためのものであり、前記Ｐｈｏｅｎｉｘ削除コマンドが、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含み、または、前記Ｐｈｏｅｎｉｘ削除コマンドが、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含み、
前記記憶装置は、さらに、前記Ｐｈｏｅｎｉｘ削除コマンドを受信した後、前記Ｐｈｏｅｎｉｘ削除コマンドがＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを削除し、前記Ｐｈｏｅｎｉｘ削除コマンドがＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを削除するためのものである
データクエリシステム。
【請求項１３】
請求項８に記載のデータクエリシステムであって、
前記クエリビルダー装置は、さらに、ＳｐａｒｋＳＱＬ取得コマンドを前記接続装置に送信するためのものであり、
前記接続装置は、さらに、前記ＳｐａｒｋＳＱＬ取得コマンドを受信した後、Ｐｈｏｅｎｉｘ取得コマンドを生成し、前記Ｐｈｏｅｎｉｘ取得コマンドを前記記憶装置に送信するためのものであり、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータとを含み、又は、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含み、
前記記憶装置は、さらに、前記Ｐｈｏｅｎｉｘ取得コマンドを受信した後、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子及びＨＢａｓｅテーブルのメタデータを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを前記接続装置に返信し、前記Ｐｈｏｅｎｉｘ取得コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含む場合、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを取得し、前記行データを前記接続装置に返信するためのものであり、
前記接続装置は、さらに、前記インデックステーブル又は前記行データを受信した後、前記インデックステーブル又は前記行データを前記クエリビルダー装置に返信するためのものである
データクエリシステム。
【請求項１４】
請求項８に記載のデータクエリシステムであって、
前記クエリビルダー装置は、さらに、ＳｐａｒｋＳＱＬ関連クエリコマンドを前記接続装置に送信するためのものであり、前記ＳｐａｒｋＳＱＬ関連クエリコマンドが、ＨＢａｓｅテーブルの第１のテーブル識別子と、前記ＨＢａｓｅテーブルに対する関連ＨＢａｓｅテーブルの第２のテーブル識別子とを含み、
前記接続装置は、さらに、前記ＳｐａｒｋＳＱＬ関連クエリコマンドを受信した後、第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信するためのものであり、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドが、第２のテーブル識別子を含み、
前記記憶装置は、さらに、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、第２のテーブル識別子に対応する関連ＨＢａｓｅテーブルから、全ての第１種の行データを取得し、全ての第１種の行データを接続装置に返信するためのものであり、各前記第１種のデータのそれぞれが少なくとも１つのメタデータに対応する属性値を含み、
各第１種行データ１の各メタデータに対し、
前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在すると、前記接続装置は、さらに、第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信するためのものであり、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドが、前記第１のテーブル識別子と、前記メタデータと、前記メタデータが対応する属性値とを含み、
前記記憶装置は、さらに、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルから、前記の属性値に対応する行キーを取得し、前記第１のテーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する第２種の行データを取得し、前記第２種行データを前記接続装置に返信するためのものであり、
前記接続装置は、さらに、前記第１種の行データと前記第２種の行データとを関連付けて前記クエリビルダー装置に返信するためのものである
データクエリシステム。
【請求項１５】
プロセッサと、
機械実行可能なコマンドを格納する機械可読記憶媒体と、
を含む接続装置であって、
前記機械実行可能なコマンドを読み取って実行することにより、前記プロセッサは、
クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ取得コマンドを受信し、前記のＳｐａｒｋＳＱＬクエリコマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記のＨＢａｓｅテーブルのメタデータと、前記のメタデータに対応する属性値とを含むステップと、
前記テーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、第１のＰｈｏｅｎｉｘクエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘクエリコマンドを前記記憶装置に送信し、前記のインデックステーブルが、ＨＢａｓｅテーブルのメタデータの属性値とＨＢａｓｅテーブルの行キーとの対応関係を記録するためのものであり、前記第１のＰｈｏｅｎｉｘクエリコマンドが、前記テーブル識別子と、前記メタデータと、前記属性値とを含み、前記記憶装置が前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行キーを取得し、前記テーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する行データを取得し、前記行データを前記接続装置に返信するステップと、
受信された前記行データを前記クエリビルダー装置に返信するステップとを実行する
接続装置。
【請求項１６】
請求項１５に記載の接続装置であって、
前記機械実行可能なコマンドにより、前記プロセッサは、
前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ作成コマンドを受信し、前記ＳｐａｒｋＳＱＬ作成コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータとを含むステップと、
Ｐｈｏｅｎｉｘ作成コマンドを生成し、前記Ｐｈｏｅｎｉｘ作成コマンドを前記記憶装置に送信し、前記Ｐｈｏｅｎｉｘ作成コマンドが前記のテーブル識別子と前記メタデータとを含み、前記記憶装置が前記テーブル識別子に対応するＨＢａｓｅテーブルから、前記メタデータに対応する属性値と前記属性値に対応する行キーとを取得し、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを作成し、前記属性値と前記行キーとの対応関係を前記インデックステーブルに記録するステップと、を実行する
接続装置。
【請求項１７】
請求項１５に記載の接続装置であって、
前記機械実行可能なコマンドにより、前記プロセッサは、
前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ格納コマンドを受信し、前記のＳｐａｒｋＳＱＬ格納コマンドが、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルの少なくとも１つのメタデータと、各メタデータに対応する属性値と、行キーとを含むステップと、
各メタデータに対し、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、第１のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第１のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信する操作を行い、前記第１のＰｈｏｅｎｉｘ格納コマンドが、前記テーブル識別子と、前記メタデータと、前記メタデータに対応する属性値と、前記属性値に対応する行キーとを含み、前記記憶装置が前記属性値と前記行キーとの対応関係を前記テーブル識別子と前記メタデータとに対応するインデックステーブルに記録するステップと、を実行する
接続装置。
【請求項１８】
請求項１７に記載の接続装置であって、
前記機械実行可能なコマンドにより、前記プロセッサは、
第２のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第２のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信し、前記第２のＰｈｏｅｎｉｘ格納コマンドは、前記テーブル識別子と、前記少なくとも１つのメタデータと、前記各メタデータに対応する属性値と前記行キーとを含み、前記記憶装置が前記行キーと前記各メタデータに対応する属性値との対応関係を前記テーブル識別子に対応するＨＢａｓｅテーブルに記録する
接続装置。
【請求項１９】
請求項１５に記載の接続装置であって、
前記機械実行可能なコマンドにより、前記プロセッサは、
前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ削除コマンドを受信するステップと、
Ｐｈｏｅｎｉｘ削除コマンドを生成し、前記Ｐｈｏｅｎｉｘ削除コマンドを前記記憶装置に送信し、前記Ｐｈｏｅｎｉｘ削除コマンドは、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含み、前記記憶装置が前記テーブル識別子と前記メタデータとに対応するインデックステーブルを削除するコマンドと、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータと前記メタデータに対応する属性値とを含み、前記記憶装置が前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを削除するコマンドとのうちの１つのコマンドであるスップと、を実行する
接続装置。
【請求項２０】
請求項１５に記載の接続装置であって、
前記機械実行可能なコマンドにより、前記プロセッサは、
前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ取得コマンドを受信するステップと、
前記Ｐｈｏｅｎｉｘ取得コマンドを生成し、前記Ｐｈｏｅｎｉｘ取得コマンドを前記記憶装置に送信し、前記Ｐｈｏｅｎｉｘ取得コマンドは、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含み、前記記憶装置が前記テーブル識別子と前記メタデータとに対応するインデックステーブルを前記接続装置に返信するコマンドと、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含み、前記記憶装置が前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを取得し、前記行データを前記接続装置に返信するコマンドとうちの１つのコマンドのであるステップと、
前記インデックステーブル又は前記行データを受信した後、前記インデックステーブル又は前記行データを前記クエリビルダー装置に返信するステップと、実行する
接続装置。
【請求項２１】
請求項１５に記載の接続装置であって、
前記機械実行可能なコマンドにより、前記プロセッサは、
前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ関連クエリコマンドを受信し、前記ＳｐａｒｋＳＱＬ関連クエリコマンドが、ＨＢａｓｅテーブルの第１のテーブル識別子と、前記ＨＢａｓｅテーブルに対応する関連ＨＢａｓｅテーブルの第２のテーブル識別子とを含むステップと、
第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信し、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドが前記第２のテーブル識別子を含み、前記記憶装置が前記第２のテーブル識別子に対応する関連ＨＢａｓｅテーブルから、全ての第１種の行データを取得し、全ての第１種の行データを接続装置に返信し、前記各第１種の行データのそれぞれが少なくとも１つのメタデータに対応する属性値を含むステップと、
各第１種の行データの各メタデータに対し、
前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信し、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドが、前記第１のテーブル識別子と、前記メタデータと、前記メタデータに対応する属性値とを含み、前記記憶装置が前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行キーを取得し、前記第１テーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する第２種の行データを取得し、前記第２種の行データを前記接続装置に返信する操作を行うステップと、
前記第１種の行データと前記第２種の行データとを関連付けて前記クエリビルダー装置に返信するステップと、を実行する
前記接続装置。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願の相互参照
本特許出願は、２０１７年１１月３０日に提出された２０１７１１２３５８５５．２の中国特許出願を優先権として主張し、その全内容が援用により本願に取り込まれている。
ＨＢａｓｅデータベースは、大規模データセットに対してランダムかつリアルタイムに読取り／書込みアクセスサービスを提供するための高信頼性、高性能、列指向、スケーラブルな分散ストレージシステムである。ここで、当該ＨＢａｓｅデータベースはデータをデータテーブル（本明細書ではＨＢａｓｅテーブルと呼ばれる）の形で格納し、ＨＢａｓｅテーブルは行と列のファミリーからなる。表１に示すのがＨＢａｓｅテーブルの例である。行キー（ＲｏｗＫｅｙ）はインデックスであり、列ファミリー（Ｃｏｌｕｍｎ  Ｆａｍｉｌｙ）は、１つ又は複数の列からなる。表１では、名前、住所、年齢、携帯番号、メールアドレスなどはメタデータであり、各メタデータは複数の属性値に対応し、例えば、名前に対応する属性値は張三や李四などである。
【０００２】
【表１】
2021502655.tif 000003
【図面の簡単な説明】
【０００３】
【図１】図１は本開示の一実施形態におけるデータクエリシステムの構成図である。
【図２】図２は本開示の一実施形態におけるデータクエリシステムの構成図である。
【図３】図３は本開示の一実施形態におけるインデックステーブルの作成方法のフローチャートである。
【図４】図４は本開示の一実施形態におけるデータクエリ方法のフローチャートである。
【図５】図５は本開示の一実施形態におけるデータ格納方法のフローチャートである。
【図６】図６は本開示の別の実施形態におけるデータクエリ方法のフローチャートである。
【図７】図７は本開示の一実施形態における接続装置のハードウェア構成を示す模式図である。
【発明を実施するための形態】
【０００４】
表１に示すＨＢａｓｅのテーブル構造に基づいて、行キーによってデータを高速にクエリできる。例えば、クエリリクエストを受信した場合、クエリリクエストに含まれる行キーが００１であれば、ＨＢａｓｅテーブルからクエリされた内容が１行目のデータであるので、１行目のデータが返信される。クエリリクエストに行キーが含まれず、北京のようなあるメタデータの属性値が含まれると、その行キーによって対応するデータを高速にクエリすることができない。「北京」を含む行データをクエリするには、ＨＢａｓｅテーブル全体に対して全テーブルのスキャンを行う必要があるため、クエリ性能が低い。
【０００５】
したがって、本発明の実施例には、記憶装置、クエリビルダー装置、及び接続装置を含むデータクエリシステムに適用可能なデータクエリ方法を提案する。クエリビルダー装置、記憶装置、及び接続装置は、同一サーバに設けられていてもよく、別々のサーバに設けられていてもよい。クエリビルダー装置、記憶装置、及び接続装置が同一サーバに配置される場合、クエリビルダー装置、記憶装置、及び接続装置は、当該サーバの３つの機能モジュールとなる。例えば、クエリビルダー装置がデータクエリビルダー装置機能を実現するＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ、構造化クエリ言語）エンジンで、記憶装置がデータ格納機能を実現するデータベースで、接続装置が接続機能を実現するミドルウェアであってもよい。クエリビルダー装置、記憶装置、及び接続装置が別々のサーバに配置される場合、クエリビルダー装置、記憶装置、及び接続装置は、３つの独立されたサーバとなる。
【０００６】
図１は上記データクエリシステムの構成を示す図である。
【０００７】
ＨＢａｓｅデータベースを使用してデータを格納するとき、記憶装置は、ＨＢａｓｅデータベースにＳＱＬ支援を提供するためのＰｈｏｅｎｉｘコンポーネントを使用してデータの格納を実現する。このように、記憶装置がＳＱＬリクエストを受信すると、ＳＱＬリクエストに基づいてＨＢａｓｅデータベース内のデータを操作することができる。
【０００８】
クエリビルダー装置は、ＳｐａｒｋＳＱＬエンジン（Ｓｐａｒｋベースの分散ＳＱＬエンジン）を用いてデータのクエリを実現することができ、当該ＳｐａｒｋＳＱＬエンジンは、外部データソース（ＤａｔａＳｏｕｒｃｅ）にアクセスする複数のインタフェース、例えばＪＤＢＣ（Ｊａｖａ  ＤａｔａＢａｓｅ  Ｃｏｎｎｅｃｔｉｖｉｔｙ、ｊａｖａデータベース接続）、ＯＤＢＣ（ＯｐｅｎＤａｔａｂａｓｅＣｏｎｎｅｃｔｉｖｉｔｙ、オープンデータベース接続）、ＡＰＩ（ＡｐｐｌｉｃａｔｉｏｎＰｒｏｇｒａｍｍｉｎｇＩｎｔｅｒｆａｃｅ、アプリケーションプログラミングインタフェース）などのインタフェースを開放することができる。さらに、ＳｐａｒｋＳＱＬエンジンは、マルチフォーマットのデータソース、例えば、ＪＳＯＮ（Ｊａｖａ  Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ，Ｊａｖａスクリプトオブジェクト表記）、Ｐａｒｑｕｅｔ（列式格納フォーマット）、ａｖｒｏ（データシリアル化システム）、ＣＳＶ（Ｃｏｍｍａ  Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅｓ，コンマ区切り値）などのフォーマットなどをサポートすることもできる。
【０００９】
記憶装置がＰｈｏｅｎｉｘコンポーネントを用いてデータの格納を実現し、クエリビルダー装置がＳｐａｒｋＳＱＬエンジンを用いてデータのクエリを実現する。すなわち、クエリビルダー装置はＳｐａｒｋＳＱＬコマンドを処理することができ、記憶装置はＰｈｏｅｎｉｘコマンドを処理することができる。そのため、クエリビルダー装置がＳｐａｒｋＳＱＬコマンドを送信した後、記憶装置は、ＳｐａｒｋＳＱＬコマンドを受信すると、ＳｐａｒｋＳＱＬコマンドを処理することができない。同様に、記憶装置がＰｈｏｅｎｉｘコマンドを送信した後、クエリビルダー装置は、Ｐｈｏｅｎｉｘコマンドを受信すると、そのＰｈｏｅｎｉｘコマンドを処理することができない。これに基づいて、ＳｐａｒｋＳＱＬコマンドとＰｈｏｅｎｉｘコマンドとの変換を実現するための接続装置を、記憶装置とクエリビルダー装置との間に配置してもよい。本開示の実施例では、ＨＢａｓｅテーブルにおけるメタデータの属性値と行キーとの対応関係（例えば、表１における「北京」と「００１」との対応関係）を記録するためのインデックステーブルを記憶装置に作成してもよい。このように、Ｐｈｏｅｎｉｘコマンドが行キー「００１」を含まず、属性値「北京」を含むと、記憶装置は、属性値「北京」によりインデックステーブルをクエリして行キー「００１」を得て、そして行キー「００１」により表１に示されるＨＢａｓｅテーブルをクエリして、１行目のデータを得る。上記形態では、ＨＢａｓｅテーブルを全テーブルスキャンを行う必要がなくなり、クエリ性能が向上し、クエリ効率が向上する。
【００１０】
本開示の実施形態では、インデックステーブル作成ステップ、データクエリステップ、データ格納ステップ、インデックステーブル削除ステップ、インデックステーブル取得ステップのいずれか、または、これらの組み合わせに関する。
【００１１】
図２を参照すると、クエリビルダー装置は、ＳｐａｒｋＳＱＬ作成インターフェースを提供し、当該ＳｐａｒｋＳＱＬに基づいて、インデックステーブルを作成するためのＳｐａｒｋＳＱＬ作成コマンドを生成し送信することができる。接続装置は、ＳｐａｒｋＳＱＬ作成インターフェース及びＰｈｏｅｎｉｘ作成インターフェースを提供することができ、ＳｐａｒｋＳＱＬ作成インタフェースに基づいて、ＳｐａｒｋＳＱＬ作成コマンドの内容を解析することができ、当該Ｐｈｏｅｎｉｘ作成インタフェースに基づいて、ＳｐａｒｋＳＱＬ作成コマンドから解析された内容からＰｈｏｅｎｉｘ作成コマンドを生成して送信することができ、当該Ｐｈｏｅｎｉｘ作成コマンドはインデックステーブルの作成に用いられる。記憶装置は、Ｐｈｏｅｎｉｘ作成インタフェースを提供することができ、当該Ｐｈｏｅｎｉｘ作成インタフェースに基づいて、Ｐｈｏｅｎｉｘ作成コマンドの内容を解析し、その内容によりインデックステーブルを作成することができる。
【００１２】
図２を見ると、クエリビルダー装置は、ＳｐａｒｋＳＱＬクエリインターフェースを提供することができ、当該ＳｐａｒｋＳＱＬクエリインターフェースに基づいて、データをクエリするためのＳｐａｒｋＳＱＬクエリコマンドを生成して送信することができ、ＳｐａｒｋＳＱＬクエリコマンドに対するＳｐａｒｋＳＱＬ応答コマンドを処理することができる。
【００１３】
接続装置は、ＳｐａｒｋＳＱＬクエリインタフェース及びＰｈｏｅｎｉｘクエリインタフェースを提供することができる。ＳｐａｒｋＳＱＬクエリインタフェースに基づいて、接続装置は、ＳｐａｒｋＳＱＬクエリコマンドの内容を解析することができ、Ｐｈｏｅｎｉｘクエリインタフェースに基づいて、接続装置は、ＳｐａｒｋＳＱＬクエリコマンドから解析された内容により、Ｐｈｏｅｎｉｘクエリコマンドを生成して送信することができる。なお、Ｐｈｏｅｎｉｘクエリインタフェースに基づいて、接続装置は、Ｐｈｏｅｎｉｘクエリコマンドに対するＰｈｏｅｎｉｘ応答コマンドの内容を解析することもでき、ＳｐａｒｋＳＱＬクエリインタフェースに基づいて、Ｐｈｏｅｎｉｘ応答コマンドから解析された内容により、ＳｐａｒｋＳＱＬ応答コマンドを生成して送信することができる。
【００１４】
記憶装置は、Ｐｈｏｅｎｉｘクエリインタフェースを提供することができ、当該Ｐｈｏｅｎｉｘクエリインタフェースに基づいて、Ｐｈｏｅｎｉｘクエリコマンドの内容を解析し、そしてクエリを行い、そのクエリの結果によりＰｈｏｅｎｉｘ応答コマンドを作成して送信することができる。
【００１５】
図２を見ると、クエリビルダー装置は、ＳｐａｒｋＳＱＬ格納インターフェースを提供し、当該ＳｐａｒｋＳＱＬ格納インターフェースに基づいて、データを格納するためのＳｐａｒｋＳＱＬ格納コマンドを生成して送信することができる。接続装置は、ＳｐａｒｋＳＱＬ格納インターフェース及びＰｈｏｅｎｉｘ格納インターフェースを提供することができ、ＳｐａｒｋＳＱＬ格納インタフェースに基づいて、ＳｐａｒｋＳＱＬ格納コマンドの内容を解析することができ、Ｐｈｏｅｎｉｘ格納インタフェースに基づいて、ＳｐａｒｋＳＱＬ格納コマンドから解析された内容により、データを格納するためのＰｈｏｅｎｉｘ格納コマンドを生成して送信することができる。記憶装置は、Ｐｈｏｅｎｉｘ格納インタフェースを提供することができ、当該Ｐｈｏｅｎｉｘ格納インタフェースに基づいて、Ｐｈｏｅｎｉｘ格納コマンドの内容を解析し、その内容により関連データを格納することができる。
【００１６】
図２を見ると、クエリビルダー装置は、ＳｐａｒｋＳＱＬ削除インターフェースを提供し、当該ＳｐａｒｋＳＱＬ削除インターフェースに基づいて、インデックステーブルを削除するためのＳｐａｒｋＳＱＬ削除コマンドを生成し送信することができる。接続装置は、ＳｐａｒｋＳＱＬ削除インターフェース及びＰｈｏｅｎｉｘ削除インターフェースを提供することができ、ＳｐａｒｋＳＱＬ削除インタフェースに基づいて、ＳｐａｒｋＳＱＬ削除コマンドの内容を解析することができ、当該Ｐｈｏｅｎｉｘ削除インタフェースに基づいて、ＳｐａｒｋＳＱＬ削除コマンドから解析された内容により、インデックステーブルを削除するためのＰｈｏｅｎｉｘ削除コマンドを生成して送信することができる。記憶装置は、Ｐｈｏｅｎｉｘ削除インタフェースを提供することができ、当該Ｐｈｏｅｎｉｘ削除インタフェースに基づいて、記憶装置は、Ｐｈｏｅｎｉｘ削除コマンドの内容を解析し、その内容に基づいてインデックステーブルを削除することができる。
【００１７】
図２を参照すると、クエリビルダー装置は、ＳｐａｒｋＳＱＬ取得インターフェースを提供することができ、当該ＳｐａｒｋＳＱＬ取得インターフェースに基づいて、インデックテーブルを取得するためのＳｐａｒｋＳＱＬ取得コマンドを生成して送信することができ、ＳｐａｒｋＳＱＬ取得コマンドに対するＳｐａｒｋＳＱＬ応答コマンドを処理することができる。
【００１８】
接続装置は、ＳｐａｒｋＳＱＬ取得インタフェース及びＰｈｏｅｎｉｘ取得インタフェースを提供することができる。接続装置は、ＳｐａｒｋＳＱＬ取得インタフェースに基づいて、ＳｐａｒｋＳＱＬ取得コマンドの内容を解析することができ、Ｐｈｏｅｎｉｘ取得インタフェースに基づいて、ＳｐａｒｋＳＱＬ取得コマンドから解析された内容により、Ｐｈｏｅｎｉｘ取得コマンドを生成して送信することができる。なお、Ｐｈｏｅｎｉｘ取得インタフェースに基づいて、接続装置は、Ｐｈｏｅｎｉｘ取得コマンドに対するＰｈｏｅｎｉｘ応答コマンドの内容を解析することもでき、ＳｐａｒｋＳＱＬ取得インタフェースに基づいて、Ｐｈｏｅｎｉｘ応答コマンドから解析された内容により、ＳｐａｒｋＳＱＬ応答コマンドを生成して送信することができる。
【００１９】
記憶装置は、Ｐｈｏｅｎｉｘ取得インタフェースを提供することができ、Ｐｈｏｅｎｉｘ取得インタフェースに基づいて、Ｐｈｏｅｎｉｘ取得コマンドの内容を解析し、インデックステーブルを取得し、Ｐｈｏｅｎｉｘ応答コマンドを作成して送信することができる。
【００２０】
上記の応用シーンにおいて、インデックステーブル作成フローについて、図３に示されるステップを参照して説明する。
【００２１】
ステップ３１では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ作成コマンド（インデックステーブルを作成するためのものである）を接続装置に送信する。
【００２２】
ここで、ＳｐａｒｋＳＱＬ作成コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルのメタデータとを含む。例えば、表１で示されるＨＢａｓｅテーブルに対してインデックステーブルを作成し、メタデータ「携帯番号」をインデックステーブルのインデックスとすると、当該ＳｐａｒｋＳＱＬ作成コマンドは、当該ＨＢａｓｅテーブルのテーブル識別子と、メタデータ「携帯番号」とを含んでもよい。
【００２３】
ステップ３２では、接続装置は、ＳｐａｒｋＳＱＬ作成コマンドを受信すると、ＳｐａｒｋＳＱＬ作成コマンドにより、Ｐｈｏｅｎｉｘ作成コマンドを生成し、該Ｐｈｏｅｎｉｘ作成コマンドを記憶装置に送信する。
【００２４】
具体的には、接続装置は、ＳｐａｒｋＳＱＬ作成コマンドを解析してＨＢａｓｅテーブルのテーブル識別子と当該ＨＢａｓｅテーブルのメタデータとを得、当該テーブル識別子と当該メタデータとによって、Ｐｈｏｅｎｉｘ作成コマンドを生成する。すなわち、当該Ｐｈｏｅｎｉｘ作成コマンドは、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータ（例えば、「携帯番号」）とを含む。
【００２５】
ステップ３３では、記憶装置は、Ｐｈｏｅｎｉｘ作成コマンドを受信した後、テーブル識別子に対応するＨＢａｓｅテーブルから当該メタデータに対応する属性値と当該属性値に対応する行キーとを取得し、当該テーブル識別子と当該メタデータとに対応するインデックステーブルを作成して、当該属性値と当該行キーとの対応関係を当該インデックステーブルに記録する。
【００２６】
例えば、記憶装置は、表１により、メタデータ「携帯番号」に対応する属性値１８６１１１１１１１１を取得し、当該属性値が行キー００１に対応し、そしてインデックステーブルにおいて属性値１８６１１１１１１１１と行キー００１との対応関係を記録する。このように類推すると、表２に示すインデックステーブルを得ることができる。
【００２７】
【表２】
2021502655.tif 000004
【００２８】
一例では、仮に表１に示すＨＢａｓｅテーブルのテーブル識別子をＡとすると、記憶装置は、表２のインデックステーブルを作成した後、ＨＢａｓｅテーブルのテーブル識別子Ａとメタデータ「携帯番号」とを接続装置に送信する。接続装置は、当該テーブル識別子と当該メタデータとの対応関係をローカルのマッピングテーブルに記録する。当該対応関係は、当該テーブル識別子と当該メタデータとに対応付けられたインデックステーブルが記憶装置に存在することを示す。
【００２９】
以上のステップに基づいて、インデックステーブルの作成が完成し、さらに該インデックステーブルに基づいてデータのクエリが完成できる。
【００３０】
次に、図４に示すステップを参照して、データクエリステップについて説明する。
【００３１】
ステップ４１では、クエリビルダー装置は、ＳｐａｒｋＳＱＬクエリコマンド（データをクエリするためのものである）を接続装置に送信する。
【００３２】
ここで、ＳｐａｒｋＳＱＬクエリコマンドは、ＨＢａｓｅテーブルのテーブル識別子と、メタデータと、当該メタデータに対応する属性値とを含む。例えば、表１に示すＨＢａｓｅの表から「１８６１１１１１１１１」に対応するデータをクエリする場合、ＳｐａｒｋＳＱＬクエリコマンドは、ＨＢａｓｅテーブルの表識別子Ａと、メタデータ「携帯番号」と、「携帯番号」に対応する属性値「１８６１１１１１１１１」とを含んでもよい。
【００３３】
ステップ４２では、接続装置は、ＳｐａｒｋＳＱＬクエリコマンドを受信した後、当該テーブル識別子と当該メタデータに対応するインデックステーブルが記憶装置に存在する場合、第１のＰｈｏｅｎｉｘクエリコマンドを生成し、記憶装置に送信する。当該テーブル識別子と当該メタデータに対応するインデックステーブルが記憶装置に存在しない場合、第２のＰｈｏｅｎｉｘクエリコマンドを生成し、記憶装置に送信する。
【００３４】
接続装置は、当該ＳｐａｒｋＳＱＬクエリコマンドを受信すると、当該ＳｐａｒｋＳＱＬクエリコマンドを解析して、ＨＢａｓｅテーブルのテーブル識別子、メタデータ、及び当該メタデータに対応する属性値を得る。そして、接続装置は、当該テーブル識別子と当該メタデータとに対応するインデックステーブルが記憶装置に存在するか否かを判断することができる。
【００３５】
第１のＰｈｏｅｎｉｘクエリコマンドは、ＨＢａｓｅテーブル識別子と、メタデータと、メタデータに対応する属性値と、を含む。
【００３６】
第２のＰｈｏｅｎｉｘクエリコマンドは、ＨＢａｓｅテーブル識別子と、メタデータに対応する属性値と、を含む。又は、第２のＰｈｏｅｎｉｘクエリコマンドは、ＨＢａｓｅテーブル識別子と、メタデータと、メタデータに対応する属性値と、を含む。
【００３７】
ここで、「接続装置が当該テーブル識別子と当該メタデータとに対応するインデックステーブルが記憶装置に存在するか否かを判断する」ステップは、
接続装置がローカルで上記マッピングテーブルをメンテナンスしている場合、接続装置は、ＳｐａｒｋＳＱＬのクエリコマンドを解析してテーブル識別子とメタデータを得た後、当該テーブル識別子と当該メタデータとの対応関係がマッピングテーブルに存在するか否かをクエリし、存在する場合、当該テーブル識別子と当該メタデータとに対応するインデックステーブルが記憶装置に存在すると確定し、存在しない場合、当該インデックステーブルが記憶装置に存在しないと確定することができる、第１の態様と、
接続装置がＳｐａｒｋＳＱＬクエリコマンドを解析してテーブル識別子とメタデータを得た後、当該テーブル識別子と当該メタデータを含むＰｈｏｅｎｉｘ管理コマンドを記憶装置に送信し、記憶装置が、Ｐｈｏｅｎｉｘ管理コマンドを受信した後、当該テーブル識別子と当該メタデータとに対応するインデックステーブルがローカルに存在するか否かをクエリし、クエリの結果が含まれるＰｈｏｅｎｉｘ応答コマンドを接続装置に送信し、接続装置が、当該クエリ結果によって、当該テーブル識別子と当該メタデータとに対応するインデックステーブルが記憶装置に存在するか否かを判定することができる、第２の態様と、
を含む。
【００３８】
ステップ４３では、記憶装置は、上記第１のＰｈｏｅｎｉｘクエリコマンドを受信した後、テーブル識別子とメタデータとに対応するインデックステーブルから属性値に対応する行キーを取得し、当該テーブル識別子に対応するＨＢａｓｅテーブルから当該行キーに対応する一行のデータ（即ち行データ）を取得する。
【００３９】
例えば、記憶装置は、第１のＰｈｏｅｎｉｘクエリコマンドを解析して、表識別子Ａと、メタデータ「携帯番号」と、属性値「１８６１１１１１１１１」を得る。テーブル識別子Ａとメタデータ「携帯番号」とに対応するインデックステーブルは、表２に示し、記憶装置は、表２から属性値「１８６１１１１１１１１」に対応する行キー００１を取得することができる。テーブル識別子Ａに対応するＨＢａｓｅテーブルは、表１に示し、記憶装置は、行キー００１に対応する行データを表１から取得し、当該の行データが「００１、張三、北京、２８、１８６１１１１１１１１」を含む。
【００４０】
別の例では、記憶装置は、第２のＰｈｏｅｎｉｘクエリコマンドを受信した後、第２のＰｈｏｅｎｉｘクエリコマンドから、対応するＨＢａｓｅテーブルが表１に示すようなテーブル識別子Ａと、属性値「張三」とを解析することができ、表１を全テーブルスキャンし、「張三」に対応する行データを取得し、当該行データは「００１、張三、北京、２８、１８６１１１１１１１１」を含む。
【００４１】
ここで、接続装置は、Ｐｈｏｅｎｉｘクエリコマンドを生成する際に、当該Ｐｈｏｅｎｉｘクエリコマンドが第１のＰｈｏｅｎｉｘクエリコマンドであるか、それとも第２のＰｈｏｅｎｉｘクエリコマンドであるかを示すための特定の識別子をさらに含んでもよい。記憶装置は、第１のＰｈｏｅｎｉｘクエリコマンドを受信すると、インデックステーブルをクエリしてからＨＢａｓｅテーブルをクエリしてもよい。記憶装置は、第２のＰｈｏｅｎｉｘクエリコマンドを受信すると、ＨＢａｓｅテーブルを直接にクエリしてもよい。
【００４２】
ステップ４４では、記憶装置は、行データを取得した後、その行データを接続装置に返信する。
【００４３】
ステップ４５では、接続装置は、行データを取得した後、その行データをクエリビルダー装置に返信する。
【００４４】
記憶装置は、第１のＰｈｏｅｎｉｘクエリコマンド又は第２のＰｈｏｅｎｉｘクエリコマンドに対するＰｈｏｅｎｉｘ応答コマンドを生成し、クエリされた行データを含むＰｈｏｅｎｉｘ応答コマンドを接続装置に送信することができる。接続装置は、Ｐｈｏｅｎｉｘ応答コマンドを受信した後、Ｐｈｏｅｎｉｘ応答コマンドを解析して当該クエリされた行データを得、ＳｐａｒｋＳＱＬのクエリコマンドに対するＳｐａｒｋＳＱＬ応答コマンドを生成し、ＳｐａｒｋＳＱＬ応答コマンドをクエリビルダー装置に送信する。クエリビルダー装置は、ＳｐａｒｋＳＱＬの応答コマンドを解析して行データを得る。
【００４５】
以上のステップにより、データのクエリが完成する。
【００４６】
なお、上記インデックステーブルに基づいてデータ格納を完成することもできる。以下、図５に示すフローチャートを参照して、データ格納ステップについて説明する。
【００４７】
ステップ５１では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ格納コマンド（データを格納するためのものである）を接続装置に送信する。
【００４８】
ここで、ＳｐａｒｋＳＱＬ格納コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルの少なくとも１つのメタデータと、各メタデータに対応する属性値と、行キーとを含む。例えば、表１に示すＨＢａｓｅテーブルに行キー「００５」と、氏名「韓七」と、住所「深セン」と、年齢「５０」と、携帯番号「１８６５５５５５５５５」とのデータを格納する必要がある場合、ＳｐａｒｋＳＱＬ格納コマンドは、ＨＢａｓｅテーブルのテーブル識別子Ａ、メタデータ「氏名」と属性値「韓七」との対応関係、メタデータ「住所」と属性値「深セン」との対応関係、メタデータ「年齢」と属性値「５０」との対応関係、メタデータ「携帯番号」と属性値「１８６５５５５５５５５」との対応関係、及び行キー「００５」、を含む。
【００４９】
ステップ５２では、接続装置は、ＳｐａｒｋＳＱＬ格納コマンドを受信した後、当該ＳｐａｒｋＳＱＬ格納コマンドにより、第１のＰｈｏｅｎｉｘ格納コマンド及び／又は第２のＰｈｏｅｎｉｘ格納コマンドを生成し、第１のＰｈｏｅｎｉｘ格納コマンド及び／又は第２のＰｈｏｅｎｉｘ格納コマンドを記憶装置に送信する。
【００５０】
接続装置は、当該ＳｐａｒｋＳＱＬ格納コマンドを受信した後、当該ＳｐａｒｋＳＱＬ格納コマンドを解析し、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルの少なくとも１つのメタデータと、各メタデータに対応する属性値及び行キーを得る。
【００５１】
各メタデータに対して、以下の操作を行う。
当該テーブル識別子と当該メタデータとが対応付けられたインデックステーブルが記憶装置に存在する場合には、当該ＳｐａｒｋＳＱＬ格納コマンドにより、第１のＰｈｏｅｎｉｘ格納コマンドを生成して記憶装置に送信する。そうでない場合には、第１のＰｈｏｅｎｉｘ格納コマンドを生成する必要がない。第１のＰｈｏｅｎｉｘ格納コマンドは、前記のテーブル識別子と、前記のメタデータと、前記のメタデータに対応する属性値と、行キーとを含む。
【００５２】
なお、ＳｐａｒｋＳＱＬ格納コマンドの各メタデータに対して、接続装置は、当該テーブル識別子と当該メタデータに対応するインデックステーブルが記憶装置に存在するか否かを判定し、具体的な判定方法は、ステップ４２を参照できるので、再度説明の必要はない。
【００５３】
例えば、メタデータの「氏名」と、「住所」と、「年齢」とについて、対応するインデックステーブルが記憶装置に存在しないとの判定結果であれば、ステップを終了する。メタデータ「携帯番号」について、対応するインデックステーブルが記憶装置に存在するとの判定結果であれば、接続装置は、テーブル識別子Ａ、メタデータ「携帯番号」、属性値「１８６５５５５５５５５」、と行キー００５を含む第１のＰｈｏｅｎｉｘ格納コマンドを生成することができる。
【００５４】
接続装置は、当該ＳｐａｒｋＳＱＬ格納コマンドを受信した後、第２のＰｈｏｅｎｉｘ格納コマンドをさらに生成してもよく、第２のＰｈｏｅｎｉｘ格納コマンドは、前記テーブル識別子と、前記少なくとも１つのメタデータと、前記各メタデータに対応する属性値と、行キーとを含む。
【００５５】
ここで、第１のＰｈｏｅｎｉｘ格納コマンドは、インデックステーブルにデータを格納させることを記憶装置に指示し、第２のＰｈｏｅｎｉｘ格納コマンドは、ＨＢａｓｅテーブルにデータを格納させることを記憶装置に指示してもよい。
【００５６】
接続装置は、Ｐｈｏｅｎｉｘ格納コマンドを生成する際に、当該Ｐｈｏｅｎｉｘ格納コマンドは、Ｐｈｏｅｎｉｘ格納コマンドが第１のＰｈｏｅｎｉｘ格納コマンドであるか、それとも第２のＰｈｏｅｎｉｘ格納コマンドであるかを示すための特定の識別子をさらに含んでもよい。記憶装置が第１のＰｈｏｅｎｉｘ格納コマンドを受信した場合、ステップ５４が実行され、記憶装置が第２のＰｈｏｅｎｉｘ格納コマンドを受信した場合、ステップ５３が実行される。
【００５７】
ステップ５３では、記憶装置が第２のＰｈｏｅｎｉｘ格納コマンドを受信した後、その行キーと各メタデータとに対応する属性値を、当該テーブル識別子に対応するＨＢａｓｅテーブルに記録する。
【００５８】
例えば、記憶装置が、第２のＰｈｏｅｎｉｘ格納コマンドを解析し、ＨＢａｓｅテーブルのテーブル識別子Ａ、メタデータ「氏名」と属性値「韓七」との対応関係、メタデータ「住所」と属性値「深セン」との対応関係、メタデータ「年齢」と属性値「５０」との対応関係、メタデータ「携帯番号」と属性値「１８６５５５５５５５５」との対応関係、及び行キー「００５」を得る。そのため、表１に示すＨＢａｓｅテーブルに、表３に示す行キーが００５の行データのような一行のデータが追加される。
【００５９】
【表３】
2021502655.tif 000005
【００６０】
第２のＰｈｏｅｎｉｘ格納コマンドに含まれている行キーがこのＨＢａｓｅテーブルに既に存在する場合、当該ＨＢａｓｅテーブルでその対応する各メタデータの行キーに対応する位置に、第２のＰｈｏｅｎｉｘ格納コマンドに含まれている対応する属性値を追加することができる。第２のＰｈｏｅｎｉｘ格納コマンドに含まれる行キーが、当該ＨＢａｓｅテーブルに存在しない場合、ＨＢａｓｅテーブルに新たなデータ行を追加し、当該第２のＰｈｏｅｎｉｘ格納コマンドに含まれる行キーと各メタデータの属性値を当該新たなデータ行に記録することができる。
【００６１】
ステップ５４では、記憶装置は、第１のＰｈｏｅｎｉｘ格納コマンドを受信した後、当該メタデータの属性値と当該行キーとに対応する関係を、当該テーブル識別子と当該メタデータとが対応するインデックステーブルに記録する。
【００６２】
例えば、記憶装置は第１のＰｈｏｅｎｉｘ格納コマンドを解析し、テーブル識別子Ａと、メタデータ「携帯番号」と、属性値「１８６５５５５５５５５」と行キー００５とを得るので、表２に示すインデックステーブルに、属性値「１８６５５５５５５５５」と行キー「００５」との対応関係を記録することができ、表４に示すインデックステーブルが得られる。
【００６３】
【表４】
2021502655.tif 000006
【００６４】
インデックステーブルに基づいて、インデックステーブルの削除を行うこともできる。以下、インデックステーブルの削除ステップについて説明する。
【００６５】
ケース１では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ削除コマンドを接続装置に送信し、当該ＳｐａｒｋＳＱＬ削除コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータとを含む。接続装置は、ＳｐａｒｋＳＱＬ削除コマンドを受信した後、当該ＳｐａｒｋＳＱＬ削除コマンドによって、Ｐｈｏｅｎｉｘ削除コマンドを生成し、当該Ｐｈｏｅｎｉｘ削除コマンドを記憶装置に送信することができる。当該Ｐｈｏｅｎｉｘ削除コマンドは、当該テーブル識別子と当該メタデータとを含んでもよい。記憶装置は、Ｐｈｏｅｎｉｘ削除コマンドを受信した後、Ｐｈｏｅｎｉｘ削除コマンドを解析し、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータとを得て、当該テーブル識別子と当該メタデータとに対応するインデックステーブルを削除する。
【００６６】
例えば、Ｐｈｏｅｎｉｘ削除コマンドがテーブル識別子Ａと、メタデータ「携帯番号」とを含むと、表４に示すインデックステーブルが記憶装置に存在する場合、記憶装置は、当該Ｐｈｏｅｎｉｘ削除コマンドによって、表４を削除してもよい。
【００６７】
ケース２では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ削除コマンドを接続装置に送信し、当該ＳｐａｒｋＳＱＬ削除コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータと、当該メタデータに対応する属性値とを含んでもよい。
【００６８】
接続装置は、当該ＳｐａｒｋＳＱＬ削除コマンドを受信した後、当該ＳｐａｒｋＳＱＬ削除コマンドによって、Ｐｈｏｅｎｉｘ削除コマンドを生成し、当該Ｐｈｏｅｎｉｘ削除コマンドを記憶装置に送信することができ、当該Ｐｈｏｅｎｉｘ削除コマンドは、当該テーブル識別子と、当該メタデータと、当該メタデータが対応する属性値とを含んでもよい。
【００６９】
記憶装置は、Ｐｈｏｅｎｉｘ削除コマンドを受信した後、Ｐｈｏｅｎｉｘ削除コマンドを解析し、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータと、当該メタデータが対応する属性値とを得、当該テーブル識別子と当該メタデータとに対応するインデックステーブルから、当該属性値に対応する行データを削除してもよい。
【００７０】
例えば、Ｐｈｏｅｎｉｘ削除コマンドがテーブル識別子（例えば、テーブルＡ）、メタデータ（例えば、携帯番号）、属性値（例えば、１８６５５５５５５５５）が含むと、表４に示すインデックステーブルが記憶装置に存在する場合、記憶装置は、当該Ｐｈｏｅｎｉｘ削除コマンドにより、表４に対応するデータを削除し、削除した後のインデックステーブルは、表２に示すようになる。
【００７１】
インデックステーブルに基づいて、インデックステーブルの取得を行うこともできる。以下、インデックステーブルの取得ステップについて説明する。
【００７２】
ケース１では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ取得コマンドを接続装置に送信し、当該ＳｐａｒｋＳＱＬ取得コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータとを含む。接続装置は、ＳｐａｒｋＳＱＬ取得コマンドを受信した後、当該ＳｐａｒｋＳＱＬ取得コマンドによって、Ｐｈｏｅｎｉｘ取得コマンドを生成し、当該Ｐｈｏｅｎｉｘ取得コマンドを記憶装置に送信することができ、当該Ｐｈｏｅｎｉｘ取得コマンドは、当該テーブル識別子と当該メタデータとを含んでもよい。
【００７３】
記憶装置は、Ｐｈｏｅｎｉｘ取得コマンドを受信した後、Ｐｈｏｅｎｉｘ取得コマンドを解析し、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータを得、当該テーブル識別子と、当該メタデータに対応するインデックステーブルとを、接続装置を介してクエリビルダー装置に返信してもよい。
【００７４】
「当該テーブル識別子と、当該メタデータに対応するインデックステーブルとを、接続装置を介してクエリビルダー装置に返信する」ステップについて、記憶装置は、Ｐｈｏｅｎｉｘ取得コマンドに対するＰｈｏｅｎｉｘ応答コマンドを接続装置に送信し、当該Ｐｈｏｅｎｉｘ応答コマンドは当該インデックステーブルを含み、そして、接続装置は、ＳｐａｒｋＳＱＬ取得コマンドに対するＳｐａｒｋＳＱＬ応答コマンドをクエリビルダー装置に送信してもよく、当該ＳｐａｒｋＳＱＬ応答コマンドは当該インデックステーブルを含む。
【００７５】
例えば、Ｐｈｏｅｎｉｘ取得コマンドがテーブル識別子（例えばテーブルＡ）と、メタデータ（例えば携帯番号）とを含むと、表４に示すインデックステーブルが記憶装置に存在する場合、記憶装置は、当該Ｐｈｏｅｎｉｘ取得コマンドによって、表４をクエリビルダー装置に返信してもよい。
【００７６】
ケース２では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ取得コマンドを接続装置に送信し、当該ＳｐａｒｋＳＱＬ取得コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータと、当該メタデータに対応する属性値とを含んでもよい。
【００７７】
接続装置は、ＳｐａｒｋＳＱＬ取得コマンドを受信した後、当該ＳｐａｒｋＳＱＬ取得コマンドによって、Ｐｈｏｅｎｉｘ取得コマンドを生成し、当該Ｐｈｏｅｎｉｘ取得コマンドを記憶装置に送信することができ、当該Ｐｈｏｅｎｉｘ取得コマンドは、当該テーブル識別子と、当該メタデータと、当該メタデータに対応する属性値とを含んでもよい。
【００７８】
記憶装置は、Ｐｈｏｅｎｉｘ取得コマンドを受信した後、当該Ｐｈｏｅｎｉｘ取得コマンド解析し、ＨＢａｓｅテーブルのテーブル識別子と、当該ＨＢａｓｅテーブルのメタデータと、当該メタデータに対応する属性値とを得、当該テーブル識別子と当該メタデータとが対応するインデックステーブルから、当該属性値に対応する行データを取得してもよい。
【００７９】
そして、記憶装置は、接続装置を介して、当該行データをクエリビルダー装置に返信する。具体的には、記憶装置がＰｈｏｅｎｉｘ取得コマンドに対するＰｈｏｅｎｉｘ応答コマンドを接続装置に送信してもよく、当該Ｐｈｏｅｎｉｘ応答コマンドが当該行データを含む。そして、接続装置は、ＳｐａｒｋＳＱＬ取得コマンドに対するＳｐａｒｋＳＱＬ応答コマンドをクエリビルダー装置に送信してもよい。当該ＳｐａｒｋＳＱＬ応答コマンドは当該行データを含む。
【００８０】
例えば、Ｐｈｏｅｎｉｘ削除コマンドにテーブル識別子（例えば、テーブルＡ）と、メタデータ（例えば、携帯番号）と、属性値（例えば、１８６５５５５５５５５）とが含まれると、表４に示すインデックステーブルが記憶装置に存在する場合、記憶装置は、当該Ｐｈｏｅｎｉｘ取得コマンドによって、表４に対応する行データ（「携帯番号」と、「１８６５５５５５５５５」と、「行キイ」と、「００５」とを含む）を、クエリビルダー装置に返信する。
【００８１】
上記技術案に基づいて、本開示の実施形態では、インデックステーブルを作成し、ＨＢａｓｅテーブルのメタデータの属性値と、ＨＢａｓｅテーブルの行キーとの対応関係をインデックステーブルに記録することにより、Ｐｈｏｅｎｉｘクエリコマンドを受信した後に、ＰｈｏｅｎｉｘクエリコマンドにＨＢａｓｅテーブルの行キーが含まれていなく、ＨＢａｓｅテーブルのメタデータに対応する属性値が含まれていても、当該属性値によりインデックステーブルをクエリして当該ＨＢａｓｅテーブルの行キーを得て、ＨＢａｓｅテーブルの行キーで当該ＨＢａｓｅテーブルをクエリして、対応する行データを得ることができる。上記の形態では、ＨＢａｓｅテーブル全体に全テーブルスキャンをする必要がなく、クエリ性能が向上できる。
【００８２】
実際の応用では、１つのＨＢａｓｅテーブルの内容が多いすぎ、クエリが複雑になることを避けるためには、記憶装置は、複数のＨＢａｓｅテーブルを格納してもよい。２つのＨＢａｓｅテーブルを例とし、便宜上、一つのＨＢａｓｅテーブルをＨＢａｓｅテーブルとし、そのＨＢａｓｅテーブル識別子を第１のテーブル識別子とし、例えば表１をＨＢａｓｅテーブルとし、第１のテーブル識別子をテーブルＡとする。別のＨＢａｓｅテーブルを、当該ＨＢａｓｅテーブルに対応する関連ＨＢａｓｅテーブルとし、関連ＨＢａｓｅテーブルのテーブル識別子を、第２のテーブル識別子とし、表５に示されるのは関連ＨＢａｓｅテーブルの例であって、第２のテーブル識別子はテーブルＢである。
【００８３】
【表５】
2021502655.tif 000007
【００８４】
本応用シーンにおいて、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルを作成する際に、ＨＢａｓｅテーブルおよび関連ＨＢａｓｅテーブルのデータを関連付けるためには、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルとが同じメタデータを有することが必要がある。例えば表１と表５のように両方が同じメタデータ「携帯番号」を有する。また、表１に示すＨＢａｓｅテーブルにインデックステーブルを作成する際に、当該インデックステーブルのインデックスがメタデータである必要がある。即ち、図３に示すステップによりインデックステーブルを作成する際に、ＳｐａｒｋＳＱＬ作成コマンドに含まれるメタデータが「携帯番号」であるので、インデックステーブルが記録するのは、メタデータ「携帯番号」に対応する属性値と行キーとの対応関係となる。
【００８５】
上記の応用シーンにおいて、データクエリステップについて、図６に示されるステップを参照して説明する。
【００８６】
ステップ６１では、クエリビルダー装置は、ＳｐａｒｋＳＱＬ関連クエリコマンドを接続装置に送信し、当該ＳｐａｒｋＳＱＬ関連クエリコマンドは、ＨＢａｓｅテーブルの第１のテーブル識別子と、当該ＨＢａｓｅテーブルに対応する関連ＨＢａｓｅテーブルの第２のテーブル識別子とを含む。
【００８７】
ここで、ＳｐａｒｋＳＱＬ関連クエリコマンドには、第１のテーブル識別子（例えば、テーブルＡ）及び第２のテーブル識別子（例えば、テーブルＢ）のみが含まれて、メタデータと当該メタデータに対応する属性値等の内容が含まれなくてもよい。
【００８８】
ステップ６２では、接続装置は、ＳｐａｒｋＳＱＬ関連クエリコマンドを受信した後、当該ＳｐａｒｋＳＱＬ関連クエリコマンドによって、第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、第１のＰｈｏｅｎｉｘ関連クエリコマンドを記憶装置に送信する。
【００８９】
ここで、接続装置は、ＳｐａｒｋＳＱＬ関連クエリコマンドを解析し、第１のテーブル識別子及び第２のテーブル識別子を得る。そして、当該第２のテーブル識別子を含む第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成してもよい。
【００９０】
一例において、接続装置は、ＳｐａｒｋＳＱＬ関連クエリコマンドを解析して２つのテーブル識別子を得る。これら２つのテーブル識別子を区別するためには、２つのテーブル識別子に対応するＨＢａｓｅテーブルのデータ量を取得し、データ量が大きい方のテーブルの識別子を第１のテーブル識別子として確定し、データ量が小さい方のテーブルの識別子を第２のテーブル識別子として確定してもよい。第２のテーブル識別子が確定された後、第２のテーブル識別子を含む第１のＰｈｏｅｎｉｘ関連クエリコマンドが生成されることができる。
【００９１】
通常、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルを作成する際、ＨＢａｓｅテーブルのデータ量が関連ＨＢａｓｅテーブルのデータ量よりも大きいため、ＨＢａｓｅテーブルのテーブル識別子が第１のテーブル識別子となり、関連ＨＢａｓｅテーブルのテーブル識別子が第２のテーブル識別子となる。逆に、ＨＢａｓｅテーブルのデータ量が関連ＨＢａｓｅテーブルのデータ量よりも小さければ、ＨＢａｓｅテーブルのテーブル識別子が第２のテーブル識別子となり、関連ＨＢａｓｅテーブルのテーブル識別子が第１のテーブル識別子となるが、そのステップは同じであり、第２のテーブル識別子を含む第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成することであるため、その説明は省略する。
【００９２】
要するに、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルのうち、データ量が小さい方のテーブルの識別子を第２のテーブル識別子とする。
【００９３】
一例において、接続装置は、第２のテーブル識別子を決定した後、第２のテーブル識別子に対応するテーブルのデータ量が閾値未満であるか否かをさらに判定し、閾値未満であると判定した場合、第２のテーブル識別子を含む第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、そして、後続のステップを実行する。そうではないと判定した場合、第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成せず、当該第１のテーブル識別子に対応するＨＢａｓｅテーブルと、第２のテーブル識別子に対応する関連ＨＢａｓｅテーブルとを記憶装置から直接取得し、そしてＨＢａｓｅテーブル及び関連ＨＢａｓｅテーブルをクエリビルダー装置に送信する。その説明は省略する。
【００９４】
一例において、「接続装置は、テーブル識別子に対応するＨＢａｓｅテーブルのデータ量を取得する」ステップに対して、接続装置は、テーブル識別子に対応するＨＢａｓｅテーブルのデータ量を記憶装置から取得することができるが、これに限定されない。
【００９５】
ステップ６３では、記憶装置は、第１のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、第２のテーブル識別子に対応する関連ＨＢａｓｅテーブルから全ての第１種の行データを取得し、全ての第１種の行データを接続装置に返信する。ここで、各第１種の行データのそれぞれは、少なくとも１つのメタデータに対応する属性値を含む。
【００９６】
例えば、記憶装置は、第２のテーブル識別子「テーブルＢ」に対応する関連ＨＢａｓｅテーブルから、全ての第１種の行データを取得し、すなわち、テーブル５の全内容を取得し、全ての第１種の行データを接続装置に返信してもよい。例えば、返信された内容は、第１種の行データ１（行キー０１１、携帯番号１８６１１１１１１１１、身分証明番号１０００００００００００００００００）と、第１種の行データ２（行キー０１２、携帯番号１８６２２２２２２２２、身分証明番号２０００００００００００００００００）と等々を含んでもよい。
【００９７】
一例において、記憶装置は、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドに対するＰｈｏｅｎｉｘ応答コマンドを接続装置に送信し、Ｐｈｏｅｎｉｘ応答コマンドは、上記全ての第１種の行データを含んでもよい。
【００９８】
ステップ６４では、各第１種のラインデータの各メタデータに対して次の操作を行う。
当該第１のテーブル識別子（ＳｐａｒｋＳＱＬ関連クエリコマンドに含まれる第１のテーブル識別子）と、当該メタデータに対応するインデックステーブルとが記憶装置に存在すると、接続装置は、第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、第２のＰｈｏｅｎｉｘ関連クエリコマンドを記憶装置に送信し、第２のＰｈｏｅｎｉｘ関連クエリコマンドは、当該第１のテーブル識別子と、当該メタデータと、当該メタデータに対応する属性値とを含む。記憶装置は、第２のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、当該第１のテーブル識別子と、当該メタデータとに対応するインデックステーブルから、当該属性値に対応する行キーを取得して、当該第１のテーブル識別子に対応するＨＢａｓｅテーブルから、当該行キーに対応する第２種の行データを取得し、当該第２種行データを接続装置に返信する。接続装置は、当該第１種の行データと、当該第２種行データとを関連付けしてクエリビルダー装置に返信する。
【００９９】
なお、記憶装置に第１のテーブル識別子、当該メタデータに対応するインデックステーブルが存在しない場合、接続装置は、第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成しなくて他のメタデータを分析する。
【０１００】
例えば、第１種の行データ１のメタデータ「身分証明番号」については、第１テーブル識別子（テーブルＡ）と、メタデータ「身分証明番号」とに対応するインデックステーブルが記憶装置に存在しないため、第２のＰｈｏｅｎｉｘ関連クエリコマンドは生成されない。第１種の行データ１のメタデータ「携帯番号」については、第１のテーブル識別子（テーブルＡ）と、メタデータ「携帯番号」とに対応するインデックステーブルが記憶装置に存在するため、接続装置は、第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、第２のＰｈｏｅｎｉｘ関連クエリコマンドを記憶装置に送信し、第２のＰｈｏｅｎｉｘ関連クエリコマンドは、第１のテーブル識別子（テーブルＡ）と、メタデータ「携帯番号」と、当該メタデータに対応する属性値「１８６１１１１１１１１」と、を含む。
【０１０１】
記憶装置が第２のＰｈｏｅｎｉｘ関連クエリコマンドを受信した後、第１のテーブル識別子（表Ａ）と、メタデータ「携帯番号」とに対応するインデックステーブルは表２に示し、すなわち、記憶装置は表２から属性値「１８６１１１１１１１１」に対応する行キー「００１」を取得する。第１のテーブル識別子（表Ａ）に対応するＨＢａｓｅテーブルは表１に示し、すなわち、記憶装置は、行キー「００１」に対応する第２種の行データ１「００１、張三、北京、２８、１８６１１１１１１１１」を表１から取得する。そして、第２種の行データを接続装置に返信する。接続装置は、第１種の行データ１と第２種の行データ１とを関連付け、関連付けられた第１種行データ１と第２種行データ１とをクエリビルダー装置に返信する。
【０１０２】
上記ステップにより、接続装置は、第１種行データ１と第２種行データ１との関連付けを完成する。そして、接続装置は、第１種行データ２と、第１種行データ３と、第１種行データ４との関連付けをさらに行うことができるが、その関連付けのステップは、第１種行データ１の関連付けの手順と同様であるので、ここでは説明を省略する。
【０１０３】
上記実施例において、接続装置は、当該第１テーブル識別子と、当該メタデータに対応するインデックステーブルとが記憶装置に存在するか否かを判定し、具体的な判定方法は、ステップ４２を参照して、ここでは説明を省略する。
【０１０４】
上記実施例では、「記憶装置は、第２種行データを接続装置に返信する」ステップについて、記憶装置は、第２のＰｈｏｅｎｉｘ関連クエリコマンドに対するＰｈｏｅｎｉｘ応答コマンドを接続装置に送信し、Ｐｈｏｅｎｉｘ応答コマンドが前記第２種の行データを含んでもよいので、第２種の行データを接続装置に返信することができる。
【０１０５】
上記実施例では、「接続装置は、第１種の行データと第２種の行データとを関連付けてクエリビルダー装置に返信する」ステップについて、接続装置は、ＳｐａｒｋＳＱＬ関連クエリコマンドに対するＳｐａｒｋＳＱＬ応答コマンドをクエリビルダー装置に送信し、当該ＳｐａｒｋＳＱＬ応答コマンドが当該第１種行データと当該第２種行データとを含んでもよいので、当該第１種の行データと当該第２種の行データとを接続装置に返信することができる。
【０１０６】
例えば、接続装置は、複数のＳｐａｒｋＳＱＬ応答コマンドをクエリビルダー装置に送信してもよい。ＳｐａｒｋＳＱＬ応答コマンド１は、第１種の行データ１及び第２種の行データ１を含み、ＳｐａｒｋＳＱＬ応答コマンド２は第１種の行データ２及び第２種の行データ２を含むように類推する。又は、接続装置は、一つのＳｐａｒｋＳＱＬ応答コマンドをクエリビルダー装置に送信してもよく、当該ＳｐａｒｋＳＱＬ応答コマンドは、第１種の行データ１と第２種の行データ１との関連関係及び第１種の行データ２と第２種の行データ２との関連関係を含むように類推する。
【０１０７】
上記ステップにより、クエリビルダー装置は、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルにおける第１種の行データと第２種の行データとの関連関係が得られるので、クエリビルダー装置が関連付ける必要がないため、クエリビルダー装置の動作量が節約できる。
【０１０８】
上記技術案に基づいて、関連ＨＢａｓｅテーブルのデータ量が少ない場合に、接続装置で第１種の行データ１と第２種の行データ１とを関連付け、関連付けられた第１種の行データ１と第２種の行データ１とをクエリビルダー装置に送信する。これにより、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルをクエリビルダー装置に返信することを回避し、クエリビルダー装置でＨＢａｓｅテーブルの第１種の行データと関連ＨＢａｓｅテーブルの第２種の行データとを関連付け、ＨＢａｓｅテーブルと関連ＨＢａｓｅテーブルのクエリ性能を大幅に向上させ、ＩＯ操作を低減することができる。
【０１０９】
本開示の実施例では、上記方法と同様の出願思想に基づいて、図７に示すようなハードウェア構成を有する接続装置を提案する。ここで、当該接続装置は、機械可読記憶媒体６０１と、プロセッサ６０２とを含み、当該機械可読記憶媒体６０１とプロセッサ６０２はシステムバス６０３を介して通信できる。
【０１１０】
ここで、機械可読記憶媒体６０１は、接続装置が上記ステップにおいて実行する操作に対応する機械実行可能なコマンドを格納できる。プロセッサ６０２は、上記接続装置の操作を実現するように、機械実行可能なコマンドをロードして実行すること。前記接続部の操作は以下のことを含む。クエリビルダー装置から送信されたＳｐａｒｋＳＱＬクエリコマンドを受信することを含む。ここで、前記ＳｐａｒｋＳＱＬクエリコマンドは、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータと、前記メタデータに対応する属性値とを含む。前記テーブル識別子と前記メタデータとに対応するインデックステーブルが記憶装置に存在する場合に、第１のＰｈｏｅｎｉｘクエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘクエリコマンドを前記記憶装置に送信する。ここで、前記インデックステーブルは、ＨＢａｓｅテーブルのメタデータの属性値とＨＢａｓｅテーブルの行キーとの対応関係を記録するためのものであり、前記第１のＰｈｏｅｎｉｘクエリコマンドは、前記テーブル識別子と、前記メタデータと、前記属性値とを含み、前記記憶装置に、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから前記属性値に対応する行キーを取得させ、前記テーブル識別子に対応するＨＢａｓｅテーブルから前記行キーに対応する行データを取得させて、前記行データを前記接続装置に返信させる。そして、受信された前記行データを前記クエリビルダー装置に返信する。
【０１１１】
一例において、機械実行可能なコマンドはさらに、プロセッサ６０２に以下の操作を実行させる。前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ作成コマンドを受信する。ここで、前記ＳｐａｒｋＳＱＬ作成コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、前記ＨＢａｓｅテーブルのメタデータとを含む。Ｐｈｏｅｎｉｘ作成コマンドを生成し、前記Ｐｈｏｅｎｉｘ作成コマンドを前記記憶装置に送信する。ここで、前記Ｐｈｏｅｎｉｘ作成コマンドは、前記テーブル識別子と前記メタデータとを含み、前記テーブル識別子に対応するＨＢａｓｅテーブルから、前記メタデータに対応する属性値と前記属性値に対応する行キーとを前記記憶装置に取得させ、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを作成させて、前記属性値と前記行キーとの対応関係を前記インデックステーブルに記録させる。
【０１１２】
一例において、機械実行可能なコマンドはさらに、以下の操作をプロセッサ６０２に実行させる。前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ格納コマンドを受信する。ここで、前記ＳｐａｒｋＳＱＬ格納コマンドは、ＨＢａｓｅテーブルのテーブル識別子と、ＨＢａｓｅテーブルの少なくとも１つのメタデータと、各メタデータに対応する属性値及び行キーとを含む。各メタデータに対し、前記テーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合に、第１のＰｈｏｅｎｉｘ格納コマンドを生成し、前記第１のＰｈｏｅｎｉｘ格納コマンドを前記記憶装置に送信する。ここで、前記第１のＰｈｏｅｎｉｘ格納コマンドは、前記テーブル識別子と、前記メタデータと、前記メタデータに対応する属性値と、前記属性値に対応する行キーとを含み、前記記憶装置に、前記属性値と前記行キーとの対応関係を前記テーブル識別子と前記メタデータとに対応するインデックステーブルに記録させる。
【０１１３】
一例において、機械実行可能なコマンドはさらに、以下の操作をプロセッサ６０２に実行させる。第２のＰｈｏｅｎｉｘ格納コマンドを生成し、前記記憶装置に前記第２のＰｈｏｅｎｉｘ格納コマンドを送信する。ここで、前記第２のＰｈｏｅｎｉｘ格納コマンドは、前記テーブル識別子と、前記少なくとも１つのメタデータと、前記各メタデータに対応する属性値及び前記行キーとを含み、前記記憶装置に、前記行キーと前記各メタデータに対応する属性値との対応関係を前記テーブル識別子に対応するＨＢａｓｅテーブルに記録させる。
【０１１４】
一例において、機械実行可能なコマンドはさらに、以下の操作をプロセッサ６０２に実行させる。前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ削除コマンドを受信する。前記Ｐｈｏｅｎｉｘ削除コマンドを生成し、前記Ｐｈｏｅｎｉｘ削除コマンドを前記記憶装置に送信する。ここで、前記Ｐｈｏｅｎｉｘ削除コマンドは、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含み、前記記憶装置に、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを削除させるコマンドと、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータと前記メタデータに対応する属性値とを含み、前記記憶装置に、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを削除させるコマンドとのうちのコマンドの１つである。
【０１１５】
一例において、機械実行可能なコマンドはさらに、以下の操作をプロセッサ６０２に実行させる。前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ取得コマンドを受信する。前記Ｐｈｏｅｎｉｘ取得コマンドを生成し、前記Ｐｈｏｅｎｉｘ取得コマンドを前記記憶装置に送信する。ここで、Ｐｈｏｅｎｉｘ取得コマンドは、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータとを含み、前記記憶装置に、前記テーブル識別子と前記メタデータとに対応するインデックステーブルを前記接続装置に返信させるコマンドと、ＨＢａｓｅテーブルのテーブル識別子とＨＢａｓｅテーブルのメタデータと前記メタデータに対応する属性値とを含み、前記記憶装置に、前記テーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行データを取得させて、前記行データを前記接続装置に返信するコマンドとのうちのコマンドの１つである。前記インデックステーブル又は前記行データを受信した後、前記インデックステーブル又は前記行データを前記クエリビルダー装置に返信する。
【０１１６】
一例において、機械実行可能なコマンドはさらに、以下の操作をプロセッサ６０２に実行させる。前記クエリビルダー装置から送信されたＳｐａｒｋＳＱＬ関連クエリコマンドを受信する。ここで、前記ＳｐａｒｋＳＱＬ関連クエリコマンドは、ＨＢａｓｅテーブルの第１のテーブル識別子と、前記ＨＢａｓｅテーブルに対応する関連ＨＢａｓｅテーブルの第２のテーブル識別子とを含む。第１のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信する。ここで、前記第１のＰｈｏｅｎｉｘ関連クエリコマンドは、前記第２のテーブル識別子を含み、前記記憶装置に、前記第２のテーブル識別子に対応する関連ＨＢａｓｅテーブルから、全ての第１種の行データを取得させ、全ての第１種の行データを前記接続装置に返信させ、前記各第１種の行データは、少なくとも１つのメタデータに対応する属性値を含む。各第１種の行データの各メタデータのそれぞれに対し、前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルが前記記憶装置に存在する場合、第２のＰｈｏｅｎｉｘ関連クエリコマンドを生成し、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドを前記記憶装置に送信する操作を行う。ここで、前記第２のＰｈｏｅｎｉｘ関連クエリコマンドは、前記第１テーブル識別子と、前記メタデータと、及び前記メタデータに対応する属性値とを含み、前記記憶装置に、前記第１のテーブル識別子と前記メタデータとに対応するインデックステーブルから、前記属性値に対応する行キーを取得させ、前記第１テーブル識別子に対応するＨＢａｓｅテーブルから、前記行キーに対応する第２種の行データを取得させ、前記第２種の行データを前記接続装置に返信させて、前記第１種の行データと前記第２種の行データとを関連付けた後、前記クエリビルダー装置に返信する。
【０１１７】
一つの実施例として、機械可読記憶媒体６０１は、任意の電子的、磁気的、光学的、または他の物理的記憶装置であってもよく、例えば、実行可能命令や、データなどの情報を含んでまたは格納してもよい。例えば、機械可読記憶媒体は、ＲＡＭ（Ｒａｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ランダムアクセス記憶装置）、揮発性記憶装置、不揮発性記憶装置、フラッシュ記憶装置、記憶装置ドライブ（ハードディスクドライブ）、ソリッドステートハードディスク、任意の種類の記憶ディスク（光ディスク、ｄｖｄなど）、または似た記憶媒体、あるいはそれらの組合せであってもよい。
【０１１８】
上記の説明は、本開示の実施例にすぎず、本開示を限定するものではない。本開示は、当業者にとって様々な変更及び変形が可能である。本開示の精神及び原理の範囲内で行われるあらゆる修正や、等価置換、変更等は、本開示の特許請求の範囲に含まれるべきである。
【図１】
2021502655.tif 000008
【図２】
2021502655.tif 000009
【図３】
2021502655.tif 000010
【図４】
2021502655.tif 000011
【図５】
2021502655.tif 000012
【図６】
2021502655.tif 000013
【図７】
2021502655.tif 000014
【国際調査報告】
2021502655.tif 000015
2021502655.tif 000016
2021502655.tif 000017
2021502655.tif 000018