免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

flink動(dòng)態(tài)表的思路

這篇文章主要介紹“flink動(dòng)態(tài)表的思路”,在日常操作中,相信很多人在flink動(dòng)態(tài)表的思路問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”flink動(dòng)態(tài)表的思路”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元余姚做網(wǎng)站,已為上家服務(wù),為余姚各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

傳統(tǒng)的數(shù)據(jù)庫(kù)SQL和實(shí)時(shí)SQL處理的差別還是很大的,這里簡(jiǎn)單列出一些區(qū)別:

傳統(tǒng)數(shù)據(jù)庫(kù)SQL處理

實(shí)時(shí)SQL處理

傳統(tǒng)數(shù)據(jù)庫(kù)的表數(shù)據(jù)是有界限的

實(shí)時(shí)數(shù)據(jù)無(wú)界限的

在批處理數(shù)據(jù)的查詢(xún)是需要獲取全量數(shù)據(jù)

無(wú)法獲取全量數(shù)據(jù),必須等待新的數(shù)據(jù)輸入

處理結(jié)束后就終止了

利用輸入的數(shù)據(jù)不斷的更新它的結(jié)果表,絕對(duì)不會(huì)停止

盡管存在這些差異,但使用關(guān)系查詢(xún)和SQL處理流并非不可能。高級(jí)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供稱(chēng)為物化視圖的功能。物化視圖定義為SQL查詢(xún),就像常規(guī)虛擬視圖一樣。與虛擬視圖相比,物化視圖緩存查詢(xún)的結(jié)果,使得在訪問(wèn)視圖時(shí)不需要執(zhí)行查詢(xún)。緩存的一個(gè)常見(jiàn)挑戰(zhàn)是避免緩存提供過(guò)時(shí)的結(jié)果。物化視圖在修改其定義查詢(xún)的基表時(shí)會(huì)過(guò)時(shí)。Eager View Maintenance是一種在更新基表后立即更新實(shí)例化視圖的技術(shù)。

如果我們考慮以下內(nèi)容,Eager View Maintenance和流上的SQL查詢(xún)之間的聯(lián)系就變得很明顯:

  • 數(shù)據(jù)庫(kù)表是INSERT,UPDATE和DELETEDML語(yǔ)句流的結(jié)果,通常被稱(chēng)為更新日志流。

  • 物化視圖定義為SQL查詢(xún)。為了更新視圖,查詢(xún)需要持續(xù)處理視圖源表的更改日志流。

  • 物化視圖是流式SQL查詢(xún)的結(jié)果。

有了上面的基礎(chǔ),下面可以介紹一下動(dòng)態(tài)表的概念了。

動(dòng)態(tài)表和持續(xù)不斷查詢(xún)

動(dòng)態(tài)表flink table api和SQL處理流數(shù)據(jù)的核心概念。與靜態(tài)表相比,動(dòng)態(tài)表隨時(shí)間而變化,但可以像靜態(tài)表一樣查詢(xún)動(dòng)態(tài)表,只不過(guò)查詢(xún)動(dòng)態(tài)表需要產(chǎn)生連續(xù)查詢(xún)。連續(xù)查詢(xún)永遠(yuǎn)不會(huì)終止,會(huì)生成動(dòng)態(tài)表作為結(jié)果表。查詢(xún)不斷更新其(動(dòng)態(tài))結(jié)果表以反映其(動(dòng)態(tài))輸入表的更改。最終,動(dòng)態(tài)表上的連續(xù)查詢(xún)與定義物化視圖的查詢(xún)非常相似。

值得注意的是,連續(xù)查詢(xún)的結(jié)果始終在語(yǔ)義上等同于在輸入表的快照上執(zhí)行批處理的到的相同查詢(xún)結(jié)果。

下圖顯示了流,動(dòng)態(tài)表和連續(xù)查詢(xún)的關(guān)系:

flink動(dòng)態(tài)表的思路

  1. 數(shù)據(jù)流被轉(zhuǎn)化為動(dòng)態(tài)表

  2. 在產(chǎn)生的動(dòng)態(tài)表上執(zhí)行連續(xù)不斷的查詢(xún),產(chǎn)生一個(gè)動(dòng)態(tài)結(jié)果表。

  3. 結(jié)果動(dòng)態(tài)表再次被轉(zhuǎn)化為數(shù)據(jù)流。

注意:動(dòng)態(tài)表最重要的是邏輯概念。在查詢(xún)執(zhí)行期間,動(dòng)態(tài)表不一定(完全)物化。

在下文中,會(huì)以schema如下的點(diǎn)擊事件流來(lái)解釋動(dòng)態(tài)表和連續(xù)不斷的查詢(xún)。

[ user:  VARCHAR,   // the name of the user cTime: TIMESTAMP, // the time when the URL was accessed url:   VARCHAR    // the URL that was accessed by the user]

stream轉(zhuǎn)化成表

當(dāng)然,想要用經(jīng)典的sql去分析流數(shù)據(jù),肯定要先將其轉(zhuǎn)化為表。從概念上講,流的每個(gè)新增記錄都被解釋為對(duì)結(jié)果表的Insert操作。最終,可以理解為是在從一個(gè)INSERT-only changelog流上構(gòu)建一個(gè)表。

下圖顯示了click事件流(左側(cè))如何轉(zhuǎn)換為表(右側(cè))。隨著更多點(diǎn)擊流記錄的插入,生成的表不斷增長(zhǎng)。

flink動(dòng)態(tài)表的思路

注意:stream轉(zhuǎn)化的表內(nèi)部并沒(méi)有被物化。

連續(xù)查詢(xún)

在動(dòng)態(tài)表上執(zhí)行連續(xù)查詢(xún),并生成新的動(dòng)態(tài)表作為結(jié)果表。與批處理查詢(xún)不同,連續(xù)查詢(xún)絕不會(huì)終止,而且會(huì)根據(jù)輸入表的更新來(lái)更新它的結(jié)果表。在任何時(shí)間點(diǎn),連續(xù)查詢(xún)的結(jié)果在語(yǔ)義上等同于在輸入表的快照上以批處理模式得到的查詢(xún)的結(jié)果。

在下文中,我們將在用點(diǎn)擊事件流定義的clicks表上展示兩個(gè)示例查詢(xún)。

第一個(gè)查詢(xún)是一個(gè)簡(jiǎn)單的GROUP-BY COUNT聚合查詢(xún)。主要是對(duì)clicks表按照user分組,然后統(tǒng)計(jì)url得到訪問(wèn)次數(shù)。下圖展示了clicks表在數(shù)據(jù)增加期間查詢(xún)是如何執(zhí)行的。

flink動(dòng)態(tài)表的思路

假設(shè)當(dāng)查詢(xún)啟動(dòng)的事以后,clicks表為空。當(dāng)?shù)谝恍袛?shù)據(jù)插入clicks表的時(shí)候,查詢(xún)開(kāi)始計(jì)算產(chǎn)生結(jié)果表。當(dāng)[Mary, ./home]插入的時(shí)候,查詢(xún)會(huì)在結(jié)果表上產(chǎn)生一行[Mary, 1]。當(dāng)[Bob, ./cart]插入clicks表之后,查詢(xún)會(huì)再次更新結(jié)果表,增加一行[Bob, 1]。當(dāng)?shù)谌?,[Mary, ./prod?id=1]插入clicks表后,查詢(xún)會(huì)更新結(jié)果表的[Mary, 1]為[Mary, 2]。最后,第四行數(shù)據(jù)插入clicks后,查詢(xún)會(huì)給結(jié)果表增加一行[Liz, 1].

第二個(gè)查詢(xún)僅僅是在上個(gè)查詢(xún)的基礎(chǔ)上增加了一個(gè)1小時(shí)的滾動(dòng)窗口。下圖展示了整個(gè)流水過(guò)程。

flink動(dòng)態(tài)表的思路

這個(gè)就類(lèi)似批處理了,每個(gè)小時(shí)產(chǎn)生一次計(jì)算結(jié)果然后更新結(jié)果表。cTime的時(shí)間范圍在12:00:00 ~12:59:59的時(shí)候總共有四行數(shù)據(jù),查詢(xún)計(jì)算出了兩行結(jié)果,并將其追加到結(jié)果表。Ctime窗口在13:00:00 and 13:59:59的時(shí)候,總共有三行數(shù)據(jù),查詢(xún)?cè)俅萎a(chǎn)生兩行結(jié)果追加到結(jié)果表。隨著時(shí)間的推移,click數(shù)據(jù)會(huì)被追加到clicks表,結(jié)果表也會(huì)不斷有新的結(jié)果產(chǎn)生。

Update 和 append 查詢(xún)

盡管兩個(gè)示例查詢(xún)看起來(lái)非常相似(都計(jì)算了分組計(jì)數(shù)聚合),但是內(nèi)部邏輯還是區(qū)別較大:

  • 第一個(gè)查詢(xún)更新以前發(fā)出的結(jié)果,即結(jié)果表的更改日志流包含INSERT和UPDATE更改。

  • 第二個(gè)查詢(xún)僅append到結(jié)果表,即結(jié)果表的更改日志流僅包含INSERT更改。

查詢(xún)是生成僅append表還是update表有一些區(qū)別:

  • 產(chǎn)生update變化的查詢(xún)通常必須維護(hù)更多狀態(tài)。

  • 將僅append表轉(zhuǎn)換為流與將update表的轉(zhuǎn)換為流,方式不同。

查詢(xún)限制

并不是所有的查詢(xún)都能以流查詢(xún)的格式執(zhí)行的。因?yàn)橛行┎樵?xún)計(jì)算起來(lái)成本比較高,要么就是要維護(hù)的狀態(tài)比較大,要么就是計(jì)算更新成本高。

  1. 狀態(tài)大小:連續(xù)查詢(xún)?cè)跓o(wú)界流上執(zhí)行,通常應(yīng)該運(yùn)行數(shù)周或數(shù)月,甚至7*24小時(shí)。因此,連續(xù)查詢(xún)處理的數(shù)據(jù)總量可能非常大。為了更新先前生成的結(jié)果,可能需要維護(hù)所有輸出的行。例如,第一個(gè)示例查詢(xún)需要存儲(chǔ)每個(gè)用戶的URL計(jì)數(shù),以便能夠增加計(jì)數(shù),并在輸入表收到新行時(shí)發(fā)出新結(jié)果。如果僅統(tǒng)計(jì)注冊(cè)用戶,則要維護(hù)的計(jì)數(shù)可能不會(huì)太高。但是,如果未注冊(cè)的用戶分配了唯一的用戶名,則要維護(hù)的計(jì)數(shù)數(shù)將隨著時(shí)間的推移而增長(zhǎng),最終可能導(dǎo)致查詢(xún)失敗。

SELECT user, COUNT(url)FROM clicksGROUP BY user;
  1. 計(jì)算更新:有時(shí)即使只添加或更新了單個(gè)輸入記錄,某些查詢(xún)也需要重新計(jì)算和更新大部分發(fā)出的結(jié)果行。顯然,這樣的查詢(xún)不適合作為連續(xù)查詢(xún)執(zhí)行。下面sql是一個(gè)示例查詢(xún),該查詢(xún)基于最后一次點(diǎn)擊的時(shí)間為每個(gè)用戶計(jì)算RANK 。一旦clicks表接收到新增行,用戶的lastAction就會(huì)更新,并且必須計(jì)算新的排名。但是,由于兩行不能具有相同的排名,因此所有排名較低的行也需要更新。

SELECT user, RANK() OVER (ORDER BY lastLogin)FROM ( SELECT user, MAX(cTime) AS lastAction FROM clicks GROUP BY user);

表轉(zhuǎn)化為流

可以像傳統(tǒng)數(shù)據(jù)庫(kù)表一樣使用INSERT, UPDATE, 和DELETE修改動(dòng)態(tài)表。當(dāng)將動(dòng)態(tài)表轉(zhuǎn)化為stream或者寫(xiě)入外部系統(tǒng)的時(shí)候,需要對(duì)修改進(jìn)行編碼。Flink的Table API和SQL支持三種方式來(lái)編碼動(dòng)態(tài)表的變化。

Append-only stream:假如動(dòng)態(tài)表的更改操作僅僅是insert ,那么變?yōu)閟tream就僅僅需要將插入的行發(fā)送出去即可。

Retract stream:retract(回撤)流是包含兩種類(lèi)型的消息的流,增加消息和回撤消息。通過(guò)將INSERT編碼為增加消息,DELETE編碼為回撤消息,將UPDATE編碼為對(duì)先前行的回撤消息和對(duì)新增行的增加消息,來(lái)完成將動(dòng)態(tài)表轉(zhuǎn)換為收回流。下圖顯示了動(dòng)態(tài)表到回收流的轉(zhuǎn)換。

flink動(dòng)態(tài)表的思路

Upsert流:upsert流是一種包含兩種消息,upsert消息和刪除消息的流。轉(zhuǎn)換為upsert流的動(dòng)態(tài)表需要唯一鍵。具有唯一鍵的動(dòng)態(tài)表通過(guò)將INSERT和UPDATE編碼為upsert消息,DELETE編碼為刪除消息來(lái)完成動(dòng)態(tài)表轉(zhuǎn)化為流。流算符需要知道唯一鍵屬性才能正確處理消息。與回撤流的主要區(qū)別在于,UPDATE使用單個(gè)消息對(duì)update進(jìn)行編碼,因此更有效。下圖顯示了動(dòng)態(tài)表到upsert流的轉(zhuǎn)換。

flink動(dòng)態(tài)表的思路

到此,關(guān)于“flink動(dòng)態(tài)表的思路”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享名稱(chēng):flink動(dòng)態(tài)表的思路
標(biāo)題網(wǎng)址:http://m.newbst.com/article10/jhspgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作搜索引擎優(yōu)化網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)