常用代码20220602

里面有常用的一些sql逻辑:

目录

数字格式变化函数

排序函数

时间格式变化函数:


数字格式变化函数

coalesce 函数:

cast 函数:

排序函数

row_number 函数:

时间格式变化函数:

date_format(expo_dt, 'yyyy-MM-dd HH:mm:ss') expo_dt_str
unix_timestamp(date_format(expo_dt, 'yyyy-MM-dd HH:mm:ss')) expo_dt_sec

--合并场景曝光下载整理口径
with 
exp_base as  --曝光部分口径
(
select 
     s1.exp_plat ,s1.imei,s1.app_id,s1.sence,s1.is_tencent
    ,s1.req_id,s1.ctr,s1.pay_will,s1.ltv,s1.score,s1.algoid
    ,s1.expo_pos, s1.intervene   
    ,s1.expo_dur,s1.expo_dt, s1.expo_dt_str, s1.expo_dt_sec
from 
    (
    select
         day
        ,exp_plat
        ,imei
        ,app_id
        ,game_type
        ,game_name
        ,cast(is_tencent as string) is_tencent
        ,coalesce(split(expo_gameps, ',')[2],'') sence
        ,coalesce(split(expo_gameps, ',')[5], '') req_id   --请求id
        ,COALESCE(split(expo_gameps, ',')[7], '') ctr
        ,COALESCE(split(expo_gameps, ',')[8], '') pay_will
        ,COALESCE(split(expo_gameps, ',')[10], '') ltv
        ,COALESCE(split(expo_gameps, ',')[11], '') score
        ,coalesce(split(expo_gameps, ',')[6], '')  algoid   --算法id
        ,coalesce(split(expo_gameps, ',')[15], '')  intervene    --干预情况(0,1,2)
        ,expo_dt
        ,date_format(expo_dt, 'yyyy-MM-dd HH:mm:ss') expo_dt_str
        ,unix_timestamp(date_format(expo_dt, 'yyyy-MM-dd HH:mm:ss')) expo_dt_sec
        ,IF(expo_dur IS NULL OR expo_dur = '', '0', expo_dur) expo_dur
        ,cast(expo_pos as int) as expo_pos    --曝光位置
        ,row_number() over(partition by exp_plat, imei, app_id, coalesce(split(expo_gameps, ',')[5], ''),expo_pos order by expo_dt) as exp_order
    from
        bi_game_recommend.dm_rec_exposure_di
    where 
        day = '${dt}'
        and game_type in (1,2)
        --and expo_page <> ''
        --and exp_plat in ('as')
        AND imei is not null 
        AND imei <> ''
    group by 
         day
        ,exp_plat
        ,imei
        ,app_id
        ,game_type
        ,game_name
        ,cast(is_tencent as string) 
        ,coalesce(split(expo_gameps, ',')[2], '')
        ,coalesce(split(expo_gameps, ',')[5], '') 
        ,COALESCE(split(expo_gameps, ',')[7], '')
        ,COALESCE(split(expo_gameps, ',')[8], '') 
        ,COALESCE(split(expo_gameps, ',')[10], '')
        ,COALESCE(split(expo_gameps, ',')[11], '') 
        ,coalesce(split(expo_gameps, ',')[6], '') 
        ,coalesce(split(expo_gameps, ',')[15], '') 
        ,date_format(expo_dt, 'yyyy-MM-dd HH:mm:ss')
        ,unix_timestamp(date_format(expo_dt, 'yyyy-MM-dd HH:mm:ss')) 
        ,IF(expo_dur IS NULL OR expo_dur = '', '0', expo_dur)
        ,expo_dt
        ,cast(expo_pos as int)
        ,row_number() over(partition by exp_plat, imei, app_id, coalesce(split(expo_gameps, ',')[5], ''), expo_pos order by expo_dt)
    ) s1
    JOIN
    (
    select
        title, code, scene_code,  day
    FROM
        bi_game_recommend.dim_rec_page_code_ds
    WHERE
        day = '${dt}'
        and application_direct_type = 'combineEvaluation'
        and code = 'appstore.recommend.combine'   --as合并场景
    group by 
        title, code, scene_code, day
    ) s2 
    on s1.sence = s2.scene_code
    and s1.day = s2.day    --需要吗???
where 
    s1.exp_order = 1
group by 
     s1.exp_plat ,s1.imei,s1.app_id,s1.sence,s1.is_tencent
    ,s1.req_id,s1.ctr,s1.pay_will,s1.ltv,s1.score,s1.algoid
    ,s1.expo_pos ,s1.intervene   
    ,s1.expo_dur,s1.expo_dt, s1.expo_dt_str, s1.expo_dt_sec
)
,

dl_raw as --下载部分口径
(
select 
     s1.dl_plat ,s1.imei ,s1.app_id ,s1.sence ,s1.is_tencent
    ,s1.req_id ,s1.ctr ,s1.pay_will ,s1.ltv ,s1.score ,s1.algoid
    ,s1.dl_pos ,'0' as dl_dur ,s1.intervene   
    ,s1.dl_dt, s1.dl_dt_str, s1.dl_dt_sec
from 
    (
    select
         day
        ,dl_plat
        ,imei
        ,app_id
        ,game_type
        ,game_name
        ,split(dl_gameps,',')[2] sence
        ,cast(is_tencent as string) is_tencent
        ,coalesce(split(dl_gameps, ',')[5], '') req_id   --请求id
        ,COALESCE(split(dl_gameps, ',')[7], '') ctr
        ,COALESCE(split(dl_gameps, ',')[8], '') pay_will
        ,COALESCE(split(dl_gameps, ',')[10], '') ltv
        ,COALESCE(split(dl_gameps, ',')[11], '') score
        ,coalesce(split(dl_gameps, ',')[6], '') as algoid   --算法id
        ,coalesce(split(dl_gameps, ',')[15], '') as intervene    --干预情况(0,1,2)
        ,cast(dl_pos as int) as dl_pos    
        ,dl_dt    
        ,date_format(dl_dt, 'yyyy-MM-dd HH:mm:ss') dl_dt_str
        ,unix_timestamp(date_format(dl_dt, 'yyyy-MM-dd HH:mm:ss')) dl_dt_sec
        ,row_number() over(partition by dl_plat, imei, app_id, coalesce(split(dl_gameps, ',')[5], ''), dl_pos order by dl_dt) as exp_order
    from
        bi_game_recommend.dm_rec_download_di
    where 
        day = '${dt}'
        and game_type in (1,2)
        --and expo_page <> ''
        --and exp_plat in ('as')
        AND imei is not null 
        AND imei <> ''
    group by 
         day
        ,dl_plat
        ,imei
        ,app_id
        ,game_type
        ,game_name
        ,split(dl_gameps,',')[2] 
        ,cast(is_tencent as string) 
        ,coalesce(split(dl_gameps, ',')[5], '') 
        ,COALESCE(split(dl_gameps, ',')[7], '')
        ,COALESCE(split(dl_gameps, ',')[8], '') 
        ,COALESCE(split(dl_gameps, ',')[10], '')
        ,COALESCE(split(dl_gameps, ',')[11], '') 
        ,coalesce(split(dl_gameps, ',')[6], '') 
        ,coalesce(split(dl_gameps, ',')[15], '') 
        ,cast(dl_pos as int) 
        ,dl_dt   
        ,date_format(dl_dt, 'yyyy-MM-dd HH:mm:ss') 
        ,unix_timestamp(date_format(dl_dt, 'yyyy-MM-dd HH:mm:ss'))
        ,row_number() over(partition by dl_plat, imei, app_id, coalesce(split(dl_gameps, ',')[5], ''), dl_pos order by dl_dt)
    ) s1
    JOIN
    (
    select
        title, code, scene_code,  day
    FROM
        bi_game_recommend.dim_rec_page_code_ds
    WHERE
        day = '${dt}'
        and application_direct_type = 'combineEvaluation'
        and code = 'appstore.recommend.combine'   --as合并场景
    group by 
        title, code, scene_code, day
    ) s2 
    on s1.sence = s2.scene_code
    and s1.day = s2.day    --需要吗???
where 
    s1.exp_order = 1
group by 
     s1.dl_plat ,s1.imei ,s1.app_id ,s1.sence ,s1.is_tencent
    ,s1.req_id ,s1.ctr ,s1.pay_will ,s1.ltv ,s1.score ,s1.algoid
    ,s1.dl_pos ,'0' ,s1.intervene   
    ,s1.dl_dt, s1.dl_dt_str, s1.dl_dt_sec
)

--数据组合
SELECT
    IF(s.exp_plat IS NOT NULL,
            CONCAT_WS('#',
                    s.expo_dt_str,
                    s.exp_plat,
                    s.ctr,
                    s.pay_will,
                    s.ltv,
                    s.score,
                    s.algoid,
                    s.imei,
                    s.app_id,
                    s.req_id,
                    s.expo_pos,   --不需要了
                    s.intervene,
                    s.is_tencent
                    ),
            CONCAT_WS('#',
                    s.dl_dt_str,
                    s.dl_plat,
                    s.dl_ctr,
                    s.dl_pay_will,
                    s.dl_ltv,
                    s.dl_score,
                    s.dl_algoid,
                    s.dl_imei,
                    s.dl_app_id,
                    s.dl_req_id,
                    s.dl_pos,     --不需要了
                    s.dl_intervene,
                    s.dl_is_tencent)
    ) log_key,
    IF(s.dl_imei IS NOT NULL, '1', '0') label,
    IF(s.expo_dur IS NOT NULL, s.expo_dur, s.dl_dur) dur
FROM
    (
    SELECT 
        eb.exp_plat, eb.imei, eb.app_id,
        eb.req_id, eb.expo_pos, eb.expo_dt_str, eb.expo_dur,
        IF(CAST(eb.ctr as FLOAT) IS NOT NULL, eb.ctr, "0.0") ctr, 
        IF(CAST(eb.pay_will as FLOAT) IS NOT NULL, eb.pay_will, "0.0") pay_will, 
        IF(CAST(eb.ltv as FLOAT) IS NOT NULL, eb.ltv, "0.0") ltv, 
        IF(CAST(eb.score as FLOAT) IS NOT NULL, eb.score, "0.0") score, 
        eb.algoid, 
        eb.intervene, eb.is_tencent,
        dl.dl_plat, dl.imei as dl_imei, dl.app_id as dl_app_id,
        dl.req_id as dl_req_id, dl.dl_pos, dl.dl_dt_str, dl.dl_dur,
        IF(CAST(dl.ctr as FLOAT) IS NOT NULL, dl.ctr, "0.0") dl_ctr,
        IF(CAST(dl.pay_will as FLOAT) IS NOT NULL, dl.pay_will, "0.0") dl_pay_will,
        IF(CAST(dl.ltv as FLOAT) IS NOT NULL, dl.ltv, "0.0") dl_ltv,
        IF(CAST(dl.score as FLOAT) IS NOT NULL, dl.score, "0.0") dl_score,
        dl.algoid as dl_algoid,
        dl.intervene as dl_intervene, dl.is_tencent as dl_is_tencent
    FROM exp_base eb  
    FULL OUTER JOIN dl_raw dl
    ON eb.exp_plat = dl.dl_plat
    AND eb.imei = dl.imei
    AND eb.app_id = dl.app_id
    AND eb.req_id = dl.req_id
    AND eb.expo_pos = dl.dl_pos
    ) s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值