diff --git a/dev/workflow/TK_Cust/yi_api_contact/SCRM线索/t01_scrm_leads.sql b/dev/workflow/TK_Cust/yi_api_contact/SCRM线索/t01_scrm_leads.sql new file mode 100644 index 0000000..57847fc --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/SCRM线索/t01_scrm_leads.sql @@ -0,0 +1,46 @@ + +DROP TABLE IF EXISTS p20_pdm.t01_scrm_leads; +CREATE TABLE IF NOT EXISTS p20_pdm.t01_scrm_leads ( + customer_id varchar(30) + , date timestamp(0) + , target_name varchar(30) + , c_name varchar(30) + , c_type varchar(30) + , content_name varchar(30) + , source varchar(50) + , tag varchar(30) + , c_keyword varchar(30) + , attr2 varchar(30) + , label varchar(30) + , group_label varchar(30) + , Etl_Batch_No varchar(50) + , Etl_First_Dt timestamp(0) + , Etl_Job varchar(50) + , Etl_Proc_Dt timestamp(0) + , Etl_Tx_Dt timestamp(0) + , Src_Sysname varchar(50) + , Src_Table varchar(50) + ,primary key( customer_id,date ) +); + + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.customer_id IS 'customerId'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.date IS 'date'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.target_name IS 'targetName'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.c_name IS 'c_name'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.c_type IS 'c_type'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.content_name IS 'contentName'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.source IS 'source'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.tag IS 'tag'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.c_keyword IS 'c_keyword'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.attr2 IS 'attr2'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.label IS 'label'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.group_label IS 'groupLabel'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Etl_Batch_No IS '作业批次号'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Etl_First_Dt IS '最初入库时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Etl_Job IS '作业名称'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Etl_Proc_Dt IS '本次入库时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Etl_Tx_Dt IS '作业运行时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Src_Sysname IS '来源系统'; + COMMENT ON COLUMN p20_pdm.t01_scrm_leads.Src_Table IS '来源表'; + +COMMENT ON TABLE p20_pdm.t01_scrm_leads IS 'SCRM线索'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/SCRM线索/t01_scrm_leads_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/SCRM线索/t01_scrm_leads_agi.sql new file mode 100644 index 0000000..b43042d --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/SCRM线索/t01_scrm_leads_agi.sql @@ -0,0 +1,327 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2024(by IdgValue, qihang.feng@idgvalue.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :t01_scrm_leads(SCRM线索) */ +/*Create Date:2025-10-30 11:07:00 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-01-12 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2025-10-30 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: :PDMDB.(SELECT +id, +connect_name, + item->>'fieldId' AS field_id, + item->>'fieldName' AS field_name, + item->>'fieldDisplayName' AS field_display_name, + item->>'value' AS value, + item->>'dataType' AS data_type +FROM p12_sfull.s98_s_api_contact_events, + jsonb_array_elements(properties::jsonb) AS item)*/ +/*Source table 2: p10_sa.s98_s_api_contact_events */ +/*Source table 3: p10_sa.s98_s_scrm_leads_af0912 */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:t01_scrm_leads */ +/*ETL Job Name:t01_scrm_leads */ +/*ETL Frequency:Daily */ +/*ETL Policy:F2 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE t01_scrm_leads_agi_CUR_I + ( LIKE :PDMDB.t01_scrm_leads) +ON COMMIT PRESERVE ROWS; + + + +/*创建临时表加载不同数据 */ +CREATE TEMPORARY TABLE t01_scrm_leads_agi_INS +( LIKE :PDMDB.t01_scrm_leads) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:s98_s_scrm_leads_af0912*******************************************************/ +/*****************************************************************************************************/ + +INSERT INTO t01_scrm_leads_agi_CUR_I ( + customer_id /*customerId*/ + ,date /*date*/ + ,target_name /*targetName*/ + ,c_name /*c_name*/ + ,c_type /*c_type*/ + ,content_name /*contentName*/ + ,source /*source*/ + ,tag /*tag*/ + ,c_keyword /*c_keyword*/ + ,attr2 /*attr2*/ + ,label /*label*/ + ,group_label /*groupLabel*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + COALESCE(TRIM(CAST(p0.customer_id AS varchar(30))),'') /*customer_id*/ + ,COALESCE(TO_TIMESTAMP(CAST(p0.date AS VARCHAR(19)),'YYYY-MM-DD HH24:mi:ss'),TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*date*/ + ,COALESCE(TRIM(CAST(p0.target_name AS varchar(30))),'') /*target_name*/ + ,COALESCE(TRIM(CAST(p0.c_name AS varchar(30))),'') /*c_name*/ + ,COALESCE(TRIM(CAST(p0.c_type AS varchar(30))),'') /*c_type*/ + ,COALESCE(TRIM(CAST(p0.content_name AS varchar(30))),'') /*content_name*/ + ,COALESCE(TRIM(CAST(p0.source AS varchar(50))),'') /*source*/ + ,COALESCE(TRIM(CAST(p0.tag AS varchar(30))),'') /*tag*/ + ,COALESCE(TRIM(CAST(p0.c_keyword AS varchar(30))),'') /*c_keyword*/ + ,COALESCE(TRIM(CAST(p0.attr2 AS varchar(30))),'') /*attr2*/ + ,COALESCE(TRIM(CAST(p0.label AS varchar(30))),'') /*label*/ + ,COALESCE(TRIM(CAST(p0.group_label AS varchar(30))),'') /*group_label*/ + ,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('s98_s_scrm_leads_af0912',1,3) /*Src_Sysname*/ + ,'s98_s_scrm_leads_af0912' /*Src_Table*/ + +FROM (select distinct on (customer_id ,"date") * from p10_sa.s98_s_scrm_leads_af0912 where 1=2) p0 + + +; + + + +/*****************************************************************************************************/ +/* GROUP 2:Source Table:s98_s_api_contact_events******************************************************/ +/*****************************************************************************************************/ + +INSERT INTO t01_scrm_leads_agi_CUR_I ( + customer_id /*customerId*/ + ,date /*date*/ + ,target_name /*targetName*/ + ,c_name /*c_name*/ + ,c_type /*c_type*/ + ,content_name /*contentName*/ + ,source /*source*/ + ,tag /*tag*/ + ,c_keyword /*c_keyword*/ + ,attr2 /*attr2*/ + ,label /*label*/ + ,group_label /*groupLabel*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + COALESCE(TRIM(CAST(p0.contact_id AS varchar(30))),'') /*customer_id*/ + ,TO_TIMESTAMP(substr(p0.at,1,23),'YYYY-MM-DD"T"HH24:MI:SS::MS') AT TIME ZONE 'PRC' /*date*/ + ,max(case when p1.connect_name = '泰克科技' and field_display_name='菜单按钮名称' then value + when p1.connect_name = '微站' and field_display_name='微站标题' then value + when p1.connect_name = '泰克科技企微' and field_display_name='员工姓名' then value + when p1.connect_name = '泰克科技服务号' and field_display_name='菜单按钮名称' then value + when p1.connect_name = '签到码' and field_display_name='关联表单名称' then value + when p1.connect_name = '系统-短信' and field_display_name='模版名称' then value + when p1.connect_name = '直播间' and field_display_name='页面标题' then value + end ) /*target_name*/ + ,p0.connect_name /*c_name*/ + ,'' /*c_type*/ + ,max(case when p1.connect_name = '泰克科技' and field_display_name='菜单按钮名称' then value + when p1.connect_name = '微站' and field_display_name='微站标题' then value + when p1.connect_name = '泰克科技企微' and field_display_name='员工姓名' then value + when p1.connect_name = '泰克科技服务号' and field_display_name='菜单按钮名称' then value + when p1.connect_name = '签到码' and field_display_name='关联表单名称' then value + when p1.connect_name = '系统-短信' and field_display_name='模版名称' then value + when p1.connect_name = '直播间' and field_display_name='页面标题' then value + end ) /*content_name*/ + ,p0.channel_name /*source*/ + ,'' /*tag*/ + ,'' /*c_keyword*/ + ,COALESCE(TRIM(CAST(p0.properties AS varchar(30))),'') /*attr2*/ + ,COALESCE(TRIM(CAST(p0.meta_remark AS varchar(30))),'') /*label*/ + ,COALESCE(TRIM(CAST(p0.meta_remark AS varchar(30))),'') /*group_label*/ + ,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('s98_s_api_contact_events',1,3) /*Src_Sysname*/ + ,'s98_s_api_contact_events' /*Src_Table*/ + +FROM p10_sa.s98_s_api_contact_events p0 +LEFT JOIN ((SELECT +id, +connect_name, + item->>'fieldId' AS field_id, + item->>'fieldName' AS field_name, + item->>'fieldDisplayName' AS field_display_name, + item->>'value' AS value, + item->>'dataType' AS data_type +FROM p12_sfull.s98_s_api_contact_events, + jsonb_array_elements(properties::jsonb) AS item)) p1 + ON p1.id=p0.id +group by p0 .contact_id ,p0 .properties ,p0.at,p0 .connect_name,p0 .meta_remark ,p0 .channel_name + +; + + + +/*将不同数据插入到临时表 */ +;INSERT INTO t01_scrm_leads_agi_INS ( + target_name /*targetName*/ + ,c_name /*c_name*/ + ,c_type /*c_type*/ + ,content_name /*contentName*/ + ,source /*source*/ + ,tag /*tag*/ + ,c_keyword /*c_keyword*/ + ,attr2 /*attr2*/ + ,group_label /*groupLabel*/ + ,customer_id /*customerId*/ + ,date /*date*/ + ,label /*label*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) + SELECT + P1.target_name /*targetName*/ + ,P1.c_name /*c_name*/ + ,P1.c_type /*c_type*/ + ,P1.content_name /*contentName*/ + ,P1.source /*source*/ + ,P1.tag /*tag*/ + ,P1.c_keyword /*c_keyword*/ + ,P1.attr2 /*attr2*/ + ,P1.group_label /*groupLabel*/ + ,P1.customer_id /*customerId*/ + ,P1.date /*date*/ + ,P1.label /*label*/ + ,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 t01_scrm_leads_agi_CUR_I P1 +LEFT JOIN :PDMDB.t01_scrm_leads P2 +ON P1.target_name = P2.target_name + AND P1.c_name = P2.c_name + AND P1.c_type = P2.c_type + AND P1.content_name = P2.content_name + AND P1.source = P2.source + AND P1.tag = P2.tag + AND P1.c_keyword = P2.c_keyword + AND P1.attr2 = P2.attr2 + AND P1.group_label = P2.group_label + AND P1.customer_id = P2.customer_id + AND P1.date = P2.date + AND P1.label = P2.label + +WHERE P2.target_name IS NULL + OR P2.c_name IS NULL + OR P2.c_type IS NULL + OR P2.content_name IS NULL + OR P2.source IS NULL + OR P2.tag IS NULL + OR P2.c_keyword IS NULL + OR P2.attr2 IS NULL + OR P2.group_label IS NULL + OR P2.customer_id IS NULL + OR P2.date IS NULL + OR P2.label IS NULL + +; +/*将新增数据插入到目标表 */ +;INSERT INTO :PDMDB.t01_scrm_leads ( + target_name /*targetName*/ + ,c_name /*c_name*/ + ,c_type /*c_type*/ + ,content_name /*contentName*/ + ,source /*source*/ + ,tag /*tag*/ + ,c_keyword /*c_keyword*/ + ,attr2 /*attr2*/ + ,group_label /*groupLabel*/ + ,customer_id /*customerId*/ + ,date /*date*/ + ,label /*label*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) +SELECT + P1.target_name /*targetName*/ + ,P1.c_name /*c_name*/ + ,P1.c_type /*c_type*/ + ,P1.content_name /*contentName*/ + ,P1.source /*source*/ + ,P1.tag /*tag*/ + ,P1.c_keyword /*c_keyword*/ + ,P1.attr2 /*attr2*/ + ,P1.group_label /*groupLabel*/ + ,P1.customer_id /*customerId*/ + ,P1.date /*date*/ + ,P1.label /*label*/ + ,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 t01_scrm_leads_agi_INS P1 +ON CONFLICT ( customer_id,date,label) +DO UPDATE SET + customer_id=excluded.customer_id + ,date=excluded.date + ,label=excluded.label + ,target_name=excluded.target_name + ,c_name=excluded.c_name + ,c_type=excluded.c_type + ,content_name=excluded.content_name + ,source=excluded.source + ,tag=excluded.tag + ,c_keyword=excluded.c_keyword + ,attr2=excluded.attr2 + ,group_label=excluded.group_label + ,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 + diff --git a/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/d_scrm_contact.sql b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/d_scrm_contact.sql new file mode 100644 index 0000000..17fe214 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/d_scrm_contact.sql @@ -0,0 +1,50 @@ + +DROP TABLE IF EXISTS p30_common.d_scrm_contact; +CREATE TABLE IF NOT EXISTS p30_common.d_scrm_contact ( + scrm_leads_id VARCHAR(20) + , city_name VARCHAR(20) + , company_name VARCHAR(50) + , email VARCHAR(50) + , email_data_ind char(1) + , email_availability char(1) + , mobile_phone VARCHAR(20) + , mobile_phone_data_ind char(1) + , mobile_phone_availability char(1) + , full_name VARCHAR(20) + , prov_name VARCHAR(20) + , create_time timestamp(0) + , wechat_id VARCHAR(100) + , update_time timestamp(0) + , Etl_Batch_No varchar(50) + , Etl_First_Dt timestamp(0) + , Etl_Job varchar(50) + , Etl_Proc_Dt timestamp(0) + , Etl_Tx_Dt timestamp(0) + , Src_Sysname varchar(50) + , Src_Table varchar(50) + ,primary key( scrm_leads_id ) +); + + COMMENT ON COLUMN p30_common.d_scrm_contact.scrm_leads_id IS 'SCRM线索ID'; + COMMENT ON COLUMN p30_common.d_scrm_contact.city_name IS '城市'; + COMMENT ON COLUMN p30_common.d_scrm_contact.company_name IS '公司'; + COMMENT ON COLUMN p30_common.d_scrm_contact.email IS '邮箱'; + COMMENT ON COLUMN p30_common.d_scrm_contact.email_data_ind IS '邮箱数据标志'; + COMMENT ON COLUMN p30_common.d_scrm_contact.email_availability IS '邮箱有效性'; + COMMENT ON COLUMN p30_common.d_scrm_contact.mobile_phone IS '手机号码'; + COMMENT ON COLUMN p30_common.d_scrm_contact.mobile_phone_data_ind IS '手机号数据标志'; + COMMENT ON COLUMN p30_common.d_scrm_contact.mobile_phone_availability IS '手机号数据有效性'; + COMMENT ON COLUMN p30_common.d_scrm_contact.full_name IS '姓名'; + COMMENT ON COLUMN p30_common.d_scrm_contact.prov_name IS '省份'; + COMMENT ON COLUMN p30_common.d_scrm_contact.create_time IS '创建时间'; + COMMENT ON COLUMN p30_common.d_scrm_contact.wechat_id IS '身份-企业微信外部联系人'; + COMMENT ON COLUMN p30_common.d_scrm_contact.update_time IS '更新时间'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Etl_Batch_No IS '作业批次号'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Etl_First_Dt IS '最初入库时间'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Etl_Job IS '作业名称'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Etl_Proc_Dt IS '本次入库时间'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Etl_Tx_Dt IS '作业运行时间'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Src_Sysname IS '来源系统'; + COMMENT ON COLUMN p30_common.d_scrm_contact.Src_Table IS '来源表'; + +COMMENT ON TABLE p30_common.d_scrm_contact IS 'SCRM联系方式'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/d_scrm_contact_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/d_scrm_contact_agi.sql new file mode 100644 index 0000000..dbc159d --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/d_scrm_contact_agi.sql @@ -0,0 +1,323 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2020(by Qihang Feng, QF255001@TERADATA.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :d_scrm_contact(SCRM联系方式) */ +/*Create Date:2024-06-06 15:01:23 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-01-18 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2024-06-06 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: :PDMDB.t01_scrm_contact_merge */ +/*Source table 2: :SADB.select distinct on (scrm_leads_id) * from p20_pdm.t01_scrm_contact_update tscu +order by scrm_leads_id,update_time desc*/ +/*Source table 3: p20_pdm.t01_scrm_contact */ +/*Source table 4: :PDMDB.t01_scrm_contact_his */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:d_scrm_contact */ +/*ETL Job Name:d_scrm_contact */ +/*ETL Frequency:Daily */ +/*ETL Policy:F2 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE d_scrm_contact_agi_CUR_I + ( LIKE :COMMDB.d_scrm_contact) +ON COMMIT PRESERVE ROWS; + + + +/*创建临时表加载不同数据 */ +CREATE TEMPORARY TABLE d_scrm_contact_agi_INS +( LIKE :COMMDB.d_scrm_contact) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:t01_scrm_contact**************************************************************/ +/*****************************************************************************************************/ + +INSERT INTO d_scrm_contact_agi_CUR_I ( + scrm_leads_id /*SCRM线索ID*/ + ,city_name /*城市*/ + ,company_name /*公司*/ + ,email /*邮箱*/ + ,email_data_ind /*邮箱数据标志*/ + ,email_availability /*邮箱有效性*/ + ,mobile_phone /*手机号码*/ + ,mobile_phone_data_ind /*手机号数据标志*/ + ,mobile_phone_availability /*手机号数据有效性*/ + ,full_name /*姓名*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + COALESCE(TRIM(p0.scrm_leads_id),'') /*scrm_leads_id*/ + ,COALESCE(TRIM(p0.city_name),'') /*city_name*/ + ,COALESCE(TRIM(p0.company_name),'') /*company_name*/ + ,COALESCE(TRIM(p0.email),'') /*email*/ + ,case when length(p0.email)>1 then '1' else 0 end /*email_data_ind*/ + ,case when p0.email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' and length(p0.email)>10 then '1' + else '0' end /*email_availability*/ + ,replace(p0.mobile_number,'.0','') /*mobile_phone*/ + ,case when length(replace(p0.mobile_number,'.0',''))>1 then '1' else 0 end /*mobile_phone_data_ind*/ + ,case when replace(p0.mobile_number,'.0','') ~ '^1[3-9]\d{9}$' then '1' + else '0' end /*mobile_phone_availability*/ + ,COALESCE(TRIM(p0.full_name),'') /*full_name*/ + ,COALESCE(TRIM(p0.prov_name),'') /*prov_name*/ + ,COALESCE(p0.create_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*create_time*/ + ,'' /*wechat_id*/ + ,COALESCE(p0.update_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*update_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('t01_scrm_contact',1,3) /*Src_Sysname*/ + ,'t01_scrm_contact' /*Src_Table*/ + +FROM p20_pdm.t01_scrm_contact p0 +LEFT JOIN :PDMDB.t01_scrm_contact_merge p1 + ON p0.scrm_leads_id =p1.merged_leads_id + +where p1.scrm_leads_id is null +; + + + +/*****************************************************************************************************/ +/* GROUP 2:Source Table:t01_scrm_contact_his**********************************************************/ +/*****************************************************************************************************/ +INSERT INTO d_scrm_contact_agi_CUR_I ( + scrm_leads_id /*SCRM线索ID*/ + ,city_name /*城市*/ + ,company_name /*公司*/ + ,email /*邮箱*/ + ,email_data_ind /*邮箱数据标志*/ + ,email_availability /*邮箱有效性*/ + ,mobile_phone /*手机号码*/ + ,mobile_phone_data_ind /*手机号数据标志*/ + ,mobile_phone_availability /*手机号数据有效性*/ + ,full_name /*姓名*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + COALESCE(TRIM(p0.scrm_leads_id),'') /*scrm_leads_id*/ + ,coalesce(p1.city_name,p0.city_name) /*city_name*/ + ,coalesce(p1.company_name,p0.company_name) /*company_name*/ + ,coalesce(p1.email,p0.email) /*email*/ + ,case when length(coalesce(p1.email,p0.email))>1 then '1' else 0 end /*email_data_ind*/ + ,case when coalesce(p1.email,p0.email) ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' and length(coalesce(p1.email,p0.email))>10 then '1' + else '0' end /*email_availability*/ + ,coalesce(p1.mobile_number,p0.mobile_number,'') /*mobile_phone*/ + ,case when length(coalesce(p1.mobile_number,p0.mobile_number))>1 then '1' else 0 end /*mobile_phone_data_ind*/ + ,case when coalesce(p1.mobile_number,p0.mobile_number) ~ '^1[3-9]\d{9}$' then '1' + else '0' end /*mobile_phone_availability*/ + ,coalesce(p1.full_name,p0.full_name,'') /*full_name*/ + ,coalesce(p1.prov_name,p0.prov_name) /*prov_name*/ + ,COALESCE(p0.create_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*create_time*/ + ,coalesce(p1.wechat_id,p0.wechat_id) /*wechat_id*/ + ,COALESCE(p0.last_update_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*update_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('t01_scrm_contact_his',1,3) /*Src_Sysname*/ + ,'t01_scrm_contact_his' /*Src_Table*/ + +FROM :PDMDB.t01_scrm_contact_his p0 +LEFT JOIN (select distinct on (scrm_leads_id) * from p20_pdm.t01_scrm_contact_update tscu +order by scrm_leads_id,update_time desc) p1 + ON p0 .scrm_leads_id =p1 .scrm_leads_id +; + + + +/*将不同数据插入到临时表 */ +;INSERT INTO d_scrm_contact_agi_INS ( + city_name /*城市*/ + ,company_name /*公司*/ + ,email /*邮箱*/ + ,email_data_ind /*邮箱数据标志*/ + ,email_availability /*邮箱有效性*/ + ,mobile_phone /*手机号码*/ + ,mobile_phone_data_ind /*手机号数据标志*/ + ,mobile_phone_availability /*手机号数据有效性*/ + ,full_name /*姓名*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,scrm_leads_id /*SCRM线索ID*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) + SELECT + P1.city_name /*城市*/ + ,P1.company_name /*公司*/ + ,P1.email /*邮箱*/ + ,P1.email_data_ind /*邮箱数据标志*/ + ,P1.email_availability /*邮箱有效性*/ + ,P1.mobile_phone /*手机号码*/ + ,P1.mobile_phone_data_ind /*手机号数据标志*/ + ,P1.mobile_phone_availability /*手机号数据有效性*/ + ,P1.full_name /*姓名*/ + ,P1.prov_name /*省份*/ + ,P1.create_time /*创建时间*/ + ,P1.wechat_id /*身份-企业微信外部联系人*/ + ,P1.update_time /*更新时间*/ + ,P1.scrm_leads_id /*SCRM线索ID*/ + ,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 d_scrm_contact_agi_CUR_I P1 +LEFT JOIN :COMMDB.d_scrm_contact P2 +ON P1.city_name = P2.city_name + AND P1.company_name = P2.company_name + AND P1.email = P2.email + AND P1.email_data_ind = P2.email_data_ind + AND P1.email_availability = P2.email_availability + AND P1.mobile_phone = P2.mobile_phone + AND P1.mobile_phone_data_ind = P2.mobile_phone_data_ind + AND P1.mobile_phone_availability = P2.mobile_phone_availability + AND P1.full_name = P2.full_name + AND P1.prov_name = P2.prov_name + AND P1.create_time = P2.create_time + AND P1.wechat_id = P2.wechat_id + AND P1.update_time = P2.update_time + AND P1.scrm_leads_id = P2.scrm_leads_id + +WHERE P2.city_name IS NULL + OR P2.company_name IS NULL + OR P2.email IS NULL + OR P2.email_data_ind IS NULL + OR P2.email_availability IS NULL + OR P2.mobile_phone IS NULL + OR P2.mobile_phone_data_ind IS NULL + OR P2.mobile_phone_availability IS NULL + OR P2.full_name IS NULL + OR P2.prov_name IS NULL + OR P2.create_time IS NULL + OR P2.wechat_id IS NULL + OR P2.update_time IS NULL + OR P2.scrm_leads_id IS NULL + +; +/*将新增数据插入到目标表 */ +;INSERT INTO :COMMDB.d_scrm_contact ( + city_name /*城市*/ + ,company_name /*公司*/ + ,email /*邮箱*/ + ,email_data_ind /*邮箱数据标志*/ + ,email_availability /*邮箱有效性*/ + ,mobile_phone /*手机号码*/ + ,mobile_phone_data_ind /*手机号数据标志*/ + ,mobile_phone_availability /*手机号数据有效性*/ + ,full_name /*姓名*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,scrm_leads_id /*SCRM线索ID*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) +SELECT + P1.city_name /*城市*/ + ,P1.company_name /*公司*/ + ,P1.email /*邮箱*/ + ,P1.email_data_ind /*邮箱数据标志*/ + ,P1.email_availability /*邮箱有效性*/ + ,P1.mobile_phone /*手机号码*/ + ,P1.mobile_phone_data_ind /*手机号数据标志*/ + ,P1.mobile_phone_availability /*手机号数据有效性*/ + ,P1.full_name /*姓名*/ + ,P1.prov_name /*省份*/ + ,P1.create_time /*创建时间*/ + ,P1.wechat_id /*身份-企业微信外部联系人*/ + ,P1.update_time /*更新时间*/ + ,P1.scrm_leads_id /*SCRM线索ID*/ + ,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 d_scrm_contact_agi_INS P1 +ON CONFLICT ( scrm_leads_id) +DO UPDATE SET + scrm_leads_id=excluded.scrm_leads_id + ,city_name=excluded.city_name + ,company_name=excluded.company_name + ,email=excluded.email + ,email_data_ind=excluded.email_data_ind + ,email_availability=excluded.email_availability + ,mobile_phone=excluded.mobile_phone + ,mobile_phone_data_ind=excluded.mobile_phone_data_ind + ,mobile_phone_availability=excluded.mobile_phone_availability + ,full_name=excluded.full_name + ,prov_name=excluded.prov_name + ,create_time=excluded.create_time + ,wechat_id=excluded.wechat_id + ,update_time=excluded.update_time + ,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 + diff --git a/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/t01_scrm_contact.sql b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/t01_scrm_contact.sql new file mode 100644 index 0000000..decd2f0 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/t01_scrm_contact.sql @@ -0,0 +1,52 @@ + +DROP TABLE IF EXISTS p20_pdm.t01_scrm_contact; +CREATE TABLE IF NOT EXISTS p20_pdm.t01_scrm_contact ( + scrm_leads_id VARCHAR(20) + , city_name VARCHAR(20) + , company_name VARCHAR(50) + , industry VARCHAR(100) + , department VARCHAR(50) + , district VARCHAR(50) + , address_detail VARCHAR(100) + , email VARCHAR(50) + , mobile_number VARCHAR(20) + , full_name VARCHAR(20) + , nick_name VARCHAR(20) + , prov_name VARCHAR(20) + , create_time timestamp(0) + , wechat_id VARCHAR(100) + , update_time timestamp(0) + , etl_batch_no VARCHAR(50) + , etl_first_dt timestamp(0) + , etl_job VARCHAR(50) + , etl_proc_dt timestamp(0) + , etl_tx_dt timestamp(0) + , src_sysname VARCHAR(50) + , src_table VARCHAR(50) + ,primary key( scrm_leads_id ) +); + + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.scrm_leads_id IS 'SCRM线索ID'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.city_name IS '城市'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.company_name IS '公司'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.industry IS '行业'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.department IS '部门'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.district IS '区'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.address_detail IS '详细地址'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.email IS '邮箱'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.mobile_number IS '手机号码'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.full_name IS '姓名'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.nick_name IS '昵称'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.prov_name IS '省份'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.create_time IS '创建时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.wechat_id IS '身份-企业微信外部联系人'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.update_time IS '更新时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.etl_batch_no IS '作业批次号'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.etl_first_dt IS '最初入库时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.etl_job IS '作业名称'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.etl_proc_dt IS '本次入库时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.etl_tx_dt IS '作业运行时间'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.src_sysname IS '来源系统'; + COMMENT ON COLUMN p20_pdm.t01_scrm_contact.src_table IS '来源表'; + +COMMENT ON TABLE p20_pdm.t01_scrm_contact IS 'SCRM联系方式'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/t01_scrm_contact_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/t01_scrm_contact_agi.sql new file mode 100644 index 0000000..78d9c3c --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/SCRM联系方式/t01_scrm_contact_agi.sql @@ -0,0 +1,271 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2024(by IdgValue, qihang.feng@idgvalue.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :t01_scrm_contact(SCRM联系方式) */ +/*Create Date:2025-10-21 16:45:00 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2025-10-21 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2025-10-21 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: p10_sa.s98_s_api_contact_update_info */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:t01_scrm_contact */ +/*ETL Job Name:t01_scrm_contact */ +/*ETL Frequency:None */ +/*ETL Policy:F2 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE t01_scrm_contact_agi_CUR_I + ( LIKE :PDMDB.t01_scrm_contact) +ON COMMIT PRESERVE ROWS; + + + +/*创建临时表加载不同数据 */ +CREATE TEMPORARY TABLE t01_scrm_contact_agi_INS +( LIKE :PDMDB.t01_scrm_contact) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:s98_s_api_contact_update_info*************************************************/ +/*****************************************************************************************************/ +INSERT INTO t01_scrm_contact_agi_CUR_I ( + scrm_leads_id /*SCRM线索ID*/ + ,city_name /*城市*/ + ,company_name /*公司*/ + ,industry /*行业*/ + ,department /*部门*/ + ,job_title /*职位*/ + ,district /*区*/ + ,address_detail /*详细地址*/ + ,email /*邮箱*/ + ,mobile_number /*手机号码*/ + ,full_name /*姓名*/ + ,nick_name /*昵称*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,etl_batch_no /*作业批次号*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_job /*作业名称*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ) +SELECT + COALESCE(TRIM(CAST(p0.id AS VARCHAR(20))),'') /*scrm_leads_id*/ + ,coalesce(p0.properties::json ->> 'City','') /*city_name*/ + ,coalesce(p0.properties::json ->> 'Organization','') /*company_name*/ + ,coalesce(p0.properties::json ->> 'Industry','') /*industry*/ + ,coalesce(p0.properties::json ->> 'Department','') /*department*/ + ,coalesce(p0.properties::json ->> 'Position','') /*job_title*/ + ,coalesce(p0.properties::json ->> 'District','') /*district*/ + ,coalesce(p0.properties::json ->> 'Detail','') /*address_detail*/ + ,coalesce(p0.properties::json ->> 'Mailbox','') /*email*/ + ,coalesce(p0.properties::json ->> 'Phone','') /*mobile_number*/ + ,coalesce(p0.properties::json ->> 'FullName','') /*full_name*/ + ,coalesce(p0.properties::json ->> 'NickName','') /*nick_name*/ + ,coalesce(p0.properties::json ->> 'Province','') /*prov_name*/ + ,TO_TIMESTAMP(substr(p0.properties::json ->> 'CreatedAt',1,19),'YYYY-MM-DD"T"HH24:MI:SS') AT TIME ZONE 'PRC' /*create_time*/ + ,'' /*wechat_id*/ + ,TO_TIMESTAMP(substr(p0.properties::json ->> 'UpdatedAt',1,19),'YYYY-MM-DD"T"HH24:MI:SS') AT TIME ZONE 'PRC' /*update_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('s98_s_api_contact_update_info',1,3) /*src_sysname*/ + ,'s98_s_api_contact_update_info' /*src_table*/ + +FROM p10_sa.s98_s_api_contact_update_info p0 +; + + + +/*将不同数据插入到临时表 */ +;INSERT INTO t01_scrm_contact_agi_INS ( + city_name /*城市*/ + ,company_name /*公司*/ + ,industry /*行业*/ + ,department /*部门*/ + ,job_title /*职位*/ + ,district /*区*/ + ,address_detail /*详细地址*/ + ,email /*邮箱*/ + ,mobile_number /*手机号码*/ + ,full_name /*姓名*/ + ,nick_name /*昵称*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,scrm_leads_id /*SCRM线索ID*/ + ,etl_batch_no /*作业批次号*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_job /*作业名称*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + +) + SELECT + P1.city_name /*城市*/ + ,P1.company_name /*公司*/ + ,P1.industry /*行业*/ + ,P1.department /*部门*/ + ,P1.job_title /*职位*/ + ,P1.district /*区*/ + ,P1.address_detail /*详细地址*/ + ,P1.email /*邮箱*/ + ,P1.mobile_number /*手机号码*/ + ,P1.full_name /*姓名*/ + ,P1.nick_name /*昵称*/ + ,P1.prov_name /*省份*/ + ,P1.create_time /*创建时间*/ + ,P1.wechat_id /*身份-企业微信外部联系人*/ + ,P1.update_time /*更新时间*/ + ,P1.scrm_leads_id /*SCRM线索ID*/ + ,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 t01_scrm_contact_agi_CUR_I P1 +LEFT JOIN :PDMDB.t01_scrm_contact P2 +ON P1.city_name = P2.city_name + AND P1.company_name = P2.company_name + AND P1.industry = P2.industry + AND P1.department = P2.department + AND P1.job_title = P2.job_title + AND P1.district = P2.district + AND P1.address_detail = P2.address_detail + AND P1.email = P2.email + AND P1.mobile_number = P2.mobile_number + AND P1.full_name = P2.full_name + AND P1.nick_name = P2.nick_name + AND P1.prov_name = P2.prov_name + AND P1.create_time = P2.create_time + AND P1.wechat_id = P2.wechat_id + AND P1.update_time = P2.update_time + AND P1.scrm_leads_id = P2.scrm_leads_id + +WHERE P2.city_name IS NULL + OR P2.company_name IS NULL + OR P2.industry IS NULL + OR P2.department IS NULL + OR P2.job_title IS NULL + OR P2.district IS NULL + OR P2.address_detail IS NULL + OR P2.email IS NULL + OR P2.mobile_number IS NULL + OR P2.full_name IS NULL + OR P2.nick_name IS NULL + OR P2.prov_name IS NULL + OR P2.create_time IS NULL + OR P2.wechat_id IS NULL + OR P2.update_time IS NULL + OR P2.scrm_leads_id IS NULL + +; +/*将新增数据插入到目标表 */ +;INSERT INTO :PDMDB.t01_scrm_contact ( + city_name /*城市*/ + ,company_name /*公司*/ + ,industry /*行业*/ + ,department /*部门*/ + ,job_title /*职位*/ + ,district /*区*/ + ,address_detail /*详细地址*/ + ,email /*邮箱*/ + ,mobile_number /*手机号码*/ + ,full_name /*姓名*/ + ,nick_name /*昵称*/ + ,prov_name /*省份*/ + ,create_time /*创建时间*/ + ,wechat_id /*身份-企业微信外部联系人*/ + ,update_time /*更新时间*/ + ,scrm_leads_id /*SCRM线索ID*/ + ,etl_batch_no /*作业批次号*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_job /*作业名称*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + +) +SELECT + P1.city_name /*城市*/ + ,P1.company_name /*公司*/ + ,P1.industry /*行业*/ + ,P1.department /*部门*/ + ,P1.job_title /*职位*/ + ,P1.district /*区*/ + ,P1.address_detail /*详细地址*/ + ,P1.email /*邮箱*/ + ,P1.mobile_number /*手机号码*/ + ,P1.full_name /*姓名*/ + ,P1.nick_name /*昵称*/ + ,P1.prov_name /*省份*/ + ,P1.create_time /*创建时间*/ + ,P1.wechat_id /*身份-企业微信外部联系人*/ + ,P1.update_time /*更新时间*/ + ,P1.scrm_leads_id /*SCRM线索ID*/ + ,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 t01_scrm_contact_agi_INS P1 +ON CONFLICT ( scrm_leads_id) +DO UPDATE SET + scrm_leads_id=excluded.scrm_leads_id + ,city_name=excluded.city_name + ,company_name=excluded.company_name + ,industry=excluded.industry + ,department=excluded.department + ,job_title=excluded.job_title + ,district=excluded.district + ,address_detail=excluded.address_detail + ,email=excluded.email + ,mobile_number=excluded.mobile_number + ,full_name=excluded.full_name + ,nick_name=excluded.nick_name + ,prov_name=excluded.prov_name + ,create_time=excluded.create_time + ,wechat_id=excluded.wechat_id + ,update_time=excluded.update_time + ,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 + diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户信息/cust_all_info.sql b/dev/workflow/TK_Cust/yi_api_contact/客户信息/cust_all_info.sql new file mode 100644 index 0000000..81981bd --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户信息/cust_all_info.sql @@ -0,0 +1,52 @@ + +DROP TABLE IF EXISTS p60_mart.cust_all_info; +CREATE TABLE IF NOT EXISTS p60_mart.cust_all_info ( + contact_id text + , contact text + , contact_channel text + , full_name text + , mobile VARCHAR(0) + , email VARCHAR(0) + , wechat VARCHAR(0) + , company VARCHAR(0) + , account text + , country VARCHAR(0) + , prov_name VARCHAR(0) + , city_name VARCHAR(0) + , industry VARCHAR(50) + , ccp_value VARCHAR(0) + , mobile_phone_date_ind text + , mobile_phone_availability text + , email_data_ind text + , email_availability text + , crm_active_time timestamp(0) + , scrm_active_time timestamp(0) + , livechat_active_time timestamp(0) + , last_activate_time timestamp(0) + +); + + COMMENT ON COLUMN p60_mart.cust_all_info.contact_id IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.contact IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.contact_channel IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.full_name IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.mobile IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.email IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.wechat IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.company IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.account IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.country IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.prov_name IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.city_name IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.industry IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.ccp_value IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.mobile_phone_date_ind IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.mobile_phone_availability IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.email_data_ind IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.email_availability IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.crm_active_time IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.scrm_active_time IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.livechat_active_time IS ''; + COMMENT ON COLUMN p60_mart.cust_all_info.last_activate_time IS ''; + +COMMENT ON TABLE p60_mart.cust_all_info IS ''; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户信息/cust_all_info_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/客户信息/cust_all_info_agi.sql new file mode 100644 index 0000000..676c647 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户信息/cust_all_info_agi.sql @@ -0,0 +1,224 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2020(by Qihang Feng, QF255001@TERADATA.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :cust_all_info(客户信息) */ +/*Create Date:2024-05-13 14:57:41 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-01-19 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2024-05-13 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: :COMMDB.d_crm_contact */ +/*Source table 2: p30_common.cust_contact_info */ +/*Source table 3: :COMMDB.d_livechat_contact */ +/*Source table 4: :COMMDB.d_scrm_contact */ +/*Source table 5: :COMMDB.v_cust_active */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:cust_all_info */ +/*ETL Job Name:cust_all_info */ +/*ETL Frequency:Daily */ +/*ETL Policy:F1 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE cust_all_info_agi_CUR_I + ( LIKE :MARTDB.cust_all_info) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:cust_contact_info*************************************************************/ +/*****************************************************************************************************/ + +INSERT INTO cust_all_info_agi_CUR_I ( + contact_id /*联系编号*/ + ,contact /*联系方式*/ + ,contact_channel /*联系渠道*/ + ,full_name /*姓名*/ + ,mobile /*手机号*/ + ,email /*邮箱*/ + ,wechat /*微信*/ + ,company /*公司*/ + ,account /*账户*/ + ,country /*国家*/ + ,prov_name /*省份*/ + ,city_name /*城市*/ + ,industry /*行业*/ + ,mobile_phone_data_ind /*手机号是否有数据*/ + ,mobile_phone_availability /*手机号是否合规*/ + ,email_data_ind /*邮箱是否有数据*/ + ,email_availability /*邮箱是否合规*/ + ,crm_active_time /*CRM系统活跃时间*/ + ,scrm_active_time /*SCRM系统活跃时间*/ + ,livechat_active_time /*Livechat系统活跃时间*/ + ,last_activate_time /*最后活跃时间*/ + ,udesk_active_time /*Udesk系统活跃时间*/ + ,crm_create_time /*CRM创建时间*/ + ,scrm_create_time /*SCRM创建时间*/ + ,livechat_create_time /*Livechat创建时间*/ + ,lease_create_time /*最早创建时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ) +SELECT + p1.contact_id /*contact_id*/ + ,p1.contact /*contact*/ + ,p1.contact_channel /*contact_channel*/ + ,p1.full_name /*full_name*/ + ,p1.mobile /*mobile*/ + ,p1.email /*email*/ + ,p1.wechat /*wechat*/ + ,p1.company /*company*/ + ,p1.account /*account*/ + ,p1.country /*country*/ + ,p1.prov_name /*prov_name*/ + ,p1.city_name /*city_name*/ + ,COALESCE(p1.industry,'') /*industry*/ + ,coalesce(p2.mobile_phone_data_ind::text,p3.mobile_phone_data_ind::text,p4.mobile_phone_data_ind::text,'0') /*mobile_phone_data_ind*/ + ,coalesce(p2.mobile_phone_availability, p3.mobile_phone_availability,p4.mobile_phone_availability,'0') /*mobile_phone_availability*/ + ,coalesce(p2.email_data_ind::text,p3.email_data_ind::text,p4.email_data_ind::text,'0') /*email_data_ind*/ + ,coalesce(p2.email_availability , p3.email_availability,p4.email_availability,'0') /*email_availability*/ + ,coalesce(p5.active_time,'1900-01-01') /*crm_active_time*/ + ,coalesce(p6.active_time,'1900-01-01') /*scrm_active_time*/ + ,coalesce(p7.active_time,'1900-01-01') /*livechat_active_time*/ + ,greatest(coalesce(p5.active_time,'1900-01-01'),coalesce(p6.active_time,'1900-01-01'),coalesce(p7.active_time,'1900-01-01'),coalesce(p8.active_time,'1900-01-01')) /*last_activate_time*/ + ,coalesce(p8.active_time,'1900-01-01') /*udesk_active_time*/ + ,coalesce(p2.create_time,'9999-12-31') /*crm_create_time*/ + ,coalesce(p3.create_time,'9999-12-31') /*scrm_create_time*/ + ,coalesce(p4.create_time,'9999-12-31') /*livechat_create_time*/ + ,least(coalesce(p2.create_time,'9999-12-31'),coalesce(p3.create_time,'9999-12-31'),coalesce(p4.create_time,'9999-12-31')) /*lease_create_time*/ + ,Substr('cust_contact_info',1,3) /*src_sysname*/ + ,'cust_contact_info' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + +FROM p30_common.cust_contact_info p1 +LEFT JOIN :COMMDB.d_crm_contact p2 + ON p1.crm_contact =p2.crm_contact_account +LEFT JOIN :COMMDB.d_scrm_contact p3 + ON p1.scrm_contact =p3.scrm_leads_id +LEFT JOIN :COMMDB.d_livechat_contact p4 + ON p1.livechat_contact =p4.livechat_leads_id +LEFT JOIN :COMMDB.v_cust_active p5 + ON p1.crm_contact =p5.contact_account +and p5.contact_channel='CRM' +LEFT JOIN :COMMDB.v_cust_active p6 + ON p1.scrm_contact =p6.contact_account +and p6.contact_channel='SCRM' +LEFT JOIN :COMMDB.v_cust_active p7 + ON p1.livechat_contact =p7.contact_account +and p7.contact_channel='Livechat' +LEFT JOIN :COMMDB.v_cust_active p8 + ON p1.udesk_contact =p8.contact_account +and p8.contact_channel ='Udesk' + + +; + + +create temporary table cust_all_info_temp +as select distinct on (contact_id) * from cust_all_info_agi_CUR_I; + +delete from cust_all_info_agi_CUR_I; +insert into cust_all_info_agi_CUR_I +select * from cust_all_info_temp; +/*从目标表中删除所有数据 cust_all_info(客户信息) */ +DELETE FROM :MARTDB.cust_all_info +WHERE ETL_JOB=:ETLJOB; + + +/*将新增数据插入到目标表 */ +;INSERT INTO :MARTDB.cust_all_info ( + contact_id /*联系编号*/ + ,contact /*联系方式*/ + ,contact_channel /*联系渠道*/ + ,full_name /*姓名*/ + ,mobile /*手机号*/ + ,email /*邮箱*/ + ,wechat /*微信*/ + ,company /*公司*/ + ,account /*账户*/ + ,country /*国家*/ + ,prov_name /*省份*/ + ,city_name /*城市*/ + ,industry /*行业*/ + ,mobile_phone_data_ind /*手机号是否有数据*/ + ,mobile_phone_availability /*手机号是否合规*/ + ,email_data_ind /*邮箱是否有数据*/ + ,email_availability /*邮箱是否合规*/ + ,crm_active_time /*CRM系统活跃时间*/ + ,scrm_active_time /*SCRM系统活跃时间*/ + ,livechat_active_time /*Livechat系统活跃时间*/ + ,last_activate_time /*最后活跃时间*/ + ,udesk_active_time /*Udesk系统活跃时间*/ + ,crm_create_time /*CRM创建时间*/ + ,scrm_create_time /*SCRM创建时间*/ + ,livechat_create_time /*Livechat创建时间*/ + ,lease_create_time /*最早创建时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + + ) + SELECT + P1.contact_id /*联系编号*/ + ,P1.contact /*联系方式*/ + ,P1.contact_channel /*联系渠道*/ + ,P1.full_name /*姓名*/ + ,P1.mobile /*手机号*/ + ,P1.email /*邮箱*/ + ,P1.wechat /*微信*/ + ,P1.company /*公司*/ + ,P1.account /*账户*/ + ,P1.country /*国家*/ + ,P1.prov_name /*省份*/ + ,P1.city_name /*城市*/ + ,P1.industry /*行业*/ + ,P1.mobile_phone_data_ind /*手机号是否有数据*/ + ,P1.mobile_phone_availability /*手机号是否合规*/ + ,P1.email_data_ind /*邮箱是否有数据*/ + ,P1.email_availability /*邮箱是否合规*/ + ,P1.crm_active_time /*CRM系统活跃时间*/ + ,P1.scrm_active_time /*SCRM系统活跃时间*/ + ,P1.livechat_active_time /*Livechat系统活跃时间*/ + ,P1.last_activate_time /*最后活跃时间*/ + ,P1.udesk_active_time /*Udesk系统活跃时间*/ + ,P1.crm_create_time /*CRM创建时间*/ + ,P1.scrm_create_time /*SCRM创建时间*/ + ,P1.livechat_create_time /*Livechat创建时间*/ + ,P1.lease_create_time /*最早创建时间*/ + ,P1.src_sysname /*来源系统*/ + ,P1.src_table /*来源表*/ + ,P1.etl_job /*作业名称*/ + ,P1.etl_first_dt /*最初入库时间*/ + ,P1.etl_proc_dt /*本次入库时间*/ + ,P1.etl_tx_dt /*作业运行时间*/ + ,P1.etl_batch_no /*作业批次号*/ + + FROM cust_all_info_agi_CUR_I P1 + +; +/*****程序结束退出 */ +\q + 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 new file mode 100644 index 0000000..76d7389 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records.sql @@ -0,0 +1,32 @@ + +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) + , 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 ) +); + + 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.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 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 new file mode 100644 index 0000000..82e7c43 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户接触记录/cust_enagement_records_agi.sql @@ -0,0 +1,130 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2020(by Qihang Feng, QF255001@TERADATA.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :cust_enagement_records(客户接触记录) */ +/*Create Date:2024-06-17 11:18:28 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-06-17 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2024-06-17 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: :COMMDB.cust_leads_detail */ +/*Source table 2: :COMMDB.select distinct on (contact_id) contact_id,full_name,contact_channel from p30_COMMON.cust_contact_info*/ +/*Source table 3: :COMMDB.v_cust_contact_mapping */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:cust_enagement_records */ +/*ETL Job Name:cust_enagement_records */ +/*ETL Frequency:Daily */ +/*ETL Policy:F1 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE cust_enagement_records_agi_CUR_I + ( LIKE :MARTDB.cust_enagement_records) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:cust_leads_detail*************************************************************/ +/*****************************************************************************************************/ + +INSERT INTO cust_enagement_records_agi_CUR_I ( + contact_id /*客户编号*/ + ,full_name /*全名*/ + ,record_type /*记录类型*/ + ,enagement_record /*接触记录*/ + ,record_time /*记录时间*/ + ,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*/ + ,case when p0.contact_channel = 'CRM Raw Leads' then p0."label" +else p0.contact_account +end /*enagement_record*/ + ,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*/ + +FROM :COMMDB.cust_leads_detail p0 +LEFT JOIN :COMMDB.v_cust_contact_mapping p1 + ON p0 .contact_account =p1 .contact +and p1 .contact_channel = case when p0.contact_channel = 'CRM Raw Leads' then 'CRM' +when p0.contact_channel = 'Chat' then 'Livechat' +when p0.contact_channel = 'Call' then 'Udesk' +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 :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 + +; +/*****程序结束退出 */ +\q + diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户线索/cust_leads.sql b/dev/workflow/TK_Cust/yi_api_contact/客户线索/cust_leads.sql new file mode 100644 index 0000000..9f6fbbe --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户线索/cust_leads.sql @@ -0,0 +1,14 @@ + +DROP TABLE IF EXISTS p30_common.cust_leads; +CREATE TABLE IF NOT EXISTS p30_common.cust_leads ( + contact_channel text + , contact_account VARCHAR(0) + , active_time timestamp(0) + +); + + COMMENT ON COLUMN p30_common.cust_leads.contact_channel IS ''; + COMMENT ON COLUMN p30_common.cust_leads.contact_account IS ''; + COMMENT ON COLUMN p30_common.cust_leads.active_time IS ''; + +COMMENT ON TABLE p30_common.cust_leads IS ''; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户线索/cust_leads_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/客户线索/cust_leads_agi.sql new file mode 100644 index 0000000..f98a217 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户线索/cust_leads_agi.sql @@ -0,0 +1,201 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2020(by Qihang Feng, QF255001@TERADATA.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :cust_leads(客户线索) */ +/*Create Date:2024-05-06 17:28:10 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-01-19 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2024-05-06 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: p20_pdm.t01_scrm_leads */ +/*Source table 2: p20_pdm.t01_crm_raw_leads */ +/*Source table 3: p20_pdm.t01_scrm_leads_his */ +/*Source table 4: p20_pdm.t01_livechat_record */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:cust_leads */ +/*ETL Job Name:cust_leads */ +/*ETL Frequency:Daily */ +/*ETL Policy:F1 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE cust_leads_agi_CUR_I + ( LIKE :COMMDB.cust_leads) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:t01_livechat_record***********************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*线索编号*/ + ,active_time /*活跃时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ) +SELECT + 'Livechat' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.livechat_leads_id AS VARCHAR(50))),'') /*contact_account*/ + ,COALESCE(p0.chat_start_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_livechat_record',1,3) /*src_sysname*/ + ,'t01_livechat_record' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + +FROM p20_pdm.t01_livechat_record p0 +; + + + +/*****************************************************************************************************/ +/* GROUP 2:Source Table:t01_crm_raw_leads*************************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*线索编号*/ + ,active_time /*活跃时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ) +SELECT + 'CRM' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.crm_contact_account AS VARCHAR(50))),'') /*contact_account*/ + ,COALESCE(TO_TIMESTAMP(CAST(p0.create_time AS VARCHAR(19)),'YYYY-MM-DD HH24:mi:ss'),TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_crm_raw_leads',1,3) /*src_sysname*/ + ,'t01_crm_raw_leads' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + +FROM p20_pdm.t01_crm_raw_leads p0 +; + + + +/*****************************************************************************************************/ +/* GROUP 3:Source Table:t01_scrm_leads****************************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*线索编号*/ + ,active_time /*活跃时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ) +SELECT + 'SCRM' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.customer_id AS VARCHAR(50))),'') /*contact_account*/ + ,COALESCE(p0.date,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_scrm_leads',1,3) /*src_sysname*/ + ,'t01_scrm_leads' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + +FROM p20_pdm.t01_scrm_leads p0 +; + + + +/*****************************************************************************************************/ +/* GROUP 4:Source Table:t01_scrm_leads_his************************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*线索编号*/ + ,active_time /*活跃时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ) +SELECT + 'SCRM' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.cue_id AS VARCHAR(50))),'') /*contact_account*/ + ,COALESCE(p0.activate_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_scrm_leads_his',1,3) /*src_sysname*/ + ,'t01_scrm_leads_his' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + +FROM p20_pdm.t01_scrm_leads_his p0 +; + + + +/*从目标表中删除所有数据 cust_leads(客户线索) */ +DELETE FROM :COMMDB.cust_leads +WHERE ETL_JOB=:ETLJOB; + + +/*将新增数据插入到目标表 */ +;INSERT INTO :COMMDB.cust_leads ( + contact_channel /*线索渠道*/ + ,contact_account /*线索编号*/ + ,active_time /*活跃时间*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + + ) + SELECT + P1.contact_channel /*线索渠道*/ + ,P1.contact_account /*线索编号*/ + ,P1.active_time /*活跃时间*/ + ,P1.src_sysname /*来源系统*/ + ,P1.src_table /*来源表*/ + ,P1.etl_job /*作业名称*/ + ,P1.etl_first_dt /*最初入库时间*/ + ,P1.etl_proc_dt /*本次入库时间*/ + ,P1.etl_tx_dt /*作业运行时间*/ + ,P1.etl_batch_no /*作业批次号*/ + + FROM cust_leads_agi_CUR_I P1 + +; +/*****程序结束退出 */ +\q + diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户线索明细/cust_leads_detail.sql b/dev/workflow/TK_Cust/yi_api_contact/客户线索明细/cust_leads_detail.sql new file mode 100644 index 0000000..68149f5 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户线索明细/cust_leads_detail.sql @@ -0,0 +1,32 @@ + +DROP TABLE IF EXISTS p30_common.cust_leads_detail; +CREATE TABLE IF NOT EXISTS p30_common.cust_leads_detail ( + contact_channel varchar(50) + , contact_account varchar(50) + , label varchar(50) + , event varchar(100) + , active_time timestamp(0) + , Src_Sysname varchar(50) + , Src_Table varchar(50) + , Etl_Job varchar(200) + , Etl_First_Dt timestamp(0) + , Etl_Tx_Dt timestamp(0) + , Etl_Proc_Dt timestamp(0) + , Etl_Batch_No varchar(50) + ,primary key( contact_channel,contact_account,label,active_time ) +); + + COMMENT ON COLUMN p30_common.cust_leads_detail.contact_channel IS '线索渠道'; + COMMENT ON COLUMN p30_common.cust_leads_detail.contact_account IS '线索编号'; + COMMENT ON COLUMN p30_common.cust_leads_detail.label IS '标签'; + COMMENT ON COLUMN p30_common.cust_leads_detail.event IS '事件'; + COMMENT ON COLUMN p30_common.cust_leads_detail.active_time IS '活跃时间'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Src_Sysname IS '来源系统'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Src_Table IS '来源表'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Etl_Job IS '作业名称'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Etl_First_Dt IS '最初入库时间'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Etl_Tx_Dt IS '作业运行时间'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Etl_Proc_Dt IS '本次入库时间'; + COMMENT ON COLUMN p30_common.cust_leads_detail.Etl_Batch_No IS '作业批次号'; + +COMMENT ON TABLE p30_common.cust_leads_detail IS '客户线索明细'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户线索明细/cust_leads_detail_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/客户线索明细/cust_leads_detail_agi.sql new file mode 100644 index 0000000..be58fd2 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户线索明细/cust_leads_detail_agi.sql @@ -0,0 +1,334 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2020(by Qihang Feng, QF255001@TERADATA.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :cust_leads_detail(客户线索明细) */ +/*Create Date:2024-09-10 13:28:54 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-05-31 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2024-09-10 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: :PDMDB.t01_scrm_leads_his */ +/*Source table 2: :PDMDB.t01_udesk_record */ +/*Source table 3: :PDMDB.t01_livechat_record */ +/*Source table 4: :PDMDB.t01_scrm_leads */ +/*Source table 5: :PDMDB.t01_crm_raw_leads */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:cust_leads_detail */ +/*ETL Job Name:cust_leads_detail */ +/*ETL Frequency:Daily */ +/*ETL Policy:F2 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE cust_leads_detail_agi_CUR_I + ( LIKE :COMMDB.cust_leads_detail) +ON COMMIT PRESERVE ROWS; + + + +/*创建临时表加载不同数据 */ +CREATE TEMPORARY TABLE cust_leads_detail_agi_INS +( LIKE :COMMDB.cust_leads_detail) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:t01_crm_raw_leads*************************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_detail_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,event /*事件*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + ) +SELECT + 'CRM Raw Leads' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.crm_contact_account AS varchar(50))),'') /*contact_account*/ + ,COALESCE(TRIM(CAST(p0.lead_number AS varchar(50))),'') /*label*/ + ,COALESCE(TRIM(CAST(p0.market_type AS varchar(100))),'') /*event*/ + ,COALESCE(p0.create_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_crm_raw_leads',1,3) /*Src_Sysname*/ + ,'t01_crm_raw_leads' /*Src_Table*/ + ,:ETLJOB /*Etl_Job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_First_Dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_Tx_Dt*/ + ,current_timestamp(0) /*Etl_Proc_Dt*/ + ,0 /*Etl_Batch_No*/ + +FROM :PDMDB.t01_crm_raw_leads p0 +; + + + +/*****************************************************************************************************/ +/* GROUP 2:Source Table:t01_scrm_leads_his************************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_detail_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,event /*事件*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + ) +SELECT + 'SCRM Event' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.cue_id AS varchar(50))),'') /*contact_account*/ + ,COALESCE(TRIM(CAST(p0.activate_name AS varchar(50))),'') /*label*/ + ,COALESCE(TRIM(CAST(p0.event_name AS varchar(100))),'') /*event*/ + ,COALESCE(p0.activate_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_scrm_leads_his',1,3) /*Src_Sysname*/ + ,'t01_scrm_leads_his' /*Src_Table*/ + ,:ETLJOB /*Etl_Job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_First_Dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_Tx_Dt*/ + ,current_timestamp(0) /*Etl_Proc_Dt*/ + ,0 /*Etl_Batch_No*/ + +FROM :PDMDB.t01_scrm_leads_his p0 +; + + + +/*****************************************************************************************************/ +/* GROUP 3:Source Table:t01_scrm_leads****************************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_detail_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,event /*事件*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + ) +SELECT + 'SCRM Event' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.customer_id AS varchar(50))),'') /*contact_account*/ + ,COALESCE(TRIM(CAST(p0.label AS varchar(50))),'') /*label*/ + ,COALESCE(TRIM(CAST(p0.target_name AS varchar(100))),'') /*event*/ + ,COALESCE(p0.date,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_scrm_leads',1,3) /*Src_Sysname*/ + ,'t01_scrm_leads' /*Src_Table*/ + ,:ETLJOB /*Etl_Job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_First_Dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_Tx_Dt*/ + ,current_timestamp(0) /*Etl_Proc_Dt*/ + ,0 /*Etl_Batch_No*/ + +FROM :PDMDB.t01_scrm_leads p0 +; + + + +/*****************************************************************************************************/ +/* GROUP 4:Source Table:t01_udesk_record**************************************************************/ +/*****************************************************************************************************/ + +INSERT INTO cust_leads_detail_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,event /*事件*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + ) +SELECT + 'Call' /*contact_channel*/ + ,COALESCE(TRIM(p0.call_id),'') /*contact_account*/ + ,COALESCE(TRIM(CAST(p0.type AS varchar(50))),'') /*label*/ + ,case when p0.responsible_group = 'MKT' then '产品报价' + when p0.responsible_group = 'IAM' then '产品报价' + when p0.responsible_group = 'TSC-KEI' then '技术支持' + when p0.responsible_group = 'TSC-TEK' then '技术支持' + when p0.responsible_group = 'SSO-TEK' then '维修与校准' +else '其他' end /*event*/ + ,COALESCE(p0.record_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_udesk_record',1,3) /*Src_Sysname*/ + ,'t01_udesk_record' /*Src_Table*/ + ,:ETLJOB /*Etl_Job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_First_Dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_Tx_Dt*/ + ,current_timestamp(0) /*Etl_Proc_Dt*/ + ,0 /*Etl_Batch_No*/ + +FROM (select distinct on (call_id) +* from p20_pdm.t01_udesk_record tur +order by call_id,"type") p0 + + +; + + + +/*****************************************************************************************************/ +/* GROUP 5:Source Table:t01_livechat_record***********************************************************/ +/*****************************************************************************************************/ +INSERT INTO cust_leads_detail_agi_CUR_I ( + contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,event /*事件*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + ) +SELECT + 'Chat' /*contact_channel*/ + ,COALESCE(TRIM(CAST(p0.livechat_leads_id AS varchar(50))),'') /*contact_account*/ + ,COALESCE(TRIM(p0.pre_chat_service),'') /*label*/ + ,case when p0.pre_chat_service like '%维修%' then '维修与校准' +when p0.pre_chat_service like '%技术%' then '技术支持' +when p0.pre_chat_service like '%售后%' then '售后服务' +when p0.pre_chat_service like '%报价%' then '产品报价' +else '其他' end /*event*/ + ,COALESCE(p0.chat_creation_time,TO_TIMESTAMP(:NULLDATE,'YYYYMMDD')) /*active_time*/ + ,Substr('t01_livechat_record',1,3) /*Src_Sysname*/ + ,'t01_livechat_record' /*Src_Table*/ + ,:ETLJOB /*Etl_Job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_First_Dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*Etl_Tx_Dt*/ + ,current_timestamp(0) /*Etl_Proc_Dt*/ + ,0 /*Etl_Batch_No*/ + +FROM :PDMDB.t01_livechat_record p0 +; + + + +/*将不同数据插入到临时表 */ +;INSERT INTO cust_leads_detail_agi_INS ( + event /*事件*/ + ,contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + +) + SELECT + P1.event /*事件*/ + ,P1.contact_channel /*线索渠道*/ + ,P1.contact_account /*联系编号*/ + ,P1.label /*标签*/ + ,P1.active_time /*活跃时间*/ + ,P1.Src_Sysname /*来源系统*/ + ,P1.Src_Table /*来源表*/ + ,P1.Etl_Job /*作业名称*/ + ,P1.Etl_First_Dt /*最初入库时间*/ + ,P1.Etl_Tx_Dt /*作业运行时间*/ + ,P1.Etl_Proc_Dt /*本次入库时间*/ + ,P1.Etl_Batch_No /*作业批次号*/ + +FROM cust_leads_detail_agi_CUR_I P1 +LEFT JOIN :COMMDB.cust_leads_detail P2 +ON P1.event = P2.event + AND P1.contact_channel = P2.contact_channel + AND P1.contact_account = P2.contact_account + AND P1.label = P2.label + AND P1.active_time = P2.active_time + +WHERE P2.event IS NULL + OR P2.contact_channel IS NULL + OR P2.contact_account IS NULL + OR P2.label IS NULL + OR P2.active_time IS NULL + +; +/*将新增数据插入到目标表 */ +;INSERT INTO :COMMDB.cust_leads_detail ( + event /*事件*/ + ,contact_channel /*线索渠道*/ + ,contact_account /*联系编号*/ + ,label /*标签*/ + ,active_time /*活跃时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ,Etl_Job /*作业名称*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Batch_No /*作业批次号*/ + +) +SELECT + P1.event /*事件*/ + ,P1.contact_channel /*线索渠道*/ + ,P1.contact_account /*联系编号*/ + ,P1.label /*标签*/ + ,P1.active_time /*活跃时间*/ + ,P1.Src_Sysname /*来源系统*/ + ,P1.Src_Table /*来源表*/ + ,P1.Etl_Job /*作业名称*/ + ,P1.Etl_First_Dt /*最初入库时间*/ + ,P1.Etl_Tx_Dt /*作业运行时间*/ + ,P1.Etl_Proc_Dt /*本次入库时间*/ + ,P1.Etl_Batch_No /*作业批次号*/ + +FROM cust_leads_detail_agi_INS P1 +ON CONFLICT ( contact_channel,contact_account,label,active_time) +DO UPDATE SET + contact_channel=excluded.contact_channel + ,contact_account=excluded.contact_account + ,label=excluded.label + ,active_time=excluded.active_time + ,event=excluded.event + ,Src_Sysname=excluded.Src_Sysname + ,Src_Table=excluded.Src_Table + ,Etl_Job=excluded.Etl_Job + ,Etl_First_Dt=excluded.Etl_First_Dt + ,Etl_Tx_Dt=excluded.Etl_Tx_Dt + ,Etl_Proc_Dt=excluded.Etl_Proc_Dt + ,Etl_Batch_No=excluded.Etl_Batch_No + + +; +/*****程序结束退出 */ +\q + diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户联系信息/cust_contact_info.sql b/dev/workflow/TK_Cust/yi_api_contact/客户联系信息/cust_contact_info.sql new file mode 100644 index 0000000..721d124 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户联系信息/cust_contact_info.sql @@ -0,0 +1,86 @@ + +DROP TABLE IF EXISTS p30_common.cust_contact_info; +CREATE TABLE IF NOT EXISTS p30_common.cust_contact_info ( + contact_id text + , contact text + , contact_channel text + , full_name text + , mobile VARCHAR(0) + , email VARCHAR(0) + , wechat VARCHAR(0) + , company VARCHAR(0) + , account text + , country VARCHAR(0) + , prov_name VARCHAR(0) + , city_name VARCHAR(0) + , industry VARCHAR(50) + , ccp_value VARCHAR(0) + , crm_contact text + , crm_full_name text + , crm_mobile VARCHAR(0) + , crm_email VARCHAR(0) + , crm_company VARCHAR(0) + , crm_account VARCHAR(0) + , account_name text + , crm_country_name VARCHAR(0) + , crm_prov_name VARCHAR(0) + , crm_city_name VARCHAR(0) + , crm_industry VARCHAR(50) + , scrm_contact text + , scrm_full_name VARCHAR(0) + , scrm_mobile text + , scrm_email VARCHAR(0) + , scrm_wechat VARCHAR(0) + , scrm_company VARCHAR(0) + , scrm_prov_name VARCHAR(0) + , scrm_city_name VARCHAR(0) + , livechat_contact text + , livechat_full_name VARCHAR(0) + , livechat_mobile VARCHAR(0) + , livechat_email VARCHAR(0) + , livechat_company VARCHAR(0) + , livechat_country VARCHAR(0) + +); + + COMMENT ON COLUMN p30_common.cust_contact_info.contact_id IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.contact IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.contact_channel IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.full_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.mobile IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.email IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.wechat IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.company IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.account IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.country IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.prov_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.city_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.industry IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.ccp_value IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_contact IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_full_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_mobile IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_email IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_company IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_account IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.account_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_country_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_prov_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_city_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.crm_industry IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_contact IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_full_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_mobile IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_email IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_wechat IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_company IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_prov_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.scrm_city_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.livechat_contact IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.livechat_full_name IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.livechat_mobile IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.livechat_email IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.livechat_company IS ''; + COMMENT ON COLUMN p30_common.cust_contact_info.livechat_country IS ''; + +COMMENT ON TABLE p30_common.cust_contact_info IS ''; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户联系信息/cust_contact_info_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/客户联系信息/cust_contact_info_agi.sql new file mode 100644 index 0000000..d5875e7 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户联系信息/cust_contact_info_agi.sql @@ -0,0 +1,344 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2024(by IdgValue, qihang.feng@idgvalue.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :cust_contact_info(客户联系信息) */ +/*Create Date:2025-10-17 17:30:22 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-01-19 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2025-10-17 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: :PDMDB.t01_crm_account */ +/*Source table 2: :PDMDB.t00_china_city_info */ +/*Source table 3: p30_common.cust_contact_mapping */ +/*Source table 4: :PDMDB.t00_country_info */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:cust_contact_info */ +/*ETL Job Name:cust_contact_info */ +/*ETL Frequency:Daily */ +/*ETL Policy:F1 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE cust_contact_info_agi_CUR_I + ( LIKE :COMMDB.cust_contact_info) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:cust_contact_mapping**********************************************************/ +/*****************************************************************************************************/ + +INSERT INTO cust_contact_info_agi_CUR_I ( + contact_id /*联系人ID*/ + ,contact /*联系方式*/ + ,contact_channel /*联系人渠道*/ + ,full_name /*姓名*/ + ,mobile /*手机号*/ + ,email /*电子邮箱*/ + ,wechat /*微信*/ + ,company /*公司*/ + ,account /*账号*/ + ,country /*国家*/ + ,prov_name /*省份*/ + ,city_name /*城市*/ + ,industry /*行业*/ + ,crm_contact /*CRM线索号*/ + ,crm_full_name /*CRM姓名*/ + ,crm_mobile /*CRM手机号*/ + ,crm_email /*CRM邮箱*/ + ,crm_company /*CRM公司*/ + ,crm_account /*CRM账号*/ + ,account_name /*账号名称*/ + ,crm_country_name /*CRM国家*/ + ,crm_prov_name /*CRM省份*/ + ,crm_city_name /*CRM城市*/ + ,crm_industry /*CRM行业*/ + ,scrm_contact /*SCRM线索编号*/ + ,scrm_full_name /*SCRM姓名*/ + ,scrm_mobile /*SCRM手机号*/ + ,scrm_email /*SCRM邮箱*/ + ,scrm_wechat /*SCRM微信*/ + ,scrm_company /*SCRM公司*/ + ,scrm_prov_name /*SCRM省份*/ + ,scrm_city_name /*SCRM城市*/ + ,livechat_contact /*Livechat线索编号*/ + ,livechat_full_name /*Livechat姓名*/ + ,livechat_mobile /*Livechat手机号*/ + ,livechat_email /*Livechat邮箱*/ + ,livechat_company /*Livechat公司*/ + ,livechat_country /**/ + ,udesk_contact /*UdeskcallID*/ + ,udesk_full_name /*Udesk姓名*/ + ,udesk_mobile /*Udesk手机号*/ + ,udesk_company /*Udesk公司*/ + ,udesk_prov_name /*Udesk省份*/ + ,udesk_city_name /*udesk城市*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ) +SELECT + p1.contact_id /*contact_id*/ + ,p1.contact /*contact*/ + ,p1.contact_channel /*contact_channel*/ + ,p1.full_name /*full_name*/ + ,p1.mobile /*mobile*/ + ,p1.email /*email*/ + ,p1.wechat /*wechat*/ + ,p1.company /*company*/ + ,p1.account /*account*/ + ,coalesce(p3.country_en_name,p4.country_en_name,p1.country) /*country*/ + ,p1.prov_name /*prov_name*/ + ,coalesce(p2.city_name,p1.city_name) /*city_name*/ + ,p1.industry /*industry*/ + ,p1.crm_contact /*crm_contact*/ + ,p1.crm_full_name /*crm_full_name*/ + ,p1.crm_mobile /*crm_mobile*/ + ,p1.crm_email /*crm_email*/ + ,p1.crm_company /*crm_company*/ + ,p1.crm_account /*crm_account*/ + ,coalesce(p6.name,'') /*account_name*/ + ,p1.crm_country_name /*crm_country_name*/ + ,p1.crm_prov_name /*crm_prov_name*/ + ,p1.crm_city_name /*crm_city_name*/ + ,p1.crm_industry /*crm_industry*/ + ,p1.scrm_contact /*scrm_contact*/ + ,p1.scrm_full_name /*scrm_full_name*/ + ,p1.scrm_mobile /*scrm_mobile*/ + ,p1.scrm_email /*scrm_email*/ + ,p1.scrm_wechat /*scrm_wechat*/ + ,p1.scrm_company /*scrm_company*/ + ,p1.scrm_prov_name /*scrm_prov_name*/ + ,p1.scrm_city_name /*scrm_city_name*/ + ,p1.livechat_contact /*livechat_contact*/ + ,p1.livechat_full_name /*livechat_full_name*/ + ,p1.livechat_mobile /*livechat_mobile*/ + , p1.livechat_email /*livechat_email*/ + ,p1.livechat_company /*livechat_company*/ + ,p1.livechat_country /*livechat_country*/ + ,p1.udesk_contact /*udesk_contact*/ + ,p1.udesk_full_name /*udesk_full_name*/ + ,p1.udesk_mobile /*udesk_mobile*/ + ,p1.udesk_company /*udesk_company*/ + ,p1.udesk_prov_name /*udesk_prov_name*/ + ,p1.udesk_city_name /*udesk_city_name*/ + ,Substr('cust_contact_mapping',1,3) /*src_sysname*/ + ,'cust_contact_mapping' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + +FROM (select +p1.contact_id +,p1.user_id as contact +,case when crm_contact ='' and scrm_contact ='' and livechat_contact ='' then 'Udesk' else trim(case when crm_contact <> '' then 'CRM ' else '' end || case when scrm_contact <> '' then 'SCRM ' else '' end ||case when livechat_contact <> '' then 'Livechat ' else '' end) end contact_channel +,coalesce(p6.name,p2.full_name,p8.contact_name,p3.full_name,p4.full_name,p5.full_name,p7.contact_name ,'') full_name +,coalesce(cast(p6.tel as varchar(15)),p2.mobile_phone,p8.phone,p3.mobile_phone,p4.mobile_phone,p5.mobile_phone,p7.phone ,'') mobile +,coalesce(p6.email,p2.email,p8.email,p3.email,p4.email,p7.email,'') email +,coalesce(p6.external_id,p3.wechat_id,p7.wechat_id,'') wechat +,coalesce(p6.company,p2.company_name,p8.company,p3.company_name,p4.company_name,p5.company_name,p7.account_name ,'') company +,coalesce(p2.account_name,p8.company,p7.account_name,'') account +,case when p2.country_name is not null then p2.country_name + when p3.wechat_id is not null then 'China' + when p4.visitor_country_code is not null then p4.visitor_country_code + else 'China' + end country +,coalesce(p2.prov_name,p3.prov_name,p8.province,p5.prov_name ,'') prov_name +,coalesce(p2.city_name,p3.city_name,p8.city,p5.city_name,p7.city ,'') city_name +,coalesce(p2.industry) industry +,p1.crm_contact +,coalesce(p2.full_name,'') crm_full_name +,coalesce(p2.mobile_phone,'') crm_mobile +,coalesce(p2.email,'') crm_email +,coalesce(p2.company_name,'') crm_company +,coalesce(p2.account_name,'') crm_account +,coalesce(p2.account_name,'') account_name +,coalesce(p2.country_name,'') crm_country_name +,coalesce(p2.prov_name,'') crm_prov_name +,coalesce(p2.city_name,'') crm_city_name +,coalesce(p2.industry) crm_industry +,coalesce(p2.post_cd) crm_postcode +,p1.scrm_contact +,coalesce(p3.full_name,'') scrm_full_name +,coalesce(p3.mobile_phone,'') scrm_mobile +,coalesce(p3.email,'') scrm_email +,coalesce(p3.wechat_id,'') scrm_wechat +,coalesce(p3.company_name,'') scrm_company +,coalesce(p3.prov_name,'') scrm_prov_name +,coalesce(p3.city_name,'') scrm_city_name +,p1.livechat_contact +,coalesce(p4.full_name,'') livechat_full_name +,coalesce(p4.mobile_phone,'') livechat_mobile +,coalesce(p4.email,'') livechat_email +,coalesce(p4.company_name,'') livechat_company +,coalesce(p4.visitor_country_code,'') livechat_country +,p5.udesk_contact +,coalesce(p5.full_name,'') udesk_full_name +,coalesce(p5.mobile_phone,'') udesk_mobile +,coalesce(p5.company_name,'') udesk_company +,coalesce(p5.prov_name,'') udesk_prov_name +,coalesce(p5.city_name,'') udesk_city_name +from p30_common.v_cust_contact_mapping_all p1 +left join p30_common.d_ccc_cust_info p6 +on p1.ccc_contact = p6.id +left join p30_common.d_crm_contact p2 +on p1.crm_contact =p2.crm_contact_account +left join p30_common.d_scrm_contact p3 +on p1.scrm_contact =p3.scrm_leads_id +left join p30_common.d_livechat_contact p4 +on p1.livechat_contact =livechat_leads_id +left join p30_common.d_udesk_contact p5 +on p1.udesk_contact =p5.udesk_contact +left join p30_common.d_jdy_contact_info p7 +on p1.jdy_contact =p7.jdy_contact_id +left join p30_common.d_partner_contact p8 +on p1.partner_contact =p8.contact_id::text) p1 +LEFT JOIN :PDMDB.t00_china_city_info p2 + ON upper(p2.city_en) = upper(p1.city_name) +LEFT JOIN :PDMDB.t00_country_info p3 + ON upper(p1.country)=upper(p3.country_en_name) +LEFT JOIN :PDMDB.t00_country_info p4 + ON upper(p1.country)=upper(p4.country_cd) +LEFT JOIN :PDMDB.t01_crm_account p6 + ON p1.crm_account =p6.accountnumber + + +; + + + +/*从目标表中删除所有数据 cust_contact_info(客户联系信息) */ +DELETE FROM :COMMDB.cust_contact_info +WHERE ETL_JOB=:ETLJOB; + + +/*将新增数据插入到目标表 */ +;INSERT INTO :COMMDB.cust_contact_info ( + contact_id /*联系人ID*/ + ,contact /*联系方式*/ + ,contact_channel /*联系人渠道*/ + ,full_name /*姓名*/ + ,mobile /*手机号*/ + ,email /*电子邮箱*/ + ,wechat /*微信*/ + ,company /*公司*/ + ,account /*账号*/ + ,country /*国家*/ + ,prov_name /*省份*/ + ,city_name /*城市*/ + ,industry /*行业*/ + ,crm_contact /*CRM线索号*/ + ,crm_full_name /*CRM姓名*/ + ,crm_mobile /*CRM手机号*/ + ,crm_email /*CRM邮箱*/ + ,crm_company /*CRM公司*/ + ,crm_account /*CRM账号*/ + ,account_name /*账号名称*/ + ,crm_country_name /*CRM国家*/ + ,crm_prov_name /*CRM省份*/ + ,crm_city_name /*CRM城市*/ + ,crm_industry /*CRM行业*/ + ,scrm_contact /*SCRM线索编号*/ + ,scrm_full_name /*SCRM姓名*/ + ,scrm_mobile /*SCRM手机号*/ + ,scrm_email /*SCRM邮箱*/ + ,scrm_wechat /*SCRM微信*/ + ,scrm_company /*SCRM公司*/ + ,scrm_prov_name /*SCRM省份*/ + ,scrm_city_name /*SCRM城市*/ + ,livechat_contact /*Livechat线索编号*/ + ,livechat_full_name /*Livechat姓名*/ + ,livechat_mobile /*Livechat手机号*/ + ,livechat_email /*Livechat邮箱*/ + ,livechat_company /*Livechat公司*/ + ,livechat_country /**/ + ,udesk_contact /*UdeskcallID*/ + ,udesk_full_name /*Udesk姓名*/ + ,udesk_mobile /*Udesk手机号*/ + ,udesk_company /*Udesk公司*/ + ,udesk_prov_name /*Udesk省份*/ + ,udesk_city_name /*udesk城市*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + + ) + SELECT + P1.contact_id /*联系人ID*/ + ,P1.contact /*联系方式*/ + ,P1.contact_channel /*联系人渠道*/ + ,P1.full_name /*姓名*/ + ,P1.mobile /*手机号*/ + ,P1.email /*电子邮箱*/ + ,P1.wechat /*微信*/ + ,P1.company /*公司*/ + ,P1.account /*账号*/ + ,P1.country /*国家*/ + ,P1.prov_name /*省份*/ + ,P1.city_name /*城市*/ + ,P1.industry /*行业*/ + ,P1.crm_contact /*CRM线索号*/ + ,P1.crm_full_name /*CRM姓名*/ + ,P1.crm_mobile /*CRM手机号*/ + ,P1.crm_email /*CRM邮箱*/ + ,P1.crm_company /*CRM公司*/ + ,P1.crm_account /*CRM账号*/ + ,P1.account_name /*账号名称*/ + ,P1.crm_country_name /*CRM国家*/ + ,P1.crm_prov_name /*CRM省份*/ + ,P1.crm_city_name /*CRM城市*/ + ,P1.crm_industry /*CRM行业*/ + ,P1.scrm_contact /*SCRM线索编号*/ + ,P1.scrm_full_name /*SCRM姓名*/ + ,P1.scrm_mobile /*SCRM手机号*/ + ,P1.scrm_email /*SCRM邮箱*/ + ,P1.scrm_wechat /*SCRM微信*/ + ,P1.scrm_company /*SCRM公司*/ + ,P1.scrm_prov_name /*SCRM省份*/ + ,P1.scrm_city_name /*SCRM城市*/ + ,P1.livechat_contact /*Livechat线索编号*/ + ,P1.livechat_full_name /*Livechat姓名*/ + ,P1.livechat_mobile /*Livechat手机号*/ + ,P1.livechat_email /*Livechat邮箱*/ + ,P1.livechat_company /*Livechat公司*/ + ,P1.livechat_country /**/ + ,P1.udesk_contact /*UdeskcallID*/ + ,P1.udesk_full_name /*Udesk姓名*/ + ,P1.udesk_mobile /*Udesk手机号*/ + ,P1.udesk_company /*Udesk公司*/ + ,P1.udesk_prov_name /*Udesk省份*/ + ,P1.udesk_city_name /*udesk城市*/ + ,P1.src_sysname /*来源系统*/ + ,P1.src_table /*来源表*/ + ,P1.etl_job /*作业名称*/ + ,P1.etl_first_dt /*最初入库时间*/ + ,P1.etl_proc_dt /*本次入库时间*/ + ,P1.etl_tx_dt /*作业运行时间*/ + ,P1.etl_batch_no /*作业批次号*/ + + FROM cust_contact_info_agi_CUR_I P1 + +; +/*****程序结束退出 */ +\q + diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户联系方式映射/cust_contact_mapping.sql b/dev/workflow/TK_Cust/yi_api_contact/客户联系方式映射/cust_contact_mapping.sql new file mode 100644 index 0000000..27e040f --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户联系方式映射/cust_contact_mapping.sql @@ -0,0 +1,40 @@ + +DROP TABLE IF EXISTS p30_common.cust_contact_mapping; +CREATE TABLE IF NOT EXISTS p30_common.cust_contact_mapping ( + contact_id VARCHAR(50) + , user_id VARCHAR(50) + , crm_contact text + , scrm_contact text + , livechat_contact text + , udesk_contact text + , ccc_contact text + , src_sysname VARCHAR(50) + , src_table VARCHAR(50) + , etl_job VARCHAR(50) + , etl_first_dt timestamp(0) + , etl_proc_dt timestamp(0) + , etl_tx_dt DATE + , etl_batch_no VARCHAR(50) + , jdy_contact VARCHAR(50) + , partner_contact VARCHAR(50) + ,primary key( contact_id ) +); + + COMMENT ON COLUMN p30_common.cust_contact_mapping.contact_id IS '联系编号'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.user_id IS '用户信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.crm_contact IS 'CRM信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.scrm_contact IS 'SCRM信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.livechat_contact IS 'Livechat客户信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.udesk_contact IS 'Udesk客户信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.ccc_contact IS 'ccc客户信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.src_sysname IS '来源系统'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.src_table IS '来源表'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.etl_job IS '作业名称'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.etl_first_dt IS '最初入库时间'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.etl_proc_dt IS '本次入库时间'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.etl_tx_dt IS '作业运行时间'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.etl_batch_no IS '作业批次号'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.jdy_contact IS '简道云客户信息'; + COMMENT ON COLUMN p30_common.cust_contact_mapping.partner_contact IS 'partner客户信息'; + +COMMENT ON TABLE p30_common.cust_contact_mapping IS '客户联系方式映射'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/客户联系方式映射/cust_contact_mapping_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/客户联系方式映射/cust_contact_mapping_agi.sql new file mode 100644 index 0000000..a0e3918 --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/客户联系方式映射/cust_contact_mapping_agi.sql @@ -0,0 +1,183 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2024(by IdgValue, qihang.feng@idgvalue.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :cust_contact_mapping(客户联系方式映射) */ +/*Create Date:2025-10-17 14:26:00 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-01-19 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2025-10-17 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: p30_common.d_scrm_contact */ +/*Source table 2: :COMMDB.cust_contact_mapping */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:cust_contact_mapping */ +/*ETL Job Name:cust_contact_mapping */ +/*ETL Frequency:Daily */ +/*ETL Policy:F1 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE cust_contact_mapping_agi_CUR_I + ( LIKE :COMMDB.cust_contact_mapping) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:d_scrm_contact****************************************************************/ +/*****************************************************************************************************/ + +INSERT INTO cust_contact_mapping_agi_CUR_I ( + contact_id /*联系编号*/ + ,user_id /*用户信息*/ + ,crm_contact /*CRM信息*/ + ,scrm_contact /*SCRM信息*/ + ,livechat_contact /*Livechat客户信息*/ + ,udesk_contact /*Udesk客户信息*/ + ,ccc_contact /*ccc客户信息*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + ,jdy_contact /*简道云客户信息*/ + ,partner_contact /*partner客户信息*/ + ) +SELECT + coalesce(p1.contact_id,'LCON-'||lpad(nextval('p20_pdm.user_id_seq')::text,10,'0')) /*contact_id*/ + ,p0.user_id /*user_id*/ + ,p0.crm_contact /*crm_contact*/ + ,p0.scrm_contact /*scrm_contact*/ + ,p0.livechat_contact /*livechat_contact*/ + ,p0.udesk_contact /*udesk_contact*/ + ,p0.ccc_contact /*ccc_contact*/ + ,Substr('d_scrm_contact',1,3) /*src_sysname*/ + ,'d_scrm_contact' /*src_table*/ + ,:ETLJOB /*etl_job*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_first_dt*/ + ,current_timestamp(0) /*etl_proc_dt*/ + ,TO_DATE(:TXDATE,'YYYYMMDD') /*etl_tx_dt*/ + ,0 /*etl_batch_no*/ + ,p0.jdy_contact /*jdy_contact*/ + ,p0.Partner_contact /*partner_contact*/ + +FROM (select '' contact_id,user_id +,string_agg(case when src_channel='CRM' then crm_contact_account else '' end,',') crm_contact +,string_agg(case when src_channel='SCRM' then crm_contact_account else '' end,',') scrm_contact +,string_agg(case when src_channel='Livechat' then crm_contact_account else '' end,',') livechat_contact +,string_agg(case when src_channel='Udesk' then crm_contact_account else '' end,',') udesk_contact +,string_agg(case when src_channel='SMART CCC' then crm_contact_account else '' end,',') ccc_contact +,string_agg(case when src_channel='JDY' then crm_contact_account else '' end,',') jdy_contact +,string_agg(case when src_channel='Partner' then crm_contact_account else '' end,',') Partner_contact +from ( +select case when tel ~ '^1[3-9]\d{9}$' then tel + when email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' then email + else name + end user_id,id crm_contact_account,'SMART CCC' src_channel from p30_common.d_ccc_cust_info +union all +select case when mobile_phone ~ '^1[3-9]\d{9}$' then mobile_phone + when email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' then email + else full_name + end user_id,crm_contact_account,'CRM' src_channel from p30_common.d_crm_contact +union all +select case when mobile_phone ~ '^1[3-9]\d{9}$' then mobile_phone + when email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' then email + when length(wechat_id) >5 then wechat_id + else full_name + end user_id,scrm_leads_id,'SCRM' from p30_common.d_scrm_contact +union all +select case when mobile_phone ~ '^1[3-9]\d{9}$' then mobile_phone + when email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' then email + else full_name + end user_id,livechat_leads_id,'Livechat' from p30_common.d_livechat_contact +union all +select case when mobile_phone ~ '^1[3-9]\d{9}$' then mobile_phone + else full_name + end user_id,udesk_contact,'Udesk' from p30_common.d_udesk_contact +union all +select case when phone ~ '^1[3-9]\d{9}$' then phone + when email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' then email + else contact_name + end user_id,contact_id::text partner_contact_account,'Partner' src_channel from p30_common.d_partner_contact +union all +select case when phone ~ '^1[3-9]\d{9}$' then phone + when email ~ '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$' then email + else contact_name + end user_id,jdy_contact_id jdy_contact_account,'JDY' from p30_common.d_jdy_contact_info +where dw_contact_id not like 'LCON-%')p1 +where p1.user_id<>'' +group by user_id) p0 +LEFT JOIN :COMMDB.cust_contact_mapping p1 + ON p1.user_id=p0 .user_id + + +; + + +update cust_contact_mapping_agi_CUR_I +set jdy_contact = jdy_contact_id +from (select ccm.contact_id,string_agg(ccm.partner_contact,',')||','||string_agg(jdy_contact_id,',') jdy_contact_id from p30_common.cust_contact_mapping ccm +inner join p30_common.d_jdy_contact_info p2 +on ccm.contact_id =p2.dw_contact_id +group by ccm.contact_id) p1 +where cust_contact_mapping_agi_CUR_I.contact_id=p1.contact_id; +/*从目标表中删除所有数据 cust_contact_mapping(客户联系方式映射) */ +DELETE FROM :COMMDB.cust_contact_mapping +WHERE ETL_JOB=:ETLJOB; + + +/*将新增数据插入到目标表 */ +;INSERT INTO :COMMDB.cust_contact_mapping ( + user_id /*用户信息*/ + ,crm_contact /*CRM信息*/ + ,scrm_contact /*SCRM信息*/ + ,livechat_contact /*Livechat客户信息*/ + ,udesk_contact /*Udesk客户信息*/ + ,ccc_contact /*ccc客户信息*/ + ,jdy_contact /*简道云客户信息*/ + ,partner_contact /*partner客户信息*/ + ,contact_id /*联系编号*/ + ,src_sysname /*来源系统*/ + ,src_table /*来源表*/ + ,etl_job /*作业名称*/ + ,etl_first_dt /*最初入库时间*/ + ,etl_proc_dt /*本次入库时间*/ + ,etl_tx_dt /*作业运行时间*/ + ,etl_batch_no /*作业批次号*/ + + ) + SELECT + P1.user_id /*用户信息*/ + ,P1.crm_contact /*CRM信息*/ + ,P1.scrm_contact /*SCRM信息*/ + ,P1.livechat_contact /*Livechat客户信息*/ + ,P1.udesk_contact /*Udesk客户信息*/ + ,P1.ccc_contact /*ccc客户信息*/ + ,P1.jdy_contact /*简道云客户信息*/ + ,P1.partner_contact /*partner客户信息*/ + ,P1.contact_id /*联系编号*/ + ,P1.src_sysname /*来源系统*/ + ,P1.src_table /*来源表*/ + ,P1.etl_job /*作业名称*/ + ,P1.etl_first_dt /*最初入库时间*/ + ,P1.etl_proc_dt /*本次入库时间*/ + ,P1.etl_tx_dt /*作业运行时间*/ + ,P1.etl_batch_no /*作业批次号*/ + + FROM cust_contact_mapping_agi_CUR_I P1 + +; +/*****程序结束退出 */ +\q + diff --git a/dev/workflow/TK_Cust/yi_api_contact/市场易API联系人/wf_dag_yi_api_contact.py b/dev/workflow/TK_Cust/yi_api_contact/市场易API联系人/wf_dag_yi_api_contact.py index b51194f..7a8497e 100644 --- a/dev/workflow/TK_Cust/yi_api_contact/市场易API联系人/wf_dag_yi_api_contact.py +++ b/dev/workflow/TK_Cust/yi_api_contact/市场易API联系人/wf_dag_yi_api_contact.py @@ -136,7 +136,7 @@ contact_update_feign >> contact_update_load api_contact_update_info_2218 = SSHOperator( ssh_hook=sshHook, task_id='api_contact_update_info_2218', -command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ', +command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} ', params={'my_param':"S98_S_api_contact_update_info"}, depends_on_past=False, retries=3, @@ -145,7 +145,7 @@ dag=dag) api_contact_fields_4587 = SSHOperator( ssh_hook=sshHook, task_id='api_contact_fields_4587', -command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ', +command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} ', params={'my_param':"S98_S_api_contact_fields"}, depends_on_past=False, retries=3, @@ -154,7 +154,7 @@ dag=dag) api_contact_event_meta_9651 = SSHOperator( ssh_hook=sshHook, task_id='api_contact_event_meta_9651', -command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ', +command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} ', params={'my_param':"S98_S_api_contact_event_meta"}, depends_on_past=False, retries=3, @@ -163,7 +163,7 @@ dag=dag) api_contact_events_6043 = SSHOperator( ssh_hook=sshHook, task_id='api_contact_events_6043', -command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ', +command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} ', params={'my_param':"S98_S_api_contact_events"}, depends_on_past=False, retries=3, @@ -172,15 +172,106 @@ dag=dag) api_contact_created_3850 = SSHOperator( ssh_hook=sshHook, task_id='api_contact_created_3850', -command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ', +command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} ', params={'my_param':"S98_S_api_contact_created"}, depends_on_past=False, retries=3, dag=dag) +t01_scrm_leads = SSHOperator( +ssh_hook=sshHook, +task_id='t01_scrm_leads', +command='/data/airflow/etl/PDM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"t01_scrm_leads_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +t01_scrm_contact = SSHOperator( +ssh_hook=sshHook, +task_id='t01_scrm_contact', +command='/data/airflow/etl/PDM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"t01_scrm_contact_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +d_scrm_contact = SSHOperator( +ssh_hook=sshHook, +task_id='d_scrm_contact', +command='/data/airflow/etl/COM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"d_scrm_contact_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +cust_contact_mapping = SSHOperator( +ssh_hook=sshHook, +task_id='cust_contact_mapping', +command='/data/airflow/etl/COM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"cust_contact_mapping_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +cust_leads = SSHOperator( +ssh_hook=sshHook, +task_id='cust_leads', +command='/data/airflow/etl/COM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"cust_leads_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +cust_leads_detail = SSHOperator( +ssh_hook=sshHook, +task_id='cust_leads_detail', +command='/data/airflow/etl/COM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"cust_leads_detail_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +cust_contact_info = SSHOperator( +ssh_hook=sshHook, +task_id='cust_contact_info', +command='/data/airflow/etl/COM/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"cust_contact_info_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +cust_all_info = SSHOperator( +ssh_hook=sshHook, +task_id='cust_all_info', +command='/data/airflow/etl/MART/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"cust_all_info_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +data_source_update = SSHOperator( +ssh_hook=sshHook, +task_id='data_source_update', +command='/data/airflow/etl/MART/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"data_source_update_agi"}, +depends_on_past=False, +retries=3, +dag=dag) +cust_enagement_records = SSHOperator( +ssh_hook=sshHook, +task_id='cust_enagement_records', +command='/data/airflow/etl/MART/run_psql.sh {{ ds_nodash }} {{params.my_param}} ', +params={'my_param':"cust_enagement_records_agi"}, +depends_on_past=False, +retries=3, +dag=dag) contact_create_list_load >> api_contact_created_3850 contact_fields_load >> api_contact_fields_4587 contact_update_load >> api_contact_update_info_2218 api_contact_events_load >> api_contact_events_6043 contact_event_meta_load >> api_contact_event_meta_9651 -api_contact_event_meta_9651 >> task_failed +api_contact_update_info_2218 >> t01_scrm_contact +api_contact_events_6043 >> t01_scrm_leads +t01_scrm_contact >> d_scrm_contact +d_scrm_contact >> cust_contact_mapping +t01_scrm_leads >> cust_leads +cust_leads >> cust_leads_detail +cust_contact_mapping >> cust_contact_info +cust_contact_info >> cust_leads_detail +cust_contact_info >> cust_all_info +cust_all_info >> data_source_update +cust_all_info >> cust_enagement_records +cust_enagement_records >> task_failed diff --git a/dev/workflow/TK_Cust/yi_api_contact/数据源更新时间/data_source_update.sql b/dev/workflow/TK_Cust/yi_api_contact/数据源更新时间/data_source_update.sql new file mode 100644 index 0000000..e5f2b4c --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/数据源更新时间/data_source_update.sql @@ -0,0 +1,34 @@ + +DROP TABLE IF EXISTS p60_mart.data_source_update; +CREATE TABLE IF NOT EXISTS p60_mart.data_source_update ( + date_layer varchar(20) + , data_area varchar(20) + , data_table varchar(200) + , data_rows bigint + , column_qty int + , last_upt_tm 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( date_layer,data_table ) +); + + COMMENT ON COLUMN p60_mart.data_source_update.date_layer IS '数据层级'; + COMMENT ON COLUMN p60_mart.data_source_update.data_area IS '数据领域'; + COMMENT ON COLUMN p60_mart.data_source_update.data_table IS '数据表'; + COMMENT ON COLUMN p60_mart.data_source_update.data_rows IS '数据行数'; + COMMENT ON COLUMN p60_mart.data_source_update.column_qty IS '字段数'; + COMMENT ON COLUMN p60_mart.data_source_update.last_upt_tm IS '最后更新日期'; + COMMENT ON COLUMN p60_mart.data_source_update.Etl_Batch_No IS '作业批次号'; + COMMENT ON COLUMN p60_mart.data_source_update.Etl_First_Dt IS '最初入库时间'; + COMMENT ON COLUMN p60_mart.data_source_update.Etl_Job IS '作业名称'; + COMMENT ON COLUMN p60_mart.data_source_update.Etl_Proc_Dt IS '本次入库时间'; + COMMENT ON COLUMN p60_mart.data_source_update.Etl_Tx_Dt IS '作业运行时间'; + COMMENT ON COLUMN p60_mart.data_source_update.Src_Sysname IS '来源系统'; + COMMENT ON COLUMN p60_mart.data_source_update.Src_Table IS '来源表'; + +COMMENT ON TABLE p60_mart.data_source_update IS '数据源更新时间'; \ No newline at end of file diff --git a/dev/workflow/TK_Cust/yi_api_contact/数据源更新时间/data_source_update_agi.sql b/dev/workflow/TK_Cust/yi_api_contact/数据源更新时间/data_source_update_agi.sql new file mode 100644 index 0000000..36ff5ac --- /dev/null +++ b/dev/workflow/TK_Cust/yi_api_contact/数据源更新时间/data_source_update_agi.sql @@ -0,0 +1,355 @@ +/***************************************************************************************************/ +/*script in Sql, generate by SdmCreateScript 2020(by Qihang Feng, QF255001@TERADATA.COM) */ +/*VERSION 01.10 revised on 2020-08-25 */ +/*Brilliance stems from wisdoms. */ +/*************Head Section**************************************************************************/ +/*Script Use: Periodically load data to :data_source_update(数据源更新时间) */ +/*Create Date:2024-06-17 11:29:47 */ +/*SDM Developed By: dev */ +/*SDM Developed Date: 2024-05-28 */ +/*SDM Checked By: dev */ +/*SDM Checked Date: 2024-06-17 */ +/*Script Developed By: dev */ +/*Script Checked By: dev */ +/*Source table 1: p10_sa.s98_s_customer_event_meta */ +/*Job Type: Inbound transform (Tier 1 to Tier 2) */ +/*Target Table:data_source_update */ +/*ETL Job Name:data_source_update */ +/*ETL Frequency:Daily */ +/*ETL Policy:F2 */ +/********************************************************************************************/ +/*******Main Section**************************************************************************/ +\set ON_ERROR_STOP on +\set AUTOCOMMIT on +\timing on + + + +/*创建临时表加载当前数据 */ +CREATE TEMPORARY TABLE data_source_update_agi_CUR_I + ( LIKE :MARTDB.data_source_update) +ON COMMIT PRESERVE ROWS; + + + +/*创建临时表加载不同数据 */ +CREATE TEMPORARY TABLE data_source_update_agi_INS +( LIKE :MARTDB.data_source_update) +ON COMMIT PRESERVE ROWS; + + +/*****************************************************************************************************/ +/* GROUP 1:Source Table:s98_s_customer_event_meta*****************************************************/ +/*****************************************************************************************************/ + +INSERT INTO data_source_update_agi_CUR_I ( + date_layer /*数据层级*/ + ,data_area /*数据领域*/ + ,data_table /*数据表*/ + ,data_rows /*数据行数*/ + ,column_qty /*字段数*/ + ,last_upt_tm /*最后更新日期*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + 'Data Source' /*date_layer*/ + ,case when p0 .data_table like '%scrm%' then 'SCRM' +when p0.data_table like '%custom%' then 'SCRM' +when p0.data_table like '%crm%' then 'CRM' +when p0.data_table like '%livechat%' then 'LiveChat' +when p0.data_table like '%udesk%' +then 'Udesk' +else 'All' end /*data_area*/ + ,coalesce(p0.data_table,'') /*data_table*/ + ,coalesce(p0.row_count,0) /*data_rows*/ + ,coalesce(p0.columns_qty,0) /*column_qty*/ + ,p0.last_upt_tm /*last_upt_tm*/ + ,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('s98_s_customer_event_meta',1,3) /*Src_Sysname*/ + ,'s98_s_customer_event_meta' /*Src_Table*/ + +FROM (select 's98_s_crm_account' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 41 columns_qty from p12_sfull.s98_s_crm_account +union all +select 's98_s_crm_contact_ccp' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 4 columns_qty from p12_sfull.s98_s_crm_contact_ccp +union all +select 's98_s_crm_contact_part' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 57 columns_qty from p12_sfull.s98_s_crm_contact_part +union all +select 's98_s_crm_opp' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 50 columns_qty from p12_sfull.s98_s_crm_opp +union all +select 's98_s_crm_raw_leads' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 12 columns_qty from p12_sfull.s98_s_crm_raw_leads +union all +select 's98_s_custom_events_activity_submit' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 15 columns_qty from p12_sfull.s98_s_custom_events_activity_submit +union all +select 's98_s_customer_event_meta' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 4 columns_qty from p12_sfull.s98_s_customer_event_meta +union all +select 's98_s_customer_events' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 12 columns_qty from p12_sfull.s98_s_customer_events +union all +select 's98_s_customer_events_add_user' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 17 columns_qty from p12_sfull.s98_s_customer_events_add_user +union all +select 's98_s_customer_events_c_minipro_page_view' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 25 columns_qty from p12_sfull.s98_s_customer_events_c_minipro_page_view +union all +select 's98_s_customer_events_click_link_in_page' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 27 columns_qty from p12_sfull.s98_s_customer_events_click_link_in_page +union all +select 's98_s_customer_events_lastupdated' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 28 columns_qty from p12_sfull.s98_s_customer_events_lastupdated +union all +select 's98_s_customer_events_open_app' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 27 columns_qty from p12_sfull.s98_s_customer_events_open_app +union all +select 's98_s_customer_events_open_content_page' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 27 columns_qty from p12_sfull.s98_s_customer_events_open_content_page +union all +select 's98_s_customer_events_open_page' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 33 columns_qty from p12_sfull.s98_s_customer_events_open_page +union all +select 's98_s_customer_events_submit_form' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 25 columns_qty from p12_sfull.s98_s_customer_events_submit_form +union all +select 's98_s_customer_events_subscribe' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 13 columns_qty from p12_sfull.s98_s_customer_events_subscribe +union all +select 's98_s_customer_events_wechat_scan' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 13 columns_qty from p12_sfull.s98_s_customer_events_wechat_scan +union all +select 's98_s_livechat' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 98 columns_qty from p12_sfull.s98_s_livechat +union all +select 's98_s_scrm_contact' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 133 columns_qty from p12_sfull.s98_s_scrm_contact +union all +select 's98_s_scrm_contact_af0912' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 11 columns_qty from p12_sfull.s98_s_scrm_contact_af0912 +union all +select 's98_s_scrm_contact_lastupdated' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 133 columns_qty from p12_sfull.s98_s_scrm_contact_lastupdated +union all +select 's98_s_scrm_contact_merge' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 20 columns_qty from p12_sfull.s98_s_scrm_contact_merge +union all +select 's98_s_scrm_contact_merge_af0912' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 16 columns_qty from p12_sfull.s98_s_scrm_contact_merge_af0912 +union all +select 's98_s_scrm_contact_update_af0912' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 11 columns_qty from p12_sfull.s98_s_scrm_contact_update_af0912 +union all +select 's98_s_scrm_leads_af0912' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 13 columns_qty from p12_sfull.s98_s_scrm_leads_af0912 +union all +select 's98_s_udesk_record' data_table,count(*) row_count ,max(etl_tx_dt) last_upt_tm , 21 columns_qty from p12_sfull.s98_s_udesk_record +) p0 + + +; + + + +/*****************************************************************************************************/ +/* GROUP 2:Source Table:s98_s_customer_event_meta*****************************************************/ +/*****************************************************************************************************/ + +INSERT INTO data_source_update_agi_CUR_I ( + date_layer /*数据层级*/ + ,data_area /*数据领域*/ + ,data_table /*数据表*/ + ,data_rows /*数据行数*/ + ,column_qty /*字段数*/ + ,last_upt_tm /*最后更新日期*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + 'COM' /*date_layer*/ + ,case when p0 .data_table like '%scrm%' then 'SCRM' +when p0.data_table like '%customer%' then 'SCRM' +when p0.data_table like '%crm%' then 'CRM' +when p0.data_table like '%livechat%' then 'LiveChat' +when p0.data_table like '%udesk%' +then 'Udesk' +else 'All' end /*data_area*/ + ,coalesce(p0.data_table) /*data_table*/ + ,coalesce(p0.row_count) /*data_rows*/ + ,coalesce(p0.columns_qty) /*column_qty*/ + ,p0.last_upt_tm /*last_upt_tm*/ + ,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('s98_s_customer_event_meta',1,3) /*Src_Sysname*/ + ,'s98_s_customer_event_meta' /*Src_Table*/ + +FROM (select 'cust_contact_info' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 51 columns_qty from p30_common.cust_contact_info +union all +select 'cust_contact_mapping' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 13 columns_qty from p30_common.cust_contact_mapping +union all +select 'cust_leads' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 10 columns_qty from p30_common.cust_leads +union all +select 'cust_leads_detail' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 10 columns_qty from p30_common.cust_leads_detail +union all +select 'd_crm_contact' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 65 columns_qty from p30_common.d_crm_contact +union all +select 'd_livechat_contact' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 19 columns_qty from p30_common.d_livechat_contact +union all +select 'd_scrm_contact' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 20 columns_qty from p30_common.d_scrm_contact +union all +select 'd_udesk_contact' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 16 columns_qty from p30_common.d_udesk_contact ) p0 + + +; + + + +/*****************************************************************************************************/ +/* GROUP 3:Source Table:s98_s_customer_event_meta*****************************************************/ +/*****************************************************************************************************/ + +INSERT INTO data_source_update_agi_CUR_I ( + date_layer /*数据层级*/ + ,data_area /*数据领域*/ + ,data_table /*数据表*/ + ,data_rows /*数据行数*/ + ,column_qty /*字段数*/ + ,last_upt_tm /*最后更新日期*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + ) +SELECT + 'MART' /*date_layer*/ + ,case when p0 .data_table like '%scrm%' then 'SCRM' +when p0.data_table like '%customer%' then 'SCRM' +when p0.data_table like '%crm%' then 'CRM' +when p0.data_table like '%livechat%' then 'LiveChat' +when p0.data_table like '%udesk%' +then 'Udesk' +else 'All' end /*data_area*/ + ,coalesce(p0.data_table) /*data_table*/ + ,coalesce(p0.row_count,0) /*data_rows*/ + ,coalesce(p0.columns_qty,0) /*column_qty*/ + ,p0.last_upt_tm /*last_upt_tm*/ + ,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('s98_s_customer_event_meta',1,3) /*Src_Sysname*/ + ,'s98_s_customer_event_meta' /*Src_Table*/ + +FROM (select 'cust_all_info' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 33 columns_qty from p60_mart.cust_all_info +union all +select 'cust_enagement_records' data_table,count(*) row_count ,max(etl_proc_dt) last_upt_tm , 13 columns_qty from p60_mart.cust_enagement_records +union all +select 'v_dq_result' data_table,count(*) row_count ,max(check_run_date) last_upt_tm , 7 columns_qty from p51_dqc.dq_check_result) p0 + + +; + + + +/*将不同数据插入到临时表 */ +;INSERT INTO data_source_update_agi_INS ( + data_area /*数据领域*/ + ,data_rows /*数据行数*/ + ,column_qty /*字段数*/ + ,last_upt_tm /*最后更新日期*/ + ,date_layer /*数据层级*/ + ,data_table /*数据表*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) + SELECT + P1.data_area /*数据领域*/ + ,P1.data_rows /*数据行数*/ + ,P1.column_qty /*字段数*/ + ,P1.last_upt_tm /*最后更新日期*/ + ,P1.date_layer /*数据层级*/ + ,P1.data_table /*数据表*/ + ,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 data_source_update_agi_CUR_I P1 +LEFT JOIN :MARTDB.data_source_update P2 +ON P1.data_area = P2.data_area + AND P1.data_rows = P2.data_rows + AND P1.column_qty = P2.column_qty + AND P1.last_upt_tm = P2.last_upt_tm + AND P1.date_layer = P2.date_layer + AND P1.data_table = P2.data_table + +WHERE P2.data_area IS NULL + OR P2.data_rows IS NULL + OR P2.column_qty IS NULL + OR P2.last_upt_tm IS NULL + OR P2.date_layer IS NULL + OR P2.data_table IS NULL + +; +/*将新增数据插入到目标表 */ +;INSERT INTO :MARTDB.data_source_update ( + data_area /*数据领域*/ + ,data_rows /*数据行数*/ + ,column_qty /*字段数*/ + ,last_upt_tm /*最后更新日期*/ + ,date_layer /*数据层级*/ + ,data_table /*数据表*/ + ,Etl_Batch_No /*作业批次号*/ + ,Etl_First_Dt /*最初入库时间*/ + ,Etl_Job /*作业名称*/ + ,Etl_Proc_Dt /*本次入库时间*/ + ,Etl_Tx_Dt /*作业运行时间*/ + ,Src_Sysname /*来源系统*/ + ,Src_Table /*来源表*/ + +) +SELECT + P1.data_area /*数据领域*/ + ,P1.data_rows /*数据行数*/ + ,P1.column_qty /*字段数*/ + ,P1.last_upt_tm /*最后更新日期*/ + ,P1.date_layer /*数据层级*/ + ,P1.data_table /*数据表*/ + ,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 data_source_update_agi_INS P1 +ON CONFLICT ( date_layer,data_table) +DO UPDATE SET + date_layer=excluded.date_layer + ,data_table=excluded.data_table + ,data_area=excluded.data_area + ,data_rows=excluded.data_rows + ,column_qty=excluded.column_qty + ,last_upt_tm=excluded.last_upt_tm + ,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 +