成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Flink實(shí)戰(zhàn)(六) - Table API & SQL編程

lifefriend_007 / 2658人閱讀

摘要:每個在簡潔性和表達(dá)性之間提供不同的權(quán)衡,并針對不同的用例。在這些中處理的數(shù)據(jù)類型在相應(yīng)的編程語言中表示為類。該是為中心的聲明性表,其可被動態(tài)地改變的表表示流時。這種抽象在語義和表達(dá)方面類似于,但是將程序表示為查詢表達(dá)式。

1 意義 1.1 分層的 APIs & 抽象層次

Flink提供三層API。 每個API在簡潔性和表達(dá)性之間提供不同的權(quán)衡,并針對不同的用例。

而且Flink提供不同級別的抽象來開發(fā)流/批處理應(yīng)用程序

最低級抽象只提供有狀態(tài)流。它通過Process Function嵌入到DataStream API中。它允許用戶自由處理來自一個或多個流的事件,并使用一致的容錯狀態(tài)。此外,用戶可以注冊事件時間和處理時間回調(diào),允許程序?qū)崿F(xiàn)復(fù)雜的計(jì)算。

實(shí)際上,大多數(shù)應(yīng)用程序不需要上述低級抽象,而是針對Core API編程, 如DataStream API(有界/無界流)和DataSet API (有界數(shù)據(jù)集)。這些流暢的API提供了用于數(shù)據(jù)處理的通用構(gòu)建塊,例如各種形式的用戶指定的轉(zhuǎn)換,連接,聚合,窗口,狀態(tài)等。在這些API中處理的數(shù)據(jù)類型在相應(yīng)的編程語言中表示為類。

低級Process Function與DataStream API集成,因此只能對某些 算子操作進(jìn)行低級抽象。該數(shù)據(jù)集API提供的有限數(shù)據(jù)集的其他原語,如循環(huán)/迭代。

Table API 是為中心的聲明性DSL 表,其可被動態(tài)地改變的表(表示流時)。該 Table API遵循(擴(kuò)展)關(guān)系模型:表有一個模式連接(類似于在關(guān)系數(shù)據(jù)庫中的表)和API提供可比的 算子操作,如選擇,項(xiàng)目,連接,分組依據(jù),聚合等 Table API程序以聲明方式定義應(yīng)該執(zhí)行的邏輯 算子操作,而不是準(zhǔn)確指定 算子操作代碼的外觀。雖然 Table API可以通過各種類型的用戶定義函數(shù)進(jìn)行擴(kuò)展,但它的表現(xiàn)力不如Core API,但使用更簡潔(編寫的代碼更少)。此外, Table API程序還會通過優(yōu)化程序,在執(zhí)行之前應(yīng)用優(yōu)化規(guī)則。

可以在表和DataStream / DataSet之間無縫轉(zhuǎn)換,允許程序混合 Table API以及DataStream 和DataSet API。

Flink提供的最高級抽象是SQL。這種抽象在語義和表達(dá)方面類似于 Table API,但是將程序表示為SQL查詢表達(dá)式。在SQL抽象與 Table API緊密地相互作用,和SQL查詢可以通過定義表來執(zhí)行 Table API。1.2 模型類比MapReduce ==> Hive SQL

Spark ==> Spark SQL
Flink ==> SQL

2 總覽 2.1 簡介

Apache Flink具有兩個關(guān)系型API

Table API

SQL

用于統(tǒng)一流和批處理

Table API是Scala和Java語言集成查詢API,可以非常直觀的方式組合來自關(guān)系算子的查詢(e.g. 選擇,過濾和連接).

Flink的SQL支持基于實(shí)現(xiàn)SQL標(biāo)準(zhǔn)的Apache Calcite。無論輸入是批輸入(DataSet)還是流輸入(DataStream),任一接口中指定的查詢都具有相同的語義并指定相同的結(jié)果。

Table API和SQL接口彼此緊密集成,就如Flink的DataStream和DataSet API。我們可以輕松地在基于API構(gòu)建的所有API和庫之間切換。例如,可以使用CEP庫從DataStream中提取模式,然后使用 Table API分析模式,或者可以在預(yù)處理上運(yùn)行Gelly圖算法之前使用SQL查詢掃描,過濾和聚合批處理表數(shù)據(jù)。

Table API和SQL尚未完成并且正在積極開發(fā)中。并非 Table API,SQL和stream,batch輸入的每種組合都支持所有算子操作
2.2 依賴結(jié)構(gòu)

所有Table API和SQL組件都捆綁在flink-table Maven工件中。

以下依賴項(xiàng)與大多數(shù)項(xiàng)目相關(guān):

flink-table-common

通過自定義函數(shù),格式等擴(kuò)展表生態(tài)系統(tǒng)的通用模塊。

flink-table-api-java

使用Java編程語言的純表程序的表和SQL API(在早期開發(fā)階段,不推薦?。?/p>

flink-table-api-scala

使用Scala編程語言的純表程序的表和SQL API(在早期開發(fā)階段,不推薦?。?/p>

flink-table-api-java-bridge

使用Java編程語言支持DataStream / DataSet API的Table&SQL API。

flink-table-api-scala-bridge

使用Scala編程語言支持DataStream / DataSet API的Table&SQL API。

flink-table-planner

表程序規(guī)劃器和運(yùn)行時。

flink-table-uber

將上述模塊打包成大多數(shù)Table&SQL API用例的發(fā)行版。 uber JAR文件flink-table * .jar位于Flink版本的/ opt目錄中,如果需要可以移動到/ lib。

2.3 項(xiàng)目依賴

必須將以下依賴項(xiàng)添加到項(xiàng)目中才能使用Table API和SQL來定義管道:


  org.apache.flink
  flink-table-planner_2.11
  1.8.0

此外,根據(jù)目標(biāo)編程語言,您需要添加Java或Scala API。



  org.apache.flink
  flink-table-api-java-bridge_2.11
  1.8.0



  org.apache.flink
  flink-table-api-scala-bridge_2.11
  1.8.0

在內(nèi)部,表生態(tài)系統(tǒng)的一部分是在Scala中實(shí)現(xiàn)的。 因此,請確保為批處理和流應(yīng)用程序添加以下依賴項(xiàng):


  org.apache.flink
  flink-streaming-scala_2.11
  1.8.0
2.4 擴(kuò)展依賴

如果要實(shí)現(xiàn)與Kafka或一組用戶定義函數(shù)交互的自定義格式,以下依賴關(guān)系就足夠了,可用于SQL客戶端的JAR文件:


  org.apache.flink
  flink-table-common
  1.8.0

目前,該模塊包括以下擴(kuò)展點(diǎn):

SerializationSchemaFactory

DeserializationSchemaFactory

ScalarFunction

TableFunction

AggregateFunction

3 概念和通用API

Table API和SQL集成在一個聯(lián)合API中。此API的核心概念是Table用作查詢的輸入和輸出。本文檔顯示了具有 Table API和SQL查詢的程序的常見結(jié)構(gòu),如何注冊Table,如何查詢Table以及如何發(fā)出Table。

3.1 Table API和SQL程序的結(jié)構(gòu)

批處理和流式傳輸?shù)乃?Table API和SQL程序都遵循相同的模式。以下代碼示例顯示了 Table API和SQL程序的常見結(jié)構(gòu)。

// 對于批處理程序,使用ExecutionEnvironment而不是StreamExecutionEnvironment
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 創(chuàng)建一個TableEnvironment
// 對于批處理程序使用BatchTableEnvironment而不是StreamTableEnvironment
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

// 注冊一個 Table
tableEnv.registerTable("table1", ...)            // 或者
tableEnv.registerTableSource("table2", ...);     // 或者
tableEnv.registerExternalCatalog("extCat", ...);
// 注冊一個輸出 Table
tableEnv.registerTableSink("outputTable", ...);

/ 從 Table API query 創(chuàng)建一個Table
Table tapiResult = tableEnv.scan("table1").select(...);
// 從 SQL query 創(chuàng)建一個Table
Table sqlResult  = tableEnv.sqlQuery("SELECT ... FROM table2 ... ");

// 將表API結(jié)果表發(fā)送到TableSink,對于SQL結(jié)果也是如此
tapiResult.insertInto("outputTable");

// 執(zhí)行
env.execute();
3.2 將DataStream或DataSet轉(zhuǎn)換為表

它也可以直接轉(zhuǎn)換為a 而不是注冊a DataStream或DataSetin 。如果要在 Table API查詢中使用Table,這很方便。TableEnvironmentTable

// 獲取StreamTableEnvironment
//在BatchTableEnvironment中注冊DataSet是等效的
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

DataStream> stream = ...

// 將DataStream轉(zhuǎn)換為默認(rèn)字段為“f0”,“f1”的表
Table table1 = tableEnv.fromDataStream(stream);

// 將DataStream轉(zhuǎn)換為包含字段“myLong”,“myString”的表
Table table2 = tableEnv.fromDataStream(stream, "myLong, myString");

sale.csv文件

Scala

Java

還不完善,等日后Flink該模塊開發(fā)完畢再深入研究!

參考

Table API & SQL

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75521.html

相關(guān)文章

  • OPPO數(shù)據(jù)中臺之基石:基于Flink SQL構(gòu)建實(shí)數(shù)據(jù)倉庫

    摘要:實(shí)際上,本身就預(yù)留了與外部元數(shù)據(jù)對接的能力,分別提供了和這兩個抽象。對接外部數(shù)據(jù)源搞清楚了注冊庫表的過程,給我們帶來這樣一個思路如果外部元數(shù)據(jù)創(chuàng)建的表也能被轉(zhuǎn)換成可識別的,那么就能被無縫地注冊到。 本文整理自 2019 年 4 月 13 日在深圳舉行的 Flink Meetup 會議,分享嘉賓張俊,目前擔(dān)任 OPPO 大數(shù)據(jù)平臺研發(fā)負(fù)責(zé)人,也是 Apache Flink contrib...

    jeffrey_up 評論0 收藏0
  • 淺析 Flink Table/SQL API

    摘要:對批處理表的查詢不支持,和很多中常見的標(biāo)量函數(shù)。此外,可以同時在靜態(tài)表和流表上進(jìn)行查詢,這和的愿景是一樣的,將批處理看做特殊的流處理批看作是有限的流。最后,使用標(biāo)準(zhǔn)進(jìn)行流處理意味著有很多成熟的工具支持。查詢結(jié)果直接顯示在中。 從何而來 關(guān)系型API有很多好處:是聲明式的,用戶只需要告訴需要什么,系統(tǒng)決定如何計(jì)算;用戶不必特地實(shí)現(xiàn);更方便優(yōu)化,可以執(zhí)行得更高效。本身Flink就是一個統(tǒng)一...

    soasme 評論0 收藏0
  • 《從0到1學(xué)習(xí)Flink》—— Apache Flink 介紹

    摘要:擴(kuò)展庫還包括用于復(fù)雜事件處理,機(jī)器學(xué)習(xí),圖形處理和兼容性的專用代碼庫。事件時間機(jī)制使得那些事件無序到達(dá)甚至延遲到達(dá)的數(shù)據(jù)流能夠計(jì)算出精確的結(jié)果。負(fù)責(zé)接受用戶的程序代碼,然后創(chuàng)建數(shù)據(jù)流,將數(shù)據(jù)流提交給以便進(jìn)一步執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000016902812); 前言 Flink 是一種流式計(jì)算框架,為什么我...

    flyer_dev 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<