Flink學習筆記:Operators之CoGroup及Join操作


本文為《Flink大數據項目實戰》學習筆記,想通過視頻系統學習Flink這個最火爆的大數據計算框架的同學,推薦學習課程:

 

Flink大數據項目實戰:http://t.cn/EJtKhaz

 

1. Window CoGroup與Join

1.1回顧RDBMS各種join

假設有兩個表A和B

1.CROSS JOIN(AB的笛卡爾積/交叉聯接)

省略寫法為join,由於其返回的結果為被連接的兩個數據表的乘積,因此當有WHERE, ON或USING條件的時候一般不建議使用,因為當數據表項目太多的時候,會非常慢。

2.outer join

a)left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄。

b)right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄。

c)FULL JOIN 產生A和B的並集。對於沒有匹配的記錄,則會以null做為值。

3.inner join(AB的交集)--默認就是這種join,又叫等值連接

inner join(等值連接) 只返回兩個表中聯結字段相等的行。

1.2Flink中CoGroup vs Join Connect

 

1.3CoGroup

 

 

1.4Join

 

上圖可以做如下理解:

1、雙流上的數據在同一個key的會被分別分配到同一個window窗口的左右兩個籃子里

2、當window結束的時候,會對左右籃子進行笛卡爾積從而得到每一對pair,對每一對pair應用 JoinFunction

3、因為目前join窗口的雙流數據都是被緩存在內存中的,如果某個key對應的數據太多導致jvm OOM(數據傾斜是常態)-這也算是目前社區的優化優化方向

4、有局限性,受制於時間窗口

 

1.5Tumbling Window Join

 

1.6Tumbling Window Join

 

1.7Sliding Window Join

 

1.8Session Window Join

2. Interval Join

KeyedStream,KeyedStream → DataStream

在給定的時間邊界內(默認包含邊界),相當於一個窗口,按照指定的key對兩個KeyedStream進行join操作,把符合join條件的兩個event拉到一起,然后怎么處理由用戶你來定義。 

key1 == key2 && e1.timestamp + lowerBound <= e2.timestamp <= e1.timestamp + upperBound 

場景:把一定時間范圍內相關的分組數據拉成一個寬表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM