業務背景:
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不會在分組求和花費過多時間
