UNION 句

演算子 UNION では、2 つのクエリの結果を、両方のクエリのすべての行を収めた 1 つの結果セットに結合します。

SQL 標準のルールでは以下が定義されています。

  • UNION に関与する各クエリの列の数と順序は互いに同じであることが必要です。

  • 各フィールドのデータ型には整合性があることが必要です。

  • UNION では重複行が返されません。重複行があれば削除されます。重複行を維持する場合は UNION ALL を使用する必要があります。

Denodo では、次のように UNION 演算子の動作が SQL 標準とは異なります。

  • クエリのフィールドのアソシエーションは、位置ではなく名前に基づいて実行されます。

  • あるクエリに存在するフィールドが別のクエリに存在しない場合でも、UNION は実行されます。このようなフィールドは結果セットにも追加されます。クエリの行のうち、フィールドが返されない行では、そのフィールドの値は null になります。

  • Denodo の UNION 演算子では重複行が削除されません (UNION ALL の動作と同様)。重複行を削除する場合は DISTINCT 句を追加します。

SQL 標準の Union の有効化

SQL 標準の定義どおりに動作するように、Denodo の UNION 演算子を設定できます。

この機能を有効にする場合は、パフォーマンスに対するその影響を考慮する必要があります。どのデータベースでも Denodo でも、UNION の重複行を削除する処理にはコストを要します。実行エンジンで UNION の結果を評価して重複を検出する必要があり、重複行がすぐには返されないからです。

UNION の各ブランチから返されるすべての行が一意であることがわかっている場合は、代わりに UNION ALL を実行します。UNION ALL の方がクエリを迅速に実行できます。

SQL 標準の定義どおりに動作するように UNION を設定するには以下の手順に従います。

  1. 管理者アカウントで管理ツールにログインします。

  2. VQL シェルを開き、以下のコマンドを実行します。

    SET 'com.denodo.vdb.union.enableStandardSQLUnion' = 'true';
    

    この変更を適用するために Virtual DataPort サーバーを再起動する必要はありません。変更は直ちに適用されます。

    管理ツールは再起動が必要です。それにより、 標準の結合ビューを作成 するウィザードを使用できるようになります。

この機能を有効にすると、 UNION [ DISTINCT ] 操作と UNION ALL 操作は、SQL 標準の定義どおりに動作するようになります。 EXTENDED UNION ALL 演算子を使用することで、拡張結合操作を引き続き使用できます。

下位互換性を維持するために、このオプションを変更する前に作成し、UNION 演算子を使用しているビューも、上記と同様に動作します。

以前の動作に戻すには、以下のコマンドを実行します。

SET 'com.denodo.vdb.union.enableStandardSQLUnion' = 'false';