1.1實時數倉產生背景
傳統的OLTP數據庫: 面向事務處理、面向業務、進行增刪改查、反映最新狀態
數據倉庫: 面向主題、集成、相對穩定、反應歷史變化
1.2離線數倉架構
1.3實時數倉架構
1.3.1實時數倉的Lambda架構
1.3.2實時數倉的kappa架構
1.3.3實時數倉的OLAP變體
2.基於Flink實現典型的ETL場景
2.1維表join-預加載維表
方法1:將維表加載到內存關聯 (DB數據庫)
實現RichFlatMapFunction,在open()方法中讀取數據庫
代碼實現: 關注 LarkMidTable 交流
方法2:利用Flink的分布式緩存 (文件)
實現通過env.registerCachedFile注冊文件,在open()方法中進行獲取
代碼實現: 關注 LarkMidTable 交流
方法3:將維表存入到redis中 (nosql數據庫)
代碼實現: 關注 LarkMidTable 交流
方法4:利用Flink的廣播變量(實時流)
代碼實現: 關注 LarkMidTable 交流
方法5:創建臨時表,使用FlinkSql進行清洗
代碼實現: 關注 LarkMidTable 交流
2.2雙流join
方法1:Regular join,FlinkSQL構造兩個表,離線批處理,保持全量的數據。
Flink支持:inner join ,left outer join, right outer join, full outer join
代碼實現: 關注 LarkMidTable 交流
方法2:intderval join,FlinkSQL根據業務規則,清除數據,
例如:
leftKeyedStream
.intervalJoin(rightKeyedStream)
// 時間間隔,設定下界和上界
.between(Time.minutes(-10),Time.seconds(0))
// 不包含下界
//.lowerBoundExclusive()
// 不包含上界
//.upperBoundExclusive()
// 自定義ProcessJoinFunction 處理Join到的元素
.process(ProcessJoinFunction)
代碼實現: 關注 LarkMidTable 交流
方法3:window join,FlinkSQL根據窗口來進行划分數據,清理數據
stream.join(otherStream)
.where(<KeySelector>)
.equalTo(<KeySelector>)
.window(<WindowAssigner>)
.apply(<JoinFunction>)
代碼實現: 關注 LarkMidTable 交流
# 技術交流
一個人走的很快,一群人走的更遠。
掃描下面的QQ二維碼加入Lark的數據中台開源社區,並為你提供全程免費服務,你也可以與其他伙伴交流大數據技術,如果覺得項目不錯,可以star關注,LarkMidTable團隊將十分感謝您的關注!
QQ群1群【678097205】已滿
微信公眾號 【LarkMidTable】
關注官方微信公眾號,回復加群,會發送社區微信群二維碼,掃描二維碼可加入群聊!