# Salesforce Marketing Cloud V2 Export Integration Using CLI Treasure Data CLIを使用してクエリを実行し、出力結果をSalesforce Marketing Cloudに書き込むことができます。 ## Treasure Data CLIでクエリを実行する **Asynchronous API**と**Legacy package**を使用した例 ```bash 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 API**と**Enhanced package**を使用した例 ```bash 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 API**と**Legacy package**を使用した例 ```bash 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 API**と**Enhanced package**を使用した例 ```bash 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 API**と**Enhanced package**を使用し、存在しない場合に新しい**Sendable data extension**を作成する例 ```bash 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をエクスポートする例** ```bash 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** キーワードを使用した以下のクエリを使用できます。 ```sql 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としてキャストすることもできます ```sql SELECT primary, text, CAST(number AS VARCHAR) AS number FROM table_name WHERE type = 'SUCCESS'; ```