diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records.sql b/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records.sql index 76d7389..1f7b874 100644 --- a/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records.sql +++ b/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records.sql @@ -1,32 +1,34 @@ DROP TABLE IF EXISTS p60_mart.cust_enagement_records; CREATE TABLE IF NOT EXISTS p60_mart.cust_enagement_records ( - contact_id VARCHAR(20) - , full_name VARCHAR(200) - , record_type VARCHAR(30) - , enagement_record VARCHAR(500) + contact_id varchar(20) + , full_name varchar(200) + , record_type varchar(30) + , record_id varchar(50) + , enagement_record varchar(500) , record_time timestamp(0) - , etl_batch_no VARCHAR(50) - , etl_first_dt timestamp(0) - , etl_job VARCHAR(200) - , etl_proc_dt timestamp(0) - , etl_tx_dt timestamp(0) - , src_sysname VARCHAR(50) - , src_table VARCHAR(50) - ,primary key( contact_id,enagement_record,record_time ) + , Etl_Batch_No varchar(50) + , Etl_First_Dt timestamp(0) + , Etl_Job varchar(200) + , Etl_Proc_Dt timestamp(0) + , Etl_Tx_Dt timestamp(0) + , Src_Sysname varchar(50) + , Src_Table varchar(50) + ,primary key( contact_id,record_id,enagement_record,record_time ) ); COMMENT ON COLUMN p60_mart.cust_enagement_records.contact_id IS '客户编号'; COMMENT ON COLUMN p60_mart.cust_enagement_records.full_name IS '全名'; COMMENT ON COLUMN p60_mart.cust_enagement_records.record_type IS '记录类型'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.record_id IS '记录编号'; COMMENT ON COLUMN p60_mart.cust_enagement_records.enagement_record IS '接触记录'; COMMENT ON COLUMN p60_mart.cust_enagement_records.record_time IS '记录时间'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.etl_batch_no IS '作业批次号'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.etl_first_dt IS '最初入库时间'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.etl_job IS '作业名称'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.etl_proc_dt IS '本次入库时间'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.etl_tx_dt IS '作业运行时间'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.src_sysname IS '来源系统'; - COMMENT ON COLUMN p60_mart.cust_enagement_records.src_table IS '来源表'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Etl_Batch_No IS '作业批次号'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Etl_First_Dt IS '最初入库时间'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Etl_Job IS '作业名称'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Etl_Proc_Dt IS '本次入库时间'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Etl_Tx_Dt IS '作业运行时间'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Src_Sysname IS '来源系统'; + COMMENT ON COLUMN p60_mart.cust_enagement_records.Src_Table IS '来源表'; COMMENT ON TABLE p60_mart.cust_enagement_records IS '客户接触记录'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records_agi.sql index 82e7c43..9b83a06 100644 --- a/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records_agi.sql +++ b/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records_agi.sql @@ -4,11 +4,11 @@ /*Brilliance stems from wisdoms. */ /*************Head Section**************************************************************************/ /*Script Use: Periodically load data to :cust_enagement_records(客户接触记录) */ -/*Create Date:2024-06-17 11:18:28 */ +/*Create Date:2024-06-12 10:43:33 */ /*SDM Developed By: dev */ -/*SDM Developed Date: 2024-06-17 */ +/*SDM Developed Date: 2024-06-04 */ /*SDM Checked By: dev */ -/*SDM Checked Date: 2024-06-17 */ +/*SDM Checked Date: 2024-06-12 */ /*Script Developed By: dev */ /*Script Checked By: dev */ /*Source table 1: :COMMDB.cust_leads_detail */ @@ -18,7 +18,7 @@ /*Target Table:cust_enagement_records */ /*ETL Job Name:cust_enagement_records */ /*ETL Frequency:Daily */ -/*ETL Policy:F1 */ +/*ETL Policy:F2 */ /********************************************************************************************/ /*******Main Section**************************************************************************/ \set ON_ERROR_STOP on @@ -33,6 +33,13 @@ CREATE TEMPORARY TABLE cust_enagement_records_agi_CUR_I ON COMMIT PRESERVE ROWS; + +/*创建临时表加载不同数据 */ +CREATE TEMPORARY TABLE cust_enagement_records_agi_INS +( LIKE :MARTDB.cust_enagement_records) +ON COMMIT PRESERVE ROWS; + + /*****************************************************************************************************/ /* GROUP 1:Source Table:cust_leads_detail*************************************************************/ /*****************************************************************************************************/ @@ -41,35 +48,37 @@ INSERT INTO cust_enagement_records_agi_CUR_I ( contact_id /*客户编号*/ ,full_name /*全名*/ ,record_type /*记录类型*/ + ,record_id /*记录编号*/ ,enagement_record /*接触记录*/ ,record_time /*记录时间*/ - ,etl_batch_no /*作业批次号*/ - ,etl_first_dt /*最初入库时间*/ - ,etl_job /*作业名称*/ - ,etl_proc_dt /*本次入库时间*/ - ,etl_tx_dt /*作业运行时间*/ - ,src_sysname /*来源系统*/ - ,src_table /*来源表*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ ) SELECT coalesce(p2.contact_id,'') /*contact_id*/ ,coalesce(p2.full_name,'') /*full_name*/ - ,COALESCE(TRIM(CAST(p0.contact_channel AS VARCHAR(30))),'') /*record_type*/ + ,COALESCE(TRIM(CAST(p0.contact_channel AS varchar(30))),'') /*record_type*/ ,case when p0.contact_channel = 'CRM Raw Leads' then p0."label" else p0.contact_account -end /*enagement_record*/ +end /*record_id*/ ,case when p0.contact_channel = 'CRM Raw Leads' then p0.contact_channel ||'_'|| p0."label" ||'_'|| p0."event" when p0.contact_channel = 'Chat' then p0.contact_channel ||'_'|| p0."event" when p0.contact_channel = 'Call' then p0.contact_channel ||'_'|| p0."label" ||'_'|| p0."event" when p0.contact_channel = 'SCRM Event' then p0.contact_channel ||'_'|| p0."label" ||'_'|| p0."event" -end /*record_time*/ - ,0 /*etl_batch_no*/ - ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ - ,:ETLJOB /*etl_job*/ - ,current_timestamp(0) /*etl_proc_dt*/ - ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ - ,Substr('cust_leads_detail',1,3) /*src_sysname*/ - ,'cust_leads_detail' /*src_table*/ +end /*enagement_record*/ + ,COALESCE(p0.active_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*record_time*/ + ,0 /*Etl_Batch_No*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_First_Dt*/ + ,:ETLJOB /*Etl_Job*/ + ,current_timestamp(0) /*Etl_Proc_Dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_Tx_Dt*/ + ,Substr('cust_leads_detail',1,3) /*Src_Sysname*/ + ,'cust_leads_detail' /*Src_Table*/ FROM :COMMDB.cust_leads_detail p0 LEFT JOIN :COMMDB.v_cust_contact_mapping p1 @@ -81,49 +90,112 @@ when p0.contact_channel = 'SCRM Event' then 'SCRM' end LEFT JOIN (select distinct on (contact_id) contact_id,full_name,contact_channel from p30_COMMON.cust_contact_info) p2 ON p1.contact_id=p2.contact_id + where coalesce(p2.contact_id,'')<>'' ; -/*从目标表中删除所有数据 cust_enagement_records(客户接触记录) */ -DELETE FROM :MARTDB.cust_enagement_records -WHERE ETL_JOB=:ETLJOB; - - +/*将不同数据插入到临时表 */ +;INSERT INTO cust_enagement_records_agi_INS ( + full_name /*全名*/ + ,record_type /*记录类型*/ + ,contact_id /*客户编号*/ + ,record_id /*记录编号*/ + ,enagement_record /*接触记录*/ + ,record_time /*记录时间*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) + SELECT + P1.full_name /*全名*/ + ,P1.record_type /*记录类型*/ + ,P1.contact_id /*客户编号*/ + ,P1.record_id /*记录编号*/ + ,P1.enagement_record /*接触记录*/ + ,P1.record_time /*记录时间*/ + ,P1.Etl_Batch_No /*作业批次号*/ + ,P1.Etl_First_Dt /*最初入库时间*/ + ,P1.Etl_Job /*作业名称*/ + ,P1.Etl_Proc_Dt /*本次入库时间*/ + ,P1.Etl_Tx_Dt /*作业运行时间*/ + ,P1.Src_Sysname /*来源系统*/ + ,P1.Src_Table /*来源表*/ + +FROM cust_enagement_records_agi_CUR_I P1 +LEFT JOIN :MARTDB.cust_enagement_records P2 +ON P1.full_name = P2.full_name + AND P1.record_type = P2.record_type + AND P1.contact_id = P2.contact_id + AND P1.record_id = P2.record_id + AND P1.enagement_record = P2.enagement_record + AND P1.record_time = P2.record_time + +WHERE P2.full_name IS NULL + OR P2.record_type IS NULL + OR P2.contact_id IS NULL + OR P2.record_id IS NULL + OR P2.enagement_record IS NULL + OR P2.record_time IS NULL + +; /*将新增数据插入到目标表 */ ;INSERT INTO :MARTDB.cust_enagement_records ( - full_name /*全名*/ - ,record_type /*记录类型*/ - ,contact_id /*客户编号*/ - ,enagement_record /*接触记录*/ - ,record_time /*记录时间*/ - ,etl_batch_no /*作业批次号*/ - ,etl_first_dt /*最初入库时间*/ - ,etl_job /*作业名称*/ - ,etl_proc_dt /*本次入库时间*/ - ,etl_tx_dt /*作业运行时间*/ - ,src_sysname /*来源系统*/ - ,src_table /*来源表*/ - - ) - SELECT - P1.full_name /*全名*/ - ,P1.record_type /*记录类型*/ - ,P1.contact_id /*客户编号*/ - ,P1.enagement_record /*接触记录*/ - ,P1.record_time /*记录时间*/ - ,P1.etl_batch_no /*作业批次号*/ - ,P1.etl_first_dt /*最初入库时间*/ - ,P1.etl_job /*作业名称*/ - ,P1.etl_proc_dt /*本次入库时间*/ - ,P1.etl_tx_dt /*作业运行时间*/ - ,P1.src_sysname /*来源系统*/ - ,P1.src_table /*来源表*/ - - FROM cust_enagement_records_agi_CUR_I P1 - + full_name /*全名*/ + ,record_type /*记录类型*/ + ,contact_id /*客户编号*/ + ,record_id /*记录编号*/ + ,enagement_record /*接触记录*/ + ,record_time /*记录时间*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) +SELECT + P1.full_name /*全名*/ + ,P1.record_type /*记录类型*/ + ,P1.contact_id /*客户编号*/ + ,P1.record_id /*记录编号*/ + ,P1.enagement_record /*接触记录*/ + ,P1.record_time /*记录时间*/ + ,P1.Etl_Batch_No /*作业批次号*/ + ,P1.Etl_First_Dt /*最初入库时间*/ + ,P1.Etl_Job /*作业名称*/ + ,P1.Etl_Proc_Dt /*本次入库时间*/ + ,P1.Etl_Tx_Dt /*作业运行时间*/ + ,P1.Src_Sysname /*来源系统*/ + ,P1.Src_Table /*来源表*/ + +FROM cust_enagement_records_agi_INS P1 +ON CONFLICT ( contact_id,record_id,enagement_record,record_time) +DO UPDATE SET + contact_id=excluded.contact_id + ,record_id=excluded.record_id + ,enagement_record=excluded.enagement_record + ,record_time=excluded.record_time + ,full_name=excluded.full_name + ,record_type=excluded.record_type + ,Etl_Batch_No=excluded.Etl_Batch_No + ,Etl_First_Dt=excluded.Etl_First_Dt + ,Etl_Job=excluded.Etl_Job + ,Etl_Proc_Dt=excluded.Etl_Proc_Dt + ,Etl_Tx_Dt=excluded.Etl_Tx_Dt + ,Src_Sysname=excluded.Src_Sysname + ,Src_Table=excluded.Src_Table + + ; /*****程序结束退出 */ \q