Knoldus Inc.
3分鐘閱讀
嘿那里,作為一個技術人員有時我們必須編寫數據庫的查詢,看起來不錯,但我們不知道我們寫的查詢是句法正確的。所以在這個博客中,我們在Apache Calcite的幫助下使用測試用例來解決數據庫查詢并測試它。所以任何時候都不會浪費,讓我們討論Apache Calcite以及如何使用它來解析數據庫查詢。
介紹
Apache Calcite是一個動態數據管理框架。它甚至包含許多組成典型數據庫管理系統的部分。但是它省略了一些關鍵功能:數據存儲,處理數據的算法以及用于存儲元數據的存儲庫。
什么是Apache Calcite?
- SQL解析器
- SQL驗證
- 查詢優化器
- SQL生成器
您應該了解有關Apache Calcite的一些導入事項
- Calcite不會存儲和處理數據。
- 這是在應用程序之間以及一個或多個數據存儲位置和數據處理引擎之間進行中介的絕佳選擇。
- 它也是構建數據庫的理想基礎:只需添加數據。
- Calcite不想擁有數據;它甚至沒有喜歡的數據格式。本示例使用內存中的數據集,并使用諸如groupBy之類的運算符對其進行處理,并從linq4j庫中進行聯接。
- 它還可以處理其他數據格式的數據,例如JDBC。
- Calcite使用優化器規則將JOIN和GROUP BY操作推入源數據庫。
使用Calcite的優勢:
以下功能已完成。
- 查詢解析器,驗證器和優化器。
- 支持以JSON格式讀取模型。
- 許多標準函數和聚合函數。
- 針對Linq4j和JDBC后端的JDBC查詢。
- Linq4j前端。
- SQL功能:SELECT,FROM(包括JOIN語法),WHERE,GROUP BY(包括GROUPING SETS),聚合函數(包括COUNT(DISTINCT…)和FILTER),HAVING,ORDER BY(包括NULLS FIRST / LAST),設置操作(UNION,INTERSECT,MINUS),子查詢(包括相關的子查詢),窗口聚合,LIMIT(語法為Postgres);SQL參考中的更多詳細信息
- 本地和遠程JDBC驅動程序;參見Avatica。
- 幾個適配器。
查詢執行階段
Calcite的成分
目錄-定義可在SQL查詢中訪問的元數據和命名空間SQL解析器-將有效的SQL查詢解析為抽象語法樹(AST)。SQL驗證程序-根據catalog提供的元數據驗證抽象語法樹查詢優化器-將AST轉換為邏輯計劃,進行優化邏輯計劃,并將邏輯表達式轉換為物理計劃SQL生成器—將物理計劃轉換為SQL
Calcite目錄的用法
定義可在Calcite查詢中訪問的名稱空間。
查詢優化
- 修剪未使用的字段
- 合并預測
- 將子查詢轉換為聯接
- 重新排序加入
- 下推投影
- 下推過濾器
使用Apache Calcite的項目
- Hive
- Drill
- Flink
- Phoniex
- Samza
- Storm
現在介紹如何使用Apache Calcite解析SQL查詢。
1:將此插件添加到數據庫查詢的依賴項或模塊中。
"org.apache.calcite" % "calcite-babel" % "1.21.0"
2:創建將查詢作為輸入的方法,返回SqlNode。在這種方法中,您必須提供如下配置:您可以選擇自己的分析器工廠)
val sqlParserConfig = CalciteParser
.configBuilder()
.setParserFactory(SqlBabelParserImpl.FACTORY)
.setConformance(SqlConformanceEnum.BABEL)
.build()
3:通過上面的配置(我以BABEL為例,您可以選擇自己的解析器工廠)
CalciteParser.create(sql, sqlParserConfig).parseQuery()
4: 現在,在測試案例中,只需聲明您的數據庫查詢或方法即可返回
assert(parseSql(resultedSql).isInstanceOf[SqlNode])
在其中parseSql是實際解析查詢的方法。
概述
建立SQL數據庫的框架。它已經發展了十多年。用JAVA編寫,以前稱為Optimiser。也稱為Farrago。在2013年成為Apache項目。由Hortonworks的Julian Hyde領導。
(本文由聞數起舞翻譯自Knoldus Inc.的文章《Parsing database Query with Apache Calcite》,轉載請注明出處,原文鏈接:https://medium.com/@knoldus/parsing-database-query-with-apache-calcite-8d1567de3ffa)