色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

全方位解析FlinkSQL的實現原理

數據分析與開發 ? 來源:大數據左右手 ? 作者:王了個博 ? 2021-10-12 14:32 ? 次閱讀

主要內容本篇主要從FlinkSQL實現的內核與原理,工作流等的視角帶大家構建一幅FlinkSQL全景圖(以Blink為主介紹),探知背后支撐的“男人們”(組件)。建議收藏,僅此一份。

主要內容:

1. Table API 與 SQL

2. Apache Calcite

3. 元數據

4. SQL 函數

5. Flink Planner 與 Blink Planner

6. Blink SQL執行過程

7. SQL優化器

8. 總結

Table API 與 Table SQLTable API 和 Table SQL 集成在同一套 API 中。這套 API 的核心概念是Table,用作查詢的輸入和輸出。

Apache Flink 具有兩個關系型 API - Table API 和 Table SQL - 用于統一的流和批處理。Table API 是 Scala 和 Java 的語言集成查詢 API,它允許用非常直觀的方式從關系運算符(如選擇、過濾和連接)組成查詢。Flink 的 SQL 支持是基于 Apache Calcite,它實現了 SQL 標準。無論輸入是批處理輸入(DataSet)還是流輸入(DataStream),在任一接口中指定的查詢都具有相同的語義,并指定相同的結果。

Table API 和 SQL 接口與 Flink 的 DataStream 和 DataSet API 緊密集成。你可以很容易地在所有 API 和建立在 API 基礎上的庫之間切換。

Apache CalciteCalcite 是什么

Apache Calcite是一款開源的動態數據管理框架,它提供了標準的 SQL 語言、多種查詢優化和連接各種數據源的能力,但不包括數據存儲、處理數據的算法和存儲元數據的存儲庫。

Calcite采用的是業界大數據查詢框架的一種通用思路,它的目標是“one size fits all(一種方案適應所有需求場景)”,希望能為不同計算平臺和數據源提供統一的查詢引擎。

Calcite作為一個強大的SQL計算引擎,在Flink內部的SQL引擎模塊就是基于Calcite。

Calcite 的特點

支持標準SQL語言;

獨立于編程語言和數據源,可以支持不同的前端和后端;

支持關系代數、可定制的邏輯規則和基于成本模型優化的查詢引擎;

支持物化視圖(materialized view)的管理(創建、丟棄、持久化和自動識別);

基于物化視圖的LatticeTile機制,以應用于OLAP分析;

支持對流數據的查詢。

Calcite 的功能

1. SQL 解析

Calcite 的SQL解析是通過JavaCC實現的,使用JavaCC編寫SQL語法描述文件,將SQL解析成未經校驗的AST語法樹。

2. SQL 校驗

無狀態的校驗:驗證SQL語句是否符合規范。有狀態的校驗:通過與元數據結合驗證SQL的Schema,Field,Function是否存在,輸入和輸出是否符合。

3. 查詢優化

對RelNode和邏輯計劃樹進行優化,得到優化后的生成物理執行計劃。

4. SQL 生成器

將物理執行計劃生成特定平臺的可執行程序,比如Flink,Hive,不同規則的SQL查詢語句。

5. 執行

通過各個執行平臺在內存中編譯,然后執行查詢。

FlinkSQL 結合 Calcite

一條SQL從提交到Calcite解析,優化,到最后的Flink執行,一般分以下過程:

1. Sql Parser: 將sql語句通過java cc解析成AST(語法樹),在calcite中用SqlNode表示AST;

2. Sql Validator: 結合數字字典(catalog)去驗證sql語法;

3. 生成Logical Plan: 將sqlNode表示的AST轉換成LogicalPlan, 用relNode表示;

4. 生成 optimized LogicalPlan: 先基于calcite rules 去優化logical Plan,基于flink定制的一些優化rules去優化logical Plan;

5. 生成Flink PhysicalPlan: 這里也是基于flink里頭的rules將,將optimized LogicalPlan轉成成Flink的物理執行計劃;

6. 將物理執行計劃轉成Flink ExecutionPlan: 就是調用相應的tanslateToPlan方法轉換和利用CodeGen元編程成Flink的各種算子。

Table API 來提交任務的話,基本流程和運行SQL類似,稍微不同的是:table api parser: flink會把table api表達的計算邏輯也表示成一顆樹,用treeNode去表式;在這棵樹上的每個節點的計算邏輯用Expression來表示。

簡單說一下SQL優化:RBO(基于規則)

RBO主要是開發人員在使用SQL的過程中,有些發現有些通用的規則,可以顯著提高SQL執行的效率,比如最經典的filter下推:

將Filter下推到Join之前執行,這樣做的好處是減少了Join的數量,同時降低了CPU,內存,網絡等方面的開銷,提高效率。

SQL優化的發展,則可以分為兩個階段,即RBO(基于規則),和CBO(基于代價)

RBO和CBO的區別大概在于: RBO只為應用提供的rule,而CBO會根據給出的Cost信息智能應用rule,求出一個Cost最低的執行計劃。需要糾正很多人誤區的一點是,CBO其實也是基于rule的,接觸到RBO和CBO這兩個概念的時候,很容易將他們對立起來。但實際上CBO,可以理解為就是加上Cost的RBO。

元數據Catalog 提供了元數據信息,例如數據庫、表、分區、視圖以及數據庫或其他外部系統中存儲的函數和信息。

數據處理最關鍵的方面之一是管理元數據。元數據可以是臨時的,例如臨時表、或者通過 TableEnvironment 注冊的 UDF。元數據也可以是持久化的,例如 Hive Metastore 中的元數據。Catalog 提供了一個統一的API,用于管理元數據,并使其可以從 Table API 和 SQL 查詢語句中來訪問。

1. 目前支持的類型

(1) GenericInMemoryCatalog

是基于內存實現的 Catalog,所有元數據只在 session 的生命周期內可用。

(2) JdbcCatalog

JdbcCatalog 使得用戶可以將 Flink 通過 JDBC 協議連接到關系數據庫。PostgresCatalog 是當前實現的唯一一種 JDBC Catalog。

(3) HiveCatalog

HiveCatalog 有兩個用途:作為原生 Flink 元數據的持久化存儲,以及作為讀寫現有 Hive 元數據的接口。

(4) 用戶自定義 Catalog

Catalog 是可擴展的,用戶可以通過實現 Catalog 接口來開發自定義 Catalog。想要在 SQL CLI 中使用自定義 Catalog,用戶除了需要實現自定義的 Catalog 之外,還需要為這個 Catalog 實現對應的 CatalogFactory 接口。

CatalogFactory 定義了一組屬性,用于 SQL CLI 啟動時配置 Catalog。這組屬性集將傳遞給發現服務,在該服務中,服務會嘗試將屬性關聯到 CatalogFactory 并初始化相應的 Catalog 實例。

2. 元數據分類

catalog定義主要有三種數據類型接口,也就是常用到的數據庫,表&視圖,函數。當然還有最上層的Catalog容器。

(1) 數據庫

等同于數據庫中庫的實例,接口定義為CatalogDatabase,定義數據庫實例的元數據,一個數據庫實例中包含表,視圖,函數等多種對象。

(2) 表&視圖

CatalogTable對應數據庫中的表,CatalogView隊形數據庫中的視圖。

表是一種存儲的實體,包換了字段信息,表的分區,屬性,描述信息。其實說白了字段定義和之前印象的數據庫很是類似。你可以對比過來。不同的是,拿flink來說,所有的表都是外部數據源,除了上面所說的,還需要訪問信息,比如IP端口,mater地址,connector連接類等等。

視圖是一個虛擬概念,本質上是一條SQL查詢語句,底層對應一張表或者多張表。包含SQL查詢語句,視圖的字段信息,視圖的屬性等等的信息。

(3) 函數

CatalogFunction是函數元數據的接口。函數元數據包含了所在的類信息和編程語言。

3. 數據訪問

Flink的Table API和SQL程序可以連接到其他外部系統,用于讀和寫批處理表和流表。source table提供對存儲在外部系統(如數據庫、消息隊列或文件系統)中的數據的訪問。sink table 向外部存儲系統發送表。根據source和sink器的類型,它們支持不同的格式,如CSV、Avro、Parquet或ORC。

(1) TableSchema

Table Source 和 Sink需要具備對外數據源的描述能力,所以Flink定義了TableSchema對象來定義字段名稱和字段類型,存儲格式等等信息

(2) 時間屬性

支持處理時間和時間時間

(3) Watermark

用來處理亂序的數據。

4. Table Source & Table Sink

Flink本地支持各種連接器,可以查看往期總結

Filesystem

Elasticsearch

Apache Kafka

Amazon Kinesis Data Streams

JDBC

Apache HBase

Apache Hive

幾個主要Table Source與Sink體系

(1) StreamTableSource

流數據抽象,區分了無界數據與有界數據。

(2) LookupableTableSource

按照Join條件中的字段進行關聯。

(3) FilterableTableSource

過濾不符合條件的記錄。

(4) LimitableTableSource

限制記錄條數。

(5) ProjectableTableSource

過濾不會被使用的字段。

(6) AppendStreamTableSink

追加模式的TableSink 支持追加,不支持更新。

(7) RetractStreamTableSink

支持召回模式的TableSink,召回模式其實就是流上的update。

(8) UpsertStreamTableSink

有則更新,無則插入

SQL 函數臨時函數和持久化函數。臨時函數始終由用戶創建,它容易改變并且僅在會話的生命周期內有效。持久化函數不是由系統提供,就是存儲在 Catalog 中,它在會話的整個生命周期內都有效。

內置函數

Table API和SQL為用戶提供了一組用于數據轉換的內置函數。如果您需要的函數還不受支持,您可以實現用戶定義的函數

(1) Comparison Functions(比較型函數)

eg:value1 = value2

(2) Logical Functions(邏輯函數)

eg: boolean1 OR boolean2

(3) Arithmetic Functions(算術函數)

eg: numeric1 + numeric2

(4) String Functions(字符串函數)

UPPER(string)

(5) Temporal Functions(時間函數)

YEAR(date)

(6) Conditional Functions(有條件的函數)

IF(condition, true_value, false_value)

(7) Type Conversion Functions(類型轉換函數)

CAST(value AS type)

(8) Collection Functions(集合函數)

array ‘[’ INT ‘]’

(9) Value Construction Functions , Value Access Functions,Grouping Functions,Hash Functions,Auxiliary Functions,Aggregate Functions,Column Functions (不一一列舉)

自定義函數

(1) 標量函數(UDF)

標量函數 將標量值轉換成一個新標量值,也就是對一行數據中的一個或者多個字段返回一個單值。

(2) 聚合函數(UDAGG)

自定義聚合函數(UDAGG)是把一個表(一行或者多行,每行可以有一列或者多列)聚合成一個標量值。

(3) 表值函數(UDTF

表值函數 將標量值轉換成新的行數據。可以接收一個或者多個字段作為參數,輸出多行列數據。

(4) 表值聚合函數(UDTAGG)

自定義表值聚合函數(UDTAGG)可以把一個表(一行或者多行,每行有一列或者多列)聚合成另一張表,結果中可以有多行多列。

(5) 異步表值函數

異步表值函數 是異步查詢外部數據系統的特殊函數。

Planner 與 Blink PlannerFlink Table/SQL體系中的Planner(即查詢處理器)是溝通Flink與Calcite的橋梁,為Table/SQL API提供完整的解析、優化和執行環境。

Flink Table 的新架構實現了查詢處理器的插件化,項目完整保留原有 Flink Planner (Old Planner),同時又引入了新的 Blink Planner,用戶可以自行選擇使用 Old Planner 還是 Blink Planner。

主要區別:

Blink做到了真正的流批統一,即將批看做是特殊的流,把處理批的API和處理流的API做成了一樣的。也就是說不管是批數據還是流數據,底層統統都是DataStream。所以使用Blink作為table planner的程序,Table和DataSet是不能相互轉換的。

Blink planner是不支持BatchTableSource的,它只支持StreamTableSource。

Blink Planner和Old Planner的FilterableTableSource是不兼容的。Old - Planner會下推PlannerExpression到FilterableTableSource。而Blink planner下推的是Expression。

基于String的鍵值對配置項只能用于Blink Planner

Blink Planner會優化多個sink到同一個TableEnvironment和StreamTableEnvironment。而Old Planner會為不同的sink優化到自己的DAG中,也就是說有幾個sink就有幾個DAG。

Old Planner 不支持 catalog統計,Blink支持。

Old Planner 不支持版本表(versioned Table)。版本表類似HBASE中版本表的意思,每個key可以記住過去的幾個值。

Blink SQL執行過程

SQL執行過程分三個階段

(1) 從SQL到 Operation

(2) 從Operation 到 Transformation

(3) 環境的執行階段

從SQL到 Operation

(1) 解析SQL轉換為QueryOperation;

(2) SQL解析為SqlNode;

(3) 校驗SqlNode;

(4) 調用Calcite SQLToRelConvertrt將SqlNode轉化為RelNode邏輯樹;

(5) RelNode轉化為Operation。

Operation 到 Transformation

(1) DQL(數據查詢語言)轉換,在flink中作為中間運算;

(2) DML(數據操作語言),DQL轉換。

整個轉換從Operation開始,先轉換為Calcite的邏輯計劃樹,再轉化為Flink的邏輯計劃樹,然后進行優化。優化后的邏輯樹轉換為Flink的物理執行,物理執行生成一系列的算子,udf等等,包裝到Transformation中。

環境的執行階段

有了Transformation后正式進入到StreamGraph的過程中,最終交給Flink集群去運行。

SQL優化器查詢優化器

再次提到兩個優化器:RBO(基于規則的優化器) 和 CBO(基于代價的優化器)

(1) RBO(基于規則的優化器)會將原有表達式裁剪掉,遍歷一系列規則(Rule),只要滿足條件就轉換,生成最終的執行計劃。一些常見的規則包括分區裁剪(Partition Prune)、列裁剪、謂詞下推(Predicate Pushdown)、投影下推(Projection Pushdown)、聚合下推、limit下推、sort下推、常量折疊(Constant Folding)、子查詢內聯轉join等。

(2) CBO(基于代價的優化器)會將原有表達式保留,基于統計信息和代價模型,嘗試探索生成等價關系表達式,最終取代價最小的執行計劃。CBO的實現有兩種模型,Volcano模型,Cascades模型。這兩種模型思想很是相似,不同點在于Cascades模型一邊遍歷SQL邏輯樹,一邊優化,從而進一步裁剪掉一些執行計劃。

目前各大數據庫和計算引擎傾向于CBO。

總結在目前情況下,在阿里對Flink社區的貢獻下,Flink包含了Flink SQL 和 Blink SQL體系,Flink Planner稱之為 Old Planner,Blink Planner稱之為 New Planner。從中可以發現 Blink Planner是未來,Flink Planner將會被淘汰。

FlinkSQL依靠 Calcite提供了一套SQL驗證,解析,優化等等操作。同時FlinkSQL提供元數據管理,SQL函數,數據源的建設。也自由化地提供了自定義函數,自定義connector連接,豐富了場景的使用。

FlinkSQL你值得擁有!!!

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19259

    瀏覽量

    229655
  • 數據管理
    +關注

    關注

    1

    文章

    294

    瀏覽量

    19610
  • SQL
    SQL
    +關注

    關注

    1

    文章

    762

    瀏覽量

    44117
  • UDF
    UDF
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6468

原文標題:干貨:詳解 FlinkSQL 實現原理

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    電器EMC測試整改解決:應對電磁干擾的全方位方案

    深圳南柯電子|電器EMC測試整改解決:應對電磁干擾的全方位方案
    的頭像 發表于 11-27 11:41 ?228次閱讀
    電器EMC測試整改解決:應對電磁干擾的<b class='flag-5'>全方位</b>方案

    全方位解剖MOS管

    全方位解剖MOS管 功率MOSFET的正向導通等效電路 (1):等效電路 (2):說明: 功率 MOSFET 正向導通時可用一電阻等效,該電阻與溫度有關,溫度升高,該電阻變大;它還與門極驅動電壓
    的頭像 發表于 11-20 09:50 ?174次閱讀
    <b class='flag-5'>全方位</b>解剖MOS管

    高防服務器托管:全方位解析與應用

    高防服務器托管是指將具備高防御能力的服務器放置在專業的數據中心,由服務商提供網絡帶寬、硬件維護、網絡安全等一系列支持服務。這種托管方式旨在為企業和個人網站提供穩定、安全的在線服務,尤其是在面臨DDoS攻擊等網絡安全威脅時尤為重要。下面是關于高防服務器托管的全方位解析及其應
    的頭像 發表于 10-28 10:17 ?149次閱讀

    智慧路燈的定義 全方位解析物聯網智慧燈桿一站式解決方案

    智慧路燈的定義(全方位解析物聯網智慧燈桿一站式解決方案)
    的頭像 發表于 10-12 09:26 ?640次閱讀
    智慧路燈的定義 <b class='flag-5'>全方位</b><b class='flag-5'>解析</b>物聯網智慧燈桿一站式解決方案

    GPS信號手持金屬探測器:打造全方位探測的體驗

    深圳特信探測器|GPS信號手持金屬探測器:打造全方位探測的體驗
    的頭像 發表于 10-09 09:05 ?369次閱讀

    特信無人機反制系統的全方位防護

    隨著無人機技術的飛速發展,其在航拍、農業、物流等多個領域展現出巨大的應用潛力。然而,無人機的普及也帶來了一系列安全隱患,如非法入侵、隱私侵犯、甚至恐怖襲擊等。為了有效應對這些挑戰,特信無人機反制系統應運而生,以其從探測到干擾的全方位防護能力,為空中安全筑起了一道堅實的防線。
    的頭像 發表于 08-22 09:19 ?314次閱讀

    全方位精準測量技術助力:中國經濟加力發展向前&amp;quot;進&amp;quot;

    全方位精準測量技術助力:中國經濟加力發展向前"進"
    的頭像 發表于 07-15 09:53 ?347次閱讀
    <b class='flag-5'>全方位</b>精準測量技術助力:中國經濟加力發展向前&amp;quot;進&amp;quot;

    紫光展銳與中興通訊簽署全方位5G戰略合作框架協議

    7月11日,在2024(第十六屆)半導體市場年會暨新紫光集團品牌煥新發布會上,紫光展銳與中興通訊股份有限公司(簡稱“中興通訊”)正式簽署了全方位5G戰略合作框架協議,雙方將在移動互聯、家庭終端、汽車
    的頭像 發表于 07-12 17:34 ?824次閱讀

    360°全方位炮筒無人機反制設備:保障天空安全的新利器

    在現代社會,無人機的廣泛應用帶來了許多便利,但也引發了諸多安全隱患。為了有效應對這些威脅,360°全方位炮筒無人機反制設備應運而生。本文特信電子將詳細介紹這一設備的特點和應用領域,幫助您更好地了解如何利用這種先進技術保障空域安全。
    的頭像 發表于 06-18 09:25 ?366次閱讀

    能耗抄表系統的全方位解析

    能耗抄表系統,作為一種現代化能源可視化工具,早已在國際范圍內廣泛應用。主要是通過實時檢測并記錄能源耗費,助力企業、機構和個人完成更有效、更加環保的能源應用。本文將從三個方面深入分析這一系統。1.系統功能和基本原理能耗抄表系統基本功能包含智能抄表、能耗分析與出現異常報案。它通過傳感器和多功能儀表搜集電力工程、水、氣等各種能源的使用數據,再通過wifi網絡傳送到
    的頭像 發表于 05-23 17:19 ?345次閱讀
    能耗抄表系統的<b class='flag-5'>全方位</b><b class='flag-5'>解析</b>

    電子元器件:從基礎到應用的全方位解讀

    以及實際案例等方面,對電子元器件進行全方位的解讀。 一、電子元器件的基本概念與分類 電子元器件是電子元件和小型機器、儀器的組成部分,包括電阻、電容、電感、晶體管、集成電路等。它們通過電路連接,共同實現電子系
    的頭像 發表于 05-20 11:13 ?864次閱讀

    沁恒全系PD產品亮相亞洲充電展,全方位賦能Type-C應用

    3月20~22日,沁恒以“融合PD與專業接口,全方位賦能Type-C應用”為主題,攜全系PD產品和熱門方案亮相2024(春季)亞洲充電展。
    的頭像 發表于 03-25 14:12 ?1333次閱讀
    沁恒全系PD產品亮相亞洲充電展,<b class='flag-5'>全方位</b>賦能Type-C應用

    長電科技全面貫徹DFX理念,提供全方位的設計支持

    作為全球領先的集成電路制造和技術服務提供商,長電科技提供集成電路的系統集成、設計仿真、技術開發、生產制造等全方位的芯片成品制造一站式服務。
    的頭像 發表于 03-17 15:00 ?594次閱讀

    傳音旗下TECNO發布全新AIOS,致力于全方位提升用戶AI移動體驗

    傳音控股旗下創新科技品牌TECNO于MWC 2024宣布推出TECNO AIOS ,用AI革新致力于全方位提升全球用戶AI移動體驗。
    的頭像 發表于 03-01 16:30 ?796次閱讀

    傳感器類別區分與選型攻略:從原理到應用全方位解析

    的區分與選型攻略,從原理到應用,為您提供一份全方位的參考指南。 首先,溫度傳感器是用來測量溫度的,廣泛應用于工業控制、氣象觀測、醫療衛生等領域。常見的溫度傳感器有熱電偶、熱電阻和半導體溫度傳感器,它們各有優劣
    的頭像 發表于 01-04 08:45 ?2281次閱讀
    主站蜘蛛池模板: 亚洲第一天堂无码专区| 精品日韩视频| 韩国伦理三级| 免费看黄色小说| 台湾果冻传媒在线观看| 亚洲综合日韩在线2019| caoporm国产精品视频免费| 国产乱辈通伦影片在线播放亚洲| 久久才是精品亚洲国产| 青青久久网| 野花社区视频WWW高清| av天堂网2017avtt| 黄色三级视频在线观看| 欧美黑人经典片免费观看| 亚洲国产在线精品国自产拍五月| 99 久久99久久精品免观看| 国产精品18久久久久久欧美 | 成人久久欧美日韩一区二区三区 | 国产精品成人自拍| 1300部真实小Y女视频合集| 果冻传媒视频在线播放| 妹妹我要色| 无遮掩H黄纯肉动漫在线观看星| 中文字幕在线不卡精品视频99| 高清AV熟女一区| 久青草国产在线视频亚瑟影视| 视频一区在线免费观看| 51精品少妇人妻AV一区二区| 国产麻豆剧果冻传媒免费网站| 女配穿书病娇被强啪h| 野花视频在线观看免费| 国产精品.XX视频.XXTV| 欧美兽交YOYO| 2021久久99国产熟女人妻| 国产色综合色产在线视频| 日本激情在线| 2018久久视频在线视频观看| 国产在线视频在线观看| 涩涩游戏盒| silk118中文字幕无删减| 久久女婷五月综合色啪|