ユーザーマニュアル

データソース構成プロパティ

JDBC データソースの ソース構成 は、基礎となるデータベースの機能を表します。つまり、このデータベースがサポートする SQL 操作や関数、サポートする比較演算子などのリストを格納します。実行エンジンはこの情報を使用して、データベースで実行するクエリを作成します。その目的は、応答時間を最適化してネットワーク経由のトラフィックを最小限に抑えるために、可能な限り多くの処理をデータソースにプッシュダウンすることにあります。各 データベースアダプター は、デフォルトの ソース構成 を定義します。デフォルトのソース構成はアダプターごとに異なります。たとえば、Oracle の機能は SQL Server の機能とは異なるためです。

デフォルトのオプションは接続先のデータベースに合わせて調整されるため、データソースのソース構成を変更する必要はほとんどありません。ただし、次のコマンドで変更できます。

ALTER DATASOURCE JDBC "<data source name>"
    SOURCECONFIGURATION (
          [ <source configuration property>
        [ , <source configuration property> ]* ]
    );

このコマンドでは、同じデータベースアダプターを使用するすべてのデータソースのソース構成ではなく、「<data source name>」のソース構成を変更することに注意してください。

以下に例を示します。

ALTER DATASOURCE JDBC ds_jdbc_athena_prod
    SOURCECONFIGURATION (
          SUPPORTSORDERBYEXPRESSION = false
        , DELEGATENATURALOUTERJOIN = false
    );

プロパティのデフォルト値を復元するには、 DEFAULT に設定します。以下に例を示します。

ALTER DATASOURCE JDBC ds_jdbc_athena_prod
    SOURCECONFIGURATION (
        DELEGATEAGGREGATEFUNCTIONS = DEFAULT
    );

以下の表は、JDBC データソースの SOURCECONFIGURATION 句で構成できるプロパティのリストです。

データソースの SOURCECONFIGURATION 句のプロパティ

SOURCECONFIGURATION 句のプロパティ

意味

ALLOWFORUPDATE

Allow for UPDATE clause 。true の場合、実行エンジンは SELECT...FOR UPDATE 句を委任します。

ALLOWLITERALASPARAMETER

Allow literal as parameter 。true の場合、実行エンジンは、ビューを実行するために作成された準備済みステートメントのパラメータとしてリテラルを渡します。

false の場合、リテラルを含むクエリを生成します。

DELEGATEAGGREGATEFUNCTIONS

Delegate aggregate functions list 。実行エンジンがこのデータベースに委任する集計関数のカンマ区切りリスト。

DELEGATEALLOPERATORS

Delegate all operators 。true の場合、実行エンジンがすべての演算子を委任することを示します。

DELEGATEANALYTICFUNCTIONSLIST

Delegate analytic functions list 。実行エンジンがデータベースに委任する分析関数のリスト。

DELEGATEARRAYLITERAL

Delegate array literal 。true の場合、実行エンジンは、必要に応じて配列の複合定数をクエリに含めます。

DELEGATE_BINARY_ORDERBY_COLLATION

Delegate binary ORDER BY collation

DELEGATECOMPOUNDFIELDPROJECTION

Delegate compound field projection 。true の場合、実行エンジンは複合フィールドの投影を委任します。

DELEGATECOMPOUNDINDEXEDFIELDPROJECTION

Delegate compound indexed field projection 。true の場合、実行エンジンは、複合フィールドの配列インデックスを含む投影を委任します。

DELEGATEEXTENDEDUNIONALL

Delegate EXTENDED UNION ALL 。true の場合、実行エンジンは、異なるスキーマを持つテーブル間の演算子 UNION ALL を委任します。

DELEGATEFETCH

Delegate FETCH clause 。true の場合、実行エンジンは FETCH 句をソースに委任します。

DELEGATEGROUPBY

Delegate GROUP BY clause 。true の場合、実行エンジンは GROUP BY 句を委任します。

DELEGATEHAVING

Delegate HAVING clause 。true の場合、実行エンジンはクエリの HAVING 句を委任します。

DELEGATEINFORNONLITERALS

Delegate in operator when includes non -literal arguments 。true の場合、演算子の右側にリテラル以外の引数 (関数、フィールド名など) がある場合に、実行エンジンは IN 演算子を委任します。デフォルト値: true

DELEGATEINNERJOIN

Delegate INNER JOIN 。true の場合、実行エンジンは INNER JOIN 演算子を委任します。

DELEGATEINTERSECTION

Delegate INTERSECT 。true の場合、実行エンジンは INTERSECT 演算子を委任します。

DELEGATEINVALIDNUMBERLITERALSASNULL

Delegate invalid number literals as NULL 。true の場合、実行エンジンは、データベースに委任された条件のオペランドに互換性のある型があるかどうかをチェックします。

たとえば、ビュー V1 に int 型の f1 フィールドがあり、ソースではこのフィールドの型が NUMERIC であるとします。

このプロパティが false の場合、実行エンジンはクエリ SELECT * FROM v1 where f1 = '4c' をデータベースに委任しますが、失敗すると考えられます。

このプロパティが true であれば、 f1 と '4c' に互換性がないことが実行エンジンで検出され、代わりに NULL が以下のように委任されます。SELECT * FROM v1 where f1 = NULL

この拡張機能は、 = 、 <> 、 < 、 > 、 <= 、 >= 、 in 、および between の各演算子を使用した条件でのみ機能します。

DELEGATEJOIN

Delegate JOIN 。true の場合、実行エンジンは JOIN 演算子を委任します。

DELEGATELEFTFUNCTION

Delegate left function 。true の場合、実行エンジンは、条件の左側にある関数を含む条件を委任します。

DELEGATELEFTLITERAL

Delegate left literal 。true の場合、実行エンジンは、条件の左側にある定数を含む条件を委任します。

DELEGATELITERALEXPRESSION

Delegate literal expression 。true の場合、実行エンジンはリテラル式を委任します。

DELEGATEMINUS

Delegate MINUS 。true の場合、実行エンジンは MINUS 演算子を委任します。

DELEGATEMIXEDAGGREGATEEXPRESSION

Delegate mixed literal expression 。true の場合、データベースに委任された集計式には、スカラー関数、リテラル、フィールドを含めることができます。false の場合、集計関数にはフィールドのみが含まれ、式は含まれません。

DELEGATENATURALOUTERJOIN

Delegate natural OUTER JOIN 。true の場合、実行エンジンは、自然結合の OUTER JOIN 演算子を委任します。

DELEGATENOTCONDITION

Delegate NOT condition 。true の場合、実行エンジンは NOT 条件を委任します。

DELEGATEOFFSET

Delegate OFFSET clause 。true の場合、実行エンジンは OR 条件を委任します。

DELEGATE_OFFSET_RESTRICTION

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 に設定している場合、このプロパティは無視されます。

DELEGATEOPERATORSLIST

Delegate operators list 。委任可能な演算子のリスト。

デフォルトのリストには、演算子 = 、 <> 、 < 、 <= 、 > 、 >= 、 between 、 exists 、 in 、 is false 、 is null 、 is not null 、 is true 、 like 、および notin があります。

DELEGATEORCONDITION

Delegate OR condition

DELEGATEORDERBY

Delegate ORDER BY 。true の場合、実行エンジンは ORDER BY 句を委任します。

DELEGATE_ORDERBY_COLLATION_MODIFIER

Delegate ORDER BY collation modifier 。true の場合、実行エンジンは、このデータベースに委任された照合順序修飾子をクエリで指定できます。

詳細については、以下の「 ソース構成の ORDER BY 関連プロパティ 」を参照してください。

DELEGATEPROJECTION

Delegate projection 。true の場合、実行エンジンは投影を委任します。

DELEGATEPROJECTSUBQUERY

Delegate SELECT subquery 。true の場合、実行エンジンは SELECT 句のサブクエリを委任します。

DELEGATEREGISTERLITERAL

Delegate register literal 。true の場合、実行エンジンはレジスター定数を委任します。

DELEGATERIGHTFIELD

Delegate right field 。true の場合、実行エンジンは、条件の右側にあるフィールドを含む条件を委任します。

DELEGATERIGHTFUNCTION

Delegate right function 。true の場合、実行エンジンは、条件の右側にある関数を含む条件を委任します。

DELEGATERIGHTLITERAL

Delegate right literal 。true の場合、実行エンジンは、条件の右側にある定数を含む条件を委任します。

DELEGATESCALARFUNCTIONS

Delegate scalar functions list 。 実行エンジンがデータベースに委任するスカラー関数のリスト。

DELEGATESELECTDISTINCT

Delegate SELECT DISTINCT 。true の場合、実行エンジンは SELECT 句の修飾子 DISTINCT を委任します。

DELEGATESELECTION

Delegate selection 。true の場合、実行エンジンは条件をこのソースに委任します。

DELEGATESUBQUERY

Delegate subquery 。true の場合、実行エンジンはサブクエリを含むクエリを委任します。

DELEGATEUNION

Delegate UNION 。true の場合、実行エンジンは UNION 演算子を委任します。

DELEGATEUNIONALL

Delegate UNION ALL 。true の場合、実行エンジンは UNION ALL 演算子を委任します。

DELEGATEUNIONDISCTINCT

Delegate UNION DISTINCT 。true の場合、実行エンジンは ANSI 演算子 UNION を委任します。

DELEGATEWHERESUBQUERY

Delegate WHERE subquery 。true の場合、実行エンジンは WHERE 句のサブクエリを委任します。

NESTEDJOINWITHBLOCKSSTRATEGY

Nested join optimization syntax 。このプロパティは、ネスト結合の右側のビューのデータがこのデータソースから取得される場合に、実行エンジンがどのようにクエリを委任するかを制御します。詳細については、「 ネスト結合 」のセクションを参照してください。

SUPPORTSAGGREGATEFUNCTIONSOPTIONS

Supports modifier in aggregate function 。true の場合、実行エンジンは、集計関数の修飾子 DISTINCT と ALL を委任します。

SUPPORTSBATCHINSERT

Supports batch inserts 。true の場合、実行エンジンは、別のデータソースからこのデータソースにデータを移動するときに、行をバッチ単位で挿入します。データ移動の詳細については、「 クエリの自動簡素化 」のセクションを参照してください。

このプロパティは、このデータソースへの INSERT リクエストステートメントには影響しません。それらのリクエストはバッチ単位では実行されないからです。

SUPPORTSBRANCHOUTERJOIN

Supports branch OUTER JOIN 。true の場合、実行エンジンは、演算子 LEFT OUTER JOIN および RIGHT OUTER JOIN を委任します。

SUPPORTSCLOBINBATCH

Supports CLOBs in batch inserts 。true の場合、値のいずれかの型が CLOB のときに、実行エンジンは INSERT ステートメントをバッチ単位で実行します。

false の場合、値のいずれかの型が CLOB のときに、 INSERT ステートメントを 1 つずつ同じトランザクション内で実行します。

Virtual DataPort は、他のデータソースからこのデータソースにデータを移動するときに、行をバッチ単位で挿入します。データ移動の詳細については、「 クエリの自動簡素化 」のセクションを参照してください。

このプロパティは、このデータソースに送信される INSERT リクエストには影響しません。それらのリクエストはバッチ単位では実行されないからです。

Supports batch inserts が false の場合、このプロパティは無視されます。

SUPPORTSCOMPARISONDIFFERENTTYPES

Supports comparisons between different data types 。true の場合、実行エンジンは、データ型が異なる式間の比較を委任します。

SUPPORTSEQOUTERJOINOPERATOR

Supports Eq OUTER JOIN 。true の場合、実行エンジンは SQL 演算子 OUTER JOIN を委任します。

SUPPORTSEVALUATELITERALFUNCTIONS

Supports functions with only literal parameters 。true の場合、実行エンジンは、関数のすべての引数がリテラルの場合のみ、その関数を委任します。

SUPPORTSEXPLICITCROSSJOIN

Supports explicit CROSS JOIN 。true の場合、実行エンジンは演算子 CROSS JOIN をこのソースに委任します。

SUPPORTSFULLEQOUTERJOIN

Supports full Eq OUTER JOIN 。 true の場合、実行エンジンは 完全等価な OUTER JOIN 演算子を委任します。

SUPPORTSFULLNOTEQOUTERJOIN

Supports full NotEq OUTER JOIN 。true の場合、実行エンジンは 完全非等価な OUTER JOIN 演算子を委任します。

SUPPORTSFUSINGINUSINGANDNATURALJOIN

Supports fusing in USING and natural JOIN 。 true の場合、自然結合の JOIN を実行するか、 USING 句を使用した JOIN を実行すると、ソースでは同じフィールドがマージされることを示します。

SUPPORTSGROUPBYLITERALASPARAMETER

Supports GROUP BY literals as parameters 。true の場合、実行エンジンは GROUP BY 句のリテラルを、クエリを実行するために作成された準備済みステートメントのパラメータとして委任できます。それ以外の場合、サーバーはリテラルを含むクエリを生成します。

SUPPORTSJOINONCONDITION

Supports JOIN ON Condition 。true の場合、実行エンジンは JOIN...ON 句を委任します。

SUPPORTSJOINPARENTHESIS

Supports parenthesis in n-joins 。true の場合、実行エンジンは、括弧でグループ化されたネスト結合を委任します。

SUPPORTSNATURALJOIN

Supports NATURAL JOIN 。true の場合、実行エンジンは自然結合の JOIN 句を委任します。

SUPPORTS_ORDERBY_BINARY_COLLATION

Supports binary ORDER BY collation 。true の場合、実行エンジンでは、このデータベースがバイナリ照合順序を使用して ORDER BY 操作を実行すると仮定します。詳細については、「 ソース構成の ORDER BY 関連プロパティ 」のセクションを参照してください。

SUPPORTSORDERBYEXPRESSION

Supports ORDER BY expressions 。true の場合、実行エンジンは ORDER BY 句の式を含むクエリを委任します。

SUPPORTSRIGHTDEEPJOIN

Supports right deep n-joins 。true の場合、実行エンジンは、すべての ON 条件を末尾に記述した右多段ネスト結合を含むクエリを委任します。false の場合、クエリには、クライアントから Virtual DataPort に送信されるクエリのネスト結合ごとにサブクエリがあります。

SUPPORTSPREPAREDSTATEMENT

Supports prepared statements (データベースアダプター Generic を使用する JDBC データソースでのみ使用可能)。true の場合、実行エンジンは、準備済みステートメントを使用してクエリを実行します。

false の場合、通常のステートメントでクエリを実行します。

デフォルト値: true

SUPPORTSUSINGJOIN

Supports USING JOIN 。yes の場合、 USING JOIN 句をソースに委任できることを示します。

ソース構成の 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 の動作に及ぼす影響について説明します。ただし、それらのデフォルト値の変更が必要になることは ほとんどありません 。

  1. Supports binary ORDER BY collation (SUPPORTS_ORDERBY_BINARY_COLLATION): text 型のフィールドに対して ORDER BY を実行する場合、以下の条件のいずれかが成立するデータベースに対して、このプロパティのデフォルト値は yes です。

    1. デフォルトでバイナリ照合順序を使用してデータが並べ替えられる。

    2. 強制的にバイナリ照合順序を使用して ORDER BY を実行できる。

    text 型フィールドを指定した条件による結合を実行エンジンで実行する方法の選択では、クエリで指定したすべてのソースの Supports binary ORDER BY collation プロパティが yes であれば、実行エンジンではマージが使用されます。その場合は、データベースにプッシュダウンするクエリに、実行エンジンによって ORDER BY 句が追加されます。

    クエリで指定したデータソースの少なくとも 1 つで Supports binary ORDER BY collation プロパティが no であれば、結合の実行にはマージが選択されませんマージを選択した場合は、バイナリ照合順序で並べ替えられたデータをデータベースから Virtual DataPort に取得する必要があるからです。

    このプロパティのデフォルト値が no の場合は、それを yes に設定しないでください。デフォルト値が no の場合、そのソースではバイナリ照合順序を使用してデータを並べ替えることができません。

  2. Delegate ORDER BY collation modifier (DELEGATE_ORDERBY_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 の場合、そのソースではバイナリ照合順序を使用してデータを並べ替えることができません。

  3. Delegate binary ORDER BY collation (DELEGATE_BINARY_ORDERBY_COLLATION): このプロパティにデフォルト値が存在する JDBC データソースの場合、このプロパティを変更できます。ただし、各アダプターに設定されているデフォルトの照合ではバイナリ照合順序が実行されるので、それは変更しないようにします。

    このプロパティにデフォルト値が存在しない場合、このプロパティに値を設定しても何の効果もありません。

これら 3 つのプロパティのデフォルト値は、JDBC データソースのデータベースアダプターによって異なります。

これらのプロパティは、text 型フィールドの ORDER BY を設定したクエリにのみ影響します。他の型の値で並べ替える場合、これらのプロパティは重要ではありません。 long や int など、text 型以外の値の並べ替えには互いに異なる方法は存在しないからです。

フィードバックを追加