Skip to content
Last updated

Salesforce DMP Krux インポート連携

Salesforce DMP (Krux) から、メディアキャンペーン、ペイドサーチキャンペーン、サイトキャンペーン、ユーザーオーディエンスセグメントマップ、セグメントマッピングファイル、または不同意リストを Treasure Data にインポートできます。

前提条件

  • Treasure Data の基礎知識(Toolbelt および JavaScript SDK を含む)
  • アクセスキーIDとシークレットアクセスキーを持つS3認証情報
  • Salesforce DMP のクライアント名

連携の概要

この連携には2つのパートがあります:

  1. Salesforce DMP と Treasure Data CDP 間の Cookie 同期: Salesforce DMP ID と Treasure Data ID の td_global_id および td_client_id 間のマッピングを作成するために必要です
  2. Salesforce DMP から Treasure Data CDP へのデータインポート: 取り込み可能な様々なデータフィードがあります。データエンリッチメントの目的では、セグメントIDとその名前のマッピングが重要なファイルです。

まず、ウェブサイトトラッキングの開始 の「ウェブサイトトラッキングの設定と Treasure Data JavaScript SDK のインストール」に記載されているように、Treasure Data の JavaScript タグを設定する必要があります。

次に、Salesforce DMP のタグが既にインストールされているウェブサイトに、以下のコードを追加します。

(function(window, document, td){

var kruxProperties = {};
for ( var k in window.localStorage ) {
    if ( k.startsWith('YOUR KRUX PREFIX HERE') ) {
        kruxProperties[k] = window.localStorage.getItem(k)
    }
}
td.trackEvent('<TD TABLE NAME FOR TRACKING KRUX ID/TD ID map>', kruxProperties);

var successCb = function(tdGlobalId) {
  // This is createImage in TDWrapper
  var el = document.createElement('img');
  el.src = '//beacon.krxd.net/usermatch.gif?partner=treasuredata&partner_uid=' + tdGlobalId;
  el.width=1;
  el.height=1;
  el.style.display='none';
  document.body.appendChild(el);
}

function isSafari() {
  var ua = window.navigator.userAgent.toLowerCase();
  return ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1 && ua.indexOf('edge') === -1;
}

if (isSafari() ) {
  // TODO: Safari-specific handling due to ITP 2.1
} else {
  td.fetchGlobalID(successCb, function(err) { console.log(err) });
}

})(window, document, td);

上記のコードサンプルには、Safari ブラウザ向けの Cookie 同期は含まれていません。Safari の Intelligent Tracking Prevention (ITP) 機能により、サードパーティドメインの Cookie ベースの訪問者識別の信頼性が低下しています。私たちはこの問題に対するソリューションを積極的に計画しています。

TD コンソールを使用して接続を作成

新しい接続の作成

Integrations Hub > Catalog に移動し、Salesforce DMP を検索して選択します。

Create を選択します。認証済み接続を作成しています。

以下のダイアログが開きます。

Salesforce DMP から取得したクライアント名、アクセスキーID、およびシークレットアクセスキーを編集します。

Continue を選択します。

新しい Salesforce DMP 接続に名前を付けます。Done を選択します。

Treasure Data へのデータ転送

認証済み接続を作成すると、自動的に Authentications タブに移動します。作成した接続を探して New Source を選択します。

インポートするデータを指定します:

  • セグメントマッピングファイル
  • ユーザーオーディエンスセグメントマップ
  • メディアキャンペーン、ペイドサーチキャンペーン、サイトキャンペーン、または不同意リスト

セグメントマッピングファイルのインポート

Source には、セグメントマッピングファイルを選択します。

ユーザーオーディエンスセグメントマップのインポート

Source には、ユーザーオーディエンスセグメントマップを選択します。

パラメータ:

  • Import Date: この日付から作成されたデータをインポートします。

メディアキャンペーン、ペイドサーチキャンペーン、サイトキャンペーン、不同意リストのインポート

Source には、メディアキャンペーン、ペイドサーチキャンペーン、サイトキャンペーン、または不同意リストを選択します。

パラメータ:

  • Start Date: この日付以降に作成されたデータをインポートします。
  • End Date: この日付までに作成されたデータをインポートします。
  • Incremental Loading: スケジュールに基づいてデータをインポートする場合、取得されるデータの時間枠は実行ごとに自動的に前進します。例えば、初期の開始日を1月1日、終了日を1月10日に指定した場合、最初の実行では1月1日から1月10日までのデータを取得し、2回目の実行では1月11日から1月20日までのデータを取得するといった具合です。

プレビュー

データプレビューはオプションであり、必要に応じて Next をクリックしてダイアログの次のページに進むことができます。

  1. インポートを実行する前に、Generate Preview を選択してデータのプレビューを表示します。

    データプレビューに表示されるデータは、ソースから近似されたものです。実際にインポートされるデータではありません。

  2. データが期待通りであることを確認します。

  3. Next を選択します。

詳細設定

以下のパラメータを指定できます:

  • Maximum retry times. 各APIコールの最大リトライ回数を指定します。
    • 型: number
    • デフォルト: 7
  • Initial retry interval millisecond. 最初のリトライの待機時間を指定します。
    • 型: number
    • デフォルト: 1000
  • Maximum retry interval milliseconds. リトライ間の最大待機時間を指定します。
    • 型: number
    • デフォルト: 120000

ターゲットデータベースとテーブルの選択

既存のものを選択するか、新しいデータベースとテーブルを作成します。

新しいデータベースを作成し、データベース名を付けます。Create new table についても同様の手順を実行します。

既存のテーブルにレコードを append(追加)するか、既存のテーブルを replace(置換)するかを選択します。

デフォルトキーではなく、異なる partition key seed を設定したい場合は、ポップアップメニューを使用して指定できます。

スケジューリング

When タブでは、1回限りの転送を指定するか、自動的に繰り返される転送をスケジュールすることができます。

パラメータ

  • Once now: 1回限りのジョブを設定します。

  • Repeat…

    • Schedule: @hourly@daily@monthly の3つのオプションとカスタム cron を使用できます。
    • Delay Transfer: 実行時間の遅延を追加します。
  • TimeZone: 'Asia/Tokyo' などの拡張タイムゾーン形式をサポートしています。

Details

Transfer に名前を付けて Done を選択して開始します。

Transfer の実行後、Databases タブで Transfer の結果を確認できます。

コマンドラインを使用して Salesforce DMP 接続を作成する

TD Console を使用して接続を設定できます。

Treasure Data Toolbelt のインストール

最新の TD Toolbelt をインストールします。

設定ファイル (load.yml) の作成

設定ファイルには、Salesforce DMP からコネクタに入力される内容を指定する in: セクションと、コネクタから Treasure Data のデータベースに出力される内容を指定する out: セクションが含まれます。利用可能な out モードの詳細については、付録を参照してください。

次の例は、インクリメンタルスケジューリングなしで Media Campaign をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx  client_name: xxxxxxxxxxx
  target: mc
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: false
out: mode: append

次の例は、インクリメンタルスケジューリングありで Media Campaign をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: mc
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: true
out: mode: append

次の例は、インクリメンタルスケジューリングなしで Paid Search Campaign をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: psc
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: false
out: mode: append

次の例は、インクリメンタルスケジューリングありで Paid Search Campaign をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: psc
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: true
out: mode: append

次の例は、インクリメンタルスケジューリングなしで Site Campaign をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: sc
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: false
out:
  mode: append

次の例は、インクリメンタルスケジューリングありで Site Campaign をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: sc
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: true
out:
  mode: append

次の例は、インクリメンタルスケジューリングなしで Dissent Lists をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: dl
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: false
out:
  mode: append

次の例は、インクリメンタルスケジューリングありで Dissent Lists をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: dl
  start_date: 2019-01-17
  end_date: 2019-01-27
  incremental: true
out:
  mode: append

次の例は、User Audience Segment Map をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: uasm
  import_date: 2019-01-17
out:
  mode: append

次の例は、Segment Mapping File をインポートする方法を示しています。

in:
  type: krux_dmp
  access_key_id: xxxxxxxxxxx
  secret_access_key: xxxxxxxxxxx
  client_name: xxxxxxxxxxx
  target: smf
out:
  mode: append

インポートするデータのプレビュー(オプション)

td connector:previewコマンドを使用して、インポートするデータをプレビューできます。

$ td connector:preview load.yml

ロードジョブの実行

td connector:issueを使用してジョブを実行します。

ロードジョブを実行する前に、データを保存するデータベースとテーブルを指定する必要があります。例:td_sample_db、td_sample_table

$ td connector:issue load.yml \      --database td_sample_db \      --table td_sample_table \      --time-column date_time_column

Treasure Dataのストレージは時間によってパーティション化されているため、--time-columnオプションを指定することを推奨します。このオプションが指定されていない場合、データコネクタは最初のlong型またはtimestamp型のカラムをパーティショニング時間として選択します。--time-columnで指定するカラムのタイプは、long型またはtimestamp型のいずれかである必要があります(使用可能なカラム名とタイプを確認するには、プレビュー結果を使用してください。一般的に、ほとんどのデータタイプにはlast_modified_dateカラムがあります)。

データに時間カラムがない場合は、add_timeフィルタオプションを使用してカラムを追加できます。詳細については、add_timeフィルタプラグインを参照してください。

td connector:issueは、データベース(sample_db)とテーブル(sample_table)がすでに作成されていることを前提としています。データベースまたはテーブルがTDに存在しない場合、td connector:issueは失敗します。そのため、データベースとテーブルを手動で作成するか、td connector:issueで--auto-create-tableを使用してデータベースとテーブルを自動的に作成する必要があります。

 $ td connector:issue load.yml \       --database td_sample_db \       --table td_sample_table \       --time-column date_time_column \      --auto-create-table

コマンドラインから、ロードジョブを送信します。データサイズに応じて、処理に数時間かかる場合があります。

統合のスケジュール実行

定期的なMedia Campaign、Paid Search Campaign、Site Campaignのインポートのために、データコネクタの定期実行をスケジュールできます。高可用性を確保するために、スケジューラを慎重に構成しています。この機能を使用することで、ローカルデータセンターにcronデーモンを用意する必要がなくなります。

スケジュール実行では、Salesforce DMPからデータを取得する際のデータコネクタの動作を制御する設定パラメータをサポートしています:

  • incremental この設定は、ロードモードを制御するために使用されます。これは、各オブジェクトに関連付けられたネイティブタイムスタンプフィールドの1つに基づいて、データコネクタがSalesforce DMPからデータを取得する方法を管理します。
  • columns この設定は、Treasure Dataにインポートされるデータのカスタムスキーマを定義するために使用されます。ここでは、関心のあるカラムのみを定義できますが、取得するオブジェクトに存在することを確認してください。そうでない場合、これらのカラムは結果に含まれません。
  • last_record この設定は、前回のロードジョブからの最後のレコードを制御するために使用されます。オブジェクトには、カラム名のkeyとカラムの値のvalueを含める必要があります。keyは、Salesforce DMPデータのカラム名と一致する必要があります。

詳細と例については、「インクリメンタルローディングの仕組み」を参照してください。

スケジュールの作成

td connector:createコマンドを使用して、新しいスケジュールを作成できます。スケジュールの名前、cron形式のスケジュール、データが保存されるデータベースとテーブル、およびデータコネクタ設定ファイルが必要です。

cronパラメータは、次のオプションを受け入れます:@hourly@daily@monthly

デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、タイムゾーンでスケジュールを設定できます。--timezoneオプションは、'Asia/Tokyo'、'America/Los_Angeles'などの拡張タイムゾーン形式のみをサポートしています。PST、CSTなどのタイムゾーンの略語は*サポートされておらず*、予期しないスケジュールにつながる可能性があります。

$ td connector:create \
    daily_import \
    "10 0 * * *" \
    td_sample_db \
    td_sample_table \
    load.yml

Treasure Dataのストレージは時間によってパーティション化されているため、--time-columnオプションを指定することも推奨されます。

$ td connector:create \
    daily_import \
    "10 0 * * *" \
    td_sample_db \
    td_sample_table \
    load.yml \
    --time-column created_at

スケジュールのリスト表示

td connector:listコマンドを入力すると、スケジュールされたエントリのリストを表示できます。

$ td connector:list

スケジュールの設定とスケジュール履歴の表示

td connector:showは、スケジュールエントリの実行設定を表示します。

td connector:show daily_import

td connector:historyは、スケジュールエントリの実行履歴を表示します。個々の実行の結果を調査するには、td job jobidを使用します。

td connector:history daily_import

スケジュールの削除

td connector:deleteは、スケジュールを削除します。

$ td connector:delete daily_import

インクリメンタルローディングの仕組み

インクリメンタルローディングは、ファイルの最後のインポート日を使用してレコードを単調にロードし、最新の実行後のファイルを挿入または更新します。

最初の実行時、このコネクタはFilename RegexModified Afterに一致するすべてのファイルをロードします。incremental: trueが設定されている場合、最新の変更日時が新しいModified After値として保存されます。

例:

  • インポートフォルダに含まれるファイル:

    +--------------+--------------------------+
    |   Filename   |     Last update          |
    +--------------+--------------------------+
    | File0001.csv | 2019-05-04T10:00:00.123Z |
    | File0011.csv | 2019-05-05T10:00:00.123Z |
    | File0012.csv | 2019-05-06T10:00:00.123Z |
    | File0013.csv | 2019-05-07T10:00:00.123Z |
    | File0014.csv | 2019-05-08T10:00:00.123Z |
  • Filename Regex: File001.*.csv

  • Modified After: 2019-05-01T10:00:00.00Z

この場合、File0011.csvFile0012.csvFile0013.csvFile0014.csvのファイルがインポートされます。これらはFilename Regexに一致し、すべて最終更新日 > 2019-05-01T10:00:00.00Zです。

ジョブが終了すると、新しいModified After = 2019-05-08T10:00:00.123Zが保存されます。

次回の実行時には、最終更新日 > 2019-05-08T10:00:00.123Zのファイルのみがインポートされます。

例:

  • インポートフォルダに新しく更新および追加されたファイル:

    +--------------+--------------------------+
    |   Filename   |     Last update          |
    +--------------+--------------------------+
    | File0001.csv | 2019-05-04T10:00:00.123Z |
    | File0011.csv | 2019-05-05T10:00:00.123Z |
    | File0012.csv | 2019-05-06T10:00:00.123Z |
    | File0013.csv | 2019-05-09T10:00:00.123Z |
    | File0014.csv | 2019-05-08T10:00:00.123Z |
    | File0015.csv | 2019-05-09T10:00:00.123Z |
  • Filename Regex: File001.*.csv

  • Modified After: 2019-05-08T10:00:00.123Z

この場合、File0013.csvFile0015.csvのファイルのみがインポートされます。