Skip to main content
Upsert アクションは、CData のデータを更新または挿入します。デフォルトでは、CData にレコードがすでに存在する場合、入力から提供された値を使用してCData 内の既存データに対して更新が実行されます。詳細については、UPSERT クエリの動作を参照してください。
CData コネクタは非推奨です。他のデータベースコネクタとは異なり、Mapping モードをサポートしていないため、Upsert アクションのカラムマッピングには引き続きXML Map コネクタが必要です。

テーブルとカラム

CData コネクタでUpsert を選択する場合は、CData から対象のテーブル(1つまたは複数)を選択する必要があります。Tables ペインの上にあるAdd ボタンをクリックします。 Add ボタンが表示されたUpsert Configuration パネルのTables セクション。 モーダルが表示され、利用可能なすべてのテーブルが一覧表示されます。目的のテーブルを選択してAdd をクリックします。 利用可能なテーブルを一覧表示するAdd Table モーダル。Orders テーブルが選択され、下部にAdd ボタンが表示されている。 選択したテーブルがTables ペインの下に表示され、テーブル内のカラムがColumns ペインの下に表示されます。コネクタは、特別な意味を持つ値(主キーや外部キーなど)を自動的に検出し、それに応じてラベルを付けます。 Orders テーブルが選択されたUpsert Configuration パネル。Columns ペインでId カラムのUPSERT トグルがON に設定され、UPSERT by フィールドがId に設定されている。 デフォルトでは、すべてのカラムがCData コネクタのアクションに含めるように選択されています。個々のカラムを除外するには、チェックを外します。
Add をクリックしてこのプロセスを繰り返すことで、さらにテーブルを選択できます。詳細については、子テーブルを参照してください。

UPSERT クエリの動作

デフォルトでは、カラムマッピングのUPSERT スライダーはON に設定されています。これは、UPSERT マッピングが、レコードを挿入する前(一致するレコードがない場合のINSERT)か、更新する前(レコードがすでに存在する場合のUPDATE)かを判定するために、対象にレコードが存在するかどうかを判断することを意味します。 Id カラムでUPSERT ON トグルがハイライトされたUpsert Configuration パネル。 その値を判定するために使用されるクエリは、以下のセクションで説明するロジックによって決定されます。

UPSERT スライダーをON に設定

スライダーがON に設定されている場合、クエリの動作はUPSERT By およびPerform this query… のラジオボタンで選択した内容に基づいて変化します。

Id によるUPSERT

入力XML にキーカラムが存在する場合、一致するキーを持つレコードが存在するかどうかを判定するために、データベースにクエリが発行されます:
一致した場合は更新が行われ、一致しない場合は挿入が行われます。 入力XML にキーカラムが存在しない場合、レコードは常に挿入されます:

非キーカラムによるUPSERT

選択したUPSERT By カラムに一致する値を含むレコードが存在するかどうかを判定するために、テーブルの主キーを選択することにより、データベースにクエリが発行されます:
SELECT クエリは、SELECT ステートメントにおいて常にテーブルのキーカラムを対象とします。一致が成功した場合、入力XML のデータがデータソースに更新されます。一致しない場合は、代わりにレコードが挿入されます。
選択したUPSERT By カラムが入力で指定されていない場合、次のクエリに示すように、NULL 値でルックアップが使用されます。

カスタムクエリの使用

UPSERT キーを選択するためのカスタムクエリを記述することもできます。このオプションを使用すると、単一のカラムの一致だけでなく、より複雑なロジックを使用してルックアップを実行できます。次のクエリを考えてみましょう:
この例では、UPDATE に適切な条件を提供するために、テーブルのキーカラムを選択する必要があります。@OrderID 構文は、一致する入力XML から値を参照するために使用されます。静的な値を使用することもできます。'Active' を囲む引用符は、この句が静的な値を使用していることを示します。 ここでも、キーカラムの一致が成功すると、更新リクエストの形成に使用されます。一致しない場合は、レコードが挿入されます。
データベースへの挿入の動作について疑問がある場合は、UPSERT 試行の.log ファイルを確認してください。動作を導くために使用されたロジックの完全な内訳がログファイルに送信されます。

UPSERT スライダーをOFF に設定

スライダーがOFF に設定されている場合、コネクタはすべてのクエリを単純にデータベースに挿入します。入力マッピングのコードビューを確認すると、テーブルのaction 属性がinsert になっていることがわかります:
主キーが存在するかどうかにかかわらず、テーブルに発行されるすべてのクエリは挿入として扱われます。受信したすべてのレコードをテーブルに対して更新するには、次のスニペットに示すように、このアクションキーワードをupdate に設定できます:
アクションがupdate として定義されている場合、アプリケーションはテーブルのキーカラム(例えばId)が存在することを期待します。キーカラムが提供されていない場合、UPDATE コマンドの効果は対象のデータベースタイプによって異なる可能性があるため、予想より多くの行が変更されたり、まったく変更されなかったりする場合があります。

Arc フローの例

Upsert で構成されたCData コネクタのテーブルとカラムを選択したら、そのコネクタをArc フローの末尾に配置します。次のスクリーンショットは、File コネクタ、CSV コネクタ、XML Map コネクタ、および末尾のCData Upsert コネクタから成るフローの例を示しています: File_Receive、CSV1、XMLMap1、CData_Upsert の4つのコネクタが順に並んだArc フローの例。 このフローの例では、データは次の手順を通過します:
  1. File コネクタがディスクからCSV ファイルを取得してフローに取り込みます。
  2. CSV1 コネクタがCSV ファイルをXML に変換します。
  3. このデータはSource File としてXML_Map コネクタに渡され、Source ツリーにマッピングされます。
  4. CData_Upsert コネクタからのデータはDestination File としてXML_Map コネクタに渡され、Destination ツリーにマッピングされます。 XML Map コネクタのMapping インターフェース。左側にSource ツリー(source.xml)、右側にDestination ツリー(destination.xml)が表示され、要素間のマッピングはまだ描画されていない。
  5. XML_Map コネクタは、Source 要素を同じ名前のDestination 要素に自動的にマッピングしようとします。これらは手動で変更でき、Source からDestination へ要素をドラッグすることで空のマッピングを補完できます。 XML Map コネクタのMapping インターフェース。Source ツリーの要素がDestination ツリーにマッピングされ、first からfirstName、last からlastName のように曲線で接続されている。
  6. CData_Upsert コネクタは、マッピングに従ってUpsert を実行し、結果のデータをCData に渡します。