日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

概述

Apache Calcite的前身是optiq,是Hive中做CBO(Cost Based Optimization, 基于成本的優化)的一個模塊。2014年5月從Hive項目中獨立出來,成為Apache社區的孵化項目,同年9月正式改名為Apache Calcite。Calcite的作者是Julian Hyde,是數據處理與架構方面的專家,在數據平臺方面的工作經歷非常多,曾是Oracle、Broadbase公司SQL引擎的主要開發者、SQL Streaming公司的創始人和架構師、Pentaho BI套件中OLAP部分的架構師和主要開發者。

Apache Calcite是目前很火的一個Apache開源項目,其定位是動態數據管理框架。和傳統的DBMS系統比,Apache Calcite舍棄傳統數據庫系統的幾個關鍵特性,數據存儲(storage of data)、數據處理算法(algorithm to process data)、元數據倉儲(repository for storing metadata)。可以看到,Apache Calcite本身不涉及任何物理存儲信息,也不做具體的物理數據操作,而是專注在SQL解析、基于關系代數的優化,通過擴展的方式來對接底層存儲。

The Apache Calcite Architechure

因此,Apache Calcite可以更好的被其他項目集成, 能夠在異構存儲、異構引擎上,提供統一的數據管理能力,同時還支持基于關系的代數優化器。正如Apache Calcite的設計目標”One planner fits all” 說的那樣,我們只需要一個SQL接口,就能支持任何數據存儲、計算引擎。目前,Apache Caclcite被廣泛應用于眾多的開源項目中,如Apache Drill、Apache Hive、Apache Kylin、Apache Phoenix、Apache Samza 和 Apache Flink等。

Apache Calcite的能力

Apache Calcite有幾個特性:

  1. 可擴展:適配不同的存儲、計算引擎
  2. 查詢優化:基于關系代數,提供強大的優化器
  3. 支持物化視圖
  4. 支持OLAP
  5. 支持流式查詢

強大的擴展性

剛才提到,Apache Calcite本身不提供物理存儲(報錯數據、元信息,以及數據的處理算法),這些減法,但是它提供了一個擴展機制(schema adapter),能夠定義外部物理引擎中的table、view等信息。

Apache Calcite官網列出了大量adapter:

  • Cassandra adapter (calcite-cassandra)
  • CSV adapter (example/csv)
  • Druid adapter (calcite-druid)
  • Elasticsearch adapter (calcite-elasticsearch)
  • File adapter (calcite-file)
  • Geode adapter (calcite-geode)
  • InnoDB adapter (calcite-innodb)
  • JDBC adapter (part of calcite-core)
  • MongoDB adapter (calcite-mongodb)
  • OS adapter (calcite-os)
  • Pig adapter (calcite-pig)
  • redis adapter (calcite-redis)
  • Solr cloud adapter (solr-sql)
  • Spark adapter (calcite-spark)
  • Splunk adapter (calcite-splunk)
  • Eclipse Memory Analyzer (MAT) adapter (mat-calcite-plugin)
  • Apache Kafka adapter

Apache Calcite提供了強大的Sql Parser,支持標準SQL,并支持擴展。另外,由于Calcite的底層優化器是基于關系代數的,前端語言可以是SQL也可以是其他語言,比如Pig等,只需要通過Calcite的接口解析成抽象語法樹即可。目前有很多項目基于Apache Calcite做SQL解析、查詢優化、數據虛擬化/數據聯邦、SQL重寫等。

 

查詢優化

查詢優化是Apache Calcite框架中的主要模塊之一。首先,什么是查詢優化呢?對任意一個查詢,我們可以通過不同的算法對查詢進行重寫,得到一個語義等價的查詢。那么查詢優化就是在所有語義等價的查詢中,找到最優的查詢,并完成重寫。

以下面的查詢為例:

SELECT * FROM fact 
WHERE event_date BEWEEN ? AND ?

最粗暴的方式,就是全表掃描,然后做過濾。當然,我們可以利用屬性event_date的索引,把掃全表再過濾,變成成一個索引查詢。很明顯,第二個查詢效率要高很多。

Optimization: use index

剛才提到,查詢優化就是在所有語義等價的查詢中,找到最優的查詢。判斷一個查詢的優劣,本質就是在保證記過正確的前提下,降低成本。

優化這部分,后面單獨寫一篇文章來展開討論,這里先不展開討論。

物化視圖

在大規模數據查詢中,物化視圖是加速查詢的核武器。

很多Calcite Adapters和基于Calcite的項目都支持物化視圖。例如:Cassadra就允許用戶在現有表的基礎上定義物化視圖。通過將物化視圖注冊到Calcite中,Calcite優化器能夠對原有查詢進行重寫,把對原表的查詢改寫成對物化視圖的查詢。

舉一個經典的物化視圖實現查詢加速的例子,它按部門、性別統計出相應的員工數量和工資總額:

CREATE MATERIALIZED VIEW emp_summary AS
SELECT deptno, gender, COUNT(*) AS c, SUM(salary) AS s
FROM emp
GROUP BY deptno, gender;

物化視圖本質上也是數據表,所以你可以直接查詢它,比如查詢男員工人數大于 20個的部門:

SELECT deptno FROM emp_summary
WHERE gender = ‘M’ AND c > 20;

更重要的是,優化器可以對查詢改寫,將對原表的查詢,改寫成對物化視圖的查詢。由于物化視圖數據量比原表少,一般存在緩存或內存中,處理的數據更接近結果,所以查詢速度會大大加快。

 

比如下面這個對員工表(emp)的查詢(女性的平均工資):

SELECT deptno, AVG(salary) AS average_sal
FROM emp WHERE gender = 'F'
GROUP BY deptno;

通過Calcite優化器,SQL被改寫成查詢物化視圖(emp_summary):

SELECT deptno, s / c AS average_sal
FROM emp_summary WHERE gender = 'F'
GROUP BY deptno;

我們可以看到,多數值的平均運算,即先累加再除法轉化成了單個除法。

快速Demo

這里給一個Demo,讓大家樹下下Calcite的使用方式。一般來說,在Calcite中SQL的執行分為下面幾步:

  1. SQL解析
  2. 語法校驗
  3. 語義分析
  4. 優化
  5. 執行

以這個SQL作為原始SQL:

select u.id as user_id, u.name as user_name, j.company as user_company, u.age as user_age
from users u join jobs j on u.name = j.name
where u.age > 30 and j.id > 10
order by user_id

使用Calcite做SQL解析

SQL解析階段,Calcite對SQL做詞法分析,并轉換成抽象語法樹(AST),在Calcite中使用SqlNode來表示:

SQL Parse Phase

語法校驗

因為Calcite沒有物理存儲的元信息,需要注冊,這里通過下面的代碼,簡單注冊了兩張表:

 

有了元數據信息后,就可以做語法校驗了,包括表、字段、函數存在性檢查,函數入參出參類型校驗,字段類型校驗等:

 

語義分析

語義分析階段,Calcite會將AST轉換成關系表達式,即RelNode,可以理解成最開始的邏輯執行計劃:

 

打印出分析后的邏輯執行計劃:

 

優化

對語義分析生成的邏輯執行計劃進行優化:

 

 

輸出優化后的邏輯執行計劃:

優化后的邏輯執行計劃

可以發現,原來的執行計劃是先join后過濾,而優化后,過濾條件被下推到了TableScan之后。

 

總結

Apache Calcite是十分強大的開源動態數據管理系統,舍棄傳統數據庫系統的數據存儲、元數據倉儲、數據處理算法,專注于對異構存、算引擎提供SQL解析、優化,瞄準了海量數據背景下,單數據引擎(one size fits all)無法滿足需求,異構存儲、異構計算成為趨勢,提供了“one plan fits all”的解決方案。目前有很多開源項目在使用,國內外大廠也都在使用。

后續會推出更多文章,深入理解Calcite的原理,以及在目前主流的項目中,Calcite的定位和解決的問題。

文中demo代碼:
https://gist.github.com/yuanyeex/c127c20d02c082646556847e74b4cc60

分享到:
標簽:Apache Calcite
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定