大数据开发 MySQL5.7窗口(开窗)函数实现 MySQL5.7实现窗口函数 MySQL8.0 以前没有窗口函数,但是我们可以自己实现类似的功能。同样是现在要查询每天相同年龄的人中分数最高的那个人,涉及到两个知识点。 @xxx 表示一个变量名称 := 表示给变量赋值的赋值符号 yuziyue 21 Jul 2023 · 2 min read
大数据开发 SQL实现用户之间关注问题 用户关注问题 场景:现有用户表 follows,两个字段 uid、to_uid,uid 表示当前用户,to_uid 表示关注的用户。 找出相互关注的用户 SELECT t1.uid, t1.to_uid FROM follows t1 JOIN follows t2 yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL实现取中位数 场景:Employee 表包含所有员工,该表有三列:员工Id、公司名、薪水,写SQL查询来查找每个公司的薪水中位数,有两种方法实现 方法1:正序+倒序排名 -- 如果员工数为基数:rnk1 = rnk2 -- 如果员工数为偶数:rnk1 = rnk2-1 或者 rnk2+1 yuziyue 19 Jul 2023 · 1 min read
大数据开发 SQL实现等比例抽样 场景:有用户表 user_info,字段 uid, city。现运要选 10w 人发调查问卷,要求所选人群的 city 分布,和全量用户的 city 分布一致。 思路: 开窗函数求出每个城市的占比。 row_number 按照随机排序,也就是打乱数据。 yuziyue 19 Jul 2023 · 1 min read
大数据开发 SQL行转列与列转行总结 多行转成一行,也就是所谓的行转列,比如一个uid的数据原来要多行来展示,现在把一个 uid 的数据浓缩到一行上,所以列就会增加,即行转列。场景:现有用户表 student_score,包含 3 个字段 uid, subject, score yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL实现滑动窗口功能 场景1:假设用户访问记录表 records 有 3 个字段,uid、url(用户访问url)、datetime(访问 url 的时间),问找出 url 在 5 分钟内被访问次数大于 10 次的用户,以及访问次数大于 10 次的开始时间点。 yuziyue 19 Jul 2023 · 1 min read
大数据开发 SQL实现多条记录按照时间合并 场景:假设用户一天会有很多次上网,每次上网时间段都有两个字段 login_at、logout_at 表示登录时间和登出时间,如果这样的时间段非常多的会产生很多的记录日志。现在假设用户上一次 logout_at 的时间与下一次的 login_at yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL实现用户连续登录问题 思路:使用 row_number 解决 去重,即每个用户每一天只会有一天记录 row_number() over(partition by userid,login_at order by login_at) ,如果有重复的取出第一个。 ROW_NUMBER 按照 userid 分组,在组内按照登陆时间升序编上号。 yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL连接查询JOIN原理与实战 在连接查询中,查询结果集最大的情况是笛卡尔积,但是可以通过连接条件或者where 条件控制结果集。比如要查询学生表 student 以及学生的成绩表 score,这里要用到 left join。 首先在 student 表找第一条记录,然后从头开始扫描 score 表,比较 ON 后面的匹配条件, yuziyue 19 Jul 2023 · 4 min read
大数据开发 SQL开窗函数(窗口函数)总结 SQL开窗(Window Functions)是一种在关系数据库中执行特定计算的高级技术,它能够让用户对查询结果集中的每一行应用聚合函数,同时指定计算范围,例如指定子集合或窗口,以便在处理数据时能够更灵活和精确地控制计算。 yuziyue 19 Jul 2023 · 12 min read
大数据开发 Python连接Redis实战 编写模块 redishelper.py ,这样一来,在其他需要连接 redis 的地方只有导入该模块,然后在初始化即可使用 redis 数据。在需要连接redis的地方通过from redishelper import RedisHelper方式导入模块,然后对 RedisHelper 进行初始化。注意可根据实际情况对 RedisHelper 对象的初始化传递具体参数即可。 yuziyue 12 Jul 2023 · 2 min read
大数据开发 Redis内存爆满飙升 我们每天都会往某 Redis 写入固定数量的key,比如500万个key: ${dt}_${uid},即每天写的 key 都不同,写数据时设置24小时过期。 在每天都写入 500 万个key的情况下,预期内存占用应该保持某个值不变,因为我每天在写入新的,每天旧的也在过期,但实际情况却不是这样的,观察 grafana 的图发现 yuziyue 11 Jul 2023 · 3 min read
大数据开发 Redis内存占用估算 当需要往 Redis 写大批量的数据时,如何判断这批数据是否会把 Redis 打爆,这就需要提前预估数据量的大小。命令 memory USAGE 可以预估一个 key 的占用内存,比如,SAMPLES 表示取多少个样例用来计算每个元素的平均占用字节,默认为5,按理说越大越准确 yuziyue 11 Jul 2023 · 1 min read
大数据开发 Airflow web界面如何只clear下游任务 我有一个任务 task1,task1 的下游有 task2 task3 两个任务, 今天这三个task都已经成功运行了。今天接到需求需要修改 task1 的逻辑。当我改好 task1 的逻辑后,通过其他方式把 task1 的任务已经跑过了,此时只需要把 task1 的下游任务刷一遍就行了。 yuziyue 10 Jul 2023 · 1 min read
大数据开发 Airflow异常task killed externally 问题场景:task 的状态莫名奇妙的成 failed 的了,task 出错没有任何运行 task 的日志,只在 Scheduler 打印的日志中看到如下信息,信息表明是 celery 的Worker 执行任务时出错了。 yuziyue 10 Jul 2023 · 1 min read
大数据开发 Airflow Scheduler源码解读 首先 Scheduler 的 DagFileProcessorAgent 进程定时(dag_dir_list_interval配置指定秒数)扫描 dags 目录下的 py 文件,解析 DAG 生成 DAG 对象以及 TASK 对象写入数据库中。 Scheduler 每秒钟从数据库读取DAG 和 task 的定义、状态、调度规则信息,判断是否执行,如需要执行,将生成 task instance 并发送到 。 yuziyue 7 Jul 2023 · 9 min read
大数据开发 Airflow清理logs日志 此时Airflow产生的日志就只有它自己的了,尽管只有Airflow自己产生的日志,但是还是非常多的,假设有一个分钟级的DAG,它里面有10个task,这个DAG每分钟就会产生 10 个目录,每个小时600个目录,一天就会产生 600 * 24 = 14400个目录,这些目录还是挺多了,如果你的task很多,那就更不用说了。 yuziyue 4 Jul 2023 · 2 min read
大数据开发 Airflow集群原理与实战部署 首先 Scheduler 定时(dag_dir_list_interval配置指定秒数)扫描 dags 目录下的 py 文件,解析 DAG 生成 DAG 对象以及 TASK 对象写入数据库中。Scheduler 每秒钟从数据库读取DAG 和 task 的定义、状态、调度规则信息,判断是否执行,如需要执行,将生成 task instance 并发送到 消息队列。 yuziyue 1 Jul 2023 · 14 min read