Salesforce Data Cloud のデータをPowerShell でMySQL にレプリケーションする方法

PowerShell のシンプルなスクリプトで、Salesforce Data Cloud のデータ をMySQL データベースにレプリケーション(複製)する方法を紹介します。

古川えりか
コンテンツスペシャリスト

最終更新日:2023-09-26

この記事で実現できるSalesforce Data Cloud 連携のシナリオ

こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。

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 は、OAuth 標準による認証をサポートしています。

OAuth

AuthSchemeOAuth に設定します。

デスクトップアプリケーション

CData は、デスクトップでの認証を簡略化する埋め込みOAuth アプリケーションを提供します。

また、Salesforce Data Cloud コンソールで設定および登録するカスタムOAuth アプリケーションを介してデスクトップから認証することもできます。詳しくは、ヘルプドキュメントカスタムOAuth アプリの作成を参照してください。

接続する前に、次のプロパティを設定します。

  • InitiateOAuthGETANDREFRESHInitiateOAuth を使えば、繰り返しOAuth の交換を行ったり、手動でOAuthAccessToken を設定する必要はなくなります。
  • OAuthClientId (カスタムアプリケーションのみ):カスタムOAuth アプリケーションの登録時に割り当てられたクライアントID。
  • OAuthClientSecret (カスタムアプリケーションのみ):カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット。

接続すると、本製品 はデフォルトブラウザでSalesforce Data Cloud のOAuth エンドポイントを開きます。ログインして、アプリケーションにアクセス許可を与えます。

以下のようにドライバーがOAuth プロセスを完了します。

  • コールバックURL からアクセストークンを取得します。
  • 古いトークンの期限が切れたときは、新しいアクセストークンを取得します。
  • OAuthSettingsLocation にOAuth 値を保存し、接続間で永続化します。
  • Web アプリケーションやヘッドレスマシンを含むその他のOAuth メソッドについては、ヘルプドキュメントを参照してください。

    Salesforce Data Cloud のデータの取得

    1. モジュールのインストール:

      Install-Module SalesforceDataCloudCmdlets
    2. Salesforce Data Cloud への接続:

      $salesforcedatacloud = Connect-SalesforceDataCloud
    3. 取得ターゲットのリソースの取得:

      $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'}
    4. 戻り値からカラム名のリストを保存します。

      $columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name

    Salesforce Data Cloud のデータをMySQL データベースにレプリケーション

    カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。

    1. モジュールのインストール:

      Install-Module MySQLCmdlets
    2. MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:

      $mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
    3. 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 から使うことができるようになります。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。