トランスフォーメーション > SQLトランスフォーメーション > SQLトランスフォーメーションの設定
  

SQLトランスフォーメーションの設定

SQLトランスフォーメーションを設定するには、[プロパティ]パネルを使用します。トランザクションを設定する際に、トランスフォーメーションの名前と説明を指定し、フィールドとフィールドマッピングを設定して、トランスフォーメーションが処理するSQLのタイプを指定します。トランスフォーメーションの詳細プロパティも設定します。
次の図は、トアドプロシージャを処理するように設定されたSQLトランスフォーメーションの[プロパティ]パネルを示します。
[プロパティ]パネルで、Oracle接続が選択され、SQLタイプが「ストアドプロシージャ」に設定され、データベースから「SALARY_INCREMENT_DOUBLE」という名前のストアドプロシージャが選択されています。
[プロパティ]パネルの次のタブを使用して、トランスフォーメーションを設定します。
全般
SQLトランスフォーメーション名とオプションの説明を設定します。
受信フィールド
トランスフォーメーションに含めるデータを決定するフィールドルールを定義します。
接続されていないSQLトランスフォーメーションには適用されません。
SQL
データベース接続と、トランスフォーメーションが処理するSQLのタイプ(ストアドプロシージャ、ストアド関数、またはクエリ)を定義します。
トランスフォーメーションがストアドプロシージャ、ストアド関数、または保存済みクエリを処理するように設定した場合は、このタブでストアドプロシージャ、ストアド関数、または保存済みクエリを選択します。
ストアドプロシージャを処理するようにトランスフォーメーションを設定する場合は、接続されていないトランスフォーメーションとしてトランスフォーメーションを実行できます。
トランスフォーメーションがユーザー入力クエリを処理するように設定すると、このタブにSQLエディタが表示されます。SQLエディタにクエリを入力します。
入力フィールド
ストアドプロシージャを処理するトランスフォーメーションの場合に、ストアドプロシージャの入力フィールドを表示します。
フィールドマッピング
ストアドプロシージャおよびストアド関数に対して、選択したストアドプロシージャまたはストアド関数の入力フィールドに受信フィールドをマップする方法を指定します。
クエリまたは接続されていないSQLトランスフォーメーションのフィールドマッピングは設定しません。
出力フィールド
ストアドプロシージャ、ストアド関数、および保存済みクエリの場合、SQLトランスフォーメーションの出力フィールドのプレビューが表示されます。ユーザー入力クエリの場合は、データベースから取得するカラムの出力フィールドを設定します。
クエリの場合、出力フィールドには、SQLErrorフィールド、オプションのNumRowsAffectedフィールド、およびオプションのパススルーフィールドが含まれます。
詳細
トランスフォーメーションの詳細プロパティを定義します。詳細プロパティは、トランスフォーメーションが処理するSQLのタイプによって異なります。
注: フィールド名の競合は、アップストリームトランスフォーメーションで解決する必要があります。SQLトランスフォーメーションでフィールド名の競合解決ルールを使用することはできません。

SQLタイプの設定

SQLトランスフォーメーションの[SQL]タブで、ストアドプロシージャ、ストアド関数、保存済みクエリ、またはユーザー入力クエリを処理するようにSQLトランスフォーメーションを設定できます。
トランスフォーメーションを設定する手順は、トランスフォーメーションが処理するSQLのタイプによって異なります。

ストアドプロシージャまたはストアド関数の選択

SQLトランスフォーメーションの[SQL]タブで、ストアドプロシージャまたはストアド関数を処理するようにSQLトランスフォーメーションを設定できます。
    1SQLトランスフォーメーションの[プロパティ]パネルで[SQL]タブをクリックします。
    次の画像は、SQLタイプが[ストアドプロシージャ]に設定されている[SQL]タブを示しています。
    SQLトランスフォーメーションの[SQL]タブに、デフォルトで[接続]、[SQLタイプ]、[ストアドプロシージャ]、および[接続されていないストアドプロシージャ]フィールドが表示されています。また、このタブには、接続プロパティの表示、新しい接続の作成、新しい接続パラメータの作成、およびストアドプロシージャの選択を行うためのボタンも表示されています。
    2データベースへの接続を選択します。
    接続を選択するか、パラメータを使用することができます。
    注: 接続をパラメータ化する場合は、ストアドプロシージャまたはストアド関数を選択した後にパラメータを作成します。
    3[SQLタイプ][ストアドプロシージャ]または[ストアド関数]に設定します。
    4[選択]をクリックしてデータベースからストアドプロシージャまたはストアド関数を選択するか、呼び出すストアドプロシージャまたはストアド関数の正確な名前を入力します。
    ストアドプロシージャ名とストアド関数名では大文字と小文字が区別されます。
    注: マッピングを開いているときに新しいストアドプロシージャをデータベースに追加すると、新しいストアドプロシージャは使用可能なストアドプロシージャのリストに表示されません。リストを更新するには、マッピングを閉じて再度開きます。
    5トランスフォーメーションによってストアドプロシージャを処理し、未接続モードでトランスフォーメーションを実行する場合は、[未接続のストアドプロシージャ]を選択します。
    注: このオプションを利用できないコネクタタイプもあります。詳細については、該当するコネクタのヘルプを参照してください。
    6接続をパラメータ化する場合は、[新しいパラメータ]をクリックし、接続パラメータの詳細を入力します。

保存済みクエリの選択

SQLトランスフォーメーションの[SQL]タブで、保存済みクエリを処理するようにSQLトランスフォーメーションを設定できます。
    1SQLトランスフォーメーションの[プロパティ]パネルで[SQL]タブをクリックします。
    2データベースへの接続を選択します。
    接続を選択するか、パラメータを使用することができます。
    3SQLタイプを[SQLクエリ]に設定します。
    4クエリタイプを[保存済みクエリ]に設定します。
    5[選択]をクリックして、データ統合アセットのリストから保存済みクエリを選択します。

クエリの入力

SQLトランスフォーメーションの[SQL]タブで、ユーザー入力クエリを処理するようにSQLトランスフォーメーションを設定できます。オプションとして、クエリをパラメータ化できます。クエリをパラメータ化する場合は、マッピングタスクに完全なクエリを入力します。
    1SQLトランスフォーメーションの[プロパティ]パネルで[SQL]タブをクリックします。
    2データベースへの接続を選択するか、パラメータを使用します。
    3SQLタイプを[SQLクエリ]に設定します。
    4クエリタイプを[入力済みクエリ]に設定します。
    5クエリをパラメータ化しない場合は、クエリエディタでクエリを入力します。
    受信フィールドが[フィールド]タブにリストされます。フィールドをクエリに追加するには、フィールドを選択して[追加]をクリックします。
    SQLを書式設定して、構文を検証することができます。
    注: 構文検証では、一般的なSQL構文チェックを実行しますが、データベースに対してSQLを確認しません。検証では、SQLがデータベースに対して有効であっても、構文エラーを返すことがあります。この場合でも、マッピングを保存して実行できます。
    クエリの設定後に受信フィールドを更新する場合は、[SQL]タブで変更内容を更新します。
    6クエリをパラメータ化する場合は、次の手順を実行します。
    1. a[パラメータ]タブを開いて、新しい文字列パラメータを作成します。
    2. bパラメータを選択して[追加]をクリックすることによって、パラメータをクエリエディタに追加します。
    3. パラメータをクエリエディタに追加すると、データ統合では、そのパラメータがドル記号文字($)で囲まれます。
      SQLの書式設定またはクエリの検証は行わないでください。

SQLトランスフォーメーションのフィールドマッピング

ストアドプロシージャまたはストアド関数でアップストリームトランスフォーメーションからのデータを使用する方法を定義するには、SQLトランスフォーメーションでフィールドマッピングを設定します。トランスフォーメーションがクエリを処理する場合、フィールドマッピングは設定しません。
[プロパティ]パネルの[フィールドマッピング]タブでフィールドマッピングを設定します。
次のフィールドマッピングオプションを設定できます。
フィールドマップオプション
SQLトランスフォーメーションにフィールドをマッピングする方法。次のいずれかのオプションを選択します。
フィールドの表示
[受信フィールド]リストに表示されるフィールドを制御します。すべてのフィールド、マッピングされていないフィールド、またはマッピングされたフィールドを表示します。
自動マップ
フィールドを一致する名前とリンクします。一致するフィールドをリンクした後、他のフィールドマッピングを手動で設定できます。
次の方法でフィールドをマッピングできます。
[正確なフィールド名]と[スマートマップ]を同じフィールドマッピングで使用できます。例えば、[正確なフィールド名]を使用して同じ名前のフィールドを照合してから、[スマートマップ]を使用して類似した名前のフィールドをマッピングできます。
[オートマップ] > [オートマップを元に戻す]をクリックして、自動マッピングされたすべてのフィールドマッピングを元に戻すことができます。単一フィールドのマッピングを解除するには、マップ解除するフィールドを選択して、[アクション] > [マップ解除]をクリックします。
データ統合で、新しくマッピングされたフィールドが強調表示されます。例えば、[正確なフィールド名]を使用すると、データ統合では、マッピングされたフィールドが強調表示されます。[スマートマップ]を使用すると、データ統合では、スマートマップを使用してマッピングされたフィールドのみが強調表示されます。
アクションメニュー
追加フィールドリンクオプション。次のオプションが用意されています。
表示
フィールド名を[ストアドプロシージャの入力フィールド]リストに表示する方法を決定します。技術フィールド名またはラベルを使用します。

SQLトランスフォーメーションの出力フィールド

SQLトランスフォーメーションの出力フィールドは、[プロパティ]パネルの[出力フィールド]タブに表示されます。Mapping Designerには、出力フィールドについて、名前、型、精度、スケール、基点が表示されます。
[出力フィールド]タブ上の情報は、SQLタイプによって異なります。

ストアドプロシージャおよびストアド関数の出力フィールド

SQLトランスフォーメーションがストアドプロシージャまたはストアド関数を処理する場合は、出力フィールドにデータベースの出力パラメータが含まれます。トランスフォーメーション出力フィールドを編集することはできません。出力フィールドをデータフローから除外したり、出力フィールドの名前を変更したりしてから、出力フィールドをダウンストリームトランスフォーメーションに渡す場合は、ダウンストリームトランスフォーメーション用にフィールドルールを設定します。

クエリの出力フィールド

SQLトランスフォーメーションがクエリを処理する場合は、出力フィールドに次のフィールドが含まれます。
取得したカラムフィールド
SQLクエリにSELECT文が含まれる場合、トランスフォーメーションによって、取得したデータベース行ごとに1行が返されます。
ユーザー入力クエリの場合は、SELECT文のカラムごとに出力フィールドを設定する必要があります。出力フィールドは、SELECT文のカラムと同じ順序である必要があります。
保存済みクエリの場合は、データ統合によって出力フィールドが作成されます。
SQLErrorフィールド
データ統合は、接続エラーまたは構文エラーを検出した場合に行エラーをSQLErrorフィールドに返します。SQLエラーが発生しなかった場合は、NULLをSQLErrorフィールドに返します。
例えば、次のSQLクエリでは、EmployeesテーブルにProduct_IDが含まれない場合、Oracleデータベースから行エラーが生成されます。
SELECT Product_ID FROM Employees
データ統合は、1行を生成します。SQLErrorフィールドには、次の1行のエラーテキストが含まれます。
ORA-0094: “Product_ID”: invalid identifier Database driver error... Function Name: Execute SQL Stmt: SELECT Product_ID from Employees Oracle Fatal Error
クエリーに複数の文が含まれ、SQLエラー時でも処理を継続するようにSQLトランスフォーメーションを設定した場合、SQLトランスフォーメーションでは、1つのクエリー文に対してデータベースから行が返されますが、別のクエリー文に対してデータベースエラーが返されることがあります。データベースエラーは、SQLトランスフォーメーションによって別の行に返されます。
NumRowsAffectedフィールド
NumRowsAffected出力フィールドを有効にすると、各入力行に指定されたINSERT、UPDATE、またはDELETEクエリ文の影響を受けた行の数を返すことができます。データ統合は、クエリ内の各文にNumRowsAffectedを返します。NumRowsAffectedはデフォルトでは無効になっています。
NumRowsAffectedを有効にし、SQLクエリにINSERT、UPDATE、またはDELETE文が含まれない場合、各出力行のNumRowsAffectedはゼロになります。
次の表に、NumRowsAffectedを有効にした場合にSQLトランスフォーメーションによって生成される出力行を示します。
クエリー文
出力行
UPDATE、INSERT、DELETEのみ
文ごとにその文のNumRowsAffectedが含まれる1行。
1つ以上のSELECT文
取得されたデータベース行の合計数。
各行のNumRowsAffectedはゼロです。
CREATE、DROP、TRUNCATEなどのDDLクエリー
ゼロのNumRowsAffectedが含まれる1行。
クエリに複数の文が含まれる場合、データ統合は、文ごとにNumRowsAffectedを返します。NumRowsAffectedには、入力行に指定されたINSERT、UPDATE、DELETEの各文の影響を受ける行の合計が含まれます。
たとえば、クエリに以下の文が含まれているとします。
DELETE from Employees WHERE Employee_ID = ‘101’;
SELECT Employee_ID, LastName from Employees WHERE Employee_ID = ‘103’;
INSERT into Employees (Employee_ID, LastName, Address)VALUES (‘102’, 'Gein', '38 Beach Rd')
DELETE文は、1行に影響を与えます。SELECT文は、どの行にも影響を与えません。INSERT文は、1行に影響を与えます。
データ統合は、DELETE文から1行を返します。NumRowsAffectedは1になります。SELECT文から1行返しますが、NumRowsAffectedはゼロです。INSERT文から1行返し、NumRowsAffectedは1になります。
パススルーフィールド
受信フィールドをパススルーフィールドとして定義して、SQLトランスフォーメーション経由でデータを渡します。SQLトランスフォーメーションは、SQLクエリが行を返すかどうかにかかわらず、パススルーフィールドからデータを返します。
ソース行にSELECT文が含まれている場合、SQLトランスフォーメーションは、データベースから返される行ごとにパススルーフィールドにデータを返します。クエリ結果に複数の行が含まれている場合、SQLトランスフォーメーションは、各行にパススルーフィールドのデータの生成を繰り返します。
クエリによって行が返されない場合、SQLトランスフォーメーションは、NULL値を含むパススルーカラムデータを出力フィールドに返します。例えば、INSERT文、UPDATE文、およびDELETE文を含むクエリは行を返しません。クエリでエラーが発生した場合、SQLトランスフォーメーションは、パススルーカラムデータ、SQLErrorメッセージ、およびNULL値を出力フィールドに返します。
パススルーフィールドを定義するには、パススルーフィールドの領域で[追加]をクリックし、SQLトランスフォーメーションのパススルーを行うフィールドを選択します。受信フィールドをパススルーフィールドとして設定した場合、データ統合によって、パススルーフィールド領域にサフィックス「_output」が付いたフィールドが追加されます。
フィールドをパススルーフィールドとして設定してからソースのフィールド名を変更した場合、データ統合ではパススルーフィールド名が更新されないため、データはフィールドを通過しません。SQLトランスフォーメーションで古いパススルーフィールドを削除し、更新された受信フィールドをパススルーフィールドとして設定します。

詳細プロパティ

[詳細]タブでSQLトランスフォーメーションの詳細プロパティを設定します。詳細プロパティは、トランスフォーメーションがストアドプロシージャまたはストアド関数を処理するか、クエリを処理するかによって異なります。

ストアドプロシージャまたはストアド関数の詳細プロパティ

次の表に、トランスフォーメーションがストアドプロシージャまたはストアド関数を処理する場合の詳細プロパティを示します。
プロパティ
説明
トレースレベル
データ統合がセッションログに書き込むエラーおよびステータスメッセージの詳細レベル。[簡易]、[通常]、[詳細 - 初期化]、[詳細 - データ]から選択できます。デフォルトは[通常]です。
サブ秒の精度
日時フィールドのサブ秒の精度。日時データの位取りを編集できるデータベースでは、精度を変更できます。
SQL ELTの最適化を有効にすると、データベースはサブ秒の精度の設定に関係なく、完全な日時値を返します。
0から9までの正の整数値を入力します。デフォルトは6マイクロ秒です。
ストアドプロシージャタイプ
接続されていないトランスフォーメーションの場合に、ストアドプロシージャが実行されるタイミングを決定します。
次のいずれかのオプションを選択します。
  • - ターゲットロード前。ターゲットがロードされる前に実行されます。
  • - ターゲットロード後。ターゲットがロードされた後に実行されます。
  • - ノーマル。行単位で実行されます。
  • - ソースロード前。マッピングがソースからデータを受信する前に実行されます。
  • - ソースロード後。マッピングがソースからデータを受信した後に実行されます。
注: SQLトランスフォーメーションがマップレットの一部である場合、ストアドプロシージャのタイプは常に[通常]です。
Call Text
ストアドプロシージャタイプが[ターゲットロード前]、[ターゲットロード後]、[ソースロード前]、または[ソースロード後]である接続されていないトランスフォーメーションの場合に、ストアドプロシージャの呼び出しテキストを入力します。
呼び出しテキストは、ストアドプロシージャ名に続けて、かっこ内に入力パラメータを指定します。入力パラメータがない場合は、かっこのみを含める必要があります。SQL文のEXECを含めたり、:SPキーワードを使用したりしないでください。
呼び出しテキストは、[通常]ストアドプロシージャタイプには適用されません。

クエリの詳細プロパティ

次の表に、トランスフォーメーションが保存済みクエリまたはユーザー入力クエリを処理する場合の詳細プロパティを示します。
プロパティ
説明
動作
トランスフォーメーション動作。アクティブまたはパッシブ。
アクティブの場合、トランスフォーメーションは、それぞれの入力行に対して複数の出力行を生成できます。パッシブの場合、トランスフォーメーションは、それぞれの入力行に対して1つの出力行を生成します。
デフォルトはアクティブです。
行内のSQLエラー時でも処理を継続する
SQLエラーの発生後、クエリ内の残りのSQL文の処理を継続します。
文内のSQLエラーを無視するには、このオプションを有効にします。データ統合は行の残りのSQL文の実行を続行します。SQLトランスフォーメーションは行エラーを生成しませんが、SQLErrorフィールドに、失敗したSQL文およびエラーメッセージが記載されます。
ヒント: データベースエラーをデバッグするには、このオプションを無効にします。このオプションを無効にしない場合、エラーと発生元のクエリー文を関連付けることができないことがあります。
デフォルトでは無効になっています。
自動コミット
各データベース接続に対する自動コミットを有効にします。
クエリ内の各SQL文によってトランザクションが定義されます。SQL文が完了するか、次の文が実行されると、コミットが実行されます。
デフォルトでは無効になっています。
最大出力行数
SQLトランスフォーメーションでSELECTクエリから出力できる最大行数。
行数を無制限に設定するには、このプロパティをゼロに設定します。デフォルトは600です。
トレースレベル
データ統合がセッションログに書き込むエラーおよびステータスメッセージの詳細レベル。[簡易]、[通常]、[詳細 - 初期化]、[詳細 - データ]から選択できます。デフォルトは[通常]です。
トランスフォーメーション範囲
データ統合が受信データに対してトランスフォーメーションロジックを適用する方法。
次のいずれかのオプションを選択します。
  • - 行。トランスフォーメーションロジックを、データの1つの行ごとに適用します。トランスフォーメーションの結果がデータの単一の行に依存する場合は、[行]を選択してください。
  • - Transaction。トランスフォーメーションロジックをトランザクションのすべての行に適用します。データの行が同一トランザクション内のすべての行に依存し、他のトランザクションの行には依存していない場合には、[Transaction]を選択します。
  • - すべての入力。トランスフォーメーションロジックをすべての入力データに適用します。[すべての入力]を選択すると、データ統合は受信トランザクションの境界を削除します。データの行がソース内のすべての行に依存している場合は、[すべての入力]を選択します。
デフォルトは[行]です。