(57)【特許請求の範囲】
【請求項１】
第１のデータセット中の第１のフィールドの識別を受け取る工程であって、前記第１のデータセットは複数のレコードを含んでいる、工程と、
値の集合を識別する工程であって、前記集合は、レコードごとに、それぞれのレコードにある、前記フィールドに関連付けられた値を含む、工程と、
前記値の集合に基づいてフィルタマスクを生成する工程であって、前記フィルタマスクを適用することにより、所与の値が前記値の集合にないことを判定することができる工程と、
第２のデータセットを受け取る工程であって、前記第２のデータセットは第２のフィールドを含んでおり、前記第２のデータセットは複数のレコードを含んでいる、工程と、
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する工程と、
前記数をプロファイルに記憶する工程と、
を含む、コンピュータが実行する方法。
【請求項２】
前記値の集合と、前記第２のフィールドに関連付けられた値を持つ前記第２のデータセット中の前記レコードとのＳｏｒｅｎｓｅｎ−Ｄｉｃｅ係数を求める工程をさらに含む請求項１に記載の方法。
【請求項３】
フィルタマスクを生成する工程が、前記値の集合にある値ごとに、対応する値にフィルタキーを生成する工程を含む請求項１に記載の方法。
【請求項４】
前記対応する値にフィルタキーを生成する工程が、
前記対応する値のハッシュ値を生成する工程と、
前記ハッシュ値を、所定数の整数に分割する工程と、
前記整数に基づいてビットベクトルにビットを設定することにより、フィルタキーを作成する工程と、
を含む請求項３に記載の方法。
【請求項５】
前記フィルタマスクを生成する工程が、前記生成されたフィルタキーそれぞれに２進演算を行う工程をさらに含む請求項３に記載の方法。
【請求項６】
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する工程が、
前記第２のフィールドに関連付けられた値に第２のフィルタキーを計算する工程と、
前記第２のフィルタキーを前記フィルタマスクと比較する工程と、
を含む請求項５に記載の方法。
【請求項７】
１つまたは複数のコンピュータによって実行されると、前記１つまたは複数のコンピュータに、
第１のデータセット中の第１のフィールドの識別を受け取る工程であって、前記第１のデータセットは複数のレコードを含んでいる、工程と、
値の集合を識別する工程であって、前記集合は、レコードごとに、それぞれのレコードにある、前記フィールドに関連付けられた値を含む、工程と、
前記値の集合に基づいてフィルタマスクを生成する工程であって、前記フィルタマスクを適用することにより、所与の値が前記値の集合にないことを判定することができる工程と、
第２のデータセットを受け取る工程であって、前記第２のデータセットは第２のフィールドを含んでおり、前記第２のデータセットは複数のレコードを含んでいる、工程と、
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する工程と、
前記数をプロファイルに記憶する工程と、
を含む動作を行わせるコンピュータプログラム命令が符号化された非一時的なコンピュータ記憶媒体。
【請求項８】
前記値の集合と、前記第２のフィールドに関連付けられた値を持つ前記第２のデータセット中の前記レコードとのＳｏｒｅｎｓｅｎ−Ｄｉｃｅ係数を求める工程をさらに含む請求項７に記載の媒体。
【請求項９】
フィルタマスクを生成する工程が、前記値の集合にある値ごとに、対応する値にフィルタキーを生成する工程を含む請求項７に記載の媒体。
【請求項１０】
前記対応する値にフィルタキーを生成する工程が、
前記対応する値のハッシュ値を生成する工程と、
前記ハッシュ値を、所定数の整数に分割する工程と、
前記整数に基づいてビットベクトルにビットを設定することにより、フィルタキーを作成する工程と、
を含む請求項９に記載の媒体。
【請求項１１】
前記フィルタマスクを生成する工程が、前記生成されたフィルタキーそれぞれに２進演算を行う工程をさらに含む請求項９に記載の媒体。
【請求項１２】
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する工程が、
前記第２のフィールドに関連付けられた値に第２のフィルタキーを計算する工程と、
前記第２のフィルタキーを前記フィルタマスクと比較する工程と、
を含む請求項１１に記載の媒体。
【請求項１３】
１つまたは複数のコンピュータと、１つまたは複数の記憶装置とを備えるシステムであって、前記１つまたは複数の記憶装置は、前記１つまたは複数のコンピュータによって実行されると、前記１つまたは複数のコンピュータに、
第１のデータセット中の第１のフィールドの識別を受け取る工程であって、前記第１のデータセットは複数のレコードを含んでいる、工程と、
値の集合を識別する工程であって、前記集合は、レコードごとに、それぞれのレコードにある、前記フィールドに関連付けられた値を含む、工程と、
前記値の集合に基づいてフィルタマスクを生成する工程であって、前記フィルタマスクを適用することにより、所与の値が前記値の集合にないことを判定することができる工程と、
第２のデータセットを受け取る工程であって、前記第２のデータセットは第２のフィールドを含んでおり、前記第２のデータセットは複数のレコードを含んでいる、工程と、
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する工程と、
前記数をプロファイルに記憶する工程と、
を含む動作を行わせるように動作可能な命令を記憶しているシステム。
【請求項１４】
前記値の集合と、前記第２のフィールドに関連付けられた値を持つ前記第２のデータセット中の前記レコードとのＳｏｒｅｎｓｅｎ−Ｄｉｃｅ係数を求める工程をさらに含む請求項１３に記載のシステム。
【請求項１５】
フィルタマスクを生成する工程が、前記値の集合にある値ごとに、対応する値にフィルタキーを生成する工程を含む請求項１３に記載のシステム。
【請求項１６】
前記対応する値にフィルタキーを生成する工程が、
前記対応する値のハッシュ値を生成する工程と、
前記ハッシュ値を、所定数の整数に分割する工程と、
前記整数に基づいてビットベクトルにビットを設定することにより、フィルタキーを作成する工程と、
を含む請求項１５に記載のシステム。
【請求項１７】
前記フィルタマスクを生成する工程が、前記生成されたフィルタキーそれぞれに２進演算を行う工程をさらに含む請求項１５に記載のシステム。
【請求項１８】
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する工程が、
前記第２のフィールドに関連付けられた値に第２のフィルタキーを計算する工程と、
前記第２のフィルタキーを前記フィルタマスクと比較する工程と、
を含む請求項１７に記載のシステム。
【請求項１９】
第１のデータセット中の第１のフィールドの識別を受け取る手段であって、前記第１のデータセットは複数のレコードを含んでいる、手段と、
値の集合を識別する手段であって、前記集合は、レコードごとに、それぞれのレコードにある、前記フィールドに関連付けられた値を含む、手段と、
前記値の集合に基づいてフィルタマスクを生成する手段であって、前記フィルタマスクを適用することにより、所与の値が前記値の集合にないことを判定することができる手段と、
第２のデータセットを受け取る手段であって、前記第２のデータセットは第２のフィールドを含んでおり、前記第２のデータセットは複数のレコードを含んでいる、手段と、
前記第２のフィールドと関連付けられた値であって前記フィルタマスクを通過する値を持つ、前記第２のデータセット中のレコードの数を判定する手段と、
前記数をプロファイルに記憶する手段と、
を備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本記載はデータ品質に関する。
【背景技術】
【０００２】
多くの企業が、キーによって互いに紐付けられたデータセットの多大な集まりを所有している。そのようなデータセットは、リレーショナルデータベースのテーブルや、ディスク記憶システムにあるフラットファイル等である。集まりの数は数百または数千個のデータセットになる場合もあり、数十またはそれ以上のキーを伴う。構造は、複数のソースから時間をかけてデータが蓄積された結果、設計の計画性がない場合もある。かつては設計があったが、その設計が失われているか、忘れられているか、または現在の状況に合わなくなっていることが把握されている場合もある。設計が専門の人物だけに知られており、それ以外には文書化されていない場合もある。あるいは、設計は知られており、現在使用されているが、遵守されていない場合もある。
【発明の概要】
【課題を解決するための手段】
【０００３】
一般に、本明細書に記載される主題の新規な態様の１つは、第１のデータセット中の第１のフィールドの識別を受け取る動作を含む方法として実施することができ、第１のデータセットは複数のレコードを含んでいる。この方法は、値の集合を識別する動作を含み、集合は、レコードごとに、それぞれのレコードにある、上記フィールドに関連付けられた値を含む。この方法は、値の集合に基づいてフィルタマスクを生成する動作を含み、フィルタマスクを適用することにより、所与の値が値の集合にないことを判定することができる。この方法は、第２のデータセットを受け取る動作を含み、第２のデータセットは第２のフィールドを含んでおり、第２のデータセットは複数のレコードを含んでいる。この方法は、第２のフィールドと関連付けられた値であってフィルタマスクを通過する値を持つ、第２のデータセット中のレコードの数を判定する動作を含む。この方法は、その数をプロファイルに記憶する動作も含む。
【０００４】
この態様の他の実施形態は、それに対応するコンピュータシステム、装置、および１つまたは複数のコンピュータ記憶装置に記録されたコンピュータプログラムを含み、それぞれ、上記方法の動作を行うように構成される。１つまたは複数のコンピュータからなるシステムは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせをシステムにインストールし、それらが動作時にシステムに特定の動作を行わせることにより特定の動作を行うように構成することができる。データ処理装置によって実行されるとその装置に特定の動作を行わせる命令を含めることにより、１つまたは複数のコンピュータプログラムを、特定の動作を行うように構成することができる。
【０００５】
上記および他の実施形態はそれぞれ、任意選択により、以下の特徴の１つまたは複数を単独で、または組み合わせて含むことができる。上記方法は、値の集合と、第２のフィールドに関連付けられた値を持つ第２のデータセット中のレコードとのＳｏｒｅｎｓｅｎ−Ｄｉｃｅ係数を求める動作を含むことができる。フィルタマスクを生成する動作は、値の集合にある値ごとに、対応する値にフィルタキーを生成する動作を含むことができる。対応する値にフィルタキーを生成する動作は、対応する値のハッシュ値を生成する動作と、ハッシュ値を所定数の整数に分割する動作と、その整数に基づいてビットベクトルにビットを設定することによりフィルタキーを作成する動作とを含むことができる。フィルタマスクを生成する動作は、生成されたフィルタキーそれぞれに２進演算を行う動作を含むことができる。第２のフィールドと関連付けられた値であってフィルタマスクを通過する値を持つ、第２のデータセット中のレコードの数を判定する動作は、第２のフィールドに関連付けられた値に第２のフィルタキーを計算する動作と、第２のフィルタキーをフィルタマスクと比較する動作とを含むことができる。
【０００６】
態様は、以下の利点の１つまたは複数を含む可能性がある。データ品質計画に信頼性を確立することができる。未知の関係や予想していなかった関係を明らかにすることができる。どのフィールドが共有値を保持しているかについての情報を発見することができる。予想していた関係と識別された関係との不一致を発見することができる。さらなるデータ品質分析の基礎とする正確な構造を判断することができる。詳細には、判明したキー関係の構造を、システム内のデータセットの集まりの参照整合性を定量化する開始点として使用することができる。
【０００７】
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【０００８】
【図１】データベースクロール（crawling）技術を使用することが可能なデータ処理システムの例を示す図である。
【図２】例示的なフィルタマスク作成手順のフローチャートである。
【図３】フィルタキーを生成する例を説明する図である。
【図４】フィルタキーからフィルタマスクを作成する工程を説明する図である。
【図５】フィルタマスクに基づく例示的なプロファイリング手順のフローチャートである。
【発明を実施するための形態】
【０００９】
組織は多量のデータを収集する。データは長い期間にわたって収集される。時間の経過と共に、新しいデータセットが作成され、古いデータセットが変更される。データセット間の関係を識別することは難しい場合がある。
【００１０】
一般に、データセットは、構造化されたデータの集合である。データセットは個別のレコードに分割される。データセットの各レコードは、共通のレコード形式を共有する。例えば、リレーショナルデータベースのテーブルは、データの行を含み、各データのレコード（例えば行）は、そのテーブルのデータベーススキーマ定義に準拠する。スキーマは、テーブル（またはデータセット）の定義を含むことができる。一般に、スキーマは、そのデータセットに存在する１つまたは複数のフィールドを定義する。それらのレコードは、そのフィールドの１つまたは複数をキーとして使用して識別することができる。一般に、「主キー」は、値がデータセット中の各レコードを一意に識別する１つまたは複数のフィールドである。
【００１１】
実装によっては、主キーは、レコード中の１つまたは複数のフィールドを含む。キーは、レコードに含まれる業務情報から導出することができ、例えば、姓名と現住所で１人の顧客を識別することができる（例えば「John」、「Smith」、「154 Locke Lane」）。
【００１２】
主キーの種類の１つは「代理キー」である。代理キーは、業務情報から導出されるのではない一意の識別子、すなわち主キーである。例えば、代理キーは、数値の列から選択することができる。代理キーは、データセットごとに一意である場合も、特定のシステム内のすべてのデータセット（例えば特定の企業に対応するすべてのデータセット）にわたって一意である場合もある。例えば、番号「１０２３４」で、１５４  Ｌｏｃｋｅ  ＬａｎｅのＪｏｈｎ  Ｓｍｉｔｈのレコードを識別することができる。業務情報は変化したり（例えばJohn Smithは154 Locke Laneから275 Greenwood Aveに転居する可能性がある）、または一意でない場合がある（例えば、154 Locke LaneのJohn Smithと、154 Lock Lane のJohn Smith Jr.が存在する可能性がある）ことから、代理キーが一般に好まれる。本明細書で使用される場合、特定のドメインにあるすべてのデータセットに一意の代理キーを「システム全体の代理キー」と呼ぶ。１つのデータセットの中で一意の代理キーを「データセット代理キー」と呼ぶ。
【００１３】
データセットは他のデータセットと関係付けることもでき、１つのデータセット内のレコードを他のデータセットのレコードと関係付けることができる。一般に、データセット間およびレコード間の関係は、「外部キー」を使用して記述される。外部キーは、値が別のフィールドの主キーを参照するデータセットのデータ形式で定義されたフィールドである。
【００１４】
例えば、顧客に製品を販売する事業が組織されるとする。顧客が、１つまたは複数の製品を参照する注文を行う。このビジネスモデルを支援するために、顧客レコードを顧客データセットに記憶することができる。顧客が注文を行うと、注文レコードを注文データセットの中に作成することができる。注文レコードは、通例は顧客レコードの主キーを参照することにより、その注文を行った顧客を参照するフィールドを含む。より具体的には、注文テーブルは、Ｊｏｈｎ  Ｓｍｉｔｈによって行われた注文についてのレコードを含むことができる。この注文は例えば数値９８７，３２１を持つ主キーを有し、数値１０，２３４（上記のように154 Locke Lane のJohn Smithを参照する）を含んでいる「顧客識別子」フィールドを含むことができる。この例では、顧客データセットを主データセットと呼ぶことができ、注文データセット（その顧客データセットを参照する）を副データセットと呼ぶことができる。
【００１５】
一般に、用語「主データセット」および「副データセット」は、２つのデータセット間の関係の特性を定義し、絶対的ではない可能性がある。例えば、注文は複数の行項目を含む場合があり、各行項目は異なる製品を参照する場合がある。この例では、製品ごとに行項目レコードを作成することができる。行項目レコードは、その注文レコードを参照する外部キーを含むことができる。この例では、注文と行項目の関係に従って、注文が主データセットになり、行項目が副データセットになる。データセットは複数の関係の一部である場合もあり、例えば、行項目レコードは、製品データセットに記憶された製品レコードを参照する場合もある。この例では製品データセットが主データセットになり、行項目データセットが副データセットになる。
【００１６】
多くのデータストアは、そのような関係を実現するために使用できる機構を備えている（参照整合性と呼ばれる）。しかし、しばしばこの機構は運用または性能上の理由から使用されない。代わりに、システムは、プログラミングロジックに依拠して参照整合性を実現している。その結果、時間の経過と共にシステムの参照整合性が低下していく可能性がある。親なしレコード（主データセットとの外部キー関係を持たない、副データセットにあるレコード）が生じる、予想される関係が存在しない、などの可能性がある。場合によっては、新しいデータセットが既存のデータシステムに導入される場合がある（例えば合併事業時など）。データベース間で相当する主キーと外部キーの関係が正確に把握されない場合もある。
【００１７】
スキーマからではなくデータからキー関係の構造を判定することが、データセットの集まりにデータ駆動型のデータ品質分析を行う際の最初の段階になる場合がある。データに実際のキー関係が存在することを確認することができると、データ品質計画を開始するにあたって組織は確信を得られる。データセット間の未知の関係や予想していなかった関係が明らかになる場合があり、どのフィールドが共有値を保持しているかについての情報が発見される場合もある。予想していた関係と識別された関係との不一致が発見されることもある。さらなるデータ品質分析の基礎とする正確な構造を判断することができる。一般には、判明した主キーと外部キーの関係の構造を、システム内のデータセットの参照整合性を定量化する開始点として使用することができる。
【００１８】
主キーと外部キーの関係をリバースエンジニアリングする従来の方法は、潜在外部キーフィールドおよび潜在主キーフィールドを異なるデータセット内で識別することを伴う。これには、潜在外部キーの各値を潜在主キーの各値と比較することが必要になる。
【００１９】
本明細書に記載されるこれに代わる手法はフィルタマスクを利用することを含み、このフィルタマスクは偽肯定（false positive）を許し（すなわち、フィルタマスクは、値がある集合の要素でないときに要素であると示すことができる）、一方で偽否定（false negative）の可能性は排除する（すなわちフィルタマスクは、値が当該の集合の要素であるときに要素でないと示すことはない）。一般に、フィルタマスクは、潜在主キーの（１つまたは複数の）フィールドのレコードに記憶された値から作成される。そして、各レコードの潜在外部キーフィールドの値をフィルタマスクと比較する。
【００２０】
例えば、あるプロセスではブルーム（Bloom）フィルタを利用して、指定されたフィールドおよびデータセットの集まりにあるあらゆるデータセットの各フィールドの値の分布を特徴化する。ブルームフィルタは、空間効率のよい確率的データ構造であり、要素が集合の要素であるかどうかを検査するために使用することができる。
【００２１】
図１は、キーの照合および識別技術を使用することができるデータ処理システム１００の例である。一般に、キーの照合および識別は、１つまたは複数のデータセットについての情報と、そのデータセット間の潜在的な関係を識別する情報を収集するプロセスを言う。システム１００はデータソース１０２を含み、これは、記憶装置やオンラインのデータストリームへの接続などの１つまたは複数のデータソースを含むことができ、各データソースは、各種形式のデータを記憶または提供することができる（例えば、データベーステーブル、表計算ファイル、フラットテキストファイル、またはコンピュータに使用される固有形式）。実行環境１０４は、フィルタマスク作成モジュール１０６およびフィルタマスク適用モジュール１１２を備える。実行環境１０４は、例えば、任意バージョンのＵＮＩＸオペレーティングシステムなど、適切なオペレーティングシステムの制御下で１つまたは複数の汎用コンピュータにホストすることができる。例えば、実行環境１０４は、多ノードの並列演算環境を含むことができる。これは、複数の中央演算処理装置（CPU）またはプロセッサコアを使用するコンピュータシステムの構成を含むことができ、ＣＰＵまたはプロセッサコアは、ローカルにあるか（例えば対称型マルチ処理（SMP）コンピュータなどのマルチプロセッサシステム）、ローカルで分散されるか（例えば、クラスタや超並列処理（MPP）システムとして結合された複数のプロセッサ）、リモートにあるか、またはリモートで分散される（例えばローカルエリアネットワーク（LAN）および／もしくはワイドエリアネットワーク（WAN）を介して結合された複数のプロセッサ）、またはそれらの組み合わせとされる。
【００２２】
フィルタマスク作成モジュール１０６は、データソース１０２からデータを読み出し、データセットの１つまたは複数のフィールド用のフィルタマスクをデータソース１０２に記憶する。フィルタマスクは例えばブルームフィルタである。
【００２３】
従来のブルームフィルタは、複数のビットと１つまたは複数のハッシュ関数とを含む。各ハッシュ関数を使用して、入力値を、フィルタキー中のビットの部分集合にマッピングする。フィルタキーを組み合わせてフィルタマスクを作成する。ブルームフィルタは、下記のように１つのハッシュ関数を使用してフィルタキーを作成することによって作成することができる。
【００２４】
フィルタマスクは、潜在キーとして識別されたフィールドに対して作成することができる。フィルタマスクは、下記のプロセスを使用して生成することができる。データソース１０２を提供する記憶装置は、例えば実行環境１０４をホストするコンピュータに接続された記憶媒体（例えばハードドライブ１０８）に記憶されるなど実行環境１０４のローカルにある場合も、または、例えば遠隔への接続（例えばクラウドコンピューティング設備により提供される）を通じて実行環境１０４をホストするコンピュータと通信状態にある遠隔のシステム（例えばメインフレーム１１０）にホストされるなど、実行環境１０４からリモートにある場合もある。
【００２５】
フィルタマスク適用モジュール１１２は、フィルタマスク作成モジュール１０６によって生成されたフィルタマスクを使用して、データセットのレコードにある値を比較する。フィルタマスク適用モジュールは、データセットの特定のフィールドについて（とりわけ）、下記で説明するように、フィルタマスクで指定される特性と一致する値の数、フィルタマスクと一致する値の数の割合、および／または、Ｓｏｒｅｎｓｅｎ−Ｄｉｃｅ係数などのフィルタマスクと値の類似度を比較する統計値を求めることができる。データセットのフィールドが、識別されたキーフィールドに対して良好な一致であるかどうかを判定するために使用できる他の統計値を求めることもできる。
【００２６】
フィルタマスク適用モジュール１１２は、他のデータプロファイリングモジュールと連携して動作することができる。出力データ１１４は、データソース１０２に戻して記憶するか、または、実行環境１０４からアクセスできるか、その他の形で使用されるデータ記憶システム１１６に記憶することができる。データ記憶システム１１６は、開発者１２０が潜在キーである１つまたは複数のフィールドをデータセット内で識別できる開発環境１１８からもアクセスすることができる。
【００２７】
開発環境１１８は、実装によっては、頂点間の有向リンク（作業要素、すなわちデータの流れを表す）で結ばれた頂点（データ処理の構成要素またはデータセットを表す）を含むデータフローグラフとしてアプリケーションを開発するシステムである。例えば、そのような環境が、「Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｇｒａｐｈ−Ｂａｓｅｄ  Ａｐｐｌｉｃａｔｉｏｎｓ」という名称の米国特許出願公開第２００７／００１１６６８号に詳細に記載され、同出願は参照により本明細書に組み込まれる。そのようなグラフを利用した演算を実行するシステムが、「ＥＸＥＣＵＴＩＮＧ  ＣＯＭＰＵＴＡＴＩＯＮＳ  ＥＸＰＲＥＳＳＥＤ  ＡＳ  ＧＲＡＰＨＳ」という名称の米国特許第５，９６６，０７２号に記載され、同特許は参照により本明細書に組み込まれる。このシステムに従って作成されたデータフローグラフは、グラフ構成要素で表される個々のプロセスに情報を出し入れし、プロセス間で情報を移動し、プロセスの実行順序を定義する方法をもたらす。このシステムは、利用可能な方法（例えば、グラフのリンクに従った通信経路にはＴＣＰ／ＩＰまたはＵＮＩＸのドメインソケットを使用することができ、または共有メモリを使用してプロセス間でデータを渡す）からプロセス間通信の方法を選択するアルゴリズムを含む。
【００２８】
フィルタマスク作成モジュール１０６は、種々の形態のデータベースシステムを含む、データソース１０２を実装する可能性のある各種のシステムからデータを受け取ることができる。データは、個々のフィールド（「属性」または「列」とも呼ばれる）の値を持つレコードとして編成されている可能性があり、ナル値を含む場合もある。データソースから最初にデータを読み出す際、フィルタマスク作成モジュール１０６は通例、そのデータソースにあるレコードについての何らかの初期フォーマット情報から開始する。状況によっては、データソースのレコード構造が当初把握されていない場合もあり、代わりに、データソースまたはデータの分析後に判明することもある。レコードについての初期情報には、例えば、１つの異なる値を表すビット数、レコード内のフィールドの順序、およびビットで表される値の種類（例えばストリング、符号付き／符号なしの整数）が含まれる。
【００２９】
図２に、ブルームフィルタで使用される例示的なフィルタマスク作成手順２００のフローチャート２００を示す。この手順は、例えば図１のフィルタマスク作成モジュール１０６によって行うことができる。手順２００は、データを受け取る工程を含む２０２。このデータは、データベーステーブルやフラットファイルなどのデータセットに含まれている可能性がある。データは、１つまたは複数のフィールドおよび１つまたは複数のレコードを含む可能性があり、各レコードは、フィールドのうち少なくとも一部の値を含んでいる。事例によっては、レコードは、ＮＵＬＬ値、または特定のフィールドに値が存在しないことを示す他の指示を含むことができる。
【００３０】
手順２００は、潜在キーを識別する工程を含む２０６。潜在キーは、１つまたは複数のフィールドから構成されることができる。潜在キーは、ユーザによって識別されるか、またはデータもしくはメタデータ（データについて記述するデータ）に基づいて判定することができる。例えば、潜在キーは、リレーショナルデータベーステーブルに対する主キー制約で識別することができる。一般に、制約は、リレーショナルデータベーステーブルなどのデータセットにあるデータについての規則を指定する。主キー制約は、特定のフィールド（またはフィールドの組み合わせ）を主キーにして、その特定のフィールド（またはフィールドの組み合わせ）がそのデータセット中の一レコードを一意に識別することを指示する。
【００３１】
レコードごとに、手順２００は、フィルタキーを作成する２０８。一般に、フィルタキーは、レコードのフィールドに記憶された値に基づいて作成することができる疎な密度のキーである。偽否定を許さないフィルタマスクを生成するために、フィルタキーは、フィールドにある一意の値ごとに生成しなければならない。実装によっては、キーを生成する前に一意の値を識別し、一意の値ごとにキーを生成することができる。
【００３２】
図３は、フィルタキー３５０の生成の一例を説明する。従来のブルームフィルタでは、一続きのハッシュ関数を値に実行してフィルタキーを識別する。各ハッシュ関数は、いくつかの要素を、ビット配列中の１つまたは複数のビットにマッピングする。代替の実装では、下記で説明するように多工程のハッシュ化関数を使用することができる。
【００３３】
この例では、レコードのフィールドは値３０２、この例では「Ｊｏｈｎ  Ｓｍｉｔｈ」を含む。ハッシュ化アルゴリズム３０４を値３０２に適用してハッシュ値３０６を生成し、この例では、ハッシュ値は１６進表現、６１１７３２３Ｄ２ＣＡＢＢＣ１７Ｄ４４Ｃ２Ｂ４４５８７Ｆ６８２Ｃhexを有する。一般に、このハッシュ化アルゴリズムは、衝突の可能性が十分に低い任意のハッシュ化アルゴリズムとすることができる。この例では、ＭＤ５メッセージダイジェストアルゴリズムが使用される。ＭＤ５ハッシュは、１２８ビット（１６バイト）のハッシュ値を生成する。１６０ビット（２０バイト）のハッシュ値を生成するＳＨＡ−１や、２２４ビット、２５６ビット、３８４ビット、または５１２ビットのハッシュ値を生成するＳＨＡ−２などの他のハッシュ化アルゴリズムを使用することもできる。一般に、ハッシュ化アルゴリズムは、要求される性能特性を維持しつつ、データ内の衝突の可能性を最小にするように選択する。ＳＨＡ−１は２０バイトのストリングを返し、これは５つの符号なし４バイト整数として解釈することができる。ＳＨＡ−２５６は、３２バイトのストリングを返し、これは８つの符号なし４バイト整数として解釈することができる。一般に、キー、したがってアルゴリズムの大きさは、分析するデータの大きさに基づいて選択される。キーの大きさを増大することにより、キー空間内の衝突を回避する。例えば、６４ＭＢのキーと２５００万行の候補キーテーブルの場合は、５つのキー（SHA-1）ではおよそ０．０００４の偽肯定率、８つのキー（SHA-256）ではおよそ０．０００１の偽肯定率となる。
【００３４】
手順は、ハッシュ値３０６を数値に分割し、この例では、４バイトの整数値、３１０、３２０、３２８、および３３０に分割する３０８。例えば、ｍｄ５のハッシュ値、６１１７３２３Ｄ２ＣＡＢＢＣ１７Ｄ４４Ｃ２Ｂ４４５８７Ｆ６８２Ｃhexを、整数値である、６１１７３２３Ｄhex、２ＣＡＢＢＣ１７hex、Ｄ４４Ｃ２Ｂ４４hex、５８７Ｆ６８２Ｃhexに分割する。他の大きさを使用してもよく、例えば、ハッシュ値は８バイトの整数値に分割してもよい。
【００３５】
説明のために、図３に、整数値３１０の１６進表現（６１７７３２３Ｄhex）は、１０進値（１，６２８，９１０，１４１decimal）としても表せることを示す。
【００３６】
フィルタキーの長さが整数の最大値（例えば符号なしの４バイト整数の場合は４，２９４，９６７，２９５）よりも小さい事例では、モジュロ演算を使用して整数の値を減らすことができる。この例では、フィルタキー３５０の大きさが４０９６ビットである場合、各整数値３１０、３２０、３２８、および３３０をモジュロ４０９６で調整して、値３１６、３２４、３３２、および３３４を得る。
【００３７】
フィルタキーの大きさはシステムに応じて異なる可能性がある。例えば、フィルタキーの大きさは８メガバイト（MB）、すなわち６７，１０８，８６４ビットである。正確な大きさは、最適な性能と精度が得られるように、よく理解されたブルームフィルタの統計データに基づいて選択される。一般に、ブルームフィルタの大きさは、フィルタマスクが疎な密度になるように、すなわち、設定されたビット（「１」）に対して多数の設定されていないビット（「０」）」を持つことを保証するように選択される。
【００３８】
手順は、各整数値をフィルタキー３５０のビットにマッピングする。実装によっては、フィルタキー３５０はビットの１次元配列である。配列中の場所は、インデックスと呼ばれる、配列の先頭からの数値オフセットに基づいて求めることができる。プログラミング言語に応じて、インデックス「０」（ゼロベースの番号付け）またはインデックス「１」を使用して配列中の最初のビットを参照することができる。この例では配列はゼロベースである。整数値１つごとに、配列中に１つのビットが設定される。インデックス値の位置では、ビットが「１」の値に設定される。この例では、インデックス位置、５７３、２０９２、２８８４、および３０９５のビットが「１」に設定され、残りのビットは「０」に設定される（または「０」のままにされる）。
【００３９】
再度図２を参照すると、手順は、フィルタキーを組み合わせてフィルタマスクを作成する２１２。図４は、フィルタキーからフィルタマスクを作成する工程の説明である。データセットはレコードを含み、各レコードは、潜在キーとして識別されたフィールド４０２ａ〜ｊの値を含む。手順は、値ごとにフィルタキー４０４ａ〜ｊを作成する（例えば、値Jonas Demers 402aを使用してフィルタキー、キーA 404aを生成し、値Sofia Votaw 402bを使用してフィルタキー、キーB 404bを生成する等）。手順は、フィルタキー４０４ａ〜ｊを組み合わせてフィルタマスク４０６を作成する。フィルタキー４０４ａ〜ｊは、例えば２進のＯＲ演算を使用して組み合わせることができる。ＯＲ演算は２つのブール値を受け付け（ブール値は真または偽のどちらかを含んでいる）、２つの値のどちらかが真である場合に真を返し、２つの値が両方とも偽である場合に偽を返す。伝統的に、２進の「１」は真の値を表し、２進の「０」は偽の値を表す。２進のＯＲ演算は、長さが等しい２つのビットパターンを受け取り、対応するビットの各ペアに論理包含的ＯＲ演算を行う。それぞれの位置の結果は、第１のビットが１であるか、または第２のビットが１であるか、または両方のビットが１である場合に１になり、それ以外の場合、結果は０になる。
【００４０】
例えば、数１００１１Ｂと数０００１０Ｂの２進ＯＲでは以下が生成される。
【００４１】
【数１】
0006526684.tif 000002
【００４２】
その結果得られるフィルタマスク４０６は、当該データセットの潜在キーの内容の「指紋」になる。
【００４３】
図２を参照すると、手順は、フィルタマスクを、データセットに関連付けられたメタデータと共に、恒久的なデータストア、または他の記憶媒体に記憶することができる２１４。
【００４４】
図５は、フィルタマスクに基づく例示的なプロファイリング手順５００のフローチャートを示す。手順５００はフィルタマスクを受け取る５０１。フィルタマスクは、上記のプロセスを使用して生成することができる。実装によっては、手順５００は１つまたは複数のフィルタマスクを受け取る。例えば、システムまたはユーザが、２つのデータセットの間の主キーと外部キーの関係を識別することを試みて、比較する２つのデータセットを特定する場合がある。あるいは、初期データセットと、システム内のすべての他のデータセットとの間のキー関係を識別することを試みて、１つのデータセットを複数の異なるデータセットと比較することもできる。実装によっては、データセットの各フィールドにフィルタマスクを生成することができる。そのフィルタマスクそれぞれを、他のデータセットのフィールドと比較することができる。
【００４５】
手順５００は、解析するデータを受け取る５０２。このデータは１つまたは複数のデータセットを含む可能性があり、各データセットは、１つまたは複数のフィールドと、その１つまたは複数のフィールドの値をそれぞれが含む１つまたは複数のレコードとを含んでいる。実装によっては、データセットの１つまたは複数のフィールドが必須でない場合もある。レコードは、必須でないフィールドについては、値を含む場合も、含まない場合もある。
【００４６】
手順５００は、データセットを順次または並行して分析することができる。それぞれの並列プロセスには、それ専用のフィルタマスクのコピーを与えることができる。フィルタマスクは、比較的疎な密度にするのに十分な大きさであるが、処理されるデータと比較するとなお比較的小さい。レコードごとに、手順は、フィールドの値にフィルタマスクを適用する。実装によっては、手順は、１つのみのフィールド、例えばデータベーステーブルの所定の行を処理する場合もある。他の実装では、システムは、レコードの各値を１つまたは複数のフィルタマスクと比較することができる。
【００４７】
実装によっては、値をフィルタマスクと比較することは、値にフィルタキーを生成することを含む場合がある５０４。フィルタキーは、上記で図２および図３を参照して説明したプロセスを使用して生成することができる。一般に、各フィルタキーは、組み合わせられたキーを生成してフィルタマスクを作成するために使用されるプロセスと同じプロセスを使用して生成することができる。同じプロセスを使用することにより、すべてのキーがフィルタマスクと同じ長さになることが保証される。
【００４８】
２進のＡＮＤ演算を行うことにより、生成されたフィルタキーをフィルタマスクと比較することができる５０６。一般に、ＡＮＤ演算は２つの値を受け付け、両方の値が真である場合に肯定の応答を生成し、それ以外の場合は否定の応答を生成する。伝統的に、２進の「１」は真の値を表し、２進の「０」は偽の値を表す。２進のＡＮＤ演算は、長さが等しい２つのビットパターンを受け付けて、対応するビットの各ペアにＡＮＤ演算を行う関数である。それぞれの位置の結果は、第１のビットが１である場合に「１」になり、第２のビット、それ以外の場合は結果は「０」になる。
【００４９】
例えば、数「１００１１Ｂ」と数「０００１０Ｂ」の２進のＡＮＤでは以下が生成される。
【００５０】
【数２】
0006526684.tif 000003
【００５１】
２進のＡＮＤ演算の結果をフィルタキーと比較することができる５０６。２進のＡＮＤ演算の結果がフィルタキーと一致する場合、値はフィルタを通過し、潜在的な一致になる。２進のＡＮＤ演算の結果がフィルタキーと一致しない場合は、値はフィルタを通過せず、一致とならない。
【００５２】
例えば、１００１１Ｂのフィルタマスクを０００１０Ｂのフィルタキーと比較する。上記のように、この２つの２進数に２進のＡＮＤ演算を行うと、値０００１０Ｂが得られる。結果値（０００１０Ｂ）がフィルタキー（０００１０Ｂ）と同じなので、このフィルタキーはフィルタを通過する。
【００５３】
逆の例として、フィルタマスク１００１１Ｂをフィルタキー０１００１Ｂと比較する。このマスクおよびキーに対して実施される２進のＡＮＤ演算を次に示す。
【００５４】
【数３】
0006526684.tif 000004
【００５５】
結果である００００１Ｂはフィルタキー０１００１Ｂと一致しないので、フィルタキーはフィルタを通過しない。
【００５６】
フィルタキーとフィルタマスクの比較は、比較的短時間で行える演算である。したがって、主キーフィールドである可能性のあるフィールドの各値を潜在外部キーフィールドの各値と比較することを通例伴う従来のキー識別方法と比べて、多数のレコードをより迅速かつ効率的に処理することができる。
【００５７】
上記のように、フィルタマスキングアルゴリズムを選択して、ある要素が、フィルタマスクを生成するために使用された集合の要素でないことを確実に判定することができる。比較の結果は、リレーショナルデータベースやフラットファイルなどの恒久的なデータストアに記憶することができる。
【００５８】
手順が、データセットのレコードに対して判定されたフィールドを処理すると、手順は、処理するデータセットがさらにあるかどうかを判定することができる５０８。処理するデータセットがさらにある場合は、次のデータセットが受け取られる５０２。
【００５９】
実装によっては、主テーブルの潜在主キーから生成されたフィルタマスクを、潜在副テーブルの各フィールドと比較することができる。
【００６０】
実装によっては、異なるデータセットから多数のフィルタマスクを手順の開始時に生成することができる５０２。候補データセットが処理されるのに伴って、すべてのキーマスクをコンピュータメモリにロードすることができる。追加的なオーバーヘッドを最小に抑えて、候補にある各フィールドの値を、それらのブルームフィルタそれぞれと比較して検査することができる。
【００６１】
すべての値が処理されると、統計が記録され、分析される５１０。フィルタマスクと比較される値を含んでいるフィールドごとに、統計を記録することができる。
【００６２】
追加的な統計値を計算することができ、例えば、上記手順で各列に統計を収集できると判定する場合があり、そのような統計には、レコードの数、フィールドの値がフィルタマスクに見つかるレコードの数、フィールドにある異なる値の数、およびＳｏｒｅｎｓｅｎ−Ｄｉｃｅ係数（２つのサンプル間の類似度を比較するために使用される統計値）が含まれる。潜在キーフィールドと対象フィールドとの類似度を比較するために使用される他の統計も決定することができる。例えば、主テーブルの数値キー値の範囲（hi/lo）、平均、幾何平均、および標準偏差。
【００６３】
実装によっては、比較数、異なる値の数、交差のパーセント（すなわち、検査対象のフィールドと比較対象のフィールドの両方に出現する値の割合）、およびＳｏｒｅｎｓｅｎ−Ｄｉｃｅ係数が算出される。数値キーには、標準偏差を算出することができる。
【００６４】
実装によっては、統計をレポートとしてフォーマットして、ユーザに提示することができる。
【００６５】
実装によっては、レポートは、外部キーと主キーの関係について一致する１つまたは複数のフィールドを識別することができる。例えば、フィールドの値がフィルタマスクに見つかるレコードの割合を閾値、例えば６０％と比較し、Ｓｏｒｅｎｓｅｎ−Ｄｉｃｅ係数を閾値、例えば８０％と比較し、交差のパーセントを閾値、例えば９５％と比較する。これらすべての閾値と一致するフィールドが潜在的な一致としてユーザに提示される。
【００６６】
データセットにシステム全体の代理キーを使用する事例では、潜在的な一致は自動的に判定することができる。
【００６７】
実装によっては、レポートをユーザに提示して、ユーザが潜在外部キーの一致を識別できるようにする。
【００６８】
上記のデータベース分析手法は、適切なソフトウェアを実行するコンピューティングシステムを使用して実装することができる。例えば、ソフトウェアは、プログラムされた、またはプログラム可能な１つまたは複数のコンピューティングシステム（分散、クライアント／サーバ、またはグリッドなどの各種アーキテクチャを取り得る）で実行される１つまたは複数のコンピュータプログラム中の手順を含むことができ、それぞれのコンピューティングシステムは、少なくとも１つのプロセッサと、少なくとも１つのデータ記憶システム（揮発性メモリおよび／または不揮発性メモリおよび／または記憶素子を含む）と、少なくとも１つのユーザインターフェース（少なくとも１つの入力装置またはポートを使用して入力を受け取り、少なくとも１つの出力装置またはポートを使用して出力を提供する）とを備える。ソフトウェアは、例えばデータフローグラフの設計、設定、および実行に関連するサービスを提供する、より大きなプログラムの１つまたは複数のモジュールを含む場合もある。プログラムのモジュール（例えばデータフローグラフの要素）は、データリポジトリに記憶されたデータモデルに準拠したデータ構造または他の編成データとして実装することができる。
【００６９】
ソフトウェアは、ＣＤ−ＲＯＭや他のコンピュータ可読媒体（例えば汎用または特殊目的のコンピューティングシステムまたはデバイスによって読み取ることができる）などの有形の非一時的媒体で提供される場合も、ネットワークの通信媒体を通じて、実行先のコンピューティングシステムの有形の非一時的媒体に送付される（例えば伝搬信号の中に符号化される）場合もある。処理の一部またはすべては、特殊目的コンピュータで行われるか、またはコプロセッサもしくは利用者プログラム可能ゲートアレイ（FPGA）、または専用の特定用途集積回路（ASIC）などの特殊目的ハードウェアを使用して行うことができる。処理は、ソフトウェアによって指定される演算の異なる部分が異なる演算要素によって行われる分散方式で実装することもできる。そのような各コンピュータプログラムは、好ましくは、汎用または特殊目的のプログラム可能コンピュータからアクセス可能な記憶装置のコンピュータ可読記憶媒体（例えば固体状態メモリもしくは媒体、または磁気媒体もしくは光学媒体）に記憶されるか、またはダウンロードされて、記憶装置媒体がコンピュータに読み取られるとコンピュータを構成および動作させて本明細書に記載の処理を行わせる。本発明のシステムは、コンピュータプログラムと共に構成された有形の非一時的媒体として実装されると考えることもでき、そのように構成された媒体が、コンピュータを特定の事前定義された方式で動作させて、本明細書に記載の処理工程の１つまたは複数を行わせる。
【００７０】
本発明のいくつかの実施形態について説明した。それでも、上述の説明は、本発明の範囲を例示するものであり、制限するものではないことを理解されたい。本発明の範囲は下記の特許請求の範囲によって定義される。
【００７１】
したがって、他の実施形態も下記の特許請求の範囲内にある。例えば、本発明の範囲から逸脱することなく様々な変更を加えることができる。また、上記の工程の一部は順序に依存しない場合もあり、そのため、記載の順序とは異なる順序で行うことができる。
【図１】
0006526684.tif 000005
【図２】
0006526684.tif 000006
【図３】
0006526684.tif 000007
【図４】
0006526684.tif 000008
【図５】
0006526684.tif 000009