Treasure Data CDPには様々なマーケティングオートメーションやアナリティクスツールなどにデータを集約することができます。本稿ではCRMとして有名である「Salesforce」のデータを投入する例です。Treasure Data CDPでは「Salesforce」のデータコネクターは存在しており、GUIベースで設定は可能ですが本稿ではあえてDigdagのHTTPオペレータを利用いたします。また、今回はSalesforceのrecordtypeオブジェクトが対象となります。
目次
続きは会員登録およびログイン後にご覧いただけます。以下からログインしてください。
サンプルソース
timezone: Asia/Tokyo
_export:
api_region: "treasuredata.co.jp"
client_id: "SFDC_CLIENT_ID" # SFDCのCLIENT_IDを設定
client_secret: "SFDC_CLIENT_SECRET" # SFDCのCLIENT_SECRETを設定
username: "SFDC_USER_NAME" # SFDCのUSER_NAMEを設定
password: "SFDC_PASSWORD" # SFDCのPASSWORDを設定
security_token: "SFDC_SECURITY_TOKEN" # SFDCのSECURITY_TOKENを設定
td:
database: sandbox
+get_token_process:
# HTTPオペレータにてauthのREST APIを叩く。尚、POSTとして取得
http>: https://test.salesforce.com/services/oauth2/token?grant_type=password&client_id=${client_id}&client_secret=${client_secret}&username=${username}&password=${password}${security_token}
headers:
- content-type: "application/x-www-form-urlencoded"
method: POST
store_content: true
# SFDCのレコードタイプオブジェクトをSOQLを用いてREST APIを利用して取得
+get_process:
http>: ${JSON.parse(http.last_content).instance_url}/services/data/v48.0/queryAll?q=SELECT+Id,Name,DeveloperName,NamespacePrefix,Description,BusinessProcessId,SobjectType,IsActive,CreatedById,CreatedDate,LastModifiedById,LastModifiedDate,SystemModstamp+FROM+${table}
headers:
- Content-Type: 'application/json'
# 「access_token」は「JSON」をパースさせる
- Authorization: ${'Bearer ' + JSON.parse(http.last_content).access_token}
- X-PrettyPrint: 1
method: GET
store_content: true
+emp_d_table:
td_ddl>:
empty_tables: [tmp2_recordtype]
# 「SOQL」の結果を一時テーブルにJSONデータとして格納
+insert_d:
td>:
data: select '${JSON.parse(http.last_content).records}' as d;
insert_into: tmp2_recordtype
engine: presto
+emp_create_table:
td_ddl>:
empty_tables: [recordtype]
+insert_table:
td>:
query: |
WITH dataset AS (
select d as blob from tmp2_recordtype
)
, t0 AS
(
SELECT
# 一時保存した「JSON」データをパースさせる
CAST(JSON_EXTRACT(blob,'$')AS ARRAY<JSON>) AS hits
FROM
dataset
)
SELECT
# それぞれのカラムを「JSON_EXTRACT_SCALAR」を用いて抽出
JSON_EXTRACT_SCALAR(hit,'$.Id') as id
,'"{""url"":""' || JSON_EXTRACT_SCALAR(hit,'$.attributes.url') || '"",""type"":""' || JSON_EXTRACT_SCALAR(hit,'$.attributes.type') ||'""}"' as attributes
,JSON_EXTRACT_SCALAR(hit,'$.Name') as name
,JSON_EXTRACT_SCALAR(hit,'$.DeveloperName') as developername
,JSON_EXTRACT_SCALAR(hit,'$.NamespacePrefix') as namespaceprefix
,JSON_EXTRACT_SCALAR(hit,'$.Description') as description
,JSON_EXTRACT_SCALAR(hit,'$.BusinessProcessId') as businessprocessid
,JSON_EXTRACT_SCALAR(hit,'$.SobjectType') as sobjecttype
,JSON_EXTRACT_SCALAR(hit,'$.IsActive') as isactive
,JSON_EXTRACT_SCALAR(hit,'$.CreatedById') as createdbyid
,JSON_EXTRACT_SCALAR(hit,'$.CreatedDate') as createddate
,JSON_EXTRACT_SCALAR(hit,'$.LastModifiedById') as lastmodifiedbyid
,JSON_EXTRACT_SCALAR(hit,'$.LastModifiedDate') as lastmodifieddate
,JSON_EXTRACT_SCALAR(hit,'$.SystemModstamp') as systemmodstamp
,TD_TIME_PARSE(JSON_EXTRACT_SCALAR(hit,'$.LastModifiedDate'), 'JST') as time
FROM
t0
CROSS JOIN UNNEST(hits) AS t(hit)
insert_into: recordtype
engine: presto
最後に
DigdagのHTTPオペレータを使用してSalesforceのrecortypeオブジェクトを取得するサンプルを記載させていただきました。Treasure Data CDPの柔軟な操作方法がご理解いただけたかと思います。ご参照いただき業務にてご活用いただければと思います。
