大数据方面,可以让它帮我们写SQL

下需求:

事件表有 user_id,event_name,event_time,ad_info

事件有 login 和 ad_click

login事件的参数:user_id,event_name,event_time
ad_click事件的参数:user_id,event_name,event_time,ad_info

写个查询给 login事件追加上ad_info(left join),取该用户登录之前的 ad_click事件,并且离得最近的一次
 

注意一点,因为ad_click可能存在多个,登录 事件 left join会存在一对多的情况(比如一条登录事件,对应3个ad_click。最终的结果我只是要一个登录事件和对应的的广告信息,而不是变成三个登录事件),这是不对的,我只是要追加广告信息。

出结果:

WITH login_with_ad AS (
    SELECT
        l.user_id,
        l.event_name,
        l.event_time AS login_time,
        a.event_time AS ad_click_time,
        a.ad_info,
        ROW_NUMBER() OVER (
            PARTITION BY l.user_id, l.event_time
            ORDER BY a.event_time DESC
        ) AS rn
    FROM
        events l
    LEFT JOIN
        events a
    ON
        l.user_id = a.user_id
        AND a.event_name = 'ad_click'
        AND a.event_time < l.event_time
    WHERE
        l.event_name = 'login'
)
SELECT
    user_id,
    event_name,
    login_time,
    ad_info
FROM
    login_with_ad
WHERE
    rn = 1;

2,问题排查:

问:

ConfigMap = {
    "1":" aaa"
}

python 获取字典ConfigMap,比如 ConfigMap['1']是不报错,ConfigMap['2']就报错,这是为什么

答:

字典是一种无序的键值对集合,通过键来唯一标识对应的值。当你使用方括号 [] 加键的方式访问字典中的值时,Python 会在字典里查找该键。若找到了对应的键,就返回该键所对应的值;若没找到,就会抛出 KeyError 异常。

使用 in 关键字进行检查
在访问键之前,先使用 in 关键字检查键是否存在于字典中。