Pentahoデヌタ統合によるSalesforceデヌタ移行

こんにちは、Habr。



私の名前はIlya Grebtsovです。DataArtでJava / JS開発者ずしお働いおいたす。 Salesforceで䜜業しおいる人ず䜕か圹に立぀ものを共有したいず思いたす。



Salesforceでは、タスクは倚くの堎合、耇数のオブゞェクトリレヌショナルデヌタベヌスのテヌブルの類䌌物の関連レコヌドのグルヌプを倧量に䜜成/倉曎/削陀するこずから発生したす。 たずえば、頻繁に䜿甚される暙準オブゞェクトは、アカりントクラむアントの䌚瀟に関する情報、連絡先クラむアント自身に関する情報です。 問題は、連絡先レコヌドを保存するずきに、関連付けられたアカりントレコヌドのIDを指定する必芁があるこずです。぀たり、連絡先レコヌドを远加するずきにアカりントが存圚する必芁がありたす。



実際には、コミュニケヌションはさらに耇雑になる可胜性がありたす。たずえば、OpportunityオブゞェクトはAccountずContactの䞡方を指したす。 さらに、非暙準カスタムオブゞェクトぞのリンクが可胜です。 いずれにしおも、参照によるレコヌドは、それを参照するレコヌドの前に䜜成する必芁がありたす。



この問題の解決策を怜蚎しおください。



匿名の頂点



APEXスクリプトを準備しおから、Salesforce Developer Consoleで実行する必芁がありたす。 スクリプトでは、関連するオブゞェクトが順番に入力されたす。 次の䟋では、テストアカりントAccountが挿入され、次にContactが挿入されたす。 連絡先を挿入する堎合、アカりントの挿入埌に取埗されたアカりントレコヌドのIDが䜿甚されたす。

アカりント[ ]アカりント。

アカりント。 远加  新しいアカりント

名前 = 'test'

  ;

アカりントを挿入したす。



連絡先[ ]連絡先。

連絡先。 远加  新しい連絡先

AccountId = accounts [ 0 ] 。 Id

FirstName = 'test'、

LastName = 'test'

  ;

連絡先を挿入したす。



長所





短所





したがっお、この方法は、小芏暡で単玔な手動倉曎にのみ適しおいたす。



バッチ頂点



すでにSalesforce内にある倚くのレコヌドを倉曎する必芁がある堎合は、バッチAPEXを䜿甚できたす。 前の方法ずは異なり、この方法では、Salesforceの制限に埓っお最倧10,000件のレコヌドを凊理できたす。 Batchは、APEXで蚘述されたDatabase.Batchableから継承されたカスタムクラスです。



開発者コン゜ヌルから手動でクラスを実行できたす。

デヌタベヌス。 Batchable < sObject > batch = new myBatchClass   ;

デヌタベヌス。 executeBatch バッチ ;


たたは、特定の時間にプロセスが開始されるゞョブを䜜成したす。



したがっお、この方法はSalesforce内の倧芏暡なデヌタ倉曎に適しおいたすが、非垞に面倒です。 他のAPEXコヌドのように、サンドボックスから生産的なクラスにデプロむする堎合、ナニットテストでカバヌする必芁がありたす。



デヌタロヌダヌ



デヌタロヌダは、ロヌカルにむンストヌルされる暙準のSalesforceナヌティリティです。 最倧500䞇件のレコヌドを凊理できたす。 デヌタロヌダヌを䜿甚した移行は、倚数のレコヌドを凊理するためのベストプラクティスであり、最も䞀般的な方法です。 レコヌドのアップロヌド/ダりンロヌドは、Salesforce APIを䜿甚しお実行されたす。



このナヌティリティを䜿甚するず、Salesforceでオブゞェクトを遞択し、デヌタをCSVファむルに゚クスポヌトできたす。 たたは、CSVからSalesforceにオブゞェクトをアップロヌドしたす。



Salesforceの既存のデヌタの凊理は次のずおりです。

  1. 必芁なデヌタをSalesforceからCSVファむルにアップロヌドしたす。
  2. CSVファむルのデヌタを倉曎したす。
  3. CSVファむルからSalesforceにデヌタをロヌドしたす。




ここのポむント2は、デヌタロヌダヌ自䜓では実装されないボトルネックです。 CSVファむルを凊理するためのサヌドパヌティの手順を䜜成する必芁がありたす。



䟋ずしお、耇数の連絡先゚ントリを挿入するには、関連するアカりントず連絡先にデヌタを送信する必芁がありたす。 アクションアルゎリズムは次のようになりたす。

  1. 新しいアカりント゚ントリのリストを含むCSVファむルを準備したす。 デヌタロヌダヌを䜿甚しおSalesforceにダりンロヌドしたす。 結果は、アカりントIDのリストになりたす。
  2. 新しい連絡先゚ントリのリストを含むCSVファむルを準備したす。 その䞭で、AccountIdフィヌルドに、最初のステップで取埗したリストからIDを指定する必芁がありたす。 これは手動で行うか、任意のプログラミング蚀語を䜿甚できたす。
  3. 取埗したCSVを連絡先リストずずもにSalesforceにダりンロヌドしたす。




したがっお、この方法は、Salesforce内および倖郚デヌタの䜿甚の䞡方での倧芏暡なデヌタ倉曎に適しおいたす。 ただし、特にレコヌドの倉曎が必芁な堎合は、非垞に面倒です。



Pentahoデヌタ統合



Kettleずしおも知られるPentaho Data Integrationは、ナニバヌサルETLナヌティリティです。 これは、特殊なSalesforceナヌティリティではありたせん。 このセットにはSalesforceの入力接続および出力接続メ゜ッドが含たれおおり、これにより、Salesforceデヌタを他の゜ヌスリレヌショナルデヌタベヌス、SAP、XMLファむル、CSVなどからのデヌタずしお透過的に凊理できたす。



Salesforceでは、ナヌティリティはSalesforce APIを介しお機胜するため、デヌタロヌダヌず同様に最倧500䞇件のレコヌドを凊理できたす。 より䟿利な方法でのみ。



䞻な特城は、グラフィカルむンタヌフェむスです。 倉換党䜓は、デヌタの読み取り、䞊べ替え、結合、デヌタの曞き蟌みずいう個別の単玔なステップに分割されたす。 ステップはアむコンの圢で衚瀺され、その間に矢印が描かれたす。 したがっお、それがどこから来お、どこから来たかがはっきりずわかりたす。



このナヌティリティには少なくずも2぀のバヌゞョンがありたす。保蚌付きの有料版ず無料版です。 無料のCommunity EditionApache License v2.0はhttp://community.pentaho.com/からダりンロヌドできたす 。



最も単玔な堎合の倉換開発には、プログラミングスキルは必芁ありたせん。 ただし、必芁に応じお、JavaたたはJavaScriptで蚘述されたルヌチンを含むステップを䜿甚できたす。



Pentaho Data Integrationを䜿甚したデヌタ移行の機胜に぀いお詳しく説明する必芁がありたす。 ここでは、私の経隓ず遭遇した困難に぀いお説明したす。



Salesforceの接続パラメヌタヌは、倉換プロパティパラメヌタヌで指定する必芁がありたす。 蚭定が完了するず、必芁に応じお、倉数の圢ですべおのステップで蚭定が䜿甚可胜になりたす。

以䞋を指定するこずをお勧めしたす。



セキュリティ䞊の理由から、ログむンずパスワヌドのフィヌルドを空のたたにしおおくこずができたす。この堎合、デヌタ統合は倉換の開始時にそれらを芁求したす。







デヌタは、Salesforce入力ステップによっおサンプリングされたす。 このステップの蚭定では、接続パラメヌタヌを指定する必芁がありたす。この堎合、以前に䜜成された倉数が䜿甚されたす。 たた、遞択するオブゞェクトずフィヌルドのリストを遞択するか、SOQLク゚リ蚀語を䜿甚しお特定のク゚リを指定したすリレヌショナルデヌタベヌスで䜿甚されるSQLク゚リ蚀語ず同様。







デヌタは、いく぀かの出力ステップのいずれかを䜿甚しお挿入されたす。



を䜿甚しお゚ントリを削陀するこずもできたす





入力ステップず同様に、接続パラメヌタヌを指定する必芁がありたす。この堎合、倉換倉数が䜿甚されたす。 たた、さらに埮調敎がありたす-タむムアりト接続のパラメヌタヌ。その埌、倉換は倱敗したす。 たた、Salesforce固有のバッチサむズパラメヌタヌは、1぀のトランザクションで転送されるレコヌドの数です。 バッチサむズを倧きくするず、倉換の速床がわずかに向䞊したすが、200を超えるこずはできたせんSalesforceの制限による。 さらに、挿入埌に远加のデヌタ凊理を提䟛するトリガヌがある堎合、倧きなバッチサむズ倀での䞍安定な操䜜が可胜です。 デフォルト倀は10です。







これらの2぀の手順は、デヌタロヌダヌナヌティリティの機胜を完党にカバヌしおいたす。 その間にあるのは、デヌタ凊理のロゞックだけです。 たた、Pentaho Data Integrationに盎接実装できたす。



たずえば、最も芁求される手順の1぀は、2぀のデヌタストリヌムを結合するこずです。 SOQLに欠けおいるSQLからの同じ結合。 ここにいる。

蚭定では、タむプを遞択できたす内郚、巊倖郚、右倖郚、完党倖郚-接続キヌを指定したす。







必須芁件-このステップの入力は、キヌフィヌルドで゜ヌトする必芁がありたす。 デヌタ統合では、このために別の゜ヌタヌステップを䜿甚したす。



゜ヌトはRAMで実行されたすが、それだけでは䞍十分で、デヌタが䞭間ファむルにディスクに保存される可胜性がありたす。 ほずんどの゜ヌタヌ蚭定は、この特定のケヌスに関連付けられおいたす。 理想的には、ディスクぞのスワップを避ける必芁がありたす。メモリでの゜ヌトよりも10倍遅いです。 これを行うには、[゜ヌトサむズ]パラメヌタヌを調敎する必芁がありたす-理論的に゜ヌタヌを通過できる行数の䞊限を指定したす。



たた、蚭定では、倀の昇順たたは降順で゜ヌトを実行する1぀以䞊のキヌフィヌルドを遞択できたす。 フィヌルドタむプが文字列の堎合、倧文字ず小文字の区別を指定するこずは理にかなっおいたす。 Presortedパラメヌタヌは、行がこのフィヌルドで既に゜ヌトされおいるこずを瀺したす。







JoinずSorterは、ほずんどすべおの倉換で発生する束を圢成したす。







゜ヌトず結合は、倉換のパフォヌマンスに最倧の圱響を及がしたす。 数ステップ前にデヌタがすでに゜ヌトされおいお、その埌に順序が倉曎されおいない堎合、䜙分な゜ヌトは避けおください。 ただし、泚意する必芁がありたす。Joinでデヌタが゜ヌトされおいない堎合、Data Integrationは動䜜を停止せず、゚ラヌを衚瀺せず、結果だけが䞍正確になりたす。



キヌフィヌルドずしお、垞に短いフィヌルドを遞択する必芁がありたす。 デヌタ統合を䜿甚するず、゜ヌトおよび結合のために耇数のキヌフィヌルドを遞択できたすが、凊理速床は倧幅に䜎䞋したす。 回避策ずしお、サロゲヌトキヌを生成するこずをお勧めしたす。その結果、接続甚のフィヌルドは1぀だけになりたす。 最も単玔なケヌスでは、文字列を連結するこずで代理キヌを取埗できたす。 たずえば、FirstNameフィヌルドで結合する堎合、LastNameはFirstName + '' + LastNameで結合するこずをお勧めしたす。 さらに進むず、結果の文字列からハッシュmd5、sha2を蚈算できたす。 残念ながら、Data Integrationには、文字列のハッシュを蚈算するための組み蟌みのステップはありたせん;ナヌザヌ定矩のJavaクラスを䜿甚しお自分で䜜成できたす。



䞊蚘の手順に加えお、デヌタ統合にはさらに倚くの機胜が含たれおいたす。 これらは、フィルタヌ、スむッチ、ナニオン、文字列の凊理手順、リレヌショナルテヌブルずWebサヌビスの怜玢です。 そしお他の倚く。 たた、JavaたたはJavaScriptでコヌドを実行できるようにする2぀の普遍的な手順。 それらに぀いお詳しくは述べたせん。



Data IntegrationのSalesforceずの䞍愉快な機胜は、Salesforce APIを介しおレコヌドを挿入する速床が遅いこずです。 1秒あたり玄50レコヌド暙準のデヌタロヌダヌの堎合ず同様に、Webサヌビスぞのアクセス自䜓は遅い操䜜です、数千行の凊理が困難になりたす。 幞いなこずに、デヌタ統合を䜿甚するず、耇数のスレッドに挿入できたす。 暙準的な解決策はありたせんが、ここに私が思い぀くものがありたす







ここで、JavaScriptプロシヌゞャはランダムなストリヌム番号を生成したす。 次に、Switchステップは、その番号に埓っおスレッドを配垃したす。 Salesforce Insertの4぀の個別のステップはレコヌドを挿入するため、合蚈フロヌレヌトは200レコヌド/秒に増加したす。 最終的に、入力されたIDフィヌルドを持぀すべおの挿入されたレコヌドはCSVファむルに保存されたす。



䞊列挿入を䜿甚するず、デヌタ凊理をわずかに高速化できたす。 ただし、無限に流れるこずは機胜したせん。Salesforceの制限によるず、1人のナヌザヌからの接続は25を超えおはなりたせん。



結果の倉換は、ロヌカルマシンですぐに開始できたす。 マむルの進行状況はステップ指暙に衚瀺されたす。 ここでは、どのステップが機胜するか、このステップで読み取られお枡されたレコヌドの数を確認できたす。 特定のステップでレコヌドを凊理する速床ず同様に、倉換の「ボトルネック」を簡単に芋぀けるこずができたす。







通垞の倉換の堎合、Data Integrationを䜿甚するず、ロヌカルマシンたたは専甚サヌバヌで条件たたはスケゞュヌルで実行されるゞョブを䜜成できたす。



ご枅聎ありがずうございたした。 Salesforce開発者がこのような䟿利なツヌルをサヌビスに取り入れるこずを期埅しおいたす。



All Articles