360開源 Quicksql:更簡單,更安全,更快速的跨數據源統一SQL查詢引擎

引言

話說天下大勢,合久必分, 分久必合。 ——羅貫中大大

SQL的世界也是如此。最初ANSI僅僅對SQL提出了一種標準,於是各個數據存儲廠商都自己定製了專門的SQL語法。也因爲此,在工作中,我們常常會遇到這樣的場景:

小明,剛剛參加工作,第一個任務便是查詢從沒接觸過的Hive中的數據。前輩說,不要擔心,你直接用查MySQL的SQL語句查詢就好。小明顫顫巍巍寫下了第一個SQL查詢語句,確實能跑。但是隨着業務複雜度增加,SQL的複雜度也隨之提升,他漸漸發現Hive和MySQL的SQL語法並不完全一樣,平時查詢需要區別對待,不停切換。他想知道,有沒有一種SQL可以支持業內主流的數據存儲引擎?

小紅,參加工作2年。已經學會使用MySQL、Hive、Oracle等不同存儲引擎的SQL語句查詢數據。這時,上司說要引入Elasticsearch。她發現這個數據存儲引擎並不能通過SQL查詢,而是需要編寫複雜的json查詢。漸漸地,她發現類似的存儲引擎越來越多,Druid、Redis、Mongo、HBase等,並且每一種都需要採取不同的方式查詢數據,分析一個業務場景所需要切換的查詢方式也越來越多。她想知道,可不可以使用SQL語言查詢No-SQL乃至New-SQL的數據存儲?

所以嘞,Quicksql(簡稱QSQL)誕生啦!

Quicksql是什麼

Quicksql是一個更簡單,更安全,更快速的跨數據源統一SQL查詢引擎。它幫助用戶減少在使用不同數據引擎時需要的學習成本和切換成本,忽略不同數據引擎底層存儲和數據查詢方式的差異,使用戶僅需要關注查詢的業務邏輯和數據本身。

Quicksql能做什麼?

  1. 統一SQL語法:提供統一SQL語言,支持不同結構化數據存儲查詢,方便用戶學習。
  2. 多數據存儲引擎查詢:提供SQL查詢No-SQL\New-SQL等數據存儲引擎,方便使用。
  3. 數據聯邦:支持跨數據源查詢,例如MySQL join Elasticsearch union Hive。
  4. 方便擴展:分層靈活,Quicksql可以很方便的擴展多種數據源(Druid、Mongo等),擴展多種計算引擎(Spark、Flink等)。

如何使用Quicksql?

Quicksql現在提供三種對外服務方式:命令行,API和JDBC連接。

  • 命令行: 根據Quicksql的Github主頁相關說明,用戶可以很容易的進行Quicksql的部署。部署完成後,Quicksql提供了腳本模式,支持使用類似 “qsql -e [SQL]” 這樣的命令進行數據查詢。
  • API: 爲方便開發者用戶使用,Quicksql提供了一套API方便開發程序調用。與Spark、Storm等現有的引擎類似,Quicksql API在使用中需要先定義環境參數(任務名,執行引擎,查詢最大返回條數等),然後進行SQL的查詢和任務的提交。關於API的用法詳情可以參考Quicksql example。
  • JDBC: Quicksql還實現了JDBC的接口,用戶可以像連接MySQL一樣通過JDBC方式連接Quicksql進行數據查詢。

Quicksql是怎麼實現的?

Quicksql基於Apache Calcite提供的多數據引擎SQL語義適配功能,基於ANSI發佈的SQL 2003標準和用戶的使用習慣上,重新定義並擴展部分SQL語義,對用戶提供了統一的SQL語言。在內部,Quicksql會根據用戶所查詢的SQL語句,在原語義的基礎上,進行解析轉化等操作,最終根據數據引擎特性將用戶的查詢語義完整的轉化爲數據引擎可執行的SQL語句。Quicksql還擁有智能選擇功能,可以根據該SQL的引擎特性決定最快速最高效的數據查詢方式,例如,當Quicksql分析得出查詢語句是一個混合查詢,它就會自動選擇啓動集羣模式(默認是Spark)進行數據處理。

想知道更多?這裏就是開源主頁啦: https://github.com/Qihoo360/Quicksql

有問題還可加入QQ羣和360的技術人員一起交流。QQ羣號:932439028

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章