Skip to content
Last updated

Salesforce Marketing Cloud V2 Export Integration Using CLI

Treasure Data CLIを使用してクエリを実行し、出力結果をSalesforce Marketing Cloudに書き込むことができます。

Treasure Data CLIでクエリを実行する

Asynchronous APILegacy packageを使用した例

td query \
  -d database_name \
  -r '{
    "type": "salesforce_marketing_cloud",
    "client_id": "Th1s1s4n3x4mpl3Cl13nt1ds",
    "client_secret": "Th1s1s4F4k3dCl13ntS3cr3t",
    "auth_type": "v2",
    "de_name": "data_extension_name",
    "async": true,
    "records_per_batch": 32000
  }' \
  "SELECT primary_key, mytext, myinteger, mydecimal, myphone, myemail, mydate, mylocale, myboolean = 1 AS myboolean FROM my_1_million" \
  -T presto
  • database_name: クエリのソーステーブルを格納するTreasure Dataデータベース。
  • client_id, client_secret: Salesforce Marketing Cloud API認証情報。
  • de_name: Salesforce Marketing Cloudのターゲット Data Extension 名。
  • async: 非同期APIエクスポートを使用する場合は true に設定します。
  • records_per_batch: バッチリクエストあたりの最大行数。
  • -T presto: Prestoエンジンでクエリを実行します(必要に応じてHiveなどに切り替えます)。
  • 最後のSQL文: エクスポートする列に合わせて SELECT 句を調整します。

Asynchronous APIEnhanced packageを使用した例

td query \
  -d database_name \
  -r '{
    "type": "salesforce_marketing_cloud_v2",
    "client_id": "Th1s1s4n3x4mpl3Cl13nt1ds",
    "client_secret": "Th1s1s4F4k3dCl13ntS3cr3t",
    "auth_type": "v2",
    "auth_uri": "https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/",
    "de_name": "data_extension_name",
    "async": true,
    "records_per_batch": 32000
  }' \
  "SELECT primary_key, mytext, myinteger, mydecimal, myphone, myemail, mydate, mylocale, myboolean = 1 AS myboolean FROM my_1_million" \
  -T presto
  • type: Enhanced packageには salesforce_marketing_cloud_v2 を使用します。
  • auth_uri: SFMCインスタンスのベース認証エンドポイント(パッケージ設定で確認できます)。
  • 残りのパラメータはLegacyの例と同じで、ターゲット Data Extension とクエリ出力に一致させる必要があります。

Synchronous APILegacy packageを使用した例

td query \
  -d database_name \
  -r '{
    "type": "salesforce_marketing_cloud",
    "client_id": "Th1s1s4n3x4mpl3Cl13nt1ds",
    "client_secret": "Th1s1s4F4k3dCl13ntS3cr3t",
    "auth_type": "v1",
    "de_name": "data_extension_name",
    "async": false,
    "continue_on_failure": true
  }' \
  "SELECT primary_key, mytext, myinteger, mydecimal, myphone, myemail, mydate, mylocale, myboolean = 1 AS myboolean FROM my_1_million" \
  -T presto
  • auth_type: レガシーSOAP認証フローを使用する場合は v1 に設定します。
  • async: 同期APIに切り替えるには false に設定します。
  • continue_on_failure: ジョブが失敗した行をスキップして処理を続行できるようにします。

Synchronous APIEnhanced packageを使用した例

td query \
  -d database_name \
  -r '{
    "type": "salesforce_marketing_cloud_v2",
    "client_id": "Th1s1s4n3x4mpl3Cl13nt1ds",
    "client_secret": "Th1s1s4F4k3dCl13ntS3cr3t",
    "auth_type": "v2",
    "auth_uri": "https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/",
    "de_name": "data_extension_name",
    "async": false,
    "continue_on_failure": true
  }' \
  "SELECT primary_key, mytext, myinteger, mydecimal, myphone, myemail, mydate, mylocale, myboolean = 1 AS myboolean FROM my_1_million" \
  -T presto
  • auth_type: Enhanced REST APIで認証するには v2 のままにします。
  • async: エクスポートを同期的に実行するには false に設定します。
  • continue_on_failure: 個々の行が失敗した場合でもエクスポートを続行できるようにします。

Synchronous APIEnhanced packageを使用し、存在しない場合に新しいSendable data extensionを作成する例

td query \
  -d database_name \
  -r '{
    "type": "salesforce_marketing_cloud_v2",
    "client_id": "Th1s1s4n3x4mpl3Cl13nt1ds",
    "client_secret": "Th1s1s4F4k3dCl13ntS3cr3t",
    "auth_type": "v2",
    "auth_uri": "https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/",
    "de_name": "data_extension_name",
    "create_new_de": true,
    "primary_column": "primary_key",
    "column_options": "col1:TEXT(100);col2:NUMBER;col3:DECIMAL(18,2);col4:DATE",
    "is_sendable": true,
    "sendable_column": "mytext",
    "sendable_rule": "Subscriber Key",
    "async": false,
    "continue_on_failure": true
  }' \
  "SELECT primary_key, mytext, myinteger, mydecimal, myphone, myemail, mydate, mylocale, myboolean = 1 AS myboolean FROM my_1_million" \
  -T presto
  • create_new_de: Data Extensionが存在しない場合に作成します。
  • primary_column: 新しい Data Extension のプライマリキーフィールドを設定します。
  • column_options: 新しい Data Extension の各列のデータ型を指定します。
  • is_sendable: Data Extensionをsendableとして作成します。
  • sendable_column: sendable属性として使用される列。
  • sendable_rule: sendable列とペアになるSubscriber属性。

特定のフォルダにdata extensionをエクスポートする例

td query \
-d database_name \
-r '{
      "type": "salesforce_marketing_cloud_v2",
      "client_id": "Th1s1s4n3x4mpl3Cl13nt1ds",
      "client_secret": "Th1s1s4F4k3dCl13ntS3cr3t",
      "auth_type": "v2",
      "auth_uri": "https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/",
      "folder_path": "/Data Extensions/FolderPath2/FolderPath3/FolderPath3",
      "create_folder_if_not_exists": true,
      "de_name": "data_extension_name",
      "create_new_de": true,
      "primary_column": "primary_key",
      "is_sendable": true,
      "sendable_column": "mytext",
      "sendable_rule": "Subscriber Key",
      "async": false,
      "continue_on_failure": true
  }' \
"SELECT primary_key, mytext, myinteger, mydecimal, myphone, myemail, mydate, mylocale, myboolean = 1 AS myboolean FROM my_1_million" \
-T presto
  • folder_path: Salesforce Marketing Cloud内の宛先フォルダパス。
  • create_folder_if_not_exists: フォルダ階層が存在しない場合にオンデマンドで作成します。

クエリ結果とData Extension列名のマッピング

クエリ結果と Data Extension 列の間でマッピングするために、クエリで as キーワードを使用できます。

例1:

サブスクライバー情報を含む以下の Data Extension があるとします:

name: de_1 Columns: primary_key, cust_email, cust_first_name, cust_last_name, cust_phone_number

ユーザーアカウント情報を含む以下のテーブルがあるとします:

name: account_table

Columns: id, login_id, first_name, last_name, contact_number

テーブルと Data Extension の間でマッピングするために、as キーワードを使用した以下のクエリを使用できます。

SELECT
  id AS primary_key,
  login_id AS cust_email,
  first_name AS cust_first_name,
  last_name AS cust_last_name,
  contact_number AS cust_phone_number
FROM account_table;

例2:

電話番号(10桁の数字)を含むデータをアップロードする場合、'0'で始まる電話番号によるエラーを回避するために、以下のクエリを使用して電話番号をSTRINGとしてキャストすることもできます

SELECT
  primary,
  text,
  CAST(number AS VARCHAR) AS number
FROM table_name
WHERE type = 'SUCCESS';