データソース構成プロパティ¶
注釈
Design Studio の機能では、データソースの「ソース構成」の設定を一部しか変更できません。今後の Denodo Platform の更新プログラムによって Design Studio の機能が拡張される予定ですが、それまでは Administration Tool と同じ機能にとどまります。
現時点で Design Studio から変更できる設定は以下のとおりです。
JDBC データソースと ODBC データソース: Allow literal as parameter 、 Block size 、 Multi block read count 。
さらに、 汎用 アダプターを使用する JDBC データソースでは次の設定を変更できます: Delegate scalar functions list 、 Delegate aggregate functions list 、 Delegate operators list 。
データソース構成プロパティ (ソース構成 とも呼びます) では、サポート対象の操作など、基盤となるソースの特定の特性を指定します。最適化上の理由から、データソースの機能を知ることは重要です。それによって、できる限り多くの処理を Virtual DataPort からデータソースに委任し、応答時間の最適化とネットワークを流れるトラフィックの最小限化を実現できるからです。
注釈
多くの場合、ユーザー側でこれらの設定を編集する必要はありません。広く使用されているデータソースに対しては、Virtual DataPort によって自動的に適切な構成が使用されるからです。
各データソースのプロパティを構成するには、データソースを開いて [Edit]、[Source configuration*] の順にクリックします。
各プロパティにはデフォルト値があります (その値の横に [(default)] と表示されています)。デフォルト値はデータベースによって異なり、各ソースの機能を反映しています。
構成可能なプロパティを以下に示します。
Allow FOR UPDATE clause: yes の場合は、
SELECT... FOR UPDATE
句がソースでサポートされています。Allow literal as parameter: yes の場合、このソースを使用することで、ビューを実行するために作成された準備済みステートメントのパラメータとしてリテラルを指定できることを示します。 no の場合、Virtual DataPort サーバー側でリテラルを使用してクエリを生成します。
Delegate all operators: yes の場合、このソースを使用することで、すべての演算子を委任できることを示します。
Delegate array literal: yes の場合、このソースを使用することで、配列の複合定数を委任できることを示します。
Delegate compound field projection: yes の場合、このソースを使用することで、複合フィールドに対する投影を委任できることを示します。
Delegate compound indexed field projection: yes の場合、このソースを使用することで、複合フィールドに対する配列インデックスを含む投影を委任できることを示します。
Delegate EXTENDED UNION ALL: yes の場合、異なるスキーマを持つテーブル間の UNION ALL の委任がソースでサポートされています。
Delegate FETCH clause: yes の場合、クエリの
FETCH
句をソースに委任できます。Delegate FETCH as LIMIT clause: yes の場合、クエリの
FETCH
句がLIMIT
句としてソースに委任されます。Delegate OFFSET clause: yes の場合、クエリの
OFFSET
句をソースに委任できます。Delegate OFFSET clause restriction: クエリでの
OFFSET
句の使用に対して、このデータベースに何らかの制限があるかどうかを示します。このプロパティで指定できる値は以下のとおりです。
NONE: データベースには
OFFSET
に関して何も制限がありません。FETCH: クエリで
FETCH
も使用している場合にのみ、データベースでOFFSET
がサポートされます。ORDER_BY: クエリで
ORDER_BY
も使用している場合にのみ、データベースでOFFSET
がサポートされます。FETCH_ORDER_BY: クエリで
FETCH
句とORDER_BY
句も使用している場合にのみ、データベースでOFFSET
がサポートされます。NO_ORDER_BY: クエリで
ORDER_BY
を使用していない場合にのみ、データベースでOFFSET
がサポートされます。FETCH_NO_ORDER_BY: クエリで
FETCH
も使用していて、ORDER_BY
を使用していない場合にのみ、データベースでOFFSET
がサポートされます。
このデータベースへのクエリの委任を伴うクエリを実行したときに、これらの制限に抵触する場合、
OFFSET
句はデータベースに委任されず、実行エンジン自身で実行されます。Delegate OFFSET clause を no に設定している場合、このプロパティは無視されます。
Delegate GROUP BY clause: yes の場合、このソースを使用することで、
GROUP BY
句を委任できることを示します。Delegate HAVING clause: yes の場合、クエリの
HAVING
句をソースに委任できることを示します。Delegate INNER JOIN: yes の場合、
INNER JOIN
演算子をソースに委任できることを示します。Delegate INTERSECT: yes の場合、
INTERSECT
演算子をソースに委任できることを示します。Delegate invalid number literals as NULL: yes の場合、ソースに委任された条件のオペランドの型に互換性があることが Virtual DataPort サーバーで確認されます。
たとえば、ビュー
V1
にint
型のf1
フィールドがあり、ソースではこのフィールドの型がNUMERIC
であるとします。このプロパティが no の場合、クエリ
SELECT * FROM v1 where f1 = '4c'
はソースに委任されますが、失敗すると考えられます。このプロパティが yes であれば、
f1
と'4c'
に互換性がないことが Virtual DataPort サーバーで検出され、代わりにNULL
を使用してSELECT * FROM v1 where f1 = NULL
が委任されます。この拡張機能は、
=
、<>
、<
、>
、<=
、>=
、in
、およびbetween
の各演算子を使用した条件でのみ機能します。Delegate JOIN: yes の場合、
JOIN
演算子をソースに委任できることを示します。Delegate left function: yes の場合、関数を使用して左辺に記述した条件をソースに委任できることを示します。
Delegate left literal: yes の場合、定数を使用して左辺に記述した条件をソースに委任できることを示します。
Delegate literal expression: yes の場合、リテラル式をソースに委任できることを示します。
Delegate MINUS: yes の場合、
MINUS
演算子をソースに委任できることを示します。Delegate mixed aggregate expression: yes の場合、スカラー関数、リテラル、およびフィールドを使用した集計式をデータベースに委任できることを示します。no の場合、集計関数にはフィールドのみを使用でき、式は使用できません。
Delegate natural OUTER JOIN: yes の場合、自然結合の
OUTER JOIN
演算子をソースに委任できることを示します。Delegate NOT condition: yes の場合、
NOT
条件をソースに委任できることを示します。Delegate OR condition: yes の場合、
OR
条件をソースに委任できることを示します。Delegate ORDER BY: yes の場合、
ORDER BY
句をソースに委任できることを示します。Delegate projection: yes の場合、投影をソースに委任できることを示します。
Delegate register literal: yes の場合、レジスター定数をソースに委任できることを示します。
Delegate right field: yes の場合、フィールドを使用して右辺に記述した条件をソースに委任できることを示します。
Delegate right function: yes の場合、関数を使用して右辺に記述した条件をソースに委任できることを示します。
Delegate IN operator when includes non-literal arguments: yes の場合 (デフォルト)、演算子の右側にリテラル以外の引数 (関数、フィールド名など) がある場合に、IN 演算子を委任できることを示します。
Delegate right literal: yes の場合、定数を使用して右辺に記述した条件をソースに委任できることを示します。
Delegate SELECT DISTINCT: yes の場合、
SELECT
句のDISTINCT
修飾子をソースに委任できることを示します。Delegate SELECT subquery: yes の場合、このソースを使用することで、
SELECT
句のサブクエリを委任できることを示します。Delegate selection: yes の場合、条件をソースに委任できることを示します。
Delegate subquery: yes の場合、サブクエリがあるクエリをソースで処理できることを示します。
Delegate UNION: yes の場合、このソースを使用することで、
UNION
演算子を委任できることを示します。Delegate UNION ALL: yes の場合、UNION ALL クエリの委任がソースでサポートされています。
Delegate UNION DISTINCT: yes の場合、ANSI UNION クエリの委任がソースでサポートされています。
Delegate WHERE subquery: yes の場合、このソースを使用することで、
WHERE
句のサブクエリを委任できることを示します。Nested join optimization syntax: ビューの中でネスト結合の右辺にあるデータがこのデータソースから取得される場合に、このプロパティは、データベースに委任されるクエリの特性を部分的に制御します。詳細については、「 ネスト結合 」を参照してください。
Supports modifier in aggregate function: yes の場合、集計関数の
DISTINCT
/ALL
修飾子がソースでサポートされていることを示します。Supports batch inserts: yes の場合、
INSERT
リクエストのバッチ単位による処理がデータベースでサポートされていることを示します。Virtual DataPort では、他のデータソースから目的のデータソースにデータを移動する際にバッチ単位で行が挿入されます。データ移動の詳細については、「 クエリの自動簡素化 」を参照してください。このプロパティは、このデータソースに送信される
INSERT
リクエストには影響しません。それらのリクエストはバッチ単位では実行されないからです。Supports branch OUTER JOIN: yes の場合、
LEFT OUTER JOIN
とRIGHT OUTER JOIN
がソースでサポートされていることを示します。Supports CLOBs in batch inserts: yes の場合、
CLOB
型の値を使用したINSERT
リクエストのバッチ単位処理がデータベースでサポートされていることを示します。no の場合、
CLOB
型の値を使用した複数のINSERT
リクエストは、1 つの同じトランザクションで 1 つずつ実行されます。Virtual DataPort では、他のデータソースから目的のデータソースにデータを移動する際にバッチ単位で行が挿入されます。データ移動の詳細については、「 クエリの自動簡素化 」を参照してください。このプロパティは、このデータソースに送信される
INSERT
リクエストには影響しません。それらのリクエストはバッチ単位では実行されないからです。[Supports batch inserts] が no の場合、このプロパティは無視されます。
Supports comparisons between different data types: yes の場合、データ型が異なる式間の比較を委任します。
Supports Eq OUTER JOIN: yes の場合、
OUTER JOIN
演算子をソースに委任できることを示します。Supports explicit CROSS JOIN: yes の場合、明示的な
CROSS JOIN
演算子をソースに委任できることを示します。Supports GROUP BY literals as parameters: yes の場合、このソースを使用することで、クエリを実行するために作成された準備済みステートメントのパラメータとして
GROUP BY
句のリテラルを指定できることを示します。 no の場合、Virtual DataPort サーバーではリテラルを使用してクエリが生成されます。Supports ORDER BY expressions: yes の場合、
ORDER BY
句に式を使用したクエリの実行がこのデータベースでサポートされています。Supports functions with only literal parameters: yes の場合、関数のすべての引数がリテラルの場合のみ、その関数を委任します。
Supports right deep n-joins: yes の場合、ソースに委任されるクエリで、すべての ON 条件を末尾に記述した右多段ネスト結合を使用できます。 no の場合、このクエリには、クライアントから Virtual DataPort に送信されるクエリのネスト結合ごとにサブクエリがあります。
Supports full Eq OUTER JOIN: yes の場合、このソースを使用することで、完全等価な
OUTER JOIN
演算子を委任できることを示します。Supports full NotEq OUTER JOIN: yes の場合、完全非等価な
OUTER JOIN
演算子を委任できることを示します。Supports fusing in USING and natural JOIN: yes の場合、自然結合の
JOIN
を実行するか、USING
句を使用したJOIN
を実行すると、ソースでは同じフィールドがマージされることを示します。Supports JOIN ON condition: yes の場合、
JOIN...ON
句をソースに委任できることを示します。Supports natural JOIN: yes の場合、自然結合の
JOIN
句をソースに委任できることを示します。Supports USING JOIN: yes の場合、
USING JOIN
句をソースに委任できることを示します。後述の「例 1」を参照してください。Supports binary ORDER BY collation: yes の場合、ソースでは、バイナリ照合順序を使用して
ORDER BY
操作が実行されます。詳細については、「 ソース構成の ORDER BY 関連プロパティ 」を参照してください。Supports parenthesis in n-joins: yes の場合、委任されたネスト結合が括弧でグループ化されます。
Supports PreparedStatement (汎用 アダプターを使用するデータソースでのみ使用可能): yes の場合、データソースでは、準備済みステートメントを使用してクエリが実行されます。 no の場合、データソースでは、通常のステートメントを使用してクエリが実行されます。管理ツールでこのプロパティを no に設定すると、 Allow literal as parameter プロパティは自動的に no に設定されます。通常のステートメントはパラメータ化できないからです。デフォルト値は yes です。
Supports ORDER BY collation modifier:
yes
の場合、クエリでの照合順序修飾子の指定がソースによってサポートされます。詳細については、「 ソース構成の ORDER BY 関連プロパティ 」を参照してください。Delegate binary ORDER BY collation
Delegate aggregate functions list: 委任できる集計関数のリスト。
Delegate analytic functions list: 委任できる分析関数のリスト。
Delegate scalar functions list: 委任できるスカラー関数のリスト。
Delegate operators list: 委任できる演算子のリスト。デフォルトのリストには、
=
、<>
、<
、<=
、>
、>=
、between
、exists
、in
、is false
、is null
、is not null
、is true
、like
、およびnotin
の各演算子が記述されています。Block size: 1 回のランダム I/O 操作でデータソースが読み書きするデータ量を示します。
Multi block read count: 1 回の I/O 操作でデータベースが読み込む連続ブロック数を示します。
Block size と Multi block read count の各パラメータの値は、コストベースの最適化で使用されます。これらのパラメータの詳細と使用方法については、「 データソースの I/O パラメータ 」を参照してください。
ソース構成の ORDER BY 関連プロパティ¶
「text」型フィールドに対する Virtual DataPort の ORDER BY 操作では、「バイナリ」照合順序を使用して結果セットのテキスト値が比較され、並べ替えられます。バイナリ照合順序では、各文字の Unicode 値を使用して文字列が比較されます。
マージ結合を実行できるように Virtual DataPort によって ORDER BY がデータベースにプッシュダウンされた場合、データベースでも同様にバイナリ照合順序を使用して ORDER BY を実行する必要があります。その理由は、バイナリ照合順序で行が並べ替えられていることが実行エンジンで想定されているからです。別の照合順序で並べ替えると、text 型のフィールドが関係する結合条件で、正しい結果が得られないことがあります。
Delegate ORDER BY collation modifier と Delegate binary ORDER BY collation の各プロパティは、Virtual DataPort から ORDER BY 句をどのようにデータベースにプッシュダウンするかを制御します。
注釈
ここでは、以下のプロパティが Virtual DataPort の動作に及ぼす影響について説明します。ただし、それらのデフォルト値の変更が必要になることは ほとんどありません 。
Supports binary ORDER BY collation: text 型のフィールドに対して ORDER BY を実行する場合、以下の条件のいずれかが成立するデータベースに対して、このプロパティのデフォルト値は yes です。
デフォルトでバイナリ照合順序を使用してデータが並べ替えられる。
強制的にバイナリ照合順序を使用して ORDER BY を実行できる。
text 型フィールドを指定した条件による結合を実行エンジンで実行する方法の選択では、クエリで指定したすべてのソースの Supports binary ORDER BY collation プロパティが yes であれば、実行エンジンではマージが使用されます。その場合は、データベースにプッシュダウンするクエリに、実行エンジンによって
ORDER BY
句が追加されます。クエリで指定したデータソースの少なくとも 1 つで Supports binary ORDER BY collation プロパティが no であれば、結合の実行にはマージが選択されません。マージを選択した場合は、バイナリ照合順序で並べ替えられたデータをデータベースから Virtual DataPort に取得する必要があるからです。
このプロパティのデフォルト値が no の場合は、それを yes に設定しないでください。デフォルト値が no の場合、そのソースでは、バイナリ照合順序を使用してデータを並べ替えることができません。
Delegate ORDER BY collation modifier: yes の場合、照合順序修飾子を付加した
ORDER BY
句がプッシュダウンされます。 no の場合は、修飾子が付加されずにプッシュダウンされます。たとえば、デフォルトでは、
NLSSORT
修飾子を付加したORDER BY <field of type text>
句が Oracle にプッシュダウンされます。以下に例を示します。SELECT ... FROM ... ORDER BY NLSSORT( <field of type text>, 'NLS_SORT = binary') ASC
このプロパティが no の場合、この修飾子が付加されずに
ORDER BY
がプッシュダウンされます。以下に例を示します。SELECT ... FROM ... ORDER BY column1 ASC, column2 ASC
このプロパティのデフォルト値が yes の場合、それを no に設定すると、このソースからデータを取得するマージ結合によって正しくない結果が得られることが考えられます。マージ結合のアルゴリズムでは、入力データがバイナリ照合順序を使用して並べ替えられていることを想定しているからです。
このプロパティを no に設定するのは、照合順序修飾子を使用するとクエリのパフォーマンス低下が見られ、さらにこのプロパティが yes の場合に Virtual DataPort での照合順序で得られるデータの並べ替えが、データベースでの照合順序でも同様に得られる場合に限られます。
このプロパティのデフォルト値が no の場合、それを yes に設定しないでください。デフォルト値が no の場合、そのソースではバイナリ照合順序を使用してデータを並べ替えることができません。
Delegate binary ORDER BY collation: このプロパティにデフォルト値が存在する JDBC データソースの場合、このプロパティを変更できます。ただし、各アダプターに設定されているデフォルトの照合ではバイナリ照合順序が実行されるので、それは変更しないようにします。
このプロパティにデフォルト値が存在しない場合、このプロパティに値を設定しても何の効果もありません。
これら 3 つのプロパティのデフォルト値は、JDBC データソースのデータベースアダプターによって異なります。
これらのプロパティは、text 型フィールドの ORDER BY
を設定したクエリにのみ影響します。他の型の値で並べ替える場合、これらのプロパティは重要ではありません。 long
や int
など、text 型以外の値の並べ替えには互いに異なる方法は存在しないからです。