Treasure Data CLIを使用してクエリを実行し、出力結果をSalesforce Marketing Cloudに書き込むことができます。
Asynchronous APIとLegacy 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 prestodatabase_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を使用した例
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 prestotype: Enhanced packageにはsalesforce_marketing_cloud_v2を使用します。auth_uri: SFMCインスタンスのベース認証エンドポイント(パッケージ設定で確認できます)。- 残りのパラメータはLegacyの例と同じで、ターゲット Data Extension とクエリ出力に一致させる必要があります。
Synchronous APIとLegacy 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 prestoauth_type: レガシーSOAP認証フローを使用する場合はv1に設定します。async: 同期APIに切り替えるにはfalseに設定します。continue_on_failure: ジョブが失敗した行をスキップして処理を続行できるようにします。
Synchronous APIとEnhanced 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 prestoauth_type: Enhanced REST APIで認証するにはv2のままにします。async: エクスポートを同期的に実行するにはfalseに設定します。continue_on_failure: 個々の行が失敗した場合でもエクスポートを続行できるようにします。
Synchronous APIとEnhanced 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 prestocreate_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 prestofolder_path: Salesforce Marketing Cloud内の宛先フォルダパス。create_folder_if_not_exists: フォルダ階層が存在しない場合にオンデマンドで作成します。
クエリ結果と 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';