最底層級的抽象僅僅提供了有狀態(tài)流,它將通過過程函數(shù)(Process Function)被嵌入到DataStream API中。底層過程函數(shù)(Process Function) 與 DataStream API 相集成,使其可以對某些特定的操作進行底層的抽象,它允許用戶可以自由地處理來自一個或多個數(shù)據(jù)流的事件,并使用一致的容錯的狀態(tài)。除此之外,用戶可以注冊事件時間并處理時間回調(diào),從而使程序可以處理復雜的計算。
實際上,大多數(shù)應用并不需要上述的底層抽象,而是針對核心API(Core APIs) 進行編程,比如DataStream API(有界或無界流數(shù)據(jù))以及DataSet API(有界數(shù)據(jù)集)。這些API為數(shù)據(jù)處理提供了通用的構(gòu)建模塊,比如由用戶定義的多種形式的轉(zhuǎn)換(transformations),連接(joins),聚合(aggregations),窗口操作(windows)等等。DataSet API 為有界數(shù)據(jù)集提供了額外的支持,例如循環(huán)與迭代。這些API處理的數(shù)據(jù)類型以類(classes)的形式由各自的編程語言所表示。
Table API 是以表為中心的聲明式編程,其中表可能會動態(tài)變化(在表達流數(shù)據(jù)時)。Table API遵循(擴展的)關系模型:表有二維數(shù)據(jù)結(jié)構(gòu)(schema)(類似于關系數(shù)據(jù)庫中的表),同時API提供可比較的操作,例如select、project、join、group-by、aggregate等。Table API程序聲明式地定義了什么邏輯操作應該執(zhí)行,而不是準確地確定這些操作代碼的看上去如何。
盡管Table API可以通過多種類型的用戶自定義函數(shù)(UDF)進行擴展,其仍不如核心API更具表達能力,但是使用起來卻更加簡潔(代碼量更少)。除此之外,Table API程序在執(zhí)行之前會經(jīng)過內(nèi)置優(yōu)化器進行優(yōu)化。
你可以在表與 DataStream/DataSet 之間無縫切換,以允許程序?qū)?Table API 與 DataStream 以及 DataSet 混合使用。
Flink提供的最高層級的抽象是 SQL 。這一層抽象在語法與表達能力上與 Table API 類似,但是是以SQL查詢表達式的形式表現(xiàn)程序。SQL抽象與Table API交互密切,同時SQL查詢可以直接在Table API定義的表上執(zhí)行。








暫無數(shù)據(jù)