weekly_data_profile

PHOTO EMBED

Fri Jan 20 2023 10:58:54 GMT+0000 (Coordinated Universal Time)

Saved by @shubhangi_burle

%jdbc(hive)
set tez.queue.name=default;
set hive.execution.engine=tez;

-- SELECT * FROM fraud.fra_consumer_category_master LIMIT 20

-- SELECT MIN(updated_date), MAX(updated_date), (MIN(updated_date) - MAX(updated_date)) FROM fraud.fra_consumer_category_master --2022-07-21 to 2023-01-18, 81

select DISTINCT profile.user_id user_id
,profile.reg_dt reg_dt
,profile.full_name full_name
,profile.no_of_upi_banks_lifetime
,profile.no_of_imps_banks_lifetime
,profile.sender_active_days sender_active_days
,profile.receiver_active_days_week
,profile.receiver_suc_txn_week
,profile.receiver_suc_amt_week
,profile.no_of_senders_week
,profile.no_of_sender_vpas_week
,profile.no_of_sender_locations
,profile.off_hr_rcvr_suc_txn
,profile.off_hr_rcvr_suc_amt
,profile.receiver_no_of_suc_banks
,profile.receiver_active_days_suc_txn_week 
,profile.sender_suc_txn_week sender_suc_txn_week
,profile.sender_suc_amt_week
,profile.no_of_receivers_week no_of_receivers_week
,profile.no_of_receiver_vpas_week no_of_receiver_vpas_week
,profile.sender_suc_upi_amt_week
,profile.sender_suc_wal_amt_week
,profile.sender_suc_pg_amt_week
--------------------------------------gc amount?
,profile.sender_no_of_suc_cards_week
,profile.sender_user_states_week
,profile.off_hr_sndr_suc_txn
,profile.off_hr_sndr_suc_amt
,profile.kyc_info kyc_info
,profile.user_created user_created
,profile.last_transaction_time last_transaction_time
,profile.sender_txn_week sender_txn_week
,profile.sender_amt_week
,profile.sender_daily_txn_suc_amt
,profile.sender_daily_avg_suc_amt
,profile.sender_no_of_suc_upi_banks_week
,profile.sender_to_suc_imps_banks_week
 ,profile.sender_int_suc_p2m_txn_week
,profile.sender_int_suc_p2m_amt_week
,profile.sender_int_suc_p2p_txn_week
,profile.sender_int_suc_p2p_amt_week
,profile.sender_ext_suc_p2m_txn_week
,profile.sender_ext_suc_p2m_amt_week
,profile.sender_ext_suc_p2p_txn_week
,profile.sender_ext_suc_p2p_amt_week
,profile.receiver_txn_week
,profile.receiver_amt_week
,profile.receiver_daily_avg_txn_suc_amt
,profile.receiver_daily_avg_suc_amt
,profile.receiver_suc_rev_txn
,profile.receiver_suc_rev_amt
,profile.receiver_int_p2p_suc_txn
,profile.receiver_int_p2p_suc_amt
,profile.receiver_ext_p2p_suc_txn
,profile.receiver_ext_p2p_suc_amt

from
(select COALESCE(sender.user_id, rcvr.user_id) user_id
,ud.full_name full_name
,ud.kyc kyc_info
,ud.created user_created
,ud.registration_date reg_dt
,coalesce(sender.last_transaction_time, rcvr.last_transaction_time) last_transaction_time
,NVL(sender.sender_active_days,0) sender_active_days
,NVL(sender.no_of_receiver_week,0) no_of_receivers_week
,NVL(sender.no_of_receiver_vpas_week,0) no_of_receiver_vpas_week
,NVL(sender.cnt_txn_lifetime,0) sender_txn_week
,NVL(sender.cnt_suc_txn_lifetime,0) sender_suc_txn_week
,NVL(sender.sum_amt_lifetime,0) sender_amt_week
,NVL(sender.sum_suc_amt_lifetime,0) sender_suc_amt_week
,NVL(sender.daily_txn_amt,0) sender_daily_txn_suc_amt
,NVL(sender.sndr_avg_amt_daily,0) sender_daily_avg_suc_amt
,NVL(sender.suc_upi_amt,0) sender_suc_upi_amt_week
,NVL(sender.suc_wal_amt,0) sender_suc_wal_amt_week
,NVL(sender.suc_pg_amt,0) sender_suc_pg_amt_week
,NVL(sender.user_state,0) sender_user_states_week --no.of states user sent money from
,NVL(sender.no_of_cards,0) sender_no_of_suc_cards_week
,NVL(sender.no_of_suc_upi_banks,0) sender_no_of_suc_upi_banks_week
,NVL(sender.sent_cnt_suc_imps_banks,0) sender_to_suc_imps_banks_week
 ,NVL(sender.no_of_upi_banks,0) no_of_upi_banks_lifetime
 ,NVL(sender.no_of_imps_banks,0) no_of_imps_banks_lifetime
,NVL(sender.cnt_suc_int_p2m_txn,0) sender_int_suc_p2m_txn_week
,NVL(sender.sum_suc_int_p2m_amt,0) sender_int_suc_p2m_amt_week
,NVL(sender.cnt_suc_int_p2p_txn,0) sender_int_suc_p2p_txn_week
,NVL(sender.sum_suc_int_p2p_amt,0) sender_int_suc_p2p_amt_week
,NVL(sender.cnt_suc_ext_p2m_txn,0) sender_ext_suc_p2m_txn_week
,NVL(sender.sum_suc_ext_p2m_amt,0) sender_ext_suc_p2m_amt_week
,NVL(sender.cnt_suc_ext_p2p_txn,0) sender_ext_suc_p2p_txn_week
,NVL(sender.sum_suc_ext_p2p_amt,0) sender_ext_suc_p2p_amt_week
,NVL(sender.off_hr_sndr_txn,0) off_hr_sndr_suc_txn
,NVL(sender.off_hr_sndr_amt,0) off_hr_sndr_suc_amt
--receiver
,NVL(rcvr.receiver_active_days_overall,0) receiver_active_days_week
,NVL(rcvr.no_of_senders_week,0) no_of_senders_week
,NVL(rcvr.no_of_sender_vpas_week,0) no_of_sender_vpas_week
,NVL(rcvr.no_of_sender_locations,0) no_of_sender_locations
,NVL(rcvr.receiver_active_days_suc,0) receiver_active_days_suc_txn_week
,NVL(rcvr.recv_txn,0) receiver_txn_week
,NVL(rcvr.recv_amt,0) receiver_amt_week
,NVL(rcvr.recv_suc_txn,0) receiver_suc_txn_week
,NVL(rcvr.recv_suc_amt,0) receiver_suc_amt_week
,NVL(rcvr.recv_daily_avg_txn_amt,0) receiver_daily_avg_txn_suc_amt
,NVL(rcvr.recv_avg_amt_daily,0) receiver_daily_avg_suc_amt
,NVL(rcvr.cnt_rev_txn,0) receiver_suc_rev_txn
,NVL(rcvr.cnt_rev_amt,0) receiver_suc_rev_amt
,NVL(rcvr.receiver_banks,0) receiver_no_of_suc_banks
,NVL(rcvr.recv_cnt_suc_int_p2p_txn,0) receiver_int_p2p_suc_txn
,NVL(rcvr.recv_sum_suc_int_p2p_amt,0) receiver_int_p2p_suc_amt
,NVL(rcvr.recv_cnt_suc_ext_p2p_txn,0) receiver_ext_p2p_suc_txn
,NVL(rcvr.recv_sum_suc_ext_p2p_amt,0) receiver_ext_p2p_suc_amt
,NVL(rcvr.off_hr_rcvr_txn,0) off_hr_rcvr_suc_txn
,NVL(rcvr.off_hr_rcvr_amt,0) off_hr_rcvr_suc_amt
from
(
--sender
	select ur.senderuserid as user_id
	,max(ur.transaction_time) as last_transaction_time
	--AML Requested variables
	,COALESCE(count(distinct date(ur.updated_date)),0) as sender_active_days
	,COALESCE(count(distinct ur.receiveruser),0) as no_of_receiver_week
	,COALESCE(count(distinct ur.reciver_vpa),0) as no_of_receiver_vpas_week
	-- count of transactions lifetime
	,COALESCE(count(distinct ur.transaction_id),0) as cnt_txn_lifetime
	,COALESCE(count(distinct ur.transaction_id),0) as cnt_suc_txn_lifetime
   -- sum of amount lifetime
	,COALESCE(sum(ur.totaltransactionamount),0) as sum_amt_lifetime
	,COALESCE(sum(ur.totaltransactionamount),0) as sum_suc_amt_lifetime
	--Average daily amount
	,COALESCE(sum(ur.totaltransactionamount),0)/COALESCE(count(distinct ur.transaction_id),0) as daily_txn_amt
	,COALESCE(sum(ur.totaltransactionamount),0)/COALESCE(count(distinct date(ur.updated_date)),0) as sndr_avg_amt_daily
	--exclusive instrument Concentration
	,COALESCE(sum(case when ur.upi_flag = 1 and ur.wallet_flag = 0 and ur.card_flag = 0 then ur.totaltransactionamount end),0) as suc_upi_amt
	,COALESCE(sum(case when ur.upi_flag = 0 and ur.wallet_flag = 1 and ur.card_flag = 0 then ur.totaltransactionamount end),0) as suc_wal_amt
	,COALESCE(sum(case when ur.upi_flag = 0 and ur.wallet_flag = 0 and ur.card_flag = 1 then ur.totaltransactionamount end),0) as suc_pg_amt
	--location
	,COALESCE(count(distinct edw.state),0) as user_state
	--card
	,COALESCE(count(distinct case when ur.workflowtype in ('CONSUMER_TO_MERCHANT','CONSUMER_TO_MERCHANT_V2','WALLET_TOPUP') and ur.sendertype = 'INTERNAL_USER' and ur.card_flag = true then ur.senderglobalcardid end),0) no_of_cards
	,COALESCE(count(distinct case when ur.upi_flag = true then ur.senderbankaccountsha end),0) no_of_suc_upi_banks
	,COALESCE(count(distinct case when ur.receiveruser like 'ifsc.npci%'  and ur.workflowtype = 'CONSUMER_TO_EXTERNAL' and ur.receivertype = 'EXTERNAL_USER' then ur.receiverbankaccountsha end),0) sent_cnt_suc_imps_banks
 	,a.cnt_upi_banks_lifetime no_of_upi_banks --lifetime
 	,a.cnt_imps_banks_lifetime no_of_imps_banks --lifetime
	,COALESCE(count(distinct case when ur.workflowtype in ('CONSUMER_TO_MERCHANT','CONSUMER_TO_MERCHANT_V2') and ur.receivertype = 'INTERNAL_USER' then ur.transaction_id end),0) as cnt_suc_int_p2m_txn
	,COALESCE(sum(case when ur.workflowtype in ('CONSUMER_TO_MERCHANT','CONSUMER_TO_MERCHANT_V2') and ur.receivertype = 'INTERNAL_USER' then ur.totaltransactionamount end),0) as sum_suc_int_p2m_amt
	,COALESCE(count(distinct case when ur.workflowtype in ('CONSUMER_TO_CONSUMER','CONSUMER_TO_CONSUMER_V2') and ur.receivertype = 'INTERNAL_USER' then ur.transaction_id end),0) as cnt_suc_int_p2p_txn
	,COALESCE(sum(case when ur.workflowtype in ('CONSUMER_TO_CONSUMER','CONSUMER_TO_CONSUMER_V2') and ur.receivertype = 'INTERNAL_USER' then ur.totaltransactionamount end),0) as sum_suc_int_p2p_amt
	--External flow *
	,COALESCE(count(distinct case when ur.workflowtype in ('CONSUMER_TO_MERCHANT','CONSUMER_TO_MERCHANT_V2') and ur.receivertype = 'EXTERNAL_USER' then ur.transaction_id end),0) as cnt_suc_ext_p2m_txn
	,COALESCE(sum(case when ur.workflowtype in ('CONSUMER_TO_MERCHANT','CONSUMER_TO_MERCHANT_V2') and ur.receivertype = 'EXTERNAL_USER' then ur.totaltransactionamount end),0) as sum_suc_ext_p2m_amt
	,COALESCE(count(distinct case when ur.workflowtype in ('CONSUMER_TO_CONSUMER','CONSUMER_TO_CONSUMER_V2') and ur.receivertype = 'EXTERNAL_USER' then ur.transaction_id end),0) as cnt_suc_ext_p2p_txn
	,COALESCE(sum(case when ur.workflowtype in ('CONSUMER_TO_CONSUMER','CONSUMER_TO_CONSUMER_V2') and ur.receivertype = 'EXTERNAL_USER' then ur.totaltransactionamount end),0) as sum_suc_ext_p2p_amt
	--Off hour
	,COALESCE(count(distinct case when ur.hr in (22,23,00,01,02,03,04,05,06) then ur.transaction_id end),0) as off_hr_sndr_txn
	,COALESCE(sum(case when ur.hr in (22,23,00,01,02,03,04,05,06) then ur.totaltransactionamount end),0) as off_hr_sndr_amt
	from
	    (select DISTINCT senderuserid, workflowtype, receivertype, errorcode, transaction_id, totaltransactionamount,upi_flag, wallet_flag, card_flag, transaction_time
	    , senderphonenumber, senderglobalcardid, senderbankaccountsha, hour(transaction_time) hr, updated_date, receiverbankaccountsha, receiveruser, sendertype, reciver_vpa
	    from fraud.transaction_details_v3
	    where date(updated_date) BETWEEN date_sub('{{ next_ds }}',7) and date_sub('{{ next_ds }}',1)
	    AND senderuserid in (SELECT DISTINCT identifier FROM fraud.aml_freshdesk WHERE run_date = '{{ next_ds }}')) ur
	LEFT JOIN 
	    (SELECT user_id, state FROM edw_shared.user_dimension
	    WHERE user_id IN (SELECT DISTINCT identifier FROM fraud.aml_freshdesk WHERE run_date = '{{ next_ds }}'))edw 
	on ur.senderuserid = edw.user_id
 	LEFT JOIN 
 	  --  (SELECT * FROM fraud.accounts_temp) a 
 	    (select user_id
		,count(distinct masked_account_number) as cnt_banks_lifetime
		,count(distinct (case when usage_domain= 'UPI' then masked_account_number end)) as cnt_upi_banks_lifetime
		,count(distinct (case when usage_domain= 'IMPS' then masked_account_number end)) as cnt_imps_banks_lifetime
	    from payment.accounts
	    WHERE user_id IN (SELECT DISTINCT identifier FROM fraud.aml_freshdesk WHERE run_date = '{{ next_ds }}')
	    group by user_id)a
 	on ur.senderuserid = a.user_id
	group by ur.senderuserid , a.cnt_upi_banks_lifetime, a.cnt_imps_banks_lifetime
)sender
full outer JOIN
(
    select b.receiveruser user_id
	,max(b.transaction_time) as last_transaction_time
	,COALESCE(count(distinct date(b.updated_date)),0) as receiver_active_days_overall
	,COALESCE(count(distinct date(b.updated_date)),0) as receiver_active_days_suc
	,COALESCE(count(distinct b.senderuserid),0) as no_of_senders_week
	,COALESCE(count(distinct b.sender_vpa),0) as no_of_sender_vpas_week
	-- count of transactions lifetime
	,COALESCE(count(distinct b.transaction_id),0) as recv_txn
	,COALESCE(count(distinct b.transaction_id end),0) as recv_suc_txn
	--txn amt
	,COALESCE(sum(b.totaltransactionamount),0) as recv_amt
	,COALESCE(sum(b.totaltransactionamount end),0) as recv_suc_amt
    ,COALESCE(sum(b.totaltransactionamount end),0)/COALESCE(count(distinct b.transaction_id),0)as recv_daily_avg_txn_amt
	,COALESCE(sum(b.totaltransactionamount),0)/COALESCE(count(distinct date(b.updated_date)),0)as recv_avg_amt_daily
	--location
	--merchant reversals
	,COALESCE(count(distinct case when b.workflowtype in ('MERCHANT_REVERSAL_V2') and b.receivertype = 'INTERNAL_USER' then b.transaction_id end),0) as cnt_rev_txn
	,COALESCE(sum(case when b.workflowtype in ('MERCHANT_REVERSAL_V2') and b.receivertype = 'INTERNAL_USER' then b.totaltransactionamount end),0) as cnt_rev_amt
	--recever daily txn amount
	,COALESCE(count(distinct case when b.workflowtype in ('CONSUMER_TO_CONSUMER','EXTERNAL_TO_CONSUMER', 'CONSUMER_TO_CONSUMER_V2') and b.receivertype = 'INTERNAL_USER' and b.receiverbankaccountsha != '' then b.receiverbankaccountsha end),0) receiver_banks
	,COALESCE(count(distinct case when b.workflowtype in ('CONSUMER_TO_CONSUMER', 'CONSUMER_TO_CONSUMER_V2') and b.receivertype = 'INTERNAL_USER' then b.transaction_id end),0) as recv_cnt_suc_int_p2p_txn
	,COALESCE(sum(case when b.workflowtype in ('CONSUMER_TO_CONSUMER', 'CONSUMER_TO_CONSUMER_V2') and b.receivertype = 'INTERNAL_USER' then b.totaltransactionamount end),0) as recv_sum_suc_int_p2p_amt
	,COALESCE(count(distinct case when b.workflowtype in ('EXTERNAL_TO_CONSUMER') and b.receivertype = 'INTERNAL_USER' then b.transaction_id end),0) as recv_cnt_suc_ext_p2p_txn
	,COALESCE(sum(case when b.workflowtype in ('EXTERNAL_TO_CONSUMER') and b.receivertype = 'INTERNAL_USER' then b.totaltransactionamount end),0) as recv_sum_suc_ext_p2p_amt
	,COALESCE(count(distinct case when hour(b.transaction_time) in (22,23,00,01,02,03,04,05,06) then b.transaction_id end),0) as off_hr_rcvr_txn
	,COALESCE(sum(case when hour(b.transaction_time) in (22,23,00,01,02,03,04,05,06) then b.totaltransactionamount end),0) as off_hr_rcvr_amt
	,COALESCE(count(distinct c.state)) no_of_sender_locations
	FROM
	    (SELECT receiveruser
	    , transaction_time
	    , updated_date
	    , errorcode
	    , senderuserid
	    , sender_vpa
	    , transaction_id
	    , totaltransactionamount
	    , workflowtype
	    , receivertype
	    , receiverbankaccountsha 
	    from fraud.transaction_details_v3
	    WHERE updated_date BETWEEN date_sub('{{ next_ds }}',7) AND date_sub('{{ next_ds }}',1)
	    AND errorcode = 'SUCCESS'
	    AND receiveruser in (SELECT DISTINCT identifier FROM fraud.aml_freshdesk WHERE run_date = '{{ next_ds }}')) b
	LEFT JOIN 
	    (SELECT user_id, state FROM edw_shared.user_dimension) c
	on b.senderuserid = c.user_id
	group by b.receiveruser )rcvr
on sender.user_id = rcvr.user_id
-- Run the query by enabling the below variable for offline execution
INNER JOIN
    (select user_ext_id, kyc, created, full_name, registration_date, phone_number 
    from users.users
    WHERE user_ext_id IN (SELECT DISTINCT identifier FROM fraud.aml_freshdesk WHERE run_date = '{{ next_ds }}')) ud
on (ud.user_ext_id = sender.user_id) or (ud.user_ext_id = rcvr.user_id)
--  INNER JOIN
--      (select DISTINCT user_ext_id, full_name, kyc, created, registration_date 
-- from fraud.users_temp) ud
--  on (ud.user_ext_id = sender.user_id) or (ud.user_ext_id = rcvr.user_id)
)profile
INNER JOIN
    (select DISTINCT identifier from fraud.aml_freshdesk where run_date = '{{ next_ds }}')aml
on aml.identifier = profile.user_id;
content_copyCOPY