raena_analytics_scripts/postgresql/am_recommendation/whatsapp_campaign.sh

515 lines
21 KiB
Bash
Raw Permalink Normal View History

2024-06-24 12:26:08 +00:00
#!/bin/bash
echo -e " \n----------- ACCEPTING NUMBER OF DAYS BEFORE THE RUN DATE FOR WHICH THE REPORT IS TO BE RUN --------------\n"
backDay=$1
echo $backDay
echo -e " \n------------- DATE IN THE REQUIRED FORMAT --------------\n"
reportDate=$(date -d"$backDay day ago" "+%Y-%m-%d")
date
echo 'reportDate'=$reportDate
echo "
drop table if exists raena_analytics.clevertap_event_data_vishnu;
create table raena_analytics.clevertap_event_data_vishnu
as
select ts::date ,events, name , email ,phone,event_props::jsonb->>'CT Session Id' sessionid ,
event_props::jsonb->>'item_id' item_id ,
event_props::jsonb->>'isGuestUser' isGuestUser ,
event_props::jsonb->>'CT Source' Source ,
event_props::jsonb->>'id' id ,
event_props::jsonb->>'brandName' brandName ,
event_props::jsonb->>'item_name' item_name ,
event_props::jsonb->>'offenderItems' offenderItems ,
event_props::jsonb->>'items' items ,
event_props::jsonb->>'search_term' search_term ,
event_props::jsonb->>'screen' screen
from clevertap.clevertap_master_data where events in (
'brands_tab_press' ,
'brand_logo_carousel_press',
'App Launched',
'view_item',
'begin_checkout',
'search',
'Charged',
'App Installed',
'view_cart',
'add_to_cart',
'customer_search',
'Notification Clicked',
'Notification Viewed',
'Push Impressions',
'home_category',
'pdp_brandprice',
'order_items_view',
'sidebar_browsebrands',
'confirm_payment',
'finish_checkout',
'loyalty_page_visit',
'home_brand_Caraousel',
'home_brand_grid_view',
'WISHLIST',
'brand_carousel_press',
'continue_shopping',
'home_banner',
'brandpage_image_banner_press',
'skip_login',
'App Uninstalled',
'coupon_applied_successfully',
'coupon_could_not_be_applied',
'view_rewards',
'view_order_checkout',
'coupon_remove',
'homeintent_buyws',
'homepage_image_banner_press',
'home_continue_payment',
'homepage_carousel_category_press',
'flashsale_carousel_item_press',
'flashsale_carousel_view_all_press',
'homeintent_managemp'
)
and ts::date >='2023-04-01';
drop table raena_analytics.hero_sku_l6m;
CREATE TABLE raena_analytics.hero_sku_l6m AS
SELECT DISTINCT brand_name ,
brand_id,
SKU
FROM
(SELECT * ,
sum(contribution) over (partition BY brand_name
ORDER BY rnk) final_rnk
FROM
(SELECT * ,
sum(payment_amount) over (partition BY brand_name) running_sum,
(payment_amount*100)/nullif(sum(payment_amount) over (partition BY brand_name),0) contribution
FROM
(SELECT GD.brand_name ,
gd.sku ,
B.brand_id,
sum(quantity* discounted_price) payment_amount ,
rank() over (partition BY brand_name
ORDER BY sum(quantity* discounted_price) DESC) rnk
FROM raena_analytics.gm_dashboard gd
LEFT JOIN raena_catalog_management.product B ON gd.sku = B.sku
WHERE transaction_date BETWEEN (date_trunc('Month',CURRENT_DATE)::date + interval'-6 Month')::date AND date_trunc('Month',CURRENT_DATE)::date
GROUP BY 1,
2,
3) A) AA) BB
WHERE (final_rnk <=75)
OR contribution >= 75 ;
drop table if exists raena_analytics.whatsapp_campaign_base_table ;
CREATE TABLE raena_analytics.whatsapp_campaign_base_table AS
SELECT DISTINCT brand_name ,
segment_name,
reseller_email,
reseller_mobile ,
reseller_name
from
(select *,row_number()over(partition by brand_name order by segment_number ) brand_limit_user
FROM
(SELECT * ,
rank()over(partition BY brand_name,reseller_email
ORDER BY segment_number) remove_duplicate_user
FROM
(SELECT DISTINCT anchor_brand_name brand_name,
'SEGMENT_PERSONAL_ANCHOR_BRAND' segment_name,
1 segment_number,
reseller_email,
reseller_mobile,
NULL reseller_name
FROM
(SELECT Transaction_date2 year_date,
reseller_email,
reseller_mobile,
bucket revenue_cohort,
Brand_name,
avg_brand_contribution ,
avg_payment_amount avg_brand_revenue,
anchor_brand_name,
avg_anchor_brand_contribution,
avg_anchor_payment_amount avg_anchor_brand_revenue
FROM raena_analytics.reseller_level_anchor_brand_data
WHERE 1=1
AND bucket IS NOT NULL
ORDER BY year_date DESC , avg_anchor_brand_contribution DESC) A
UNION ALL SELECT DISTINCT brand_name brand_name,
'SEGMENT_PARENT_BRAND_FOR_ANCHOR' segment_name,
2 segment_number,
reseller_email,
reseller_mobile,
NULL reseller_namme
FROM
(SELECT Transaction_date2 year_date,
reseller_email,
reseller_mobile,
bucket revenue_cohort,
Brand_name,
avg_brand_contribution ,
avg_payment_amount avg_brand_revenue,
anchor_brand_name,
avg_anchor_brand_contribution,
avg_anchor_payment_amount avg_anchor_brand_revenue
FROM raena_analytics.reseller_level_anchor_brand_data
WHERE 1=1
AND bucket IS NOT NULL
ORDER BY year_date DESC , avg_anchor_brand_contribution DESC) A
UNION ALL SELECT DISTINCT brand_name brand_name,
'SEGMENT_PERSONALIZED_RECOMMENDATIONS' segment_name,
3 segment_number,
reseller_email,
reseller_mobile,
name reseller_name
FROM
(SELECT reseller_email,
reseller_mobile,
u.name,
dr.sku,
b.name brand_name,
score match_score,
after_discount post_discount_gm,
stock_type,
pi.current_inventory_ready,
pi.current_inventory_pre_order,
p.name product_name
FROM
(SELECT *
FROM raena_recommendation_engine.daily_recommendation
ORDER BY reseller_email,
score DESC) dr
INNER JOIN
( SELECT *
FROM raena_user_management.user
WHERE status = 'active') u ON u.mobile = dr.reseller_mobile
INNER JOIN
( SELECT id,
sku,
stock_type,
name,
brand_id
FROM raena_catalog_management.product
WHERE is_archived = 'false'
AND is_delisted = 'false') p ON p.sku = dr.sku
INNER JOIN
( SELECT product_id,
sum(CASE WHEN stock_type = 'READY_SKU' THEN stock_limit - reserve_stock END) AS current_inventory_ready ,
sum(CASE WHEN stock_type = 'PRE_ORDER' THEN stock_limit - reserve_stock END) AS current_inventory_pre_order
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pi ON pi.product_id = p.id
INNER JOIN
( SELECT *
FROM raena_catalog_management.brand) b ON b.id = p.brand_id
ORDER BY match_score DESC) A
UNION ALL SELECT DISTINCT name brand_name,
'SEGMENT_PROVINCE_BASED_RECOMMENDATION' segment_name,
4 segment_number,
reseller_email,
reseller_mobile,
name reseller_name
FROM
( SELECT shipping_province ,
dr.sku ,
b.name ,
score ,
after_discount ,
stock_type,
pi.current_inventory_ready,
pi.current_inventory_pre_order,
p.name product_name
FROM
(SELECT shipping_province,
sku,
score,
after_discount
FROM raena_recommendation_engine.daily_recommendation_new_user
ORDER BY score DESC, rank) dr
INNER JOIN
(SELECT id,
sku,
stock_type,
name,
brand_id
FROM raena_catalog_management.product
WHERE is_archived = 'false'
AND is_delisted = 'false') p ON p.sku = dr.sku
INNER JOIN
(SELECT product_id,
sum(CASE WHEN stock_type = 'READY_SKU' THEN stock_limit - reserve_stock END) AS current_inventory_ready ,
sum(CASE WHEN stock_type = 'PRE_ORDER' THEN stock_limit - reserve_stock END) AS current_inventory_pre_order
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pi ON pi.product_id = p.id
INNER JOIN
(SELECT id,
name
FROM raena_catalog_management.brand) b ON b.id = p.brand_id
ORDER BY Score DESC) A
INNER JOIN
(SELECT reseller_email,
reseller_mobile,
reseller_name ,
shipping_province,
sku,
brand_name
FROM raena_analytics.gm_dashboard gd
WHERE transaction_date::date >='2023-02-01'
AND reseller_email IS NOT NULL)B ON lower(A.shipping_province) = lower(B.shipping_province)
AND A.name = B.brand_name
AND A.sku = B.sku
UNION ALL SELECT DISTINCT AA.Brand_name brand_name,
'SEGMENT_REVENUE_COHORT_ANCHOR_BRAND' segment_name,
4 segment_number,
reseller_email,
reseller_mobile,
reseller_name
FROM
(SELECT Transaction_date2 year_date,
bucket revenue_cohort,
Brand_name,
avg_brand_contribution ,
avg_payment_amount avg_brand_revenue,
anchor_brand_name,
avg_anchor_brand_contribution,
avg_anchor_payment_amount avg_anchor_brand_revenue
FROM raena_analytics.anchor_brand_data
ORDER BY year_date DESC, avg_anchor_brand_contribution DESC) AA
INNER JOIN
(SELECT brand_name ,
bucket,
reseller_email,
reseller_mobile ,
reseller_name
FROM raena_analytics.gm_dashboard gd
INNER JOIN
(SELECT DISTINCT reseller_id ,
CASE WHEN max_payment_amount BETWEEN 0 AND 2000000 THEN '0 to 2M' WHEN max_payment_amount BETWEEN 2000000 AND 10000000 THEN '2M to 10M' WHEN max_payment_amount >10000000 THEN '>10M' END bucket
FROM
(SELECT reseller_id,
max(payment_amount) max_payment_amount
FROM
(SELECT reseller_id ,
date_trunc('Month',transaction_date)::date ,
sum(discounted_price*quantity) payment_amount
FROM raena_analytics.gm_dashboard gd2
GROUP BY 1,
2) A
GROUP BY 1) B)C ON gd.reseller_id = C.reseller_id
WHERE transaction_date::date BETWEEN '2023-05-01' AND '2023-07-31') BB ON AA.brand_name = BB.brand_name
AND AA.revenue_cohort = BB.bucket
UNION ALL SELECT DISTINCT brand_name,
'SEGMENT_PERSONALIZED_RECOMMENDATIONS_SIMILAR_USER' segment_name,
5 segment_number,
reseller_email,
reseller_mobile,
name reseller_name
FROM
(SELECT reseller_email,
mobile Reseller_mobile,
bb.name,
dr.sku,
b.name brand_name,
score match_score,
after_discount post_discount_gm,
stock_type,
pi.current_inventory_ready,
pipreorder.current_inventory_pre_order,
p.name product_name
FROM
(SELECT *
FROM raena_recommendation_engine.daily_similar_user_v2
ORDER BY reseller_email,
score DESC) dr
LEFT JOIN
( SELECT id,
sku,
stock_type,
name,
brand_id
FROM raena_catalog_management.product
WHERE is_archived = 'false'
AND is_delisted = 'false') p ON p.sku = dr.sku
LEFT JOIN
(SELECT product_id,
sum(stock_limit - reserve_stock) AS current_inventory_ready
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND stock_type = 'READY_SKU'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pi ON pi.product_id = p.id
LEFT JOIN
(SELECT product_id,
sum(stock_limit - reserve_stock) AS current_inventory_pre_order,
max(estimated_arrival_date) AS estimated_arrival_date
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND stock_type = 'PRE_ORDER'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pipreorder ON pipreorder.product_id = p.id
INNER JOIN
( SELECT id,
name
FROM raena_catalog_management.brand) b ON b.id = p.brand_id
INNER JOIN
( SELECT *
FROM raena_user_management.user) bb ON bb.email = dr.reseller_email
ORDER BY reseller_email,
match_score DESC) AA
UNION ALL SELECT DISTINCT brand_name,
'SEGMENT_PERSONALIZED_RECOMMENDATIONS_SHIPPING_PROVINCE' segment_name,
6 segment_number,
reseller_email,
reseller_mobile,
name reseller_name
FROM
(SELECT dr.reseller_email,
mobile Reseller_mobile,
bb.name,
Shipping_Province,
dr.sku,
b.name brand_name,
score match_score,
after_discount post_discount_gm,
stock_type,
pi.current_inventory_ready,
pipreorder.current_inventory_pre_order,
p.name product_name
FROM
(SELECT *
FROM raena_recommendation_engine.daily_recommendation_shipping_province
ORDER BY reseller_email,
score DESC) dr
LEFT JOIN
(SELECT id,
sku,
stock_type,
name,
brand_id
FROM raena_catalog_management.product
WHERE is_archived = 'false'
AND is_delisted = 'false') p ON p.sku = dr.sku
LEFT JOIN
(SELECT product_id,
sum(stock_limit - reserve_stock) AS current_inventory_ready
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND stock_type = 'READY_SKU'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pi ON pi.product_id = p.id
LEFT JOIN
(SELECT product_id,
sum(stock_limit - reserve_stock) AS current_inventory_pre_order,
max(estimated_arrival_date) AS estimated_arrival_date
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND stock_type = 'PRE_ORDER'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pipreorder ON pipreorder.product_id = p.id
INNER JOIN
(SELECT id,
name
FROM raena_catalog_management.brand) b ON b.id = p.brand_id
INNER JOIN
(SELECT *
FROM raena_user_management.user) bb ON bb.email = dr.reseller_email
ORDER BY match_score DESC) AA
UNION ALL SELECT DISTINCT brand_name,
'SEGMENT_PERSONALIZED_RECOMMENDATIONS_REVENUE' segment_name,
7 segment_number,
reseller_email,
reseller_mobile,
name reseller_name
FROM
(SELECT dr.reseller_email,
mobile Reseller_mobile,
bb.name,
dr.sku,
b.name brand_name,
score match_score,
after_discount post_discount_gm,
stock_type,
pi.current_inventory_ready,
pipreorder.current_inventory_pre_order,
p.name product_name
FROM
( SELECT *
FROM raena_recommendation_engine.daily_recommendation_revenue
ORDER BY reseller_email,
score DESC) dr
LEFT JOIN
(SELECT id,
sku,
stock_type,
name,
brand_id
FROM raena_catalog_management.product
WHERE is_archived = 'false'
AND is_delisted = 'false') p ON p.sku = dr.sku
LEFT JOIN
(SELECT product_id,
sum(stock_limit - reserve_stock) AS current_inventory_ready
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND stock_type = 'READY_SKU'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pi ON pi.product_id = p.id
LEFT JOIN
(SELECT product_id,
sum(stock_limit - reserve_stock) AS current_inventory_pre_order,
max(estimated_arrival_date) AS estimated_arrival_date
FROM raena_catalog_management.product_inventory
WHERE is_archived = 'false'
AND stock_type = 'PRE_ORDER'
AND (stock_limit - reserve_stock) > 0
GROUP BY product_id) pipreorder ON pipreorder.product_id = p.id
INNER JOIN
( SELECT id,
name
FROM raena_catalog_management.brand) b ON b.id = p.brand_id
INNER JOIN
( SELECT *
FROM raena_user_management.user) bb ON bb.email = dr.reseller_email
ORDER BY match_score DESC) A) AA) BB
WHERE remove_duplicate_user =1) CC
where brand_limit_user <=2000;
update raena_analytics.whatsapp_campaign_base_table
set reseller_name = name
from raena_user_management.user
where reseller_email = email ;
update raena_analytics.whatsapp_campaign_base_table
set reseller_name = name
from raena_user_management.user
where reseller_mobile = mobile
and reseller_name is null ;
update raena_analytics.whatsapp_campaign_base_table
set reseller_email = email
from raena_user_management.user
where reseller_mobile = mobile
and reseller_email is null ;
" > /home/ec2-user/cronjob/postgresql/am_recommendation/whatsapp_campaign.sql
psql "host=analytics-db-instance-1.cd7qipz3esdx.ap-southeast-1.rds.amazonaws.com user=dbadmin dbname=analytics port=5432 password=5qCif6eyY3Kmg4z" -f /home/ec2-user/cronjob/postgresql/am_recommendation/whatsapp_campaign.sql