Salesforce Data Cloud のデータをPowerShell でMySQL にレプリケーションする方法
CData Cmdlets for SalesforceDataCloud を使えば、PowerShell からSalesforce Data Cloud のデータ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for SalesforceDataCloud およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でSalesforce Data Cloud への接続を行います。レプリケーションは4つのステップがあります。
それでは、Salesforce Data Cloud への認証方法を設定していきましょう。Salesforce Data Cloud では、OAuth 標準による認証をサポートしています。
OAuth 認証
AuthScheme をOAuth に設定してください。
デスクトップアプリケーション
CData 製品では、デスクトップでの認証を簡略化する埋め込みOAuth アプリケーションを提供しています。
また、Salesforce Data Cloud コンソールで設定および登録するカスタムOAuth アプリケーションを介してデスクトップから認証することも可能です。詳しくは、ヘルプドキュメントのカスタムOAuth アプリの作成をご確認ください。
接続する前に、以下のプロパティを設定してください。
- InitiateOAuth:GETANDREFRESH。InitiateOAuth を使用すれば、繰り返しOAuth の交換を行ったり、手動でOAuthAccessToken を設定する必要がなくなります
- OAuthClientId(カスタムアプリケーションのみ):カスタムOAuth アプリケーションの登録時に割り当てられたクライアントID
- OAuthClientSecret(カスタムアプリケーションのみ):カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット
接続すると、CData 製品がデフォルトブラウザでSalesforce Data Cloud のOAuth エンドポイントを開きます。ログインして、アプリケーションにアクセス許可を与えてください。
以下のようにドライバーがOAuth プロセスを完了します。
- コールバックURL からアクセストークンを取得します
- 古いトークンの期限が切れた際は、新しいアクセストークンを取得します
- OAuthSettingsLocation にOAuth 値を保存し、接続間で永続化します
Web アプリケーションやヘッドレスマシンを含むその他のOAuth 認証方法については、ヘルプドキュメントをご確認ください。
Salesforce Data Cloud のデータの取得
-
モジュールのインストール:
Install-Module SalesforceDataCloudCmdlets
-
Salesforce Data Cloud への接続:
$salesforcedatacloud = Connect-SalesforceDataCloud
-
取得ターゲットのリソースの取得:
$data = Select-SalesforceDataCloud -Connection $salesforcedatacloud -Table "Account"
Invoke-SalesforceDataCloud cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-SalesforceDataCloud -Connection $salesforcedatacloud -Query 'SELECT * FROM Account WHERE EmployeeCount = @EmployeeCount' -Params @{'@EmployeeCount'='250'} -
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
Salesforce Data Cloud のデータをMySQL データベースにレプリケーション
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
-
モジュールのインストール:
Install-Module MySQLCmdlets
-
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
-
Salesforce Data Cloud、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Salesforce Data Cloud のリソース(Account)と同じテーブル名を持っている必要があります。
$data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Account" -Columns $columns -Values $values }
次回以降のレプリケーションをシンプルに実現
-
一度PowerShell でSalesforce Data Cloud とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-SalesforceDataCloud -Connection $salesforcedatacloud -Table "Account" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Account" -Columns $columns -Values $values } -
別のPowerShell モジュールで、Salesforce Data Cloud を別のデータベースに複製する場合、Select-SalesforceDataCloud cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}
おわりに
これで、Salesforce Data Cloud のデータをMySQL に複製できました。分析、BI などでSalesforce Data Cloud のデータをMySQL から使うことができるようになります。