結合ビューの作成¶
結合ビューは、一連の入力ビューに対して、関係代数演算である結合を実行します。結合する各ビューは、互いに異なるデータベースに属していてもかまいません。
結合ビューを作成するには、[File] > [New] メニューで [Join] をクリックするか、[Server Explorer] で右クリックして [New] メニューで [Join] をクリックします。
[Join view] ダイアログが開き、[Server Explorer] で現在選択しているビューが追加されます。さらにビューを結合ビューに追加するには、[Model] タブをクリックして、追加するビューを [Server Explorer] からこのタブにドラッグします。
同じ結合ビューに 3 つ以上のビューを結合できます。
このマニュアルの例では、前の節で作成した incidents
ビューと、「 SOAP Web サービスからの基本ビューの作成 」で作成した average_monthly_sales
Web サービスビューを結合します。
[Join view] ダイアログには、以下の 6 つのタブがあります。
Model: 結合を形成するビューをこのタブにドラッグします。以下の点に留意してください。
このタブに 2 つのビューを追加する際、ビュー間のアソシエーションが存在し、そのアソシエーションが 参照制約 (つまり、プライマリキーと外部キーの関係) である場合、Administration Tool が自動的に結合条件を作成します。この結合条件はアソシエーションの 条件マッピング と同じになります。
結合ビューにビューを追加する際、Administration Tool では、ビューのアソシエーションに基づいて、追加可能なビューが提案されるようになりました。この提案は [Associated views] ラベルの横に表示され、ビューをクリックするだけでビューを自動的に追加できます。
単純な結合条件を定義する方法は以下のとおりです。
Administration Tool を使用する場合、一方のビューのフィールドをもう一方のビューのフィールドにドラッグしてください。この結合条件で使用する演算子を構成するには、両方のフィールドを結合する矢印をダブルクリックして、演算子を選択します。複雑な結合条件を追加するには [Join Conditions] タブを使用します。
Design Studio を使用する場合、まずリンクボタン (ソースビューの右上) をクリックし、ターゲットビューにドラッグしてください。ビューを接続してからリンクをクリックすると、[Model] タブの下部にダイアログが開き、両方のビューのフィールドが表示されます。このダイアログ上で左右のビューのフィールドをリンクしてください。ソースビューとターゲットビューは、結合の左ビューと右ビューにそれぞれ対応します。
Design Studio を使用した、
internet_inc
とphone_inc
の接続¶交差結合を定義するには、ビューをダイアログにドラッグするだけですみます。フィールドはリンクしないでください。
ビューの [Model] タブで、「ビューパラメータ」を追加できます。ビューパラメータの説明と、これを使用するために必要なルールについては、「 派生ビューのパラメータ 」を参照してください。
Join Conditions: 結合方法と結合条件を定義できます。
結合方法を構成します。そのためには、結合に使用する名前の間にある
アイコンをクリックします。以下のオプションが用意されています。
Join type: [Inner]、[Left outer]、[Right outer]、および [Full]。
Execution method: [Hash]、[Merge]、[Nested]、および [Nested parallel]。[Nested Parallel] を選択した場合は、並列サブクエリの最大数 ([Nested parallel number]) を指定する必要があります。[Any] オプションを選択すると、最適な結合方法が Virtual DataPort サーバーで選択されます。
Order in which the input views are considered: [Ordered] を選択した場合、結合の左側のビューが 1 番目のビューと見なされます。
簡潔な型 (int、long など) のフィールドと複合型のサブフィールドの間で結合条件を定義する場合、複合型のサブフィールドを結合条件の左辺に配置する必要があります。
たとえば、以下の 2 つのビューの結合ビューを作成するとします。
view_a
:int
型のf1
フィールドがあります。view_b
:array
型のf2
フィールドがあります。このarray
にはint
型のf2_a
とf2_b
の 2 つのサブフィールドがあります。
f1 = f2_b
とする結合条件は... JOIN ... ON (f2).f2_b = f1
と定義する必要があります。つまり、配列のサブフィールドを結合条件の左辺に配置します。
注釈
これらの設定がクエリのパフォーマンスに大きく影響することがあります。詳細については、「 結合操作の最適化 」を参照してください。
[Model] タブで追加した結合条件をクリックして編集します。
[Add new condition] をクリックして新しい結合条件を定義し、[Add cross join] をクリックして 2 つのビューの間で交差結合を定義します。
簡単なシナリオであれば、[Model] タブで結合条件と交差結合をグラフィカルに定義できます。しかし、複雑な状況では、[Join Conditions] タブでこれらを定義する必要があります。
デフォルトでは、[New Join Condition] ダイアログで追加する条件は、条件を構成するすべてのフィールドが記述された最も内側の結合に追加されます。
複雑な結合では、新しい条件が属する結合の指定が必要になることがあります。そのためには、[New Join Condition] ダイアログで一番下のチェックボックスをチェックして、ターゲット結合で使用するビューを選択します。
[Model] タブでは、2 つのビューの交差結合の結果と別のビューとの間で結合を指定することはできません。たとえば、次のような結合は不可能です。
(view_a CROSS JOIN view_b) INNER JOIN view_c ON view_a.field1 = view_c.fieldA
注釈
Design Studio で 2 つのビューの交差結合の結果と別のビューとの間で結合を定義するには、以下の手順に従います。
view_a
ビューとview_b
ビューを接続します (結合条件は追加しないでください)。view_a
とview_c
を接続します。view_a.field1
フィールドをview_c.fieldA
フィールドに接続することによって、条件を追加します。
Design Studio では、[Add cross join] ボタンを使用できません。
このビューを作成するには、以下の手順に従います。
3 つのビューを [Model] タブにドラッグします。
[Join Conditions] タブで [Add cross join] をクリックし、
view_a
とview_b
を選択して [Ok] をクリックします。[Add join condition] をクリックし、条件として「
view_a.field1 = view_c.fieldA
」と入力します。次に、ダイアログの一番下のチェックボックスをチェックします。[Left subview] リストで(view_a CROSS JOIN view_b)
を選択し、[Right subview] でview_c
を選択します。
~
演算子の意味については、「 相似性演算子を使用する結合条件 」を参照してください。注釈
交差結合ビューの作成で必要な作業は、ビューを [Model] タブにドラッグすることだけです。[Model] タブ、[Join] タブ、[Where conditions] タブのいずれでも結合条件を定義しないでください。
注釈
「ビューパラメータ」であるフィールドを結合条件に使用しないでください。
Where Conditions: ビューの定義に WHERE 条件を追加できます。
Group By: ビューに GROUP BY 属性を追加できます。
Output: ビューの出力を構成できます。具体的には、ビューとそのフィールドの名前の変更、派生属性の追加、ビューのプライマリキーの定義などができます。
Metadata: 新しいビューの格納先フォルダと説明を定義できます。
[Where Conditions]、[Group By]、[Output]、および [Metadata] の各タブの動作は [Union view] ダイアログの場合と同じです。使用方法の詳細については、「 和結合ビューの作成 」を参照してください。

incidents と average_monthly_sales との結合ビューの作成 ([Model] タブ)¶
このマニュアルの例では、以下の手順に従います。
[File] メニュー > [New] で [Join] をクリックします。
incidents
ビューとaverage_monthly_sales
ビューを [Model] タブにドラッグします。一方のテーブルにあるフィールド名
taxId
を、もう一方のテーブルのフィールド名taxId
にドラッグして、結合条件incidents.taxId=average_monthly_sales.taxId
を追加します。[Output] タブで以下の手順に従います。
ビューの名前を
incidents_sales
に変更します。incidents.taxId
フィールドを選択して [Remove selected] をクリックし、このフィールドを削除します。
つづいて、[Save] () をクリックしてビューを作成すると、新しいビューのスキーマが表示されます。

incidents_sales 結合ビューのスキーマ¶
相似性演算子を使用する結合条件¶
Virtual DataPort は、相似性演算子を使用した結合条件をサポートしています。この演算子は、特定のアルゴリズムを使用してオペランド間の相似性を推定し、 0
から 1
の範囲の値を返します。パラメータとして、比較するオペランドのほかに、使用する相似性アルゴリズムおよび 最小相似性しきい値 を受け取ります。オペランド間の類似性がこのしきい値を超えると、条件は true と評価されます。それ以外の場合は false です。
演算子 ~ (Alt-126) は、 text
型オペランド間の類似性を評価します。2 つのテキスト間に存在する編集上の相違度に基づく相似性アルゴリズムとして、以下が用意されています。
ScaledLevenshtein
JaroWinkler
Jaro
Level2Jaro
MongeElkan
Level2MongeElkan
また、以下に示す、2 つのテキストに使用されている単語の出現頻度に基づくアルゴリズムも用意されています。
TFIDF
Jaccard
UnsmoothedJS
上記以外に、これらのアルゴリズムを組み合わせた、 JaroWinklerTFIDF
もあります。
アルゴリズムを指定していない場合は、適用するアルゴリズムが Virtual DataPort によって選択されます。その場合は、類似性のしきい値のみを指定します。
例: ここでは、顧客を taxId
ではなく、名前で特定している状況について考えます。この場合は、incidents データベースの顧客名が Web サービス sales の顧客名と正確には一致していないという問題があります。したがって、等価演算子による結合操作では適切な結果が得られません。類似性演算子を使用した結合によって、この問題に対処できます。
Denodo Platform に付属するインシデントの例を使用して、この状況を再現できます。2 つのリレーショナルテーブルとして internet_inc_cname
と phone_inc_cname
が用意されています。これらのテーブルは、この例で使用している internet_inc
テーブルと phone_inc
テーブルに似ていますが、顧客を特定する属性として、どちらにも taxId
属性ではなく、顧客の名前を示す customer_name
属性があります。Web サービス sales にも、すべての顧客の名前と月間収益で構成する複合データエレメントを返す GetAverageMonthlyRevenueCName
操作があります。この例で発生する問題を解決するには、以下の手順に従います。
internet_inc_cname
とphone_inc_cname
の各テーブルから JDBC の基本ビューを作成します (「 JDBC データソースからの基本ビューの作成 」を参照)。Web サービス sales を開いて
GetAverageMonthlyRevenueCName
操作の横にある [Create base view] をクリックし、[Do not stream output] を選択します。[Ok] をクリックして新しいビューのスキーマを確認し、[Save] をクリックしてそのビューを作成します。internet_inc_cname
とphone_inc_cname
から作成したそれぞれの基本ビューを結合します (「 結合ビューの作成 」を参照)。GetAverageMonthlyRevenueCName
操作から作成したビューによって返された複合データエレメントを「フラット化」します。「フラット化」プロセスの詳細については、「 フラット化ビューの作成 」を参照してください。手順 3 で得られたビューと手順 4 で得られたビューとの間で、
customer_name
フィールドを使用した結合ビューを定義します。結合演算子として ~ 演算子を指定し、類似性しきい値を 0.7 に設定します。注釈
現在、Design Studio では簡易なエディターを使用できません。構文
join_incidents_cname.customer_name ~ (flatten_revenue_cname.cname,0.7)
を使用して、結合の類似性条件を手動で設定する必要があります。この演算子に類似性アルゴリズムを指定するには、アルゴリズムの名前を一重引用符で囲んで 3 番目のパラメータとして追加します。たとえば、join_incidents_cname.customer_name ~ (flatten_revenue_cname.cname,0.7,'Jaro')
とします。手順 5 で得られたビューを実行します。入力ビューどうしで顧客名が正確には一致していないにもかかわらず、正しい結合が得られます。