You can use Treasure Data CLI to run the query and write output result to Salesforce Marketing Cloud.
Example using Asynchronous APIs with 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 database that stores the query source tables.client_id,client_secret: Salesforce Marketing Cloud API credentials.de_name: Target Data Extension name in Salesforce Marketing Cloud.async: Set totrueto use asynchronous API export.records_per_batch: Maximum number of rows per batch request.-T presto: Runs the query with the Presto engine (switch to Hive or others if needed).- Final SQL statement: Adjust the
SELECTclause to match the columns you want to export.
Example using Asynchronous APIs with 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: Usesalesforce_marketing_cloud_v2for the enhanced package.auth_uri: Base authentication endpoint for your SFMC instance (find it in your package settings).- Remaining parameters mirror the legacy example and should match your target Data Extension and query output.
Example using Synchronous APIs with 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: Set tov1to use the legacy SOAP authentication flow.async: Set tofalseto switch to the synchronous API.continue_on_failure: Allows the job to skip failing rows and continue processing.
Example using Synchronous APIs with 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: Keepv2to authenticate with the enhanced REST API.async: Set tofalseto run the export synchronously.continue_on_failure: Lets the export proceed even when individual rows fail.
Example using Synchronous APIs with Enhanced package and create new Sendable data extension if not existed
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",
"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: Creates the Data Extension when it does not already exist.primary_column: Sets the primary key field for the new Data Extension.is_sendable: Creates the Data Extension as sendable.sendable_column: Column used as the sendable attribute.sendable_rule: Subscriber attribute that pairs with the sendable column.
Example using Export data extension to a specific folder
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: Destination folder path inside Salesforce Marketing Cloud.create_folder_if_not_exists: Creates the folder hierarchy on demand if missing.
You can use the as keyword in the query to map between query result and Data Extension column.
Example 1:
Given the following Data Extension that contains subscriber information:
name: de_1 Columns: primary_key, cust_email, cust_first_name, cust_last_name, cust_phone_number
Given the following table that contains user account information:
name: account_table
Columns: id, login_id, first_name, last_name, contact_number
You can use the following query with an as keyword to map between the table and Data Extension.
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;Example 2:
If you want to upload data that has phone numbers (10 digit number), you can also use this query below to cast phone number as STRING in order to avoid error by phone numbers that start with '0'
SELECT
primary,
text,
CAST(number AS VARCHAR) AS number
FROM table_name
WHERE type = 'SUCCESS';