SQL ELTの最適化 Microsoft SQL Serverソースからデータの読み取りを行って、データを変換し、ターゲットにデータの書き込みを行う場合に、SQL ELTの最適化 を設定して、トランスフォーメーションロジックをソースまたはターゲットデータベースシステムにプッシュすることができます。ソースとターゲットのデータベースが同じである場合は、完全なSQL ELTの最適化 を設定するとパフォーマンスを向上させることができます。
SQL ELTの最適化 の適用時に、Secure Agentはトランスフォーメーションロジックをデータベースにプッシュします。Secure AgentはトランスフォーメーションロジックをSQLクエリに変換し、そのSQLクエリをデータベースに送信します。トランスフォーメーションを処理するSQLクエリはデータベースで実行されます。
SQL ELTの最適化 により、データベースでのトランスフォーメーションロジックの処理がSecure Agentよりも高速になるため、マッピングのパフォーマンスが向上します。また、Secure Agentではデータベースから読み取るデータ量も少なくなります。
Secure Agentがデータベースにプッシュするトランスフォーメーションロジックの量は、データベース、トランスフォーメーションロジック、およびマッピング 設定によって決まります。Secure Agentでは、データベースにプッシュできないすべてのトランスフォーメーションロジックが処理されます。
SQL ELTの最適化 をマッピングに設定すると、Secure Agentは、ソースからターゲットまで、またはソースデータベースにプッシュできないダウンストリームトランスフォーメーションに達するまで、最適化されたマッピングの分析を行います。Secure Agentでは、トランスフォーメーションロジックがプッシュダウンされたソースごとにSELECT文を生成して実行します。次に、Secure AgentはこのSQLクエリの結果を読み込み、マッピングの残りのトランスフォーメーションを処理します。
詳細モードのマッピングに対して SQL ELTの最適化 を設定することはできません。
Secure Agentは、次のトランスフォーメーションロジックをMicrosoft SQL ServerソースまたはMicrosoft SQL Serverターゲット にプッシュできます。
トランスフォーメーション
サポートされているSQL ELTの最適化 のタイプ
Aggregator
ソース、完全
Expression
ソース、完全
フィルタ
ソース、完全
Joiner
ソース、完全
Sorter
ソース、完全
Union
ソース、完全
Router
完全
完全なSQL ELTの最適化 完全なSQL ELTの最適化 の適用時に、Secure Agentはマッピングのすべてのトランスフォーメーションロジックをターゲットデータベースにプッシュします。[SQL ELTの最適化] セクションで完全な SQL ELTの最適化 を設定できます。
完全なSQL ELTの最適化 は、ソースとターゲットが同じ接続にある場合に適しています。例えば、マッピングにMicrosoft SQL ServerソースとMicrosoft SQL Serverターゲットが含まれている場合は、完全なSQL ELTの最適化 を設定して、すべてのトランスフォーメーションロジックをMicrosoft SQL ServerソースデータベースからMicrosoft SQL Serverターゲットデータベースにプッシュします。
ソースSQL ELTの最適化 ソースSQL ELTの最適化 の適用時に、Secure Agentは、ソースからターゲットまで、またはソースデータベースにプッシュできないダウンストリームトランスフォーメーションに達するまで、最適化されたマッピングの分析を行います。
Secure Agentでは、データベースにプッシュできるトランスフォーメーションごとのトランスフォーメーションロジックに基づいて、SELECT文が生成、実行されます。次に、Secure AgentではこのSQLクエリの結果が読み込まれ、残りのトランスフォーメーションが処理されます。
ソースとターゲットが異なるデータベースに存在している場合は、SQL ELTの最適化 を使用するようにマッピングを設定できます。例えば、マッピングにMicrosoft SQL ServerソースとOracleターゲットが含まれている場合は、ソースSQL ELTの最適化 を設定して、処理する一部のトランスフォーメーションロジックをMicrosoft SQL Serverソースにプッシュすることができます。
SQL ELTの最適化 の関数SQL ELTの最適化 を使用した場合、Secure Agentはデータベース内の同等の関数を特定することで、トランスフォーメーションの式を変換します。データベースに対応する関数が存在しない場合、Secure Agentはトランスフォーメーションロジックを処理します。
次の表に、Microsoft SQL Serverで使用できるSQL ELTの最適化 の関数とそのサマリを示します。
関数
SQL ELTの最適化 のタイプ
ABS()
ソース、完全
ADD_TO_DATE()
完全
ASCII() 1
完全
AVG()
ソース、完全
CEIL() 1
完全
CHR()
完全
CONCAT() 1
完全
COS()
ソース、完全
COSH()
完全
COUNT()
ソース、完全
DATE_COMPARE()
ソース、完全
DATE_DIFF()2
完全
DECODE()
ソース、完全
EXP()
ソース、完全
FIRST()
完全
FLOOR() 1
完全
GET_DATE_PART()
完全
IIF()
ソース、完全
IN()
ソース、完全
INSTR()
完全
IS_DATE()2
完全
IS_NUMBER()2
完全
ISNULL()
ソース、完全
LAST_DAY()2
完全
LENGTH() 1
完全
LN()
完全
LOG()
完全
LOWER()
ソース、完全
LPAD()2
完全
LTRIM() 1
完全
MAX()
ソース、完全
MIN()
ソース、完全
MD5() 2
ソース、完全
MOD() 1
完全
POWER()
ソース、完全
REPLACECHR()2
完全
REPLACESTR()2
完全
ROUND(NUMBER)
完全
RTRIM() 1
完全
SIGN()
完全
SIN()
ソース、完全
SINH()
完全
SOUNDEX()
完全
SQRT()
ソース、完全
STDDEV()
完全
SUBSTR()
完全
SUM()
ソース、完全
SYSTIMESTAMP() 1
完全
TAN()
ソース、完全
TANH()
完全
TO_BIGINT
完全
TO_CHAR(DATE) 1
完全
TO_CHAR(NUMBER) 1
完全
TO_DATE()
完全
TO_DECIMAL()
完全
TO_FLOAT()
完全
TO_INTEGER()
完全
TO_NUMBER()
完全
TRUNC(NUMBER)
完全
UPPER()
ソース、完全
VARIANCE()
完全
1 ソースSQL ELTの最適化 で有効になっているマッピングの式トランスフォーメーションにも適用されます。
2 式トランスフォーメーションにのみ適用されます。
SQL ELTの最適化 の変数SQL ELTの最適化 を使用した場合、Secure Agentはデータベース内の同等の変数を特定することで、トランスフォーメーションの式を変換します。データベースに対応する変数が存在しない場合、Secure Agentはトランスフォーメーションロジックを処理します。
次の表に、Microsoft SQL Serverで使用できるSQL ELTの最適化 の変数とそのサマリを示します。
変数
SQL ELTの最適化 のタイプ
SESSSTARTTIME
完全
SYSDATE
完全
SQL ELTの最適化 の設定マッピングを最適化するには、マッピングをタスクに追加してから、マッピング タスクでSQL ELTの最適化 を設定します。
1 マッピング タスクの [ランタイムオプション] タブで、 [SQL ELTの最適化] セクションに移動します。
2 [SQL ELTの最適化] リストから、必要な SQL ELTの最適化 のタイプを選択します。
クロススキーマSQL ELTの最適化 マッピング タスクでクロススキーマSQL ELTの最適化 を使用し、同じデータベース内にある異なるスキーマに関連付けられたMicrosoft SQL Serverオブジェクトに対してデータの読み取りと書き込みを行うことができます。
クロススキーマSQL ELTの最適化 を使用するには、2つのMicrosoft SQL Server接続を作成し、それぞれの接続にスキーマを指定します。ソース接続のスキーマとターゲット接続のスキーマがそれぞれ異なり、両方のスキーマが同じデータベースに属している必要があります。マッピング タスクにSQL ELTの最適化 を設定する場合は、詳細セッションプロパティでクロススキーマSQL ELTの最適化 を有効にします。デフォルトでは、このチェックボックスはオンです。
クロススキーマSQL ELTの最適化 の設定 Microsoft SQL Serverマッピング タスクのクロススキーマSQL ELTの最適化 を設定するには、次の手順を実行します。
1 次の2つのMicrosoft SQL Server接続を作成し、それぞれに異なるスキーマを定義します。
a sqlsv_1 Microsoft SQL Server接続を作成し、接続プロパティで CQA_SCHEMA1 スキーマを指定します。 b sqlsv_2 Microsoft SQL Server接続を作成し、接続プロパティで CQA_SCHEMA2 スキーマを指定します。 2 Microsoft SQL Serverマッピング m_sqlsv_pdo_acrossSchema を作成します。以下のタスクを実行します。
a CQA_SCHEMA1 を使用してデータを読み取るには、ソーストランスフォーメーションを追加し、Microsoft SQL Serverソースオブジェクトと接続 sqlsv1 を含めます。 b CQA_SCHEMA2 を使用してデータを書き込むには、ターゲットトランスフォーメーションを追加し、Microsoft SQL Serverターゲットオブジェクトと接続 sqlsv2 を含めます。 3 Microsoft SQL Server マッピング タスクを作成し、次のタスクを実行します。
a 設定したMicrosoft SQL Serverマッピング m_sqlsv_pdo_acrossSchema を選択します。 b [ランタイムオプション] タブの [SQL ELTの最適化] セクションで、 SQL ELTの最適化 の値を [完全] に設定します。 c [詳細セッションプロパティ] セクションで、 [クロススキーマSQL ELTの最適化の有効化] チェックボックスを選択します。 d タスクを保存し、 [終了] をクリックします。 マッピング タスクを実行すると、Secure Agentは、CQA_SCHEMA1 スキーマに関連付けられたMicrosoft SQL Serverソースオブジェクトからデータを読み取り、CQA_SCHEMA2 スキーマに関連付けられたMicrosoft SQL Serverターゲットオブジェクトにデータを書き込みます。
SQL ELTの最適化 に関するルールとガイドラインMicrosoft SQL Serverマッピングに対してSQL ELTの最適化 を設定する場合は、次のようなルールとガイドラインを考慮してください。
• データベースにトランスフォーメーションロジックをプッシュする場合は、クエリを高速処理するための十分なリソースをデータベースに確保してください。そうしないと、パフォーマンスが低下することがあります。• 次のトランスフォーメーションまたはマッピングの条件がtrueである場合、Secure Agentはデータベースにプッシュしないでロジックを処理します。- トランスフォーメーションに変数ポートが含まれている。- トランスフォーメーションは、マッピングのソータトランスフォーメーション、共有体トランスフォーメーション、またはターゲットではありません。- トランスフォーメーションがソータトランスフォーメーションまたは共有体トランスフォーメーションからのダウンストリームにある、または識別ソートが含まれています。- 入力ポートまたは出力ポートのデフォルト値を上書きする、設定済みのマッピング タスク。- トランスフォーメーション内の式で使用する等価演算子、変数または関数が、データベース内にない。- マッピングに含まれているブランチが多すぎる。Secure Agentは、64個を超える2方向へのブランチ、43個の3方向へのブランチ、または32個の4方向へのブランチが含まれるマッピングのSQLクエリを生成することはできません。ブランチ数がこれらの制限を超えている場合、統合サービスではダウンストリームトランスフォーメーションが処理されます。- 行エラーをログに記録するマッピング タスク。Microsoft SQL Serverマッピングに対して完全なSQL ELTの最適化 を設定する場合は、次のようなルールとガイドラインを考慮してください。
• 複数の引数を含むLTRIM()、RTRIM()、またはMOD()関数をプッシュすることはできません。• MOD()関数をMicrosoft SQL Serverデータベースにプッシュするには、渡す引数が整数の日付型である必要があります。• INSTR()関数をプッシュする場合、定義できるのはstring、search_value、およびstart引数のみです。完全なSQL ELTの最適化 が有効になっているMicrosoft SQL Serverマッピングで式トランスフォーメーションを使用する場合は、次のようなルールとガイドラインを考慮してください。
• TextまたはNtextデータ型を含むIS_DATE()関数をプッシュすると、IS_DATE()関数は0を返します。• IS_DATE()関数とIS_NUMBER()関数をプッシュし、引数の値にNULLが含まれている場合、関数は0を返します。• REPLACECHR()またはREPLACESTR()関数の戻り値を、大文字と小文字を区別して取得することはできません。• ncharデータ型を含むMD5()関数をプッシュすると、この関数は、SQL ELTの最適化 を使用せずに実行されているマッピングとは異なる値をncharデータ型に返します。• MD5()関数をプッシュしたときにncharデータ型とcharデータ型で同じ戻り値を取得するには、マッピングタスクにConvertToVarcharForMD5InPDO=Yes プロパティを入力します。• second_string 引数を含むLPAD()関数をプッシュすると、関数は2番目の文字列を左から右にトランケートします。たとえば、LPAD('Infa',9,'RELATIONAL CONNECTIVITY')という式の場合、関数は次の値を返します: IVITYInfa
• date1引数およびdate2引数を含むDATE_DIFF()関数をプッシュすると、この関数は、SQL ELTの最適化 を使用せずに実行されているマッピングとは異なる次の値を返します。- date1の値がdate2の値よりも後である場合、この関数は負の数を返します。- date1の値がdate2の値よりも前である場合、この関数は正の数値を返します。