业务背景:
1. 广告投放涉及到用户的诸多特征
2. 用户特征通常不在同一个表中
3. 通过各种算法逻辑会产生很多的中间表
4. 各中间表的唯一标志基本为单一字段,通常会员标志或设备标志(两者一般取较新的一对组合使用)
5. 进入算法(或机器学习)前,需要一个统一的大宽表作为入参方便取值
业务解析:
1. 若干(通常10+)结果表
2. 每张表的数据量都很大(千万-亿)
3. 每个表都有同样的唯一标志字段(具体内容不同)
结果表产生过程隐藏条件:
1. 存在一张主表,包含有所有可能的唯一标志
处理流程:
1. 对所有表的唯一标志数字化
2. 对数字化后的各表进行排序
3. 遍历主表
3.1. 取出主表一条记录,与其他各表取出的一条比较
3.2 如果主表唯一标志和各表相等,将各表数据并入主表,然后取出下一条记录
3.3 如果唯一标志不想等,使用默认值并入主表,维持当前记录
3.4 将合并的记录记下,进入下次循环
4. 完成主表遍历后,写入磁盘
猜想:
1. 使用插入排序后,经历两次主表遍历读写便可完成大宽表的合成
2. 和使用left join相比,避开指数级增长的子表遍历
3. 和使用union all相比,避开了最终的分组求和过程
4. 在子表数据量级不大且数量不多时,使用left join书写较为方便
5. 在主表基数不是很大时,union all不会在分组求和花费过多时间
原文地址:https://www.cnblogs.com/qq1144054302/p/10311964.html
时间: 2024-10-29 04:14:42