Adobe Target のデータをPowerShell でMySQL にレプリケーションする方法
CData Cmdlets for AdobeTarget を使えば、PowerShell からAdobe Target のデータ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for AdobeTarget およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でAdobe Target への接続を行います。レプリケーションは4つのステップがあります。
Adobe Target に接続するには、以下に記載されているOAuth 接続プロパティとともにTenant プロパティを指定する必要があります。他の接続プロパティは処理動作に影響を与える可能性がありますが、接続には影響しません。
以下のステップでTenant 名を確認できます。
- Adobe Experience にログインします。URL は「https://experience.adobe.com/#/@mycompanyname/preferences/general-section」です。
- 「/#/@」の後の値を抽出します。この例では「mycompanyname」です。
- Tenant 接続プロパティをその値に設定します。
ユーザーアカウント(OAuth)
すべてのユーザーアカウントフローでAuthScheme をOAuthClient に設定する必要があります。
注意:OAuth を介したAdobe 認証では、2週間ごとにトークンを更新する必要があります。
すべてのアプリケーション
CData では、OAuth 認証を簡素化する組み込みOAuth アプリケーションを提供しています。または、カスタムOAuth アプリケーションを作成することもできます。詳細については、ヘルプドキュメントの「カスタムOAuthアプリの作成」をご確認ください。OAuth アクセストークンの取得
接続するには以下のプロパティを設定します:
- InitiateOAuth:GETANDREFRESH に設定して、OAuth 交換を自動的に実行し、必要に応じてOAuthAccessToken を更新します。
- OAuthClientId:アプリを登録した際に割り当てられたクライアントID に設定します。
- OAuthClientSecret:アプリを登録した際に割り当てられたクライアントシークレットに設定します。
- CallbackURL:アプリを登録した際に定義されたリダイレクトURI に設定します。例:https://localhost:3333
これらの設定により、プロバイダーはAdobe Target からアクセストークンを取得し、それを使用してデータを要求します。OAuth値はOAuthSettingsLocation で指定された場所に保存され、接続間で確実に保持されます。
Adobe Target のデータの取得
-
モジュールのインストール:
Install-Module AdobeTargetCmdlets
-
Adobe Target への接続:
$adobetarget = Connect-AdobeTarget -Tenant $Tenant
-
取得ターゲットのリソースの取得:
$data = Select-AdobeTarget -Connection $adobetarget -Table "Activities"
Invoke-AdobeTarget cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-AdobeTarget -Connection $adobetarget -Query 'SELECT * FROM Activities WHERE Type = @Type' -Params @{'@Type'='AB'} -
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
Adobe Target のデータをMySQL データベースにレプリケーション
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
-
モジュールのインストール:
Install-Module MySQLCmdlets
-
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
-
Adobe Target、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Adobe Target のリソース(Activities)と同じテーブル名を持っている必要があります。
$data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Activities" -Columns $columns -Values $values }
次回以降のレプリケーションをシンプルに実現
-
一度PowerShell でAdobe Target とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-AdobeTarget -Connection $adobetarget -Table "Activities" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Activities" -Columns $columns -Values $values } -
別のPowerShell モジュールで、Adobe Target を別のデータベースに複製する場合、Select-AdobeTarget cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}
おわりに
これで、Adobe Target のデータをMySQL に複製できました。分析、BI などでAdobe Target のデータをMySQL から使うことができるようになります。