优化job_one_game
This commit is contained in:
		
							parent
							
								
									abfc5c4d2c
								
							
						
					
					
						commit
						b59f5f1e34
					
				| @ -1,6 +1,5 @@ | ||||
| from utils.read_sql_files import read_one_game_sql_files | ||||
| from utils.execute_sql import select_execute_sql | ||||
| from utils.read_sql_files import read_sql_files | ||||
| 
 | ||||
| 
 | ||||
| def dim(game_information): | ||||
| @ -22,7 +21,7 @@ def ads(game_information): | ||||
| 
 | ||||
| 
 | ||||
| def job_one_game(): | ||||
|     sql_params = "49,50,51" | ||||
|     sql_params = "123,122" | ||||
| 
 | ||||
|     sql_str = f"select relation_id,game_channel_id,game_identity,game_platform_id from dim.game_product_relation where relation_id IN ({sql_params})" | ||||
|     game_information = select_execute_sql(sql_str) | ||||
| @ -34,23 +33,14 @@ def job_one_game(): | ||||
|             "${platform_id}": str(game[3]) | ||||
|         } | ||||
|         print(game_information_dic) | ||||
|         # dim(game_information_dic) | ||||
|         # dwd(game_information_dic) | ||||
|         # dws(game_information_dic) | ||||
|         # ads(game_information_dic) | ||||
|         dim(game_information_dic) | ||||
|         dwd(game_information_dic) | ||||
|         dws(game_information_dic) | ||||
|         ads(game_information_dic) | ||||
| 
 | ||||
| 
 | ||||
| def rerun(): | ||||
|     # read_sql_files('dim') | ||||
| 
 | ||||
|     read_sql_files('dwd_before') | ||||
|     read_sql_files('dwd_after') | ||||
| 
 | ||||
|     read_sql_files('dws_before') | ||||
|     read_sql_files('dws_after') | ||||
| 
 | ||||
|     read_sql_files('ads') | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     rerun() | ||||
|     job_one_game() | ||||
|  | ||||
							
								
								
									
										51
									
								
								job_test.py
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								job_test.py
									
									
									
									
									
								
							| @ -1,37 +1,30 @@ | ||||
| from utils.loadconfig import get_path | ||||
| from utils.read_sql_files import read_sql_files | ||||
| from utils.log import Log | ||||
| from utils.date_time import get_variable_parameter | ||||
| from utils.execute_sql import execute_sql | ||||
| 
 | ||||
| def dim(): | ||||
|     read_sql_files('dim') | ||||
| 
 | ||||
| 
 | ||||
| def read_sql_files(directory, day): | ||||
|     log = Log().getlog() | ||||
|     directory = get_path() + directory | ||||
| 
 | ||||
|     try: | ||||
|         with open(directory, 'r', encoding='utf-8') as f: | ||||
|             content = f.read() | ||||
|             # 遍历字典,将字符串中的占位符替换为对应的值 | ||||
|             for key, value in get_variable_parameter(day).items(): | ||||
|                 content = content.replace(key, str(value)) | ||||
|             log.info(f"文件路径: {directory}") | ||||
| 
 | ||||
|             try: | ||||
|                 returnstr = execute_sql(content) | ||||
|                 log.info(f"执行结果: {returnstr}") | ||||
|                 log.info("-" * 50) | ||||
|             except Exception as e: | ||||
|                 log.error(f"执行 SQL 文件 {directory} 时出现错误: {e}") | ||||
| 
 | ||||
|     except UnicodeDecodeError: | ||||
|         log.error(f"文件 {directory} 编码格式可能不是utf-8,无法正确读取,请检查。") | ||||
|     except Exception as e: | ||||
|         log.error(f"读取文件 {directory} 时出现错误: {e}") | ||||
| def dwd(): | ||||
|     read_sql_files('dwd_before') | ||||
|     read_sql_files('dwd_after') | ||||
| 
 | ||||
| 
 | ||||
| def dws(): | ||||
|     read_sql_files('dws_before') | ||||
|     read_sql_files('dws_after') | ||||
| 
 | ||||
| 
 | ||||
| def ads(): | ||||
|     read_sql_files('ads') | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     # 遍历300到0 | ||||
|     for day in range(301): | ||||
|         read_sql_files('/sql/ads/user_retention.sql', day) | ||||
|     log = Log().getlog() | ||||
|     log.info(f"---------job开始执行:---------") | ||||
|     dim() | ||||
|     dwd() | ||||
|     dws() | ||||
|     ads() | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										34
									
								
								one_game_sql/ads/data_screen.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								one_game_sql/ads/data_screen.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| -- 数据概览 | ||||
| INSERT INTO ads.data_screen(relation_id,prodid,ds,ds_type,ds_name,order_amount,money,processed_amount,"cost") | ||||
| SELECT  t1.relation_id | ||||
|         ,t1.product_id prodid | ||||
|         ,t.ds | ||||
|         ,t.ds_type | ||||
|         ,t.ds_name | ||||
|         ,SUM(t.order_amount) order_amount | ||||
|         ,SUM(t2.money) money | ||||
|         ,0 processed_amount | ||||
|         ,SUM(COALESCE(t3.cost,0)) AS "cost" | ||||
| FROM    dwd.order_df t | ||||
| INNER JOIN dim.game_product_relation t1 | ||||
| ON      t.game_channel_id = t1.game_channel_id | ||||
| AND     t.game_identity = t1.game_identity | ||||
| AND     t.game_platform_id = t1.game_platform_id | ||||
| INNER JOIN dwd.revenue_df t2 on t1.relation_id=t2.relation_id | ||||
| AND t.ds=t2.ds | ||||
| and t.ds_type=t2.ds_type | ||||
| left join  "ads"."ad_data" t3 | ||||
| on t1.relation_id=t3.relation_id | ||||
| and t.ds=t3.ds | ||||
| and t.ds_type=t3.ds_type | ||||
| where t1.relation_id='${relation_id}' | ||||
| GROUP BY t1.relation_id | ||||
|          ,t1.product_id | ||||
|          ,t.ds | ||||
|          ,t.ds_type | ||||
|          ,t.ds_name | ||||
| ON CONFLICT (relation_id,ds,ds_type) DO | ||||
| UPDATE SET prodid = EXCLUDED.prodid,order_amount = EXCLUDED.order_amount,money = EXCLUDED.money | ||||
| ,processed_amount = EXCLUDED.processed_amount,"cost" = EXCLUDED."cost" | ||||
| ; | ||||
| 
 | ||||
							
								
								
									
										63
									
								
								one_game_sql/ads/game_data.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								one_game_sql/ads/game_data.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | ||||
| -- 汇总游戏数据 | ||||
| 
 | ||||
| 
 | ||||
| INSERT INTO ads.game_data(relation_id,prodid,ds,ds_type,ds_name,active_user_cut,play_user_cut,order_amount,new_active_user_cut, | ||||
|                           new_play_user_cut,new_order_amount) | ||||
| 
 | ||||
| SELECT | ||||
|     relation_id, | ||||
|     prodid, | ||||
|     ds, | ||||
|     ds_type, | ||||
|     ds_name, | ||||
|     active_user_cut, | ||||
|     play_user_cut, | ||||
|     order_amount, | ||||
|     new_active_user_cut, | ||||
|     new_play_user_cut, | ||||
|     new_order_amount | ||||
| FROM ( | ||||
|     SELECT t1.relation_id, | ||||
|            t1.product_id AS prodid, | ||||
|            t.ds, | ||||
|            'd' AS ds_type, | ||||
|            '天' AS ds_name, | ||||
|            SUM(CASE WHEN t.type = 'hyzh' THEN active_user_cut ELSE 0 END) AS active_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'hyzh' THEN play_user_cut ELSE 0 END) AS play_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'hyzh' THEN order_amount ELSE 0 END) AS order_amount, | ||||
|            SUM(CASE WHEN t.type = 'xzh' THEN active_user_cut ELSE 0 END) AS new_active_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'xzh' THEN play_user_cut ELSE 0 END) AS new_play_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'xzh' THEN order_amount ELSE 0 END) AS new_order_amount | ||||
|     FROM dws.game_user_data t | ||||
|     INNER JOIN dim.game_product_relation t1 ON | ||||
|         t.game_channel_id = t1.game_channel_id AND | ||||
|         t.game_identity = t1.game_identity AND | ||||
|         t.game_platform_id = t1.game_platform_id | ||||
|     where t.ds<='${bizdate}' and t1.relation_id='${relation_id}' | ||||
|     GROUP BY t1.relation_id, t1.product_id, t.ds | ||||
| 
 | ||||
|     UNION ALL | ||||
| 
 | ||||
|     SELECT t1.relation_id, | ||||
|            t1.product_id AS prodid, | ||||
|            t.ds, | ||||
|            'm' AS ds_type, | ||||
|            '月' AS ds_name, | ||||
|            SUM(CASE WHEN t.type = 'hyzh' THEN active_user_cut ELSE 0 END) AS active_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'hyzh' THEN play_user_cut ELSE 0 END) AS play_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'hyzh' THEN order_amount ELSE 0 END) AS order_amount, | ||||
|            SUM(CASE WHEN t.type = 'xzh' THEN active_user_cut ELSE 0 END) AS new_active_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'xzh' THEN play_user_cut ELSE 0 END) AS new_play_user_cut, | ||||
|            SUM(CASE WHEN t.type = 'xzh' THEN order_amount ELSE 0 END) AS new_order_amount | ||||
|     FROM dws.game_user_data_month t | ||||
|     INNER JOIN dim.game_product_relation t1 ON | ||||
|         t.game_channel_id = t1.game_channel_id AND | ||||
|         t.game_identity = t1.game_identity AND | ||||
|         t.game_platform_id = t1.game_platform_id | ||||
|     where  t1.relation_id='${relation_id}' | ||||
|     GROUP BY t1.relation_id, t1.product_id, t.ds | ||||
| ) tt | ||||
| 
 | ||||
| ON CONFLICT (relation_id,ds,ds_type) DO UPDATE SET prodid=EXCLUDED.prodid,ds_name = EXCLUDED.ds_name, active_user_cut = EXCLUDED.active_user_cut ,play_user_cut = EXCLUDED.play_user_cut | ||||
|     ,order_amount = EXCLUDED.order_amount,new_active_user_cut = EXCLUDED.new_active_user_cut,new_play_user_cut = EXCLUDED.new_play_user_cut,new_order_amount = EXCLUDED.new_order_amount | ||||
| ; | ||||
							
								
								
									
										41
									
								
								one_game_sql/ads/order_ltv.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								one_game_sql/ads/order_ltv.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| -- 处理逻辑说明 | ||||
| -- 1.first_user是用户首次登陆时间 和ods.order 订单表 | ||||
| -- 2.用户首次登陆去关联订单表获取用户的再那一天下单多少钱 | ||||
| 
 | ||||
| INSERT INTO ads.order_ltv ( relation_id,prodid,ds,num,order_amount,ltv0,ltv1,ltv2,ltv3,ltv4,ltv5,ltv6,ltv7,ltv14,ltv30,ltv60,ltv90,ltv150,ltv300) | ||||
| SELECT | ||||
|     t1.relation_id, | ||||
|     t1.prodid, | ||||
|     t1.ds, | ||||
|     COUNT(DISTINCT t1.user_id) AS num, | ||||
|     COALESCE(SUM(pay_amount),0)  order_amount, | ||||
|     SUM(CASE WHEN t2.ds_date=t1.ds_date THEN pay_amount ELSE 0 END) AS ltv0, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 1 THEN pay_amount ELSE 0 END) AS ltv1, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 2 THEN pay_amount ELSE 0 END) AS ltv2, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 3 THEN pay_amount ELSE 0 END) AS ltv3, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 4 THEN pay_amount ELSE 0 END) AS ltv4, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 5 THEN pay_amount ELSE 0 END) AS ltv5, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 6 THEN pay_amount ELSE 0 END) AS ltv6, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 7 THEN pay_amount ELSE 0 END) AS ltv7, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 14 THEN pay_amount ELSE 0 END) AS ltv14, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 30 THEN pay_amount ELSE 0 END) AS ltv30, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 60 THEN pay_amount ELSE 0 END) AS ltv60, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 90 THEN pay_amount ELSE 0 END) AS ltv90, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 150 THEN pay_amount ELSE 0 END) AS ltv150, | ||||
|     SUM(CASE WHEN (t2.ds_date-t1.ds_date) <= 300 THEN pay_amount ELSE 0 END) AS ltv300 | ||||
| FROM | ||||
|     dim.first_user t1 | ||||
| LEFT JOIN | ||||
|     "dwd"."order_user_df" t2 | ||||
| ON | ||||
| t1.relation_id = t2.relation_id | ||||
| AND t1.user_id = t2.user_id | ||||
| AND t2.ds_date-t1.ds_date IN (0,1,2,3,4,5,6,7,14,30,60,90,150,300) | ||||
| where t1.ds>='${300_days_later}' and t1.relation_id='${relation_id}' | ||||
| GROUP BY | ||||
|     t1.relation_id, t1.prodid, t1.ds | ||||
| ON CONFLICT (relation_id,prodid,ds) | ||||
| DO UPDATE SET num = EXCLUDED.num,order_amount = EXCLUDED.order_amount,ltv0 = EXCLUDED.ltv0,ltv1 = EXCLUDED.ltv1,ltv2 = EXCLUDED.ltv2,ltv3 = EXCLUDED.ltv3,ltv4 = EXCLUDED.ltv4,ltv5 = EXCLUDED.ltv5,ltv6 = EXCLUDED.ltv6,ltv7 = EXCLUDED.ltv7 | ||||
|    ,ltv14 = EXCLUDED.ltv14,ltv30 = EXCLUDED.ltv30,ltv60 = EXCLUDED.ltv60,ltv90 = EXCLUDED.ltv90,ltv150 = EXCLUDED.ltv150,ltv300 = EXCLUDED.ltv300 | ||||
| 
 | ||||
| ; | ||||
							
								
								
									
										53
									
								
								one_game_sql/ads/order_retention.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								one_game_sql/ads/order_retention.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| -- 处理逻辑说明 | ||||
| -- 1.用到了first_user 和 lately_order_user 这两个表来计算ltv | ||||
| -- first_user是用户首次登陆时间 | ||||
| -- lately_user是用户最后一次登陆时间 | ||||
| -- 2.用户首次登陆去关联用户最后一次登陆时间他们的时间差就是用户的流失时间 | ||||
| 
 | ||||
| INSERT INTO ads.order_retention ( relation_id,prodid,ds,num,ltv1,ltv2,ltv3,ltv4,ltv5,ltv6,ltv7,ltv14,ltv30,ltv60,ltv90,ltv150,ltv300) | ||||
| select | ||||
|     t1.relation_id | ||||
|     ,t1.prodid | ||||
|     ,t1.ds | ||||
|     ,count(distinct t1.user_id) AS num | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 1 then 1 ELSE 0 END) AS ltv1 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 2 then 1 ELSE 0 END) AS ltv2 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 3 then 1 ELSE 0 END) AS ltv3 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 4 then 1 ELSE 0 END) AS ltv4 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 5 then 1 ELSE 0 END) AS ltv5 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 6 then 1 ELSE 0 END) AS ltv6 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 7 then 1 ELSE 0 END) AS ltv7 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 14 then 1 ELSE 0 END) AS ltv14 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 30 then 1 ELSE 0 END) AS ltv30 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 60 then 1 ELSE 0 END) AS ltv60 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 90 then 1 ELSE 0 END) AS ltv90 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 150 then 1 ELSE 0 END) AS ltv150 | ||||
|     ,SUM(CASE WHEN t2.ds_date-t1.ds_date = 300 then 1 ELSE 0 END) AS ltv300 | ||||
| 
 | ||||
| from | ||||
|     "dwd"."order_user_df" t1 | ||||
| left join | ||||
|     dwd.active_df t2 | ||||
| on  t1.relation_id=t2.relation_id | ||||
| and t1.user_id=t2.user_id | ||||
| AND t2.ds_date-t1.ds_date IN (1,2,3,4,5,6,7,14,30,60,90,150,300) | ||||
| where t1.ds>='${300_days_later}' and t1.ds<='${bizdate}' and t1.relation_id='${relation_id}' | ||||
| group by  t1.relation_id | ||||
|             ,t1.prodid | ||||
|             ,t1.ds | ||||
| ON CONFLICT (relation_id,prodid,ds) DO UPDATE SET | ||||
| num = CASE WHEN EXCLUDED.num <> 0 THEN EXCLUDED.num ELSE ads.order_retention.num END, | ||||
| ltv1 = CASE WHEN EXCLUDED.ltv1 <> 0 THEN EXCLUDED.ltv1 ELSE ads.order_retention.ltv1 END, | ||||
| ltv2 = CASE WHEN EXCLUDED.ltv2 <> 0 THEN EXCLUDED.ltv2 ELSE ads.order_retention.ltv2 END, | ||||
| ltv3 = CASE WHEN EXCLUDED.ltv3 <> 0 THEN EXCLUDED.ltv3 ELSE ads.order_retention.ltv3 END, | ||||
| ltv4 = CASE WHEN EXCLUDED.ltv4 <> 0 THEN EXCLUDED.ltv4 ELSE ads.order_retention.ltv4 END, | ||||
| ltv5 = CASE WHEN EXCLUDED.ltv5 <> 0 THEN EXCLUDED.ltv5 ELSE ads.order_retention.ltv5 END, | ||||
| ltv6 = CASE WHEN EXCLUDED.ltv6 <> 0 THEN EXCLUDED.ltv6 ELSE ads.order_retention.ltv6 END, | ||||
| ltv7 = CASE WHEN EXCLUDED.ltv7 <> 0 THEN EXCLUDED.ltv7 ELSE ads.order_retention.ltv7 END, | ||||
| ltv14 = CASE WHEN EXCLUDED.ltv14 <> 0 THEN EXCLUDED.ltv14 ELSE ads.order_retention.ltv14 END, | ||||
| ltv30 = CASE WHEN EXCLUDED.ltv30 <> 0 THEN EXCLUDED.ltv30 ELSE ads.order_retention.ltv30 END, | ||||
| ltv60 = CASE WHEN EXCLUDED.ltv60 <> 0 THEN EXCLUDED.ltv60 ELSE ads.order_retention.ltv60 END, | ||||
| ltv90 = CASE WHEN EXCLUDED.ltv90 <> 0 THEN EXCLUDED.ltv90 ELSE ads.order_retention.ltv90 END, | ||||
| ltv150 = CASE WHEN EXCLUDED.ltv150 <> 0 THEN EXCLUDED.ltv150 ELSE ads.order_retention.ltv150 END, | ||||
| ltv300 = CASE WHEN EXCLUDED.ltv300 <> 0 THEN EXCLUDED.ltv300 ELSE ads.order_retention.ltv300 END | ||||
| ; | ||||
							
								
								
									
										65
									
								
								one_game_sql/ads/revenue_data.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								one_game_sql/ads/revenue_data.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| -- 收入数据汇总 | ||||
| INSERT INTO ads.revenue_data ( relation_id,prodid,ds,ds_type,ds_name,channel,channel_type_name,merchant_name,platform_name,order_amount,money,active_num) | ||||
| SELECT  t1.relation_id | ||||
|         ,t1.product_id prodid | ||||
|         ,t.ds | ||||
|         ,t.ds_type | ||||
|         ,t.ds_name | ||||
|         ,t1.channel_id channel | ||||
|         ,t1.channel_name channel_type_name | ||||
|         ,t1.merchant_name merchant_name | ||||
|         ,t1.platform_name platform_name | ||||
|         ,SUM(COALESCE(tt4.order_amount,0)) order_amount | ||||
|         ,SUM(COALESCE(tt5.money,0)) money | ||||
|         ,SUM(COALESCE(tt3.active_num,0)) active_num | ||||
| FROM    ( | ||||
|             SELECT  game_channel_id | ||||
|                     ,game_identity | ||||
|                     ,game_platform_id | ||||
|                     ,ds | ||||
|                     ,ds_type | ||||
|                     ,ds_name | ||||
|             FROM    dwd.active_account_df | ||||
|             UNION | ||||
|             SELECT  game_channel_id | ||||
|                     ,game_identity | ||||
|                     ,game_platform_id | ||||
|                     ,ds | ||||
|                     ,ds_type | ||||
|                     ,ds_name | ||||
|             FROM    dwd.order_df | ||||
|         ) t | ||||
| INNER JOIN dim.game_product_relation t1 | ||||
| ON      t.game_channel_id = t1.game_channel_id | ||||
| AND     t.game_identity = t1.game_identity | ||||
| AND     t.game_platform_id = t1.game_platform_id | ||||
| LEFT JOIN dwd.active_account_df tt3 | ||||
| ON      t.game_channel_id = tt3.game_channel_id | ||||
| AND     t.game_identity = tt3.game_identity | ||||
| AND     t.game_platform_id = tt3.game_platform_id | ||||
| AND     t.ds = tt3.ds | ||||
| AND     t.ds_type = tt3.ds_type | ||||
| LEFT JOIN dwd.order_df tt4 | ||||
| ON      t.game_channel_id = tt4.game_channel_id | ||||
| AND     t.game_identity = tt4.game_identity | ||||
| AND     t.game_platform_id = tt4.game_platform_id | ||||
| AND     t.ds = tt4.ds | ||||
| AND     t.ds_type = tt4.ds_type | ||||
| left JOIN dwd.revenue_df tt5 on t1.relation_id=tt5.relation_id | ||||
| AND tt4.ds=tt5.ds | ||||
| and tt4.ds_type=tt5.ds_type | ||||
| where t1.relation_id='${relation_id}' | ||||
| group by t1.relation_id | ||||
|         ,t1.product_id | ||||
|         ,t.ds | ||||
|         ,t.ds_type | ||||
|         ,t.ds_name | ||||
|         ,t1.channel_id | ||||
|         ,t1.channel_name | ||||
|         ,t1.merchant_name | ||||
|         ,t1.platform_name | ||||
| 
 | ||||
| ON CONFLICT (relation_id,channel,merchant_name,platform_name,ds,ds_type) | ||||
| DO UPDATE SET prodid = EXCLUDED.prodid,order_amount = EXCLUDED.order_amount,money = EXCLUDED.money, | ||||
| active_num = EXCLUDED.active_num | ||||
| ; | ||||
							
								
								
									
										53
									
								
								one_game_sql/ads/user_retention.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								one_game_sql/ads/user_retention.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| -- 处理逻辑说明 | ||||
| -- 1.用到了first_user 和 lately_user 这两个表来计算ltv | ||||
| -- first_user是用户首次登陆时间 | ||||
| -- lately_user是用户最后一次登陆时间 | ||||
| -- 2.用户首次登陆去关联用户最后一次登陆时间他们的时间差就是用户的流失时间 | ||||
| INSERT INTO ads.user_retention ( relation_id,prodid,ds,num,ltv1,ltv2,ltv3,ltv4,ltv5,ltv6,ltv7,ltv14,ltv30,ltv60,ltv90,ltv150,ltv300) | ||||
| select | ||||
|     t1.relation_id | ||||
|     ,t1.prodid | ||||
|     ,t1.ds | ||||
|     ,count(distinct t1.user_id) AS num | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 1 then 1 ELSE 0 END) AS ltv1 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 2 then 1 ELSE 0 END) AS ltv2 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 3 then 1 ELSE 0 END) AS ltv3 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 4 then 1 ELSE 0 END) AS ltv4 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 5 then 1 ELSE 0 END) AS ltv5 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 6 then 1 ELSE 0 END) AS ltv6 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 7 then 1 ELSE 0 END) AS ltv7 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 14 then 1 ELSE 0 END) AS ltv14 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 30 then 1 ELSE 0 END) AS ltv30 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 60 then 1 ELSE 0 END) AS ltv60 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 90 then 1 ELSE 0 END) AS ltv90 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 150 then 1 ELSE 0 END) AS ltv150 | ||||
|     ,SUM(CASE WHEN (t2.ds_date-t1.ds_date) = 300 then 1 ELSE 0 END) AS ltv300 | ||||
| 
 | ||||
|     from | ||||
| dim.first_user t1 | ||||
| left join | ||||
| dwd.active_df t2 | ||||
| on   t1.relation_id=t2.relation_id | ||||
| and t1.user_id=t2.user_id | ||||
| AND t2.ds_date-t1.ds_date IN (1,2,3,4,5,6,7,14,30,60,90,150,300) | ||||
| where t1.ds>='${300_days_later}' and t1.ds<='${bizdate}' and t1.relation_id='${relation_id}' | ||||
| group by  t1.relation_id | ||||
|     ,t1.prodid | ||||
|     ,t1.ds | ||||
| ON CONFLICT (relation_id,prodid,ds) DO UPDATE SET | ||||
| num = CASE WHEN EXCLUDED.num <> 0 THEN EXCLUDED.num ELSE ads.user_retention.num END, | ||||
| ltv1 = CASE WHEN EXCLUDED.ltv1 <> 0 THEN EXCLUDED.ltv1 ELSE ads.user_retention.ltv1 END, | ||||
| ltv2 = CASE WHEN EXCLUDED.ltv2 <> 0 THEN EXCLUDED.ltv2 ELSE ads.user_retention.ltv2 END, | ||||
| ltv3 = CASE WHEN EXCLUDED.ltv3 <> 0 THEN EXCLUDED.ltv3 ELSE ads.user_retention.ltv3 END, | ||||
| ltv4 = CASE WHEN EXCLUDED.ltv4 <> 0 THEN EXCLUDED.ltv4 ELSE ads.user_retention.ltv4 END, | ||||
| ltv5 = CASE WHEN EXCLUDED.ltv5 <> 0 THEN EXCLUDED.ltv5 ELSE ads.user_retention.ltv5 END, | ||||
| ltv6 = CASE WHEN EXCLUDED.ltv6 <> 0 THEN EXCLUDED.ltv6 ELSE ads.user_retention.ltv6 END, | ||||
| ltv7 = CASE WHEN EXCLUDED.ltv7 <> 0 THEN EXCLUDED.ltv7 ELSE ads.user_retention.ltv7 END, | ||||
| ltv14 = CASE WHEN EXCLUDED.ltv14 <> 0 THEN EXCLUDED.ltv14 ELSE ads.user_retention.ltv14 END, | ||||
| ltv30 = CASE WHEN EXCLUDED.ltv30 <> 0 THEN EXCLUDED.ltv30 ELSE ads.user_retention.ltv30 END, | ||||
| ltv60 = CASE WHEN EXCLUDED.ltv60 <> 0 THEN EXCLUDED.ltv60 ELSE ads.user_retention.ltv60 END, | ||||
| ltv90 = CASE WHEN EXCLUDED.ltv90 <> 0 THEN EXCLUDED.ltv90 ELSE ads.user_retention.ltv90 END, | ||||
| ltv150 = CASE WHEN EXCLUDED.ltv150 <> 0 THEN EXCLUDED.ltv150 ELSE ads.user_retention.ltv150 END, | ||||
| ltv300 = CASE WHEN EXCLUDED.ltv300 <> 0 THEN EXCLUDED.ltv300 ELSE ads.user_retention.ltv300 END | ||||
| ; | ||||
| 
 | ||||
| @ -1,6 +1,6 @@ | ||||
| -- 取登陆最早时间 逻辑:如果之前没出现过,那插入这条记录做最早用户登陆时间 | ||||
| -- 首次写入数据sql | ||||
| INSERT INTO dim.first_user(game_channel_id,game_identity,game_platform_id,relation_id,prodid,user_id,ds) | ||||
| INSERT INTO dim.first_user(game_channel_id,game_identity,game_platform_id,relation_id,prodid,user_id,ds,ds_date) | ||||
| SELECT t2.game_channel_id | ||||
|         ,t2.game_identity | ||||
|         ,t2.game_platform_id | ||||
| @ -8,6 +8,7 @@ SELECT t2.game_channel_id | ||||
|         ,t2.product_id prodid | ||||
|         ,t1.user_id | ||||
|         ,min(ds) ds | ||||
|         ,TO_DATE(min(ds), 'YYYYMMDD') ds_date | ||||
| FROM    ods.active_account_list t1 | ||||
| inner join | ||||
| dim.game_product_relation t2 | ||||
| @ -24,5 +25,5 @@ GROUP BY t2.game_channel_id | ||||
| 
 | ||||
| ON CONFLICT (relation_id,user_id) | ||||
| DO UPDATE SET game_channel_id = EXCLUDED.game_channel_id,game_identity = EXCLUDED.game_identity ,game_platform_id = EXCLUDED.game_platform_id | ||||
| ,prodid = EXCLUDED.prodid,user_id = EXCLUDED.user_id,ds = EXCLUDED.ds | ||||
| ,prodid = EXCLUDED.prodid,user_id = EXCLUDED.user_id,ds = EXCLUDED.ds,ds_date = EXCLUDED.ds_date | ||||
| ; | ||||
| @ -8,7 +8,7 @@ SELECT  channel_id game_channel_id | ||||
|         ,'d' ds_type | ||||
|         ,'天' ds_name | ||||
| FROM    ods.active_account_list | ||||
| WHERE   ds>='${30_days_later}' and channel_id='${channel_id}' AND game_identity='${game_identity}' AND platform_id='${platform_id}' | ||||
| WHERE   ds>='${30_days_later}' and ds <= '${bizdate}' and channel_id='${channel_id}' AND game_identity='${game_identity}' AND platform_id='${platform_id}' | ||||
| GROUP BY ds | ||||
|          ,channel_id | ||||
|          ,game_identity | ||||
| @ -22,7 +22,7 @@ SELECT  channel_id game_channel_id | ||||
|         ,'m' ds_type | ||||
|         ,'月' ds_name | ||||
| FROM    ods.active_account_list | ||||
| WHERE   ds>='${30_days_later}' and channel_id='${channel_id}' AND game_identity='${game_identity}' AND platform_id='${platform_id}' | ||||
| WHERE   ds>='${30_days_later}' and ds <= '${bizdate}' and channel_id='${channel_id}' AND game_identity='${game_identity}' AND platform_id='${platform_id}' | ||||
| GROUP BY channel_id | ||||
|          ,game_identity | ||||
|          ,platform_id | ||||
|  | ||||
| @ -8,7 +8,7 @@ INNER JOIN dim.game_product_relation t2 | ||||
| ON      t1.channel_id = t2.game_channel_id | ||||
| AND     t1.game_identity = t2.game_identity | ||||
| AND     t1.platform_id = t2.game_platform_id | ||||
| WHERE   t1.ds>='${30_days_later}' and t1.channel_id='${channel_id}' AND t1.game_identity='${game_identity}' AND t1.platform_id='${platform_id}' | ||||
| WHERE   t1.ds>='${30_days_later}' and ds <= '${bizdate}' and t1.channel_id='${channel_id}' AND t1.game_identity='${game_identity}' AND t1.platform_id='${platform_id}' | ||||
| GROUP BY t2.relation_id | ||||
|         ,t1.user_id | ||||
|         ,t1.ds | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user