SalesforceからSalesforceへ外部キーではなくインデックスもされていない項目をキーにデータを移行する方法

概要

SalesforceからSalesforceに移行する際に、新規にキーを作成してよいのであれば、SalesforceからSalesforceへデータを移行する方法 の通りにしてよりシンプルなWorkflowにて移行することが可能です。

上記のように、新規にカラムを作成する場合は、ユニークか外部キーにしてUPSERTのキーの要件を満たすことができますが、しかし、Salesforceの標準項目などですでにある項目ではあとからインデックスを貼れないものがあり、これをキーにしてデータを移行したい場合にこのTipsの方法が必要になってきます。

SalesforceのSobjectである「リード」を、環境1から環境2に移行したい。

環境1のリードには情報がすべてあるが、環境2のリードにはリードのURLしかない。環境2のリードを消さずに、URLが一致するものはその他の会社名を更新し、URLの一致がない環境2に存在しないリードは新規に作成したい。つまり、URLをキーにしてUPSERTを行いたい。

しかし、UPSERTのキーとして必要である外部キーでもインデックスされているキーでもないため、SalesforceからSalesforceへデータを移行する方法 の通りにして移行を行うことができない状態です。

ですが、図の「ID」で記載のある、Salesforce内部で個々のSobjectにユニークである項目を利用して、UPDATEとINSERTを行うことにより、あたかもUPSERTしたように移行を行います。

まず、Salesforce環境1, 2からSourceで読み取り、投影によって必要なカラムのみを選択肢、結合することにより、すでに環境2にあり更新すべきアイテムなのか、あるいは環境2にはなく新規に作成すべきアイテムなのかを判断できるようなテーブルにします。一番右のテーブルが結果であり、IDカラムにデータがある項目(会社A)は、環境2のIDがそのまま入っているため、更新すべきアイテムです。対し、IDにデータがない項目(会社B)は、環境2に存在しないため、これは新規に作成すべきアイテムとなります。

このため、IDがあるもの/ないものをそれぞれフィルタし、それによりSalesforce環境2へ更新/新規にアイテムを変更します。

Workflow図

Source詳細

Salesforce 移行元

移行元の接続情報、Sobjectを指定します。

Salesforce 移行先

移行先の接続情報、Sobjectを指定します。

Transform詳細

投影 DROP Id

移行元のSalesforce内部のIDは必要ないため、DROPします。

投影 KEEP Id, Name

移行先の更新/新規に必要となるIDと、キーとしたい項目(画像であれば、Name 例に上げたものであればURL)のみを残します。

結合(JOIN)

キーとしたいものを条件に当てはめて、移行元を左側にした上で左外部結合します。

SQL Id IS NULL

Idのない、新規作成するべきアイテムだけを抽出します。

SQL Id IS NOT NULL

Idのある、更新するべきアイテムだけを抽出します。

Sink詳細

Salesforce INSERT

正しい対象のSobjectを入力し、新規作成すべきアイテムをINSERTするようにします。

Salesforce UPDATE

正しい対象のSobjectを入力し、更新すべきアイテムをUPDATEするようにします。