(57)【要約】【課題】データベースの匿名加工処理を効率化する。【解決手段】データベース管理システム（ＤＢＭＳ）は、変換規則を含むクエリを受け付けた場合、当該変換規則に基づき、データベースにおける関係表を加工する。その際、ＤＢＭＳは、所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、過去に格納された加工結果表（関係表を加工した結果）からデータを取得する。一方、当該所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、ＤＢＭＳは、データベースから、もしくは、当該加工結果表以外に格納されている、上記関係表を加工した結果から、データを取得し、当該データを用いて当該変換規則に基づき関係表を加工する。【選択図】図１
2020086890.tif 000002
【特許請求の範囲】
【請求項１】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システムにおいて、
第一の変換規則を含む第一のクエリを受け付けるクエリ受付部と、
前記第一の変換規則に基づき前記関係表を加工し、加工した結果である第一の加工結果表を格納し、当該第一の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部と
を有し、
第二の変換規則を含む第二のクエリを前記クエリ受付部が受け付けた場合、前記クエリ処理部が、前記第二の変換規則に基づき、前記関係表を加工し、その際に、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第一の変換規則に基づいて加工された前記第一の加工結果表からデータを取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第一の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第二の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項２】
請求項１に記載のデータベース管理システムであって、
前記第一の加工結果表は、前記関係表を加工した結果のうち前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満すタプルを含むものであり、
前記クエリ処理部は、前記関係表を加工した結果のうち前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルを含む第二の加工結果表を更に格納し、
前記クエリ処理部は、前記第二の変換規則に基づき前記関係表を加工する際に、前記第二の加工結果表からデータを取得し、当該データを用いて前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項３】
請求項２に記載のデータベース管理システムであって、
前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率が閾値を超えていた場合、または、前記第一の加工結果表の容量と前記第二の加工結果表の容量とを含む記憶装置使用容量が閾値以下であった場合に、前記クエリ処理部は、前記第二の加工結果表を更に格納する
ことを特徴とするデータベース管理システム。
【請求項４】
請求項２に記載のデータベース管理システムであって、
前記クエリ処理部は、前記関係表を加工した結果のうち前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの前記データベース上の格納位置を示す格納情報を格納する
ことを特徴とするデータベース管理システム。
【請求項５】
請求項４に記載のデータベース管理システムであって、
前記第一の加工結果表の容量と前記第二の加工結果表の容量とを含む記憶装置使用容量が閾値以上であった場合、または、前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率が閾値以下であった場合に、前記クエリ処理部は、前記第二の加工結果表を格納せず、前記格納情報を格納する
ことを特徴とするデータベース管理システム。
【請求項６】
請求項２に記載のデータベース管理システムであって、
前記第二のクエリの第二の変換規則に示される検索範囲が、前記第一のクエリの前記第一の変換規則に示される検索範囲に包含される場合、前記第一の加工結果表および／または前記第二の加工結果表から、データを取得し、当該データを用いて前記第二の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項７】
請求項１に記載のデータベース管理システムであって、
前記クエリ受付部が受け付けた複数のクエリのうち、設定された匿名加工条件と対応するクエリと、当該匿名加工条件と対応しないクエリとで、実行結果が異なる
ことを特徴とするデータベース管理システム。
【請求項８】
請求項１に記載のデータベース管理システムであって、
前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率がその下限値以上かつ上限値以下の場合に、前記クエリ処理部が、前記第一のクエリに対する実行結果を送信する
ことを特徴とするデータベース管理システム。
【請求項９】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システムにおいて、
変換規則を含むクエリを受け付けるクエリ受付部と、
前記受け付けたクエリが含む変換規則に基づく第三の変換規則に基づき前記関係表を加工し、加工した結果である第三の加工結果表を格納し、当該第三の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部と
を有し、
当該計算の結果が所定の条件を満たさない場合は、前記クエリ処理部は、第四の変換規則に基づき、前記関係表を加工し、その際に、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第三の変換規則に基づいて加工された前記第三の加工結果表からデータを取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第三の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第四の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項１０】
請求項９に記載のデータベース管理システムであって、
前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率がその下限値以上かつ上限値以下の場合に、前記クエリ処理部が、前記第三のクエリに対する実行結果を送信し、
前記欠損率がその下限値未満もしくは上限値超過の場合に、前記クエリ処理部が、前記第一のクエリに対する実行結果を送信せずに、前記第四の変換規則を生成し、前記第四の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項１１】
請求項９に記載のデータベース管理システムであって、
前記クエリ受付部が前記第三のクエリを受け付ける前に受け付けた少なくも１つのクエリについて、前記クエリ処理部は、当該少なくとも１つのクエリに関連付けられている所定の変換規則と、当該所定の変換規則に基づき前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率と、前記第四の変換規則と、前記少なくとも１つのクエリに含まれる前記所定の変換規則と、前記欠損率に基づき、前記第四の変換規則に基づき前記関係表を加工するか否かを判断する
ことを特徴とするデータベース管理システム。
【請求項１２】
請求項９に記載のデータベース管理システムであって、
前記第三のクエリは、前記第三の変換規則とは異なる変換規則と対応する変換規則関連情報を含み、
前記クエリ処理部は、前記変換規則関連情報に基づき、前記第四の変換規則を生成する
ことを特徴とするデータベース管理システム。
【請求項１３】
請求項８に記載のデータベース管理システムであって、
複数の変換規則を示す変換規則管理情報に示される前記複数の変換規則のうちの少なくとも一つである変換規則を前記クエリ処理部が前記第四の変換規則として生成する
ことを特徴とするデータベース管理システム。
【請求項１４】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースの匿名加工処理方法において、
第一の変換規則を含む第一のクエリを受け付け、
前記第一の変換規則に基づき、前記関係表を加工し、加工した結果である第一の加工結果表を格納し、
当該第一の加工結果表において所定の属性に現れる値毎にタプルの数を計算し、
第二の変換規則を含む第二のクエリを受け付け、
前記第二の変換規則に基づき、前記関係表を加工し、その際に、
属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第一の変換規則に基づいて加工された前記第一の加工結果表からデータを取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第一の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第二の変換規則に基づき前記関係表を加工する
ことを特徴とする匿名加工処理方法。
【請求項１５】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システムにおいて、
変換規則を含むクエリを受け付け、
前記受け付けたクエリが含む変換規則に基づく第三の変換規則に基づき前記関係表を加工し、加工した結果である第三の加工結果表を格納し、
当該第三の加工結果表において所定の属性に現れる値毎にタプルの数を計算し、
当該計算の結果が所定の条件を満たさない場合は、第四の変換規則に基づき、前記関係表を加工し、その際に、
属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第三の変換規則に基づいて加工された前記第三の加工結果表から取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第三の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第四の変換規則に基づき前記関係表を加工する
ことを特徴とする匿名加工処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データ処理に関し、例えば、データベース管理に関する。
【背景技術】
【０００２】
一般に、データベースの匿名加工処理では、あるクエリで加工した結果が匿名加工条件（例えばｋ値）を満たしていない場合にデータのある属性値を一般化するといった再加工が行われる。再加工の都度にデータベースからデータを取得するのでは匿名加工処理に長い時間がかかる。
【０００３】
特許文献１は、予めデータベースの部分マテリアライズドビューを作成しておきクエリの処理において当該部分マテリアライズドビューを利用できる部分については当該部分マテリアライズドビューを利用する技術を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2006-65846号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
データベースの匿名加工処理に特許文献１に開示の技術を適用することで匿名加工処理を効率化することが考えられる。
【０００６】
しかし、特許文献１は、どのような部分マテリアライズドビューを作成しておくかを明確に開示していない。
【０００７】
このため、データベースの匿名加工処理では特許文献１に開示の部分マテリアライズドビューを有効に利用することは困難である。
【課題を解決するための手段】
【０００８】
一例としての観点によれば、属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システム（ＤＢＭＳ）は、第一の変換規則を含む第一のクエリを受け付けるクエリ受付部と、第一の変換規則に基づき、関係表を加工し、加工した結果である第一の加工結果表を格納し、当該第一の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部とを有する。第二の変換規則を含む第二のクエリをクエリ受付部が受け付けた場合、クエリ処理部が、第二の変換規則に基づき、関係表を加工する。その際に、クエリ処理部は、上記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、第一の変換規則に基づいて加工された第一の加工結果表からデータを取得する。所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、クエリ処理部は、データベースから、もしくは、第一の加工結果表以外に格納されている、関係表を加工した結果から、データを取得し、当該データを用いて第二の変換規則に基づき関係表を加工する。
【０００９】
別の一例としての観点によれば、属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するＤＢＭＳは、変換規則を含むクエリを受け付けるクエリ受付部と、受け付けたクエリが含む変化規則に基づく第三の変換規則に基づき関係表を加工し、加工した結果である第三の加工結果表を格納し、当該第三の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部とを有する。当該計算の結果が所定の条件を満たさない場合は、クエリ処理部は、第四の変換規則を生成する。クエリ処理部は、第四の変換規則に基づき、関係表を加工する。その際に、クエリ処理部は、上記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、第三の変換規則に基づいて加工された第三の加工結果表からデータを取得する。当該所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、クエリ処理部は、データベースから、もしくは、第三の加工結果表以外に格納されている、関係表を加工した結果から、データを取得し、データを用いて第四の変換規則に基づき関係表を加工する。
【発明の効果】
【００１０】
匿名加工に要求される条件を満たすタプルを既に実体化済の加工結果から取得することで、再加工に必要なタプル全てをデータベースから取得する必要がないため、再加工が高速である。
【図面の簡単な説明】
【００１１】
【図１】実施例１に係るＤＢＭＳを実行するＤＢサーバを含むシステム全体の構成例を示す図である。
【図２】実施例１に係る匿名加工処理の流れの概要図である。
【図３】関係表の一例と匿名加工ルール表の一例とを示す図である。
【図４】クエリＱ１、匿名加工クエリａＱ１、および、クエリ応答ａＱ１＿Ａの一例を示す図である。
【図５】クエリＱ２、匿名加工クエリａＱ２、および、クエリ応答ａＱ２＿Ａの一例を示す図である。
【図６】ａＱ履歴群の構成を示す図である。
【図７】出力中間結果および非出力中間結果の概念の一例を示す図である。
【図８】非出力中間結果表の格納を明示した匿名加工クエリａＱ１の一例を示す図である。
【図９】履歴非利用ａＱ２と履歴利用ａＱ２とを示す図である。
【図１０】ａＱ履歴群の利用が可能な条件の一例を示す模式図である。
【図１１】履歴設定情報の一例を示す図である。
【図１２】匿名加工処理の実行と非実行のそれぞれのケースの一例を示す図である。
【図１３】実施例１に係る全体処理（クエリの受付から応答までの処理）の流れを示すフローチャートである。
【図１４】クエリプラン生成処理の流れを示すフローチャートである。
【図１５】クエリ実行処理の流れを示すフローチャートである。
【図１６】実施例２に係る匿名加工処理の流れの概要図である。
【図１７】匿名加工処理の半自動実行の一例についての説明図である。
【図１８】半自動実行の効率化の一例についての説明図である。
【図１９】実施例２に係る全体処理の流れを示すフローチャートである。
【図２０】クエリ応答処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下の説明では、データベース管理システムを「ＤＢＭＳ」と言い、ＤＢＭＳを有するサーバを「ＤＢサーバ」と言う。ＤＢＭＳに対するクエリの発行元は、ＤＢＭＳの外部のコンピュータプログラム（例えばアプリケーションプログラム）でよい。外部のコンピュータプログラムは、ＤＢサーバ内で実行されるプログラムでもよいし、ＤＢサーバに接続された装置（例えばクライアント）で実行されるプログラムでもよい。
【００１３】
また、以下の説明では、「インターフェースユニット」は、一つ以上のインターフェースである。一つ以上のインターフェースは、一つ以上の同種のインターフェースデバイス（例えば一つ以上のＮＩＣ（Network Interface Card））であってもよいし二つ以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１４】
また、以下の説明では、「記憶デバイスユニット」は、一つ以上の記憶デバイスである。記憶デバイスは、揮発性メモリ（例えば、主記憶メモリ）でもよいし、不揮発性メモリ（例えば、フラッシュメモリまたはそれを有するＳＳＤ（Solid State Drive））でもよいし、ディスクデバイス（例えば、ＨＤＤ（Hard Disk Drive））でもよい。記憶デバイスユニットでは、全て同種の記憶デバイスの存在でもよいし、異種の記憶デバイスの混在でもよい。
【００１５】
また、以下の説明では、「プロセッサユニット」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１６】
また、以下の説明では、「ｋｋｋ部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサユニットによって実行されることで実現されてもよいし、一つ以上のハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）またはＡＳＩＣ（Application Specific Integrated Circuit））によって実現されてもよい。プログラムがプロセッサユニットに実行されることによって機能が実現される場合、定められた処理が、適宜に記憶デバイスユニットおよび／またはインターフェースユニットを用いながら行われるため、機能はプロセッサユニットの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサユニットあるいはそのプロセッサユニットを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が１つの機能にまとめられたり、１つの機能が複数の機能に分割されたりしてもよい。
【００１７】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、記憶装置を区別しない場合には、「記憶装置１５０」と言い、記憶装置を区別する場合には、「記憶装置１５０Ａ」、「記憶装置１５０Ｂ」のように言う。
【００１８】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。なお、以下の説明により本発明が限定されるものではない。
【実施例１】
【００１９】
図１は、実施例１に係るＤＢＭＳを実行するＤＢサーバを含むシステム全体の構成例を示す図である。
【００２０】
ＤＢサーバ１００は、計算機システムの一例である。ＤＢサーバ１００は、例えば、パーソナルコンピュータ、ワークステーションまたはメインフレームであってよいし、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよいし、クラウド環境（例えば、インターフェースデバイス、記憶デバイスおよびプロセッサといった複数の計算リソースを含んだ計算リソースプール）上で実現されてもよい。
【００２１】
ＤＢサーバ１００に、クライアント１９０およびストレージシステム１１０が接続される。
【００２２】
具体的には、例えば、ＤＢサーバ１００に、ネットワーク１６０Ａを介してクライアント１９０が接続される。クライアント１９０は、クエリ発行元の一例であり、ＤＢサーバ１００にデータベースに対するクエリを発行する。
【００２３】
また、例えば、ＤＢサーバ１００に、ネットワーク１６０Ｂを介してストレージシステム１１０が接続される。ストレージシステム１１０は、記憶装置１５０Ｂを有している。ストレージシステム１１０は、ＤＢサーバ１００からＩ／Ｏ要求を受けた場合には、当該Ｉ／Ｏ要求に応答して、記憶装置１５０に対するデータのＩ／Ｏを行う。
【００２４】
ネットワーク１６０Ａおよび１６０Ｂは、通信速度および消費電力の異なるネットワークでもよいし、ネットワーク１６０Ａおよび１６０Ｂが同一のネットワークでもよい。例えば、ネットワーク１６０Ａおよび１６０Ｂの各々は、ＦＣ（Fibre Channel）ネットワーク、イーサネット（登録商標）、InfiniBandおよびLocal Area Network）のいずれでもよい。
【００２５】
ＤＢサーバ１００は、インターフェースユニット１０１、記憶装置１５０Ｃおよびそれらに接続されたプロセッサユニット１０２を有する。ＤＢサーバ１００は、キーボードやポインティングデバイス等の入力デバイス（図示しない）と液晶ディスプレイ等の出力デバイス（図示しない）を有してもよい。入力デバイスおよび出力デバイスは、プロセッサユニット１０２に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
【００２６】
インターフェースユニット１０１が、ネットワーク１６０Ａおよび１６０Ｂに接続される。インターフェースユニット１０１経由で（ネットワーク１６０Ａおよび１６０Ｂ経由で）、ＤＢサーバ１００は、ストレージシステム１１０およびクライアント１９０と通信することができる。
【００２７】
記憶装置１５０Ａおよび１５０Ｂのいずれも、一つ以上の記憶デバイス１７０を有する。記憶装置１５０Ａおよび１５０Ｂの構成は同一でも異なっていてもよい。同種の（例えばＩ／Ｏ性能が同等の）二つ以上の記憶デバイス１７０で構成された記憶装置１５０があってもよいし、異種の（例えばＩ／Ｏ性能が異なる）二つ以上の記憶デバイス１７０で構成された記憶装置１５０があってもよい。後者の記憶装置１５０の一例が、記憶装置１５０Ｂである。記憶装置１５０Ｂは、ＨＤＤ１７０Ｈ、ＳＳＤ（Solid State Drive）１７０Ｓ、フラッシュメモリ１７０ＦおよびＤＲＡＭ（Dynamic Random Access Memory）１７０Ｄといった複数種類の記憶デバイス１７０を有する。ＨＤＤ１７０ＨおよびＳＳＤ１７０Ｓは、補助記憶ドライブの一例である。フラッシュメモリ１７０Ｆは、ＮＶＭ（Non-Volatile Memory）の一例である。ＤＲＡＭ１７０Ｄは、主記憶メモリの一例である。記憶装置１５０Ａおよび１５０Ｂの少なくとも一つに、データベースが格納される。
【００２８】
記憶装置１５０Ａが、プロセッサユニット１０２によって実行されるプログラムと、プログラムが使用するデータを記憶する。プログラムとして、例えば、ＤＢＭＳ１３０およびＯＳ（Operating System）１２０がある。ＤＢＭＳ１３０が、クライアント１９０からクエリを受け、そのクエリを実行する。そのクエリの実行において、ＤＢＭＳ１３０は、データベースからデータを読み込むために、または、データベースにデータを書き込むために、Ｉ／Ｏ（Input/Output）要求をＯＳ１２０に発行する。ＯＳ１２０は、そのＩ／Ｏ要求を受け、そのＩ／Ｏ要求に基づくＩ／Ｏ要求を記憶装置１５０へ発行し、結果をＤＢＭＳ１３０に返す。
【００２９】
ＤＢＭＳ１３０は、クエリ受付部１３１およびクエリ処理部１９０を有し、定義情報１４５、データベース１４６およびａＱ履歴群１４７といった情報を管理する。クエリ処理部１９０は、クエリプラン生成部１３２、クエリ実行部１３３およびクエリ応答部１３４を有する。なお、ＤＢＭＳ１３０の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が１つの構成要素に統合されていてもよい。例えば、後述の匿名加工部１４０、コスト算出部１４２および候補選択部１４３は、クエリプラン生成部１３２の外に存在してもよい。より具体的には、例えば、匿名加工部１４０は、クライアント１９０に実装されてもよいし、ＤＢサーバ１００以外の計算機システムに実装されてもよい。
【００３０】
クエリ受付部１３１は、データベースに対するクエリをクライアント１９０から受け付ける。クエリは、例えば、ＳＱＬ（Structured Query Language）によって記述される。
【００３１】
クエリプラン生成部１３２は、受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成する。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報である。クエリプランは、例えば、データベース演算子をノード、データベース演算子の実行順序の関係をエッジとする木構造で表されることがある。
【００３２】
本実施例において、「クエリプランを生成」とは、一つ以上のクエリプラン候補を生成し当該一つ以上のクエリプラン候補から実行対象とする一つのクエリプラン候補を選択することである。クエリプラン生成部１３２は、匿名加工部１４０、候補生成部１４１、コスト算出部１４２および候補選択部１４３を有する。匿名加工部１４０は、変換規則を含むクエリＱを基に後述の匿名加工クエリａＱを生成する。候補生成部１４１は、匿名加工クエリａＱに基づき一つ以上のクエリプラン候補を生成する。コスト算出部１４２は、当該一つ以上のクエリプラン候補の各々についてクエリコストを算出する。各クエリプラン候補について、クエリコストは、当該クエリプラン候補に基づきクエリを実行する際のコストであり、当該クエリプラン候補に基づくクエリ実行に関わる消費電力量に基づいたコストである。クエリコストが高い程、消費電力量が大きい（および／または、クエリの実行時間が長い）傾向にある。候補選択部１４３は、一つ以上のクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択する。なお、「相対的にクエリコストが低いクエリプラン候補」は、例えば、昇順のクエリコストのうち上位Ｘ％（例えばＸは０より大きい所定の数値）に属するいずれかのクエリプラン候補でよい。本実施例では、「相対的にクエリコストが低いクエリプラン候補」は、典型的には（例えば、いずれのクエリプラン候補も後述の実行時間、最大電力および消費電力量のいずれの上限も超えていなければ）、最もクエリコストが低いクエリプラン候補である。
【００３３】
クエリ実行部１３３は、生成されたクエリプラン（選択されたクエリプラン候補）に基づいて匿名加工クエリａＱを実行する。なお、クエリ実行部１３３は、当該クエリプランに基づき、適宜、一部の記憶デバイス１７０の状態を省電力状態に変更したり、別の一部の記憶デバイス１７０の省電力状態を解除したりすることができてよい。記憶デバイス１７０の状態を変更するために、クエリ実行部１３３は、当該記憶デバイス１７０に対する指示（例えば、当該記憶デバイス１７０が基になっている論理デバイスを指定した状態遷移指示）を送信することができてよい。当該指示に応答して、記憶デバイス１７０（または、ストレージシステム１１０）により、当該記憶デバイス１７０の状態が遷移してよい。なお、匿名加工クエリａＱの実行において、クエリ実行部１３３は、データベース演算子を実行するためのタスクを生成し、生成されたタスクを実行することで、そのタスクに対応したデータベース演算子に必要なデータの読込み要求を発行することができる。クエリ実行部１３３は、一のタスクで複数のデータベース演算子を実行してもよい。タスクの実装としては、例えば、ＯＳ１２０が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。
【００３４】
クエリ応答部１３４は、匿名加工クエリａＱの実行結果をクエリＱの実行結果としてクライアント１９０に応答する。
【００３５】
定義情報１４５は、ＤＢＭＳ１３０の管理者およびユーザの一方または双方により定義された情報を含む。定義情報１４５の少なくとも一部は、クエリ受付部１３１が受け付けたクエリに記述されていてもよい。定義情報１４５は、例えば、ａＱ履歴群１４７の更新に関する設定情報を含む。定義情報１４５は、更に、例えば、クエリコストの算出に使用されるパラメータ（例えば後述の実行時、最大電力および消費電力量）の係数および上限を示す情報を含んでもよい。
【００３６】
データベース１４６は、関係表を含む。関係表は、一つの表でもよいし、複数の表でもよい。関係表は、複数のタプルを含む。複数のタプルの各々は、複数（または一つ）の属性項目にそれぞれ対応する複数の属性値であり、例えば、一つのレコードのような一つのデータオブジェクトである。データベース１４６の少なくとも一部が、記憶装置１５０Ｂに格納されていてもよい。
【００３７】
ａＱ履歴群１４７は、匿名加工クエリａＱ毎のａＱ履歴である。各匿名加工クエリａＱについて、ａＱ履歴は、当該匿名加工クエリａＱの実行の中間結果に相当し、具体的には、当該匿名加工クエリａＱの実行において得られたデータセットを含む。
【００３８】
以上が、本実施例に係るシステム全体についての説明である。
【００３９】
本実施例では、関係表の匿名加工処理において再加工する際に、既に実体化済の加工結果を利用することで、再加工の都度にデータベースからクエリに該当する全てのタプルを再取得することを回避でき、結果として、再加工が高速である。以下、関係表の匿名加工処理の効率化について、詳細に説明する。なお、以下の説明では、下記の用語を使用する。
・クエリＱｘ（または単に「Ｑｘ」）：匿名加工のための変換規則を含むクエリ（ｘは自然数）。
・匿名加工クエリａＱｘ（または単に「ａＱｘ」）：クエリＱｘに従うデータセットの匿名加工のためのクエリ。ａＱｘは、匿名加工の詳細を含む。匿名加工の詳細は、クエリＱｘが含む変換規則の他に、匿名加工条件（匿名加工に要求される条件）を含む。匿名加工条件は、匿名加工がｋ−匿名化であればｋ値（ｋ値下限）でよく、匿名加工がｌ−多様化であればｌ値（ｌ値下限）でよい。
・クエリプランａＱｘ＿Ｐ（または単に「ａＱｘ＿Ｐ」）：匿名加工クエリａＱｘについてのクエリプラン。
・クエリ応答ａＱｘ＿Ａ（または単に「ａＱｘ＿Ａ」）：ａＱｘ＿Ｐに基づきａＱｘを実行した結果に従う応答（ａＱｘに対する回答）。
・データセット：タプルの全部または一部。つまり、データセットは、一つ以上の属性値で構成される。以下、特に、匿名加工が施されたデータセットを「加工済データセット」と言い、匿名加工が施されていないデータセットを「未加工データセット」と言うことがある。加工済データセットが含む少なくとも一つの属性値は、加工済属性値である。未加工データセットが含むいずれの属性値も、未加工属性値である。
・検索範囲：読出し範囲の一例であり、例えば、一つ以上の属性項目。
・匿名加工範囲：変換規則が関連付けられた少なくとも一つの属性項目を含んだ検索範囲。
・変換規則：一つ以上の匿名加工規則。
・匿名加工規則：属性値の匿名加工の規則。
【００４０】
図２は、本実施例に係る匿名加工処理の流れの概要図である。
【００４１】
クエリ受付部１３１が、クライアント１９０から、第一の変換規則を含むクエリＱ１（第一のクエリの一例）を受け付ける（Ｓ２０１）。
【００４２】
クエリプラン生成部１３２が、当該クエリＱ１を基に匿名加工クエリａＱ１を匿名加工部１４０により生成し、当該匿名加工クエリａＱ１を基にクエリプランａＱ１＿Ｐを生成する（Ｓ２０２）。
【００４３】
クエリ実行部１３３が、ａＱ１＿Ｐに従いａＱ１を実行する（Ｓ２０３）。
【００４４】
クエリ応答部１３４が、ａＱ１を実行した結果に従うクエリ応答ａＱ１＿Ａを、クエリＱ１の送信元であるクライアント１９０に返す（Ｓ２０４）。
【００４５】
次に、クエリ受付部１３１が、クライアント１９０から、第二の変換規則を含むクエリＱ２（第二のクエリの一例）を受け付ける（Ｓ２１１）。クエリＱ２がクライアント１９０から発行されるケースの一例として、先のクエリＱ１に対するクエリ応答ａＱ１＿Ａが、ユーザを満足させらなかったケースが考えられる。そのようなケースの例としては、ａＱ１の実行において後述の欠損率が所定の欠損率範囲に収まっていないこと、あるいは、匿名加工条件を満足する加工済データセットの数にユーザが満足しなかったことがあり得る。このようなケースでは、典型的には、クエリＱ２は、先のクエリＱ１とその応答ａＱ１＿Ａを基に決定されたクエリ（例えば、クエリＱ１が指定した匿名加工範囲の部分集合を匿名加工範囲としたクエリ）である。
【００４６】
以下、Ｓ２０２〜Ｓ２０４とそれぞれ同様の処理Ｓ２１２〜Ｓ２１４が行われる。すなわち、クエリプラン生成部１３２が、当該クエリＱ２を基に匿名加工クエリａＱ２を匿名加工部１４０により生成し、ａＱ２を基にクエリプランａＱ２＿Ｐを生成する（Ｓ２１２）。クエリ実行部１３３が、ａＱ２＿Ｐに従いａＱ２を実行する（Ｓ２１３）。クエリ応答部１３４が、ａＱ２を実行した結果に従うクエリ応答ａＱ２＿Ａをクライアント１９０に返す（Ｓ２１４）。
【００４７】
クエリＱ２のようなｉ番目のクエリｉ（ｉは２以上の整数）は、典型的には、先のクエリに関連するクエリ、具体的には、少なくとも一つの先のクエリとその応答を基に基づくクエリである。このため、クエリ応答ａＱｉ＿Ａは、ユーザが満足する応答である可能性が高い。もしユーザがクエリ応答ａＱｉ＿Ａに満足しなければ、少なくとも一つの先のクエリ（例えば、Ｑｉおよび／またはそれよりも先の一つ以上のクエリ）とその応答とに基づいて決定された（ｉ＋１）番目のクエリＱ（ｉ＋１）がクライアント１９０から発行され、それにより、当該更なるクエリＱ（ｉ＋１）についてＳ２１１〜Ｓ２１４が行われてよい。
【００４８】
以下、図２を参照して説明した流れに関わる要素および事項について詳細を説明する。
【００４９】
図３は、関係表の一例と匿名加工ルール表の一例とを示す図である。
【００５０】
関係表の一例が、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００である。ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００は、複数のタプルを含む。各タプルは、複数の属性項目にそれぞれ対応した複数の属性値である。属性項目と属性値のペアの例は、２番目のタプルを例に取り、「属性項目：属性値」という表記法で示すと、「ｐｔ：２」、「ZIPコード：１２３０００１」、「年齢：２１」、「性別：男性」、「ICD10：Ｋ２１」、および、「コメント：睡眠不足」、である。“ｐｔ”は、タプルの識別番号に相当する。なお、複数の属性項目のうちの少なくとも一部（例えば、ZIPコード、年齢および性別）が、準識別子に属する属性項目である。複数の属性項目は、さらに、センシティブ情報に属する属性項目（例えばICD10）を含む。以下、説明の混同を避けるために、属性項目「Ｙ」の属性値を「Ｙ値」と表現することにする。例えば、属性項目「年齢」の属性値を「年齢値」と表現することにする。
【００５１】
匿名加工ルール表の一例が、年齢値の匿名加工ルール表の一例であるｇｎ−ｒｕｌｅ＿ａｇｅ３５０である。ｇｎ−ｒｕｌｅ＿ａｇｅ３５０は、年齢値と、年齢値の匿名加工ルールと、加工済年齢値（匿名加工ルールに従い匿名加工された年齢値）との対応関係を示す。匿名加工ルール“年齢ｇσ”は（図示の例ではσ＝５または１０）、年齢値をσ歳刻みで匿名化する方法である。従って、年齢値“３”は、匿名加工方法「年齢ｇ５」によれば、年齢値“０−４”に加工され、匿名加工ルール「年齢ｇ１０」によれば、年齢値“３”は年齢値“０−９”に加工される。
【００５２】
なお、匿名加工ルールは、本実施例では表形式の情報とされ、定義情報１４５、データベース１４６またはその他の情報の少なくとも一部として格納され、当該情報から匿名加工部１４０は匿名加工ルールを知ることができる。その方法に代えてまたは加えて、匿名加工ルールがクエリＱｘに記述される（結果として匿名加工ルールが匿名加工クエリａＱｘに記述される）といった他の方法でも、匿名加工部１４０が匿名加工ルールを認識してもよい。
【００５３】
また、以下、説明を簡単にするために、データベース１４６としての関係表はｐａｔｉｅｎｔ＿ｔａｂｌｅ３００のみであるとする。
【００５４】
図４は、クエリＱ１、匿名加工クエリａＱ１、および、クエリ応答ａＱ１＿Ａの一例を示す図である。
【００５５】
クエリＱ１で指定されている匿名加工範囲「ZIPコード，年齢g5，ICD10」は、次のことを意味する。
・検索範囲としての一つ以上の属性項目は、「ZIPコード」、「年齢」および「ICD10」である。
・ZIPコード値およびICD10値は、匿名加工不要である。
・年齢値は、５歳刻みに加工することが必要である。つまり、「年齢g5」は、変換規則が関連付けられた属性項目に相当する。
【００５６】
本実施例において、「クエリが変換規則を含む」とは、変換規則それ自体を示す情報（例えば、「年齢g5」とｇｎ−ｒｕｌｅ＿ａｇｅ３５０それ自体）を含むことであってもよいし、変換規則の特定に必要な情報（例えば、「年齢g5」）と参照すべき匿名加工ルール表の名称）を含むことであってもよい。
【００５７】
このようなクエリＱ１が、定義情報１４５に基づき匿名加工部１４０により匿名加工クエリａＱ１に変換される。定義情報１４５は、ＱｘからａＱｘへの変換についての定義を示す情報を含む。定義情報１４５は、例えば、ｋ−匿名化およびｌ−多様化といった複数種類の匿名加工のうちのいずれを採用するか、および、ｋ値およびｌ値といった匿名加工条件をいずれの条件とするかを示す情報を含んでよい。
【００５８】
匿名加工クエリａＱ１は、情報４５１〜４５３を含む。情報４５１〜４５３の説明において、加工済年齢値が、クエリＱ１が含む変換規則に従い加工された年齢値を意味し、ｋ値≧２（ｋ値下限＝２）が、匿名加工条件を意味する。
【００５９】
情報４５１は、下記を意味する。
・データセットを取得し第一の一時表（ＴＭＰ１）を格納すること。
・データセットの取得元（読出し元）は、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００であること。
・第一の一時表は、クエリＱ１に従いｐａｔｉｅｎｔ＿ｔａｂｌｅ３００の全てのタプルから取得された全ての未加工データセットで構成されること。各加工済データセットは、ZIPコード値、加工済年齢値およびICD10値で構成される。
【００６０】
情報４５２は、下記を意味する。
・第二の一時表（ＴＭＰ２）を格納すること。
・第二の一時表は、第一の一時表のうち、加工済データセットｗｉｔｈ（ｋ＜２）に対応した未加工データセットで構成されること。「加工済データセットｗｉｔｈ（ｋ＜２）」とは、ｋ値が２未満の加工済データセット、具体的には、ZIPコード値、加工済年齢値およびICD10値の組合せが同一の加工済データセットの数が２未満である加工済データセット群に属する加工済データセットである。加工済データセットｗｉｔｈ（ｋ＜２）は、匿名加工条件を満たさない加工済データセットの一例、言い換えれば、非出力加工済データセット（クエリ応答として出力不可の加工済データセット）の一例である。非出力加工済データセットの元のデータセットが非出力未加工データセットである。
【００６１】
情報４５３は、下記を意味する。
・第一の一時表から、第二の一時表に格納された全ての非出力未加工データセットを除外すること。結果として、第一の一時表には、加工済データセットｗｉｔｈ（ｋ≧２）に対応した未加工データセットのみが残る。加工済データセットｗｉｔｈ（ｋ≧２）は、ｋ値が２以上の加工済データセットである。加工済データセットｗｉｔｈ（ｋ≧２）は、匿名加工条件を満たす加工済データセットの一例、言い換えれば、出力加工済データセット（クエリに対する応答として出力可の加工済データセット）の一例である。出力加工済データセットの元のデータセットが出力未加工データセットである。
【００６２】
上述のような匿名加工クエリａＱ１を実行することで、クエリ応答ａＱ１＿Ａが生成される。クエリ応答ａＱ１＿Ａは、下記のうちの少なくとも一つに該当する応答でよい。
・加工済データセットｗｉｔｈ（ｋ≧２）を含む。
・加工済データセットｗｉｔｈ（ｋ＜２）を含まない。
・欠損率を含む。「欠損率」とは、加工済データセットの総数に対する加工済データセットｗｉｔｈ（ｋ＜２）の数の比率である。欠損率は、クエリ実行部１３３により算出される。
・欠損率が所定の欠損率範囲に収まっていない場合、加工済データセットｗｉｔｈ（ｋ≧２）を一つも含まず、該当なしを示す。
【００６３】
このようなクエリ応答ａＱ１＿Ａにユーザが満足しない場合、図５に例示するようなクエリＱ２をクライアント１９０が発行することができる。
【００６４】
図５は、クエリＱ２、匿名加工クエリａＱ２、および、クエリ応答ａＱ２＿Ａの一例を示す図である。図５については、図４との相違点を主に説明する。
【００６５】
クエリＱ２で指定されている匿名加工範囲は、クエリＱ１で指定された匿名加工範囲の部分集合である。例えば、属性項目の組合せ「ZIPコード」、「年齢」、「ICD10」は同じであり、変換規則の抽象度（匿名度合）がより高められているにすぎない。具体的には、「ZIPコード」および「年齢g5」は同じで、「ICD10」が「SUBSTR(ICD10,1,3)」に変わっているにすぎない。「SUBSTR(ICD10,1,3)」は、「ICD10値の１番目のキャラクタから３番目のキャラクタまでを匿名加工する」ことを意味する。
【００６６】
従って、クエリＱ２は、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００の全てのタプルからZIPコード値、年齢値、およびICD10値を取得し、かつ、そのうち年齢値およびICD10を匿名加工することを意味する。
【００６７】
クエリＱ２を定義情報１４５に基づき変換することで、クエリＱ２が含む変換規則を含んだ匿名加工クエリａＱ２、具体的には、情報５５１〜５５３が記述された匿名加工クエリａＱ２が生成される。情報５５１〜５５３の説明において、加工済年齢値および加工済ICD10値が、クエリＱ２が含む変換規則に従い加工された年齢値およびICD10値を意味する。
【００６８】
情報５５１は、以下の点で、図４の情報４５１と相違する。
・データセットの取得元（読出し元）が、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００ではなく、後述のａＱ１＿ｏｕｔｐｕｔ、および、ａＱ１＿ｕｎＡ（またはａＱ１＿ｌｉｓｔ）である。ａＱ１＿ｏｕｔｐｕｔは、先のクエリＱ１の実行において格納された第一の一時表に相当する。ａＱ１＿ｕｎＡは、先のクエリＱ１の実行において格納された第二の一時表に相当する。すなわち、情報５５１によれば、後のクエリＱ２のデータセットの取得元は、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００ではなく、一時表である。これにより、後のクエリＱ２に従う匿名加工処理が高速である。
【００６９】
情報５５２および５５３は、図４の情報４５２および４５３とそれぞれ同じである。
【００７０】
匿名加工クエリａＱ２を実行することで、クエリ応答ａＱ２＿Ａが生成される。年齢値に加えてICD10値も匿名加工された結果、ｋ値が２未満の加工済データセットが無く、故に、欠損率が０％である。すなわち、クエリ応答ａＱ１＿Ａよりも加工済データセットｗｉｔｈ（ｋ≧２）が多く、欠損率が所定の欠損率範囲に収まる。
【００７１】
図６は、ａＱ履歴群１４７の構成を示す図である。
【００７２】
ａＱ履歴群１４７は、匿名加工クエリ毎に、当該匿名加工クエリの実行における中間結果を含んだ情報としての履歴６００を含む。以下、一つの匿名加工クエリａＱｘに対応した履歴６００を「ａＱｘ履歴６００」と言う。ａＱｘ履歴６００としてａＱ１履歴６００を例に取り説明する。
【００７３】
ａＱ１履歴６００は、ａＱ１（および／またはＱ１）と、ａＱ１＿ｏｕｔｐｕｔ６０１と、ａＱ１＿ｕｎＡ６０２およびａＱ１＿ｌｉｓｔ６０３のうちの一方とを含む。
【００７４】
ａＱ１＿ｏｕｔｐｕｔ６０１は、匿名加工条件を満たす加工済データセットに関連する中間結果である出力中間結果の一例である。「中間結果」は、未加工状態および加工済状態のいずれかの状態を意味する。従って、中間結果は、未加工データセットおよび加工済データセットのいずれを含んでもよい。本実施例では、中間結果は、未加工データセットを含むが、それに代えてまたは加えて、加工済データセットを含んでもよい。中間結果として格納されるデータセットは、加工済データセットよりも未加工データセットの方が、後のクエリで当該中間結果が利用される可能性を高めることができる。なぜなら、未加工属性値は最も抽象度が低く、故に、変換規則の抽象度に関わらず匿名加工が可能であるからである。図６によれば、ａＱ１＿ｏｕｔｐｕｔ６０１は、匿名加工条件（ｋ≧２）を満たす加工済データセットに対応した未加工データセット（元のデータセット）の集合である。なお、ａＱ１＿ｏｕｔｐｕｔ６０１は、第一の加工結果表の一例である。
【００７５】
ａＱ１＿ｕｎＡ６０２およびａＱ１＿ｌｉｓｔ６０３は、匿名加工条件を満たさない加工済データセットに関連する中間結果である非出力中間結果の一例である。ａＱ１＿ｕｎＡ６０２は、匿名加工条件を満たさない加工済データセットに対応した未加工データセットの集合である。一方、ａＱ１＿ｌｉｓｔ６０３は、匿名加工条件を満たさない未加工データセットを含んだタプルへのポインタ（ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００におけるｐｔへのポインタ）のリストである。ａＱ１＿ｕｎＡ６０２があれば、ａＱ１＿ｏｕｔｐｕｔ６０１に無いデータセットについても、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００からの取得（読出し）は不要である。なお、ａＱ１＿ｕｎＡ６０２は、第二の加工結果表の一例であり、ａＱ１＿ｌｉｓｔ６０３は、格納情報の一例である。
【００７６】
加工済データセットは、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００からよりもａＱｘ履歴６００からの方が高速に取得される（本実施例では、未加工データセットが取得され当該未加工データセットが加工される）。ａＱｘ履歴６００が格納（例えばキャッシュ）される記憶エリアである履歴エリアは、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００が格納される記憶エリアであるデータベースエリアよりも、Ｉ／Ｏ性能が高いエリアでよい。具体的には、例えば、データベースエリアが、ＤＢサーバ１００内の（または遠隔の）不揮発記憶デバイスに基づく記憶エリアであるのに対し、履歴エリアは、ＤＢサーバ１００の揮発メモリ（例えばキャッシュメモリ）に基づく記憶エリアでよい。
【００７７】
図７は、出力中間結果および非出力中間結果の概念の一例を示す図である。
【００７８】
具体的には、参照符号７０１が、出力中間結果の概念を示し、参照符号７０２が、非出力中間結果の概念を示す。両者を比較してわかるように、出力中間結果は、匿名加工条件を満たすデータセットを含み匿名加工条件を満たさないデータセットを含まない（例えば最後の行にある“ＮＯＴ”を参照）。逆に、非出力中間結果は、匿名加工条件を満たさないデータセット（または当該データセットを含んだタプルへのポインタ）を含み匿名加工条件を満たすデータセットを含まない（例えば参照符号７０１と違い最後の行に“ＮＯＴ”が無い）。
【００７９】
本実施例では、ＤＢＭＳ１３０は、出力中間結果も非出力中間結果もａＱｘ履歴６００の少なくとも一部として格納する機能を有しているが、少なくとも非出力中間結果を格納する機能については、クエリ単位でオン（またはオフ）を指定することができる。言い換えれば、ユーザが、明示的に、非出力中間結果を格納する（または格納しない）クエリをＤＢＭＳ１３０に指定することができる。
【００８０】
図８は、非出力中間結果の格納を明示した匿名加工クエリａＱ１１の一例を示す図である。
【００８１】
図８によれば、匿名加工クエリａＱ１が、当該ａＱ１について非出力中間結果を格納することの明示としての一例の記述「AS CREATE HISTORY aQ1.unAns」を有する。このような記述は、元のクエリＱ１から反映されてもよい。
【００８２】
クエリ実行部１３３は、このような匿名加工クエリを実行した場合にのみ、非出力中間結果を格納してもよい。このように、非出力中間結果の格納と非格納との選択が可能なので、ａＱ履歴１４７の肥大化の抑制が可能である。
【００８３】
図９は、履歴非利用ａＱ２と履歴利用ａＱ２とを示す図である。
【００８４】
履歴非利用ａＱ２は、ａＱ履歴群１４７を利用しないａＱ２である。履歴非利用ａＱ２によれば、データセットの取得元は、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００である。
【００８５】
履歴利用ａＱ２は、ａＱ履歴群１４７を利用するＱ２である。履歴利用ａＱ２によれば、データセットの取得元は、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００ではなく、少なくとも一つのａＱｘ履歴６００（図示の例によれば、ａＱ１＿ｏｕｔｐｕｔ６０１、および、ａＱ１＿ｕｎＡ６０２（またはａＱ１＿ｌｉｓｔ６０３））である。
【００８６】
本実施例では、受け付けられたクエリＱｘについて、匿名加工部１４０が、ａＱ履歴群１４７の利用が可能か否かを判断する。当該判断の結果が真の場合に、履歴利用ａＱｘが生成される。ａＱ履歴群１４７の利用が可能か否かの判断は、対象の匿名加工範囲が、一つ以上のａＱｘ履歴６００に対応した一つ以上の匿名加工範囲の部分集合（完全一致を含む）であるか否かの判断でよい。当該判断は、具体的には、例えば、下記の条件Ａおよび条件Ｂの両方が満たされているか否かの判断である。
条件Ａ：対象の検索範囲（匿名加工範囲から変換規則を除いたもの）が、一つ以上のａＱｘ履歴６００に対応した一つ以上の検索範囲の部分集合（完全一致を含む）であること。
条件Ｂ：対象の変換規則に従う加工済データセットが、条件Ａを満たす一つ以上のａＱｘ履歴６００から取得可能であること。
【００８７】
条件Ａが満たされる例は、図１０を参照すれば、次の通りである。
・参照符号１０１０が示すように、ａＱ１２の検索範囲が、ａＱ１１履歴に対応した検索範囲の部分集合であること。
・参照符号１０２０が示すように、ａＱ１６の検索範囲が、ａＱ１４履歴およびａＱ１５履歴にそれぞれ対応している二つの検索範囲の部分集合であること。（具体的には、例えば、ａＱ１６の検索範囲が“全年齢”であるのに対して、ａＱ１４履歴に対応した検索範囲が“３０歳未満”であり、ａＱ１５履歴に対応した検索範囲が“３０歳以上”であること。）
【００８８】
条件Ｂが満たされる例は、下記の通りである。
・ａＱｘ履歴６００から取得されるデータセットが未加工データセットであること。なぜなら、当該未加工データセットにおけるいずれの属性値も変換規則に従い加工可能であるためである。
・ａＱ履歴６００から取得されるデータセットが加工済データセットであっても、当該加工済データセットが含む全ての加工済属性値が、対象の変換規則に従い加工された属性値の全部または一部に相当すること。
【００８９】
本実施例では、図９に例示するように、まず、履歴非利用ａＱｘが生成される。その後に、ａＱ履歴群１４７の利用が可能か否かの判断が行われる。その判断の結果が真の場合に、履歴非利用ａＱｘが履歴利用ａＱｘに変換される。なお、履歴非利用ａＱｘの生成はスキップされてもよい。具体的には、先に、ａＱ履歴群１４７の利用が可能か否かの判断が行われてよい。その判断結果が真の場合、クエリＱｘを基に、履歴非利用ａＱｘを生成すること無しに、履歴利用ａＱｘが生成されてもよい。
【００９０】
図１１は、履歴設定情報の一例を示す図である。
【００９１】
履歴設定情報１１００は、ａＱ履歴群１４７の利用や格納の制御のための情報である。履歴設定情報１１００は、例えば、ユーザ毎の設定情報であって、定義情報１４５に含まれてよい。履歴設定情報１１００は、例えば、利用フラグ１１０１、実行フラグ１１０２、ｌｉｓｔ格納上限１１０３、ｕｎＡ格納上限１１０４、クエリ数上限１１０５、クエリ容量上限１１０６、および共有フラグ１１０７といった情報を含む。以下、これらの情報１１０１〜１１０７について、一ユーザを例に取る（図１１の説明において「対象ユーザ」）。履歴設定情報１１００は、図示しないが、対象ユーザのユーザＩＤを含んでいてもよい。
【００９２】
利用フラグ１１０１は、対象ユーザのａＱｘの実行においてａＱ履歴群１４７を利用するか否かを示すフラグである。“ｙ”が利用することを意味する。
【００９３】
実行フラグ１１０２は、対象ユーザについてのａＱｘの実行に関する情報である匿名化結果を格納する（ａＱｘ履歴６００に含める）か否かを示すフラグである。“ｙ”が匿名化結果を格納することを意味する。本情報１１０２は、実施例２で有用な情報であるため実施例１では無くてもよい。
【００９４】
ｌｉｓｔ格納上限１１０３は、対象ユーザのａＱｘについてａＱｘ＿ｌｉｓｔ６０３を格納するか否かの判断基準となる欠損率上限を示す。欠損率がｌｉｓｔ格納上限１１０３を超えていれば、ａＱ１＿ｌｉｓｔ６０３が格納されない。なぜなら、欠損率がｌｉｓｔ格納上限１１０３を超えていれば、ａＱ１＿ｏｕｔｐｕｔ３０１とａＱ１＿ｌｉｓｔ６０３の両方を使用するよりも、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００を全スキャンすることの方が高速であるからである。なお、欠損率上限は、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００に対するＩ／Ｏの性能を基に定められてよい。例えば、欠損率上限＝（ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００に対するランダムＩ／Ｏのスループット）÷（ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００に対するシーケンシャルＩ／Ｏのスループット）×１００、であってもよい。
【００９５】
ｕｎＡ格納上限１１０４は、対象ユーザのａＱｘについてａＱｘ＿ｕｎＡ６０２を格納するか否かの判断基準となる非出力容量上限を示す。「非出力容量」は、ａＱｘの実行において取得された非出力未加工データセット（匿名加工条件を満たさない加工済データセットの元のデータセット）の総容量である。非出力容量がｕｎＡ格納上限１１０４以下の場合、ａＱｘ＿ｕｎＡ６０２が格納される。
【００９６】
クエリ数上限１１０５は、対象ユーザについて管理可能なクエリの数の上限を示す。
【００９７】
全体クエリ容量上限１１０６は、対象ユーザについて管理可能なクエリの総容量である全体クエリ容量の上限を示す。クエリ数がその上限（クエリ数上限１１０５）未満であっても全体クエリ容量がその上限（全体クエリ容量上限１１０６）に達した場合には、管理されているいずれかのクエリ（例えば最も古いクエリ）を削除することで最新のクエリを管理可能とすることができる。なお、クエリの管理とは、クエリＱｘそれ自体（および／または匿名加工クエリａＱｘそれ自体）をａＱｘ履歴６００に格納することを意味する。従って、クエリ数上限１１０５および全体クエリ容量上限１１０６は、ａＱｘ履歴６００の数を制限するための情報に相当する。
【００９８】
共有フラグ１１０７は、対象ユーザ以外のユーザについてのクエリの実行において対象ユーザに対応したａＱｘ履歴６００を利用することを許可するか否かを示すフラグである。“ｙ”が許可を意味する。
【００９９】
図１２は、匿名加工処理の実行と非実行のそれぞれのケースの一例を示す図である。
【０１００】
図１２によれば、匿名加工の一例としてｋ−匿名化が採用されている。管理者（ａｄｍｉｎ）が、いずれのユーザからのクエリについてｋ−匿名化を行うかを定義する。すなわち、匿名加工処理の対象を、ユーザ単位、関係表単位、クエリ単位で指定することができる。いずれのユーザまたはいずれの関係表を匿名加工処理の対象とするかは、管理者により予め定義されていてよい。いずれのクエリを匿名加工処理の対象とするかは、管理者が予め定義しておいてもよいし、ユーザが指定してもよい。後者の場合、クエリが変換規則を含んでいれば、当該クエリは匿名加工処理の対象でよい。
【０１０１】
図１２の例によれば、管理者が、匿名加工処理の対象とするユーザ、匿名加工処理の対象とする関係表とその属性項目、当該ユーザについての匿名加工条件、および、欠損率範囲を指定する。具体的には、例えば、管理者は、情報「GRANT SELECT, K-ANONYMITY(2,0,100) ON patient_table.{'ZIPコード', '年齢', '性別'，'ICD10'} TO "ADBUSER02"」をＤＢＭＳ１３０に設定する。当該情報は、例えば定義情報１４５に含まれてよい。
【０１０２】
当該情報において、「K-ANONYMITY(2,0,100)」は、匿名加工条件および出力条件である。匿名加工条件は、ｋ≧２、である。欠損率範囲は、０％以上１００％以下である。欠損率範囲の下限および上限のうちの少なくとも一つは、乱数でもよい。これにより、再現性を抑制でき、以って、識別子（例えば、個人の氏名またはＩＤ）が特定され得るリスクを軽減できる。
【０１０３】
当該情報において、「ON patient_table.{'ZIPコード', '年齢', '性別'，'ICD10'}」は、patient_table３００のうちZIPコード値、年齢値、性別値およびICD10値の少なくとも一つがｋ−匿名化の対象となり得ることを意味する。
【０１０４】
当該情報において、「TO "ADBUSER02"」は、ユーザ“ADBUSER02”（ユーザＩＤ“ADBUSER02”が割り振られているユーザ）についてのクエリがｋ−匿名化の対象となることを意味する。なお、ユーザ“ADBUSER01”以外のユーザ、のような指定方法を採用することも可能である。
【０１０５】
図１２に例示の定義によれば、以下の処理が行われる。
【０１０６】
すなわち、クエリ受付部１３１が、ユーザＩＤ（ユーザ情報の一例）とクエリＱ１を受け付ける。匿名加工部１４０が、受け付けたユーザＩＤが匿名加工処理の対象とされているユーザのユーザＩＤであって当該クエリＱ１が匿名加工処理の対象か否かを判断する（Ｓ１２００）。受け付けたユーザＩＤが匿名加工処理の対象とされているユーザのユーザＩＤであるか否かは、管理者から設定された定義情報を基に判断できる。クエリＱ１が匿名加工処理の対象か否かは、管理者から設定された定義情報を基に、または、当該クエリＱ１が変換規則を含んでいるか否かを基に、判断できる。
【０１０７】
Ｓ１２００の判断の結果が偽の場合（例えば、クエリＱ１がユーザ“ADBUSER01”についてのクエリの場合）、クエリＱ１は匿名加工クエリａＱ１に変換されない。すなわち、クエリプラン生成部１３２が、クエリＱ１それ自体についてクエリプランを生成し、クエリ実行部１３３が、当該クエリプランを基にクエリＱ１を実行する。結果として、クエリ応答部１３４が、クエリＱ１それ自体の実行結果を示すクエリ応答Ｑ１＿Ａを返す。クエリＱ１は、変換規則を含むが、ｋ値のような匿名加工条件を含まないため、図１２に例示するように、クエリ応答Ｑ１＿Ａには、実際に得られたｋ値に関わらず、取得された加工済データセットはいずれも出力対象である。
【０１０８】
Ｓ１２００の判断の結果が真の場合（例えば、クエリＱ１がユーザ“ADBUSER02”についてのクエリの場合）、クエリＱ１は匿名加工クエリａＱ１に変換される。結果として、既に説明した通り、クエリプラン生成部１３２が、ａＱ１についてクエリプランａＱ１＿Ｐを生成し、クエリ実行部１３３が、当該クエリプランａＱ１＿Ｐを基にａＱ１を実行する。クエリ応答部１３４が、クエリＱ１に対してクエリ応答ａＱ１＿Ａを返す。ａＱ１は、変換規則に加えてｋ値のような匿名加工条件を含むため、図１２に例示するように、クエリ応答ａＱ１＿Ａには、ｋ値を満たさない加工済データセットは非出力対象である。
【０１０９】
以下、本実施例で行われる処理の流れの一例を説明する。なお、本実施例について、以下の説明では、受け付けられたクエリ（最新のクエリ）を、「クエリＱｎ」と言い、一つ以上の先のクエリ（過去のクエリ）の各々を「クエリＱｍ」と言う。
【０１１０】
図１３は、本実施例に係る全体処理（クエリの受付から応答までの処理）の流れを示すフローチャートである。
【０１１１】
クエリ受付部１３１が、クエリＱｎをクライアント１９０から受け付ける（Ｓ１３０１）。
【０１１２】
クエリプラン生成部１３２が、クエリＱｎに関してクエリプラン生成処理を行う（Ｓ１３０２）。生成されたクエリプランは、クエリＱｎそれ自体、または、クエリＱｎを基に生成された匿名加工クエリａＱｎについてのクエリプランである。
【０１１３】
クエリ実行部１３３が、Ｓ１３０２で生成されたクエリプランに基づきクエリ実行処理を行う（Ｓ１３０３）。
【０１１４】
クエリ応答部１３４が、Ｓ１３０３の結果に従うクエリ応答をクライアント１９０に返す（Ｓ１３０４）。
【０１１５】
図１４は、クエリプラン生成処理の流れを示すフローチャートである。
【０１１６】
匿名加工部１４０が、クエリＱｎが匿名加工の対象か否か、具体的には、例えば、管理者により定義された情報を基にクエリＱｎのユーザが匿名加工処理の対象とされているか否かを判断する（Ｓ１４０１）。
【０１１７】
Ｓ１４０１の判断結果が偽の場合（Ｓ１４０１：Ｎｏ）、候補生成部１４１が、クエリＱｎについて一つ以上のクエリプラン候補を生成する（Ｓ１４０８）。コスト算出部１４２が、各クエリプラン候補のコストを算出し、候補選択部１４３が、各クエリプラン候補の算出されたコストを基に、一つのクエリプラン候補（例えば、コストが最も低いクエリプラン候補）を選択する（Ｓ１４０９）。Ｓ１４０９で選択されたクエリプラン候補が、生成されたクエリプランに相当する。
【０１１８】
Ｓ１４０１の判断結果が真の場合（Ｓ１４０１：Ｙｅｓ）、匿名加工部１４０が、クエリＱｎを、履歴非利用ａＱｎに変換する（Ｓ１４０２）。そして、匿名加工部１４０が、ａＱ履歴群１４７を利用するか否か、具体的には、例えば、クエリＱｎのユーザに対応した履歴設定情報１１００における利用フラグ１１０１が“ｙ”か否かを判断する（Ｓ１４０３）。
【０１１９】
Ｓ１４０３の判断結果が偽の場合（Ｓ１４０１：Ｎｏ）、候補生成部１４１が、履歴非利用ａＱｎについて一つ以上のクエリプラン候補を生成する（Ｓ１４０８）。その後、Ｓ１４０９が行われる。
【０１２０】
Ｓ１４０３の判断結果が真の場合（Ｓ１４０１：Ｙｅｓ）、匿名加工部１４０が、一つまたは複数のａＱｍ履歴６００を選択する（Ｓ１４０４）。匿名加工部１４０が、Ｓ１４０４で選択したａＱｍ履歴６００の利用が可能か否かを判断する（Ｓ１４０５）。この判断は、上述したように、ａＱｎの匿名加工範囲が、Ｓ１４０４で選択した全てのａＱｍ履歴６００に対応した匿名加工範囲の部分集合（完全一致を含む）であるか否かの判断でよい。
【０１２１】
Ｓ１４０５の判断結果が偽の場合（Ｓ１４０５：Ｎｏ）、処理が後述のＳ１４０７に進む。
【０１２２】
Ｓ１４０５の判断結果が真の場合（Ｓ１４０５：Ｙｅｓ）、匿名加工部１４０が、履歴非利用ａＱｎを履歴利用ａＱｎに変換する（Ｓ１４０６）。匿名加工部１４０が、ａＱｍ履歴６００の選択を終了するか否か（例えば、ｒ通り（ｒは自然数）の選択が行われたか否か）を判断する（Ｓ１４０７）。ここでは、例えば全通りの選択が行われた場合、Ｓ１４０７の判断結果は真となる。Ｓ１４０７の判断結果が偽の場合（Ｓ１４０７：Ｎｏ）、Ｓ１４０４が再度行われる。すなわち、本実施例によれば、一つのクエリＱｎについて、一つ以上のａＱｎが生成され得る。
【０１２３】
Ｓ１４０７の判断結果が真の場合（Ｓ１４０７：Ｙｅｓ）、全てのａＱｎの各々についてＳ１４０８が行われ、Ｓ１４０９で、生成された全てのクエリプラン候補から一つのクエリプラン候補が選択される。クエリ実行部１３３では、Ｓ１４０９で選択されたクエリプラン候補（生成されたクエリプラン）に基づき、当該クエリプラン候補に対応したａＱｎが実行されることになる。
【０１２４】
Ｓ１４０９で選択されたクエリプラン候補が、履歴利用ａＱｎに対応したクエリプラン候補であれば、当該ａＱｎの実行において、少なくとも一部のデータセットは、既存のａＱｍ＿ｏｕｔｐｕｔ６０１から取得され、データベース１４６から取得されることは無い。
【０１２５】
図１５は、クエリ実行処理の流れを示すフローチャートである。
【０１２６】
クエリ実行部１３３が、クエリプラン生成処理で生成されたクエリプランから一つのデータベース演算子を選択する（Ｓ１５０１）。
【０１２７】
当該クエリプランに対応したａＱｎが履歴非利用ａＱｎである場合、または、当該クエリプランはクエリＱｎのクエリプランである場合（Ｓ１５０２：Ｎｏ）、クエリ実行部１３３が、いずれの履歴６００を参照すること無しに、Ｓ１５０１で選択したデータベース演算子を実行する（Ｓ１５０４）。
【０１２８】
一方、当該クエリプランに対応したａＱｎが履歴利用ａＱｎである場合（Ｓ１５０２：Ｙｅｓ）、クエリ実行部１３３が、ａＱｎについてこれまで実行済のデータベース演算子について、欠損率がその上限（ｌｉｓｔ格納上限１１０３）以下、または、非出力容量がその上限（ｕｎＡ格納上限１１０４）以下であるか判断する（Ｓ１５０３）。
【０１２９】
Ｓ１５０３の判断結果が真の場合（Ｓ１５０３：Ｙｅｓ）、クエリ実行部１３３が、Ｓ１５０１で選択したデータベース演算子を実行し、その際、クエリ応答ａＱｎ＿Ａに含める出力加工済データセットを例えばワークエリアに一時格納すると共に、ａＱｎ履歴６００として格納され得る情報（出力未加工データセット、非出力未加工データセット、および、非出力未加工データセットを含むタプルへのポインタ）を例えばワークエリアに一時格納する（Ｓ１５０５）。Ｓ１５０３の判断結果が偽の場合（Ｓ１５０３：Ｎｏ）、クエリ実行部１３３が、Ｓ１５０１で選択したデータベース演算子を実行する（Ｓ１５０４）。
【０１３０】
Ｓ１５０４またはＳ１５０５の後、クエリ実行部１３３は、少なくとも一つの未選択のデータベース演算子があるか否かを判断する（Ｓ１５０６）。Ｓ１５０６の判断結果が偽の場合（Ｓ１５０６：Ｎｏ）、クエリ実行部１３３は、未選択のデータベース演算子についてＳ１５０１を行う。
【０１３１】
Ｓ１５０６の判断結果が真の場合（Ｓ１５０６：Ｙｅｓ）、全てのデータベース演算子が実行されており、クエリ応答ａＱｎ＿Ａに含めることが可能なすべての出力加工済データセットが格納されている状態である。クエリ実行部１３３は、最後に選択したデータベース演算子についてＳ１５０３の判断が行われかつその判断の結果が真であったか否かを判断する（Ｓ１５０７）。
【０１３２】
Ｓ１５０７の判断結果が偽の場合（Ｓ１５０７：Ｎｏ）、ａＱｎ履歴６００の格納は不要のため処理が終了する。
【０１３３】
Ｓ１５０７の判断結果が真の場合（Ｓ１５０７：Ｙｅｓ）、最後に選択したデータベース演算子を実行した結果として欠損率および非出力容量のいずれの上限も満たされているかをチェックするために処理がＳ１５０８以降へ進む。すなわち、クエリ実行部１３３は、ａＱｎについての欠損率および非出力容量を算出する（Ｓ１５０８）。
【０１３４】
非出力容量がその上限（ｕｎＡ格納上限１１０４）以下であれば（Ｓ１５０９：Ｙｅｓ）、クエリ実行部１３３は、ａＱｎ＿ｏｕｔｐｕｔ３０１とａＱｎ＿ｕｎＡ６０２とを含むａＱｎ履歴６００を格納する（Ｓ１５１１）。
【０１３５】
非出力容量がその上限（ｕｎＡ格納上限１１０４）を超えているが欠損率がその上限（ｌｉｓｔ格納上限１１０３）以下であれば（Ｓ１５０９：Ｎｏ、Ｓ１５１０：Ｙｅｓ）、クエリ実行部１３３は、ａＱｎ＿ｏｕｔｐｕｔ３０１とａＱｎ＿ｌｉｓｔ６０３とを含むａＱｎ履歴６００を格納する（Ｓ１５１１）。
【０１３６】
非出力容量がその上限（ｕｎＡ保存上限１１０４）を超えていて欠損率がその上限（ｌｉｓｔ格納上限１１０３）を超えていれば（Ｓ１５０９：Ｎｏ、Ｓ１５１０：Ｎｏ）、ａＱｎ履歴６００の格納が行われることなく処理が終了する。
【０１３７】
本クエリ実行処理において得られた出力加工済データセットを含んだクエリ応答が、クエリ応答部１６４によりクライアント１９０へ送信される。なお、ａＱｎが履歴利用ａＱｎの場合、Ｓ１５０４またはＳ１５０５では、クエリ実行部１３３は、ａＱｎ＿Ｐに従い、一つの以上のａＱｍ履歴６００から未加工データセットを取得し、当該未加工データセットを、ａＱｎの変換規則に従い加工済データセットに変換する。
【０１３８】
以上が、実施例１についての説明である。なお、実施例１において、下記のうちの少なくとも一つが採用されてよい。
・一つ以上（例えば全て）のａＱｍ＿ｏｕｔｐｕｔ３０１の容量と一つ以上（例えば全て）のａＱｍ＿ｕｎＡ６０２の容量とを含む記憶装置使用容量が、非出力容量に代えてまたは加えて採用されてよい。
・クエリ実行部１３３は、ａＱｎの実行において、記憶装置使用容量がその上限以下である場合（または、欠損率がその上限を超えている場合）、ａＱｎ＿ｕｎＡ６０２を格納してもよい。
・クエリ実行部１３３は、ａＱｎの実行において、欠損率がその上限以下である場合（または、記憶装置使用容量がその上限を超えている場合）、ａＱｎ＿ｌｉｓｔ６０３を格納してもよい。
【実施例２】
【０１３９】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略または簡略する。
【０１４０】
実施例２では、匿名加工クエリの生成のためにはそれの基になるクエリが必要である点は実施例１と共通するが、一つのクエリから、出力条件を満たすクエリ応答が得られるまで複数の匿名加工クエリを生成することができる。つまり、匿名加工クエリの生成が半自動化されている。このため、ユーザは、複数のクエリを発行すること無しに満足するクエリ応答を得られる可能性が高い。
【０１４１】
図１６は、実施例２に係る匿名加工処理の流れの概要図である。図１６において、実施例１と名称は同じでも機能および構成の少なくとも一つが相違する要素については実施例１と異なる参照符号が付されている。
【０１４２】
ＤＢＭＳ１６３０が、クエリ受付部１６３１とクエリ処理部１６９０とを有する。
【０１４３】
クエリ受付部１６３１が、クライアント１９０から、変換規則を含むクエリＱ３を受け付け、当該クエリＱ３が含む変化規則を基に一つ以上の変換規則を生成し、当該一つ以上の変換規則をそれぞれ含む一つ以上のクエリを生成する（Ｓ１６０１）。以下、本実施例の説明では、受け付けられたクエリＱｘから派生した（クエリＱｘを基に自動生成された）クエリを、「内部クエリＱｘ−ｙ」と言う（ｙは自然数）。Ｓ１６０１で生成される内部クエリは、一つの内部クエリでもよいし、クエリＱｘから生成可能な全ての内部クエリでもよい。
【０１４４】
クエリプラン生成部１６３２が、変換規則（第三の変換規則の一例）を含む一つの内部クエリＱ３−１（第三のクエリの一例）を基に匿名加工クエリａＱ３−１を生成することを匿名加工部１６４０により行い、ａＱ３−１を基にクエリプランａＱ３−１＿Ｐを生成する（Ｓ１６０２）。
【０１４５】
クエリ実行部１６３３が、ａＱ３−１＿Ｐに従いａＱ３−１を実行する（Ｓ１６０３）。
【０１４６】
クエリ応答部１６３４は、ａＱ３−１の実行結果に従うクエリ応答ａＱ３−１＿Ａが所定の出力条件（例えば所定の欠損率範囲）を満たすか否かを判断する（Ｓ１６０４）。Ｓ１６０４の判断結果が偽の場合、クエリ応答部１６３４は、別の変化規則（第四の変換規則の一例）を含む別の内部クエリＱ３−２を生成または選択する（Ｓ１６０５）。当該内部クエリＱ３−２について、Ｓ１６０２およびＳ１６０３と同様の処理が行われる（Ｓ１６０６およびＳ１６０７）。結果として、匿名加工クエリａＱ３−２の生成および実行に従いクエリ応答ａＱ３−２＿Ａが得られる。
【０１４７】
クエリ応答部１６３４が、クエリ応答ａＱ３−２＿Ａが所定の出力条件を満たしているか否かを判断する（Ｓ１６０８）。Ｓ１６０８の判断結果が真の場合、クエリ応答部１６３４は、クエリＱ３に対する応答としてクエリ応答ａＱ３−２＿Ａをクライアント１９０に返す（Ｓ１６０９）。
【０１４８】
以上の通り、一つのクエリＱ３を基に一つ以上の内部クエリ（具体的には、一つのクエリＱ３が含む変換規則を基に得られた一つ以上の変換規則）が実行される。
【０１４９】
図１７は、匿名加工処理の半自動実行の一例についての説明図である。
【０１５０】
参照符号１７１０によれば、匿名加工処理の半自動実行において、いずれの属性項目の属性値の匿名加工にいずれの匿名加工ルールが適用されるかが、予め定義される。具体的には、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００における属性項目「年齢」の属性値については、ｇｎ−ｒｕｌｅ＿ａｇｅ３５０が適用されることが、予め定義される。本実施例では、ｐａｔｉｅｎｔ＿ｔａｂｌｅ３００における属性項目「年齢」がｇｎ−ｒｕｌｅ＿ａｇｅ３５０に関連付けられる。
【０１５１】
匿名加工処理の半自動実行は、クエリＱ３において明示されている。具体的には、クエリＱ３で指定された匿名加工範囲が、変換規則が関連付けられた少なくとも一つの属性項目を含み、当該属性項目について二つ以上の要素（二つ以上の匿名加工規則の組合せ、または、匿名加工不要の指定と少なくとも一つの匿名加工規則との組合せ）の記述があれば、当該クエリＱ３は、匿名加工クエリの半自動実行が明示（指定）されたクエリである。当該記述の例が、属性項目「年齢」についての記述「CHOICE(年齢, 年齢g5, *')」と、属性項目「ICD10」についての記述「CHOICE(ICD10, SUBSTR(ICD10,1,3)」である。記述「CHOICE()」は、()内の各々の要素に従う属性値（未加工属性値または加工済属性値）を引数とし、引数の一つを選択することを意味する。「年齢」および「ICD10」の各々が、匿名加工不要の指定としての要素に相当する。「年齢g5」、「*」および「SUBSTR(ICD10,1,3)」の各々が、匿名加工規則に相当する。
【０１５２】
記述「CHOICE()」の数（＝Ａ）と、各記述「CHOICE()」が有する要素の数（＝Ｂ）とに応じて、変換規則（内部クエリ）の数（＝Ｃ）が決まる。具体的には、Ｃ＝Ａ×Ｂ、である。図示の例では、記述「CHOICE(年齢, 年齢g5, *)」が有する要素の数は３であり、記述「CHOICE(ICD10, SUBSTR(ICD10,1,3)」が有する要素の数は２であるため、６つの変換規則Ｒ３−１〜Ｒ３−６をそれぞれ含む６つの内部クエリＱ３−１〜Ｑ３−６が得られる。
【０１５３】
図において、６つの変換規則Ｒ３−１〜Ｒ３−６は、左および上にある程、抽象度（匿名度合）が高い、言い換えれば、右および下にある程、抽象度が低い。要素「*」は、未加工属性値の大きさに関わらず加工済属性値は“*”という表記になることを意味する。本実施例では、クエリＱ３の変換規則（「CHOICE()」を含んだ変換規則）から生成可能な変換規則Ｒ３−１〜Ｒ３−６を抽象度の順序に沿って並べたCHOICE実行プラン（「半自動実行プラン」または「匿名化実行プラン」と呼ばれてもよい）１７２０が生成される。具体的には、例えば、クエリ受付部１６３１が、受け付けたクエリＱ３が含む変換規則を基に、変換規則Ｒ３−１〜Ｒ３−６が抽象度の順序に沿って並んだCHOICE実行プラン１７２０を生成する。生成されたCHOICE実行プラン１７２０は、例えば、クエリ応答部１６３４が参照可能な記憶領域（記憶装置１５０Ａにおける記憶領域）に格納される。
【０１５４】
このように、変換規則に従う抽象度の高さは異なる。そこで、クエリＱ３では、変換規則が選択される順序である規則選択順序を指定することができる。図示の「TOPDOWN()」が規則選択順序の指定の一例である。「TOPDOWN()」は、得られた変換規則を抽象度の高い順（抽象度の降順）に選択すること（CHOICE実行プラン１７２０内の実線矢印の順で選択すること）を意味する。規則選択順序の指定として別の例も採用することができる。例えば、図示しないが、「BOTTOMUP()」を採用することもできる。「BOTTOMUP()」は、得られた変換規則を抽象度の低い順（抽象度の昇順）に選択すること（CHOICE実行プラン１７２０内の破線矢印の順で選択すること）を意味する。CHOICE実行プラン１７２０では、変換規則Ｒ３−１〜Ｒ３−６の並びは、クエリＱ３で指定された規則選択順序に従う並びとされる。
【０１５５】
図１８は、半自動実行の効率化の一例についての説明図である。
【０１５６】
匿名加工処理の半自動実行において一つのクエリを基に多数の内部クエリが生成される可能性がある。常に全ての内部クエリを実行すると、受け付けられたクエリの処理に長い時間がかかり、結果として、クエリの応答性能が低下する。
【０１５７】
そこで、本実施例では、クエリの処理に要する時間の長期化を回避するために、図示の通り、匿名化結果（匿名加工クエリを実行した結果に関する情報）の一例であるａＱｘ＿ｉｎｆｏ１８０１がａＱｘ履歴１８００に含められる。ａＱｘ＿ｉｎｆｏ１８０１は、例えば、ａＱｘの実行時刻、ユーザＩＤ、匿名加工範囲、最低ｋ値（ａＱｘの実行において得られたｋ値のうちの最低値）、ｋ値下限（匿名化条件）、および欠損率を示す情報を含む。ａＱｘ＿ｉｎｆｏ１８０１は、更に、ａＱｘ＿Ａが出力条件を満たしたか否かを示す成否情報を含んでもよい。
【０１５８】
クエリ応答部１６３４は、CHOICE実行プラン１７２０と、過去のクエリのａＱｘ＿ｉｎｆｏ１８０１とのいずれかを参照して、最新の内部クエリが含む変換規則の抽象度と、最新の内部クエリの応答が派生元のクエリの出力条件を満たしているか否かとを基に、規則選択順序に従う次の変換規則を含む次の内部クエリの応答が出力条件を満たすか否かを、当該次の内部クエリを実行すること無しに判断することができる。そして、その判断の結果が偽の場合、クエリ応答部１６３４は、次の内部クエリを含む残りの内部クエリを実行すること無しに、クエリを終了することができる（詳細は後述する）。
【０１５９】
図１９は、本実施例に係る全体処理の流れを示すフローチャートである。
【０１６０】
クエリ受付部１６３１が、クエリＱ３をクライアント１９０から受け付ける（Ｓ１９０１）。Ｓ１９０１において、クエリ受付部１６３１は、受け付けたクエリＱ３に、匿名加工処理の半自動実行の明示（「CHOICE()」）があることを検出した場合、当該クエリＱ３が含む変換規則を基に、変換規則Ｒ３−１〜Ｒ３−６が抽象度の順序に沿って並んだCHOICE実行プラン１７２０を生成する。クエリ受付部１６３１は、CHOICE実行プラン１７２０を基に、少なくとも、変換規則Ｒ３−１〜Ｒ３−６のうち最初に選択する変換規則Ｒ３−１を含んだ内部クエリＱ３−１を生成する。この段階で、残りの変換規則Ｒ３−２〜Ｒ３−６をそれぞれ含んだ内部クエリＱ３−２〜Ｑ３−６が生成されてもよい。
【０１６１】
クエリプラン生成部１６３２が、内部クエリＱ３−１に関してクエリプラン生成処理を行う（Ｓ１９０２）。
【０１６２】
クエリ実行部１６３３が、Ｓ１９０２で生成されたクエリプランＱ３−１＿Ｐに基づきクエリ実行処理を行う（Ｓ１９０３）。
【０１６３】
クエリ応答部１６３４が、Ｓ１９０３の結果に従うクエリ応答Ｑ３−１＿Ａを出力するか否かの判断を含むクエリ応答処理を行う（Ｓ１９０４）。
【０１６４】
図２０は、クエリ応答処理の流れを示すフローチャートである。
【０１６５】
クエリ応答部１６３４が、クエリ応答Ｑ３−１＿Ａが所定の出力条件を満たしているか否かを判断する（Ｓ２００１）。
【０１６６】
Ｓ２００１の判断結果が真の場合（Ｓ２００１：Ｙｅｓ）、クエリ応答部１６３４が、クエリ応答Ｑ３−１＿Ａをクライアント１９０に返す。すなわち、所定の出力条件を満たすクエリ応答が見つかった時点で当該クエリ応答が返る。これにより、ユーザが満足する結果を高速に返すことができる。所定の出力条件を満たす内部クエリが未だあるとしても、規則選択順序や抽象度に応じた変換規則の並びを考慮すると、見つかったクエリ応答がユーザを最も満足させる可能性が高く、かつ、そのようなクエリ応答を返すことが、クエリの応答性能を最も高くすることができると考えられる。
【０１６７】
Ｓ２００１の判断結果が偽の場合（Ｓ２００１：Ｎｏ）、クエリ応答部１６３４が、半自動実行の処理対象か否か（つまりCHOICE実行プラン１７２０があるか否か）を判断する（Ｓ２００２）。Ｓ２００２の判断結果が偽の場合（Ｓ２００２：Ｎｏ）、クエリ応答部１６３４が、該当なしを含むクエリ応答を生成し（Ｓ２００７）、当該クエリ応答をクライアント１９０に返す（Ｓ２００８）。
【０１６８】
Ｓ２００２の判断結果が真の場合（Ｓ２００２：Ｙｅｓ）、クエリ応答部１６３４が、全ての内部クエリを生成または選択したか否かを判断する（Ｓ２００３）。Ｓ２００３の判断結果が真の場合（Ｓ２００３：Ｙｅｓ）、Ｓ２００７およびＳ２００８が行われる。
【０１６９】
Ｓ２００３の判断結果が偽の場合（Ｓ２００３：Ｎｏ）、クエリ応答部１６３４が、CHOICE実行プラン１７２０を基に、クエリＱ３で指定されている規則選択順序に従う次の内部クエリＱ３−ｎ（ｎ＝２、および／または、ｎ＝３）を生成または選択する（Ｓ２００４）。本実施例について、内部クエリＱ３−ｎよりも過去に処理された一つ以上の先のクエリの各々を「クエリＱｍ」と言う。クエリＱｍは、クエリＱ３から派生した別の内部クエリであってもよいし、クエリＱ３とは異なるクエリから派生したいずれかの内部クエリであってもよいし、クエリＱ３とは異なるクエリであってもよい。
【０１７０】
クエリ応答部１６３４が、CHOICE実行プラン１７２０を基に、Ｓ２００４で生成または選択された内部クエリＱ３−ｎの応答が成功の可能性（出力条件を満たす可能性）があるか否かを判断する（２００５）。具体的には、例えば、下記のうちの少なくとも一つが該当してよい。
・規則選択順序が「TOPDOWN()」であり、変換規則Ｒ３−ｎよりも直前の変換規則Ｒ３−１の方が抽象度が高く、且つ、直前の内部クエリＱ３−１の応答が失敗だった（出力条件を満たさなかった）場合、内部クエリＱ３−ｎの応答は失敗となると判断される（Ｓ２００５：Ｎｏ）。
・規則選択順序が「TOPDOWN()」であり、変換規則Ｒ３−ｎよりも直前の変換規則Ｒ３−１の方が抽象度が高く、直前の内部クエリＱ３−１の応答が成功であり、且つ、内部クエリの応答が成功でもクエリ応答が必ずしもクライアント１９０に返らない場合（例えば、規則選択順序に従う上位Ｘ％の変換規則を全て試す仕様になっている場合）、内部クエリＱ３−ｎの応答は成功の可能性があると判断される（Ｓ２００５：Ｙｅｓ）。
・規則選択順序が「BOTTOMUP()」であり、変換規則Ｒ３−ｎよりも直前の変換規則Ｒ３−１の方が抽象度が低く、且つ、直前の内部クエリＱ３−１の応答が失敗だった（出力条件を満たさなかった）場合、内部クエリＱ３−ｎの応答は失敗となると判断される（Ｓ２００５：Ｎｏ）。
・規則選択順序が「BOTTOMUP()」であり、変換規則Ｒ３−ｎよりも直前の変換規則Ｒ３−１の方が抽象度が低く、直前の内部クエリＱ３−１の応答が成功であり、且つ、内部クエリの応答が成功でもクエリ応答が必ずしもクライアント１９０に返らない場合、内部クエリＱ３−ｎの応答は成功の可能性があると判断される（Ｓ２００５：Ｙｅｓ）。
【０１７１】
Ｓ２００５の判断結果が偽の場合（Ｓ２００５：Ｎｏ）、Ｓ２００４で生成または選択された内部クエリＱ３−ｎは、実行されても、クエリ応答ａＱ３−ｎ＿Ａが所定の出力条件を満たす可能性がない。そのため、当該内部クエリは実行されず、Ｓ２００３に処理が戻る。
【０１７２】
Ｓ２００５の判断結果が真の場合（Ｓ２００５：Ｙｅｓ）、クエリ応答部１６３４が、Ｓ２００４で生成または選択された内部クエリＱ３−ｎの匿名加工範囲を部分集合として含む匿名加工範囲を示す既存のａＱｍ＿ｉｎｆｏ１８０１を含んだａＱｍ履歴１８０１が少なくとも一つある場合、当該少なくとも一つのａＱｍ履歴１８０１を基に、Ｓ２００４で生成または選択された内部クエリＱ３−ｎの応答が成功の可能性があるか否かを判断する（２００６）。この判断は、ａＱｍ＿Ａが出力条件を満たしたか否か（具体的には、例えば、ａＱｍ＿ｉｎｆｏ１８０１における最低ｋ値、ｋ値下限および欠損率）と、内部クエリＱ３−ｎの匿名化条件（ｋ値下限）と、クエリＱ３の出力条件（欠損率範囲）と、クエリＱｍが含む変換規則の抽象度と、内部クエリＱ３−ｎが含む変換規則Ｒ３−ｎの抽象度とを基に行われる。
【０１７３】
Ｓ２００６の判断結果が真の場合（Ｓ２００６：Ｙｅｓ）、Ｓ２００４で生成または選択された内部クエリＱ３−ｎは、実行されれば、クエリ応答ａＱ３−ｎ＿Ａが所定の出力条件を満たす可能性がある。そのため、クエリ応答部１６３４が、当該選択された内部クエリＱ３−ｎを匿名加工部１６４０に指定する。これにより、当該内部クエリＱ３−ｎについてクエリプラン生成処理が行われる。
【０１７４】
Ｓ２００６の判断結果が偽の場合（Ｓ２００６：Ｎｏ）、Ｓ２００４で生成または選択された内部クエリＱ３−ｎは、実行されても、クエリ応答ａＱ３−ｎ＿Ａが所定の出力条件を満たす可能性がない。そのため、当該内部クエリは実行されず、処理が、Ｓ２００３に戻る。
【０１７５】
実施例２でも、実施例１と同様に、既に実体化済の加工結果を利用することで、再加工の都度にデータベースから全てのタプルを再取得することを回避できる。
【０１７６】
なお、内部クエリは必ずしも生成されなくてもよく、変換規則を含む匿名加工範囲が元のクエリを基に自動生成されればよい。
【０１７７】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、実施例１と実施例２が組み合わされてもよい。具体的には、例えば、受け付けられたクエリが、複数通りの変換規則の明示（例えば「CHOICE()」）を含む場合に、実施例２における処理が行われてよく、そうではない場合に、実施例１における処理が行われてよい。
【０１７８】
上述の説明を、以下のように総括することができる。なお、以下の総括は、上述の説明に無い事項を含んでいてもよい。
【０１７９】
複数の属性項目にそれぞれ対応する複数の属性値を含む各タプルを含む関係表を格納するデータベースをＤＢＭＳ（１３０、１６３０）が管理する。前記ＤＢＭＳが、クエリ受付部（１３１、１６３１）とクエリ処理部（１９０、１６９０）とを有する。
【０１８０】
前記クエリ受付部は、変換規則が関連付けられた匿名加工範囲の指定を含むクエリを受け付ける。前記匿名加工範囲は、読出し対象の一つ以上の属性項目であり、当該一つ以上の属性項目のうちの少なくとも一つの属性項目に変換規則が含まれている（関連付けられている）。
【０１８１】
前記クエリ処理部は、当該受け付けられたクエリに関して、（ｘ１）〜（ｘ３）を行う。
（ｘ１）前記クエリ処理部は、対象の変換規則を含む匿名加工範囲である対象の匿名加工範囲を基に、匿名加工履歴群（一つまたは複数の匿名加工履歴）のうちの一つ以上の匿名加工履歴を利用可能か否か判断する。「匿名加工範囲」は、少なくとも一つの属性項目について読出し対象とする属性値に関する条件を含んでもよい。「対象の変換規則」は、実施例１のように、受け付けられたクエリが含む変換規則それ自体でもよいし、実施例２のように、受け付けられたクエリが含む変換規則を基に得られた（半自動化により得られた）変換規則でもよい。各匿名加工履歴の各々は、一例がａＱｘ履歴であり、出力中間結果を含む。前記各匿名加工履歴に関し、前記出力中間結果は、一つまたは複数の出力データセットを含む。各出力データセットは、当該出力データセットを含む匿名加工履歴に対応した過去の匿名加工処理での匿名加工条件を満たす一つまたは複数の加工済データセットまたはそれらの未加工データセットである。「加工済データセット」は、少なくとも一つの匿名加工された属性値を含む一つ以上の属性値で構成される。「未加工データセット」は、一つ以上の未加工の属性値で構成される。
（ｘ２）前記クエリ処理部は、（ｘ１）の判断結果が真の場合に、前記対象の匿名加工範囲に該当する加工済データセットのうち、少なくとも一部の加工済データセットを、前記一つ以上の匿名加工履歴における一つ以上の出力中間結果から優先的に取得し、残りの加工済データセットを、前記データベースから、もしくは、前記一つ以上の匿名加工履歴のうちの、前記一つ以上の出力中間結果以外の部分から取得する。
（ｘ３）前記クエリ処理部は、（ｘ２）で取得された全ての加工済データセットのうち対象の匿名加工条件を満たす全ての加工済データセットまたはそれらの未加工データセットを前記対象の匿名加工範囲についての出力中間結果として含んだ匿名加工履歴を格納する。
【０１８２】
「匿名加工条件を満たす加工済データセット」は、匿名加工条件を満たす少なくとも一つの加工済データセット群に属する加工済データセットである。「加工済データセット群」は、同一の加工済データセット、より具体的には、例えば、全ての準識別子（少なくとも一つの加工済属性値を含む一つ以上の属性値）が同一の加工済データセットである。例えば、匿名加工が、ｋ−匿名化であれば、匿名加工条件を満たす加工済データセット群では、同一の加工済データセットの数がｋ値以上である。また、例えば、匿名加工が、ｌ−多様性であれば、匿名加工条件を満たす加工済データセット群では、全ての準識別子が同一である複数の加工済データセットにおいて異なるセンシティブ値（機密情報値）の数がｌ値以上である。
【０１８３】
（ｘ３）で格納される匿名加工履歴は、非出力中間結果を含んでもよい。非出力中間結果は、（ｘ２）で取得された全ての加工済データセットのうち前記対象の匿名加工条件を満たさない全ての加工済データセットまたはそれらの未加工データセットで構成された第一の非出力中間結果と、それらの未加工データセットを含むタプルへのポインタのリストである第二の非出力中間結果とのいずれかでよい。（ｘ２）で、前記一つ以上の出力中間結果以外の部分は、前記一つ以上の匿名加工履歴のうちの一つ以上の非出力中間結果でよい。
【０１８４】
（ｘ３）において、前記クエリ処理部は、履歴関連容量がその上限以下である場合（および／または、前記対象の匿名加工範囲に該当する加工済データセットの数に対する前記対象の匿名加工条件を満さない加工済データセットの数の割合である欠損率がその上限を超えている場合）、前記第一の非出力中間結果を格納してよい。一方、（ｘ３）において、前記クエリ処理部は、当該欠損率がその上限以下である場合（および／または、前記履歴関連容量がその上限を超えている場合）、前記第二の非出力中間結果を格納してよい。「履歴関連容量」は、前記匿名加工履歴群に関する容量であり、一例が、上述の非出力容量または記憶装置使用容量でよい。具体的には、例えば、履歴関連容量は、下記のうちのいずれかの容量、または、下記のうちの二つ以上の容量に基づく容量（例えば合計）でよい。
・前記対象の匿名加工条件を満さない全ての加工済データセットの容量。
・前記匿名加工履歴群の容量。
・前記匿名加工履歴群における全ての出力中間結果の容量。
・前記匿名加工履歴群における全ての非出力中間結果の容量。
・前記匿名加工履歴群における全ての第一の非出力中間結果の容量。
【０１８５】
（ｘ１）の判断結果が真となるケースの一例として、次のケース、すなわち、対象の匿名加工範囲を部分集合とする匿名加工範囲群（一つ以上の匿名加工範囲）に対応した一つ以上の匿名加工履歴があり、かつ、当該一つ以上の匿名加工履歴における少なくとも一つの出力中間結果を基に前記対象の変換規則に従う加工済属性値を得ることが可能であるケースがある。
【０１８６】
前記クエリ処理部は、第一の非出力中間結果の格納の明示が関連付けられた匿名加工処理に関して、第一の非出力中間結果を格納してよい。なお、この場合、第一の非出力中間結果の格納は、上述した履歴関連容量がその上限以下である場合に（および／または、欠損率がその上限を超えている場合に）行われてもよいし、履歴関連容量（および／または、欠損率）に関わらず明示に従い行われてもよい。第一の非出力中間結果の格納の明示は、例えば、受け付けられたクエリに含まれていてよく、そのようなクエリに基づく匿名加工処理が、第一の非出力中間結果の格納の明示が関連付けられた匿名加工処理の一例でよい。当該匿名加工処理の具体例は、図８に例示のａＱ１に従う匿名加工処理がある。
【０１８７】
前記クエリ処理部は、（ｘ２）において、前記対象の匿名加工範囲に従う匿名加工処理の実行結果が所定の出力条件を満たす場合に、当該匿名加工処理において取得された出力加工済データセットを含んだクエリ応答を返してよい。前記所定の出力条件は、クエリ応答を返すことを許可するための条件である。前記所定の出力条件の一例が、当該実行結果に従う欠損率が所定の欠損率範囲に収まることでよい。「欠損率が所定の欠損率範囲に収まる」とは、欠損率が、欠損率範囲の一端である下限値以上であって、当該欠損率範囲の他端である上限値以下であることでよい。
【０１８８】
前記クエリ処理部は、前記所定の出力条件が満たされない場合、（ｘ３）を実行してもしなくてもよい。また、前記クエリ処理部は、前記所定の条件が満たされない場合、前記受け付けられたクエリに基づく別の変換規則を含む匿名加工範囲を対象の匿名加工範囲として（ｘ１）〜（ｘ３）のうち少なくとも（ｘ１）および（ｘ２）を行ってよい。「別の変換規則」は、前記所定の出力条件が満たされないことを契機に前記受け付けられたクエリを基に生成された変換規則でもよいし、前記受け付けられたクエリを基に生成された抽象度（匿名度合）が異なる二つ以上の変換規則から前記所定の出力条件が満たされないことを契機に選択された変換規則でもよい。別の変換規則についての少なくとも（ｘ１）および（ｘ２）の実施は、前記受け付けられたクエリが、複数通りの変換規則の明示（例えば「CHOICE()」）を含む場合に行われてよい。
【０１８９】
別の変換規則について、下記のうちの少なくとも一つが行われてよい。
・変換規則の抽象度が高い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が高く、且つ、当該先の変換規則を含んだクエリの応答が出力条件を満たさなかった場合、当該別の変換規則を含むクエリの応答は出力条件を満たさないと判断される。この場合、当該別の変換規則を含むクエリは実行されない。それに加えて、当該別の変換規則よりも抽象度の低い残りの変換規則についても実行がされないでもよい。
・変換規則の抽象度が高い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が高く、当該先の変換規則を含んだクエリの応答が出力条件を満たしている場合（例えば、更に、当該先の変換規則を含んだクエリの応答が出力条件を満たしていても応答がクエリ発行元に必ずしも返らない場合）、当該別の変換規則を含むクエリの応答は出力条件を満たす可能性があると判断される。この場合、当該別の変換規則を含むクエリは実行される。
・変換規則の抽象度が低い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が低く、且つ、当該先の変換規則を含んだクエリの応答が出力条件を満たさなかった場合、当該別の変換規則を含むクエリの応答は出力条件を満たさないと判断される。この場合、当該別の変換規則を含むクエリは実行されない。それに加えて、当該別の変換規則よりも抽象度の高い残りの変換規則についても実行がされないでもよい。
・変換規則の抽象度が低い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が低く、当該先の変換規則を含んだクエリの応答が出力条件を満たしている場合（例えば、更に、当該先の変換規則を含んだクエリの応答が出力条件を満たしていても応答がクエリ発行元に必ずしも返らない場合）、当該別の変換規則を含むクエリの応答は出力条件を満たす可能性があると判断される。この場合、当該別の変換規則を含むクエリは実行される。
【０１９０】
前記クエリ処理部は、さらに、前記匿名加工処理の実行に関する情報であり、匿名加工範囲、および、前記所定の出力条件が満たされたか否かに関する情報を含んだ情報である匿名化結果を、当該匿名加工処理の匿名加工履歴に含めてもよい。前記クエリ処理部は、前記受け付けられたクエリについて実行された一つ以上の匿名加工処理に対応した一つ以上の匿名加工履歴が含む一つ以上の匿名化結果（以下、一つ以上の先の匿名化結果）と、前記別の変換規則を含む匿名加工範囲とを基に、前記別の変換規則を含む匿名加工範囲についての匿名加工処理を実行するか否かを判断してよい。ここで言う「先の匿名化結果」は、当該別の変換規則に対応した匿名加工範囲を部分集合として含む匿名加工範囲に対応した匿名化結果でよい。また、「前記別の変換規則を含む匿名加工範囲についての匿名加工処理を実行するか否か」の判断は、例えば、先の匿名化結果に従う、匿名化条件、出力条件及び成否（当該出力条件を満たしたか否か）と、当該別の変換規則に対応した匿名化条件及び出力条件と、先の匿名化結果に対応した変換規則の抽象度と、当該別の変換規則の抽象度とを基に行われてよい。
【符号の説明】
【０１９１】
１００…ＤＢサーバ
【図１】
2020086890.tif 000003
【図２】
2020086890.tif 000004
【図３】
2020086890.tif 000005
【図４】
2020086890.tif 000006
【図５】
2020086890.tif 000007
【図６】
2020086890.tif 000008
【図７】
2020086890.tif 000009
【図８】
2020086890.tif 000010
【図９】
2020086890.tif 000011
【図１０】
2020086890.tif 000012
【図１１】
2020086890.tif 000013
【図１２】
2020086890.tif 000014
【図１３】
2020086890.tif 000015
【図１４】
2020086890.tif 000016
【図１５】
2020086890.tif 000017
【図１６】
2020086890.tif 000018
【図１７】
2020086890.tif 000019
【図１８】
2020086890.tif 000020
【図１９】
2020086890.tif 000021
【図２０】
2020086890.tif 000022