相比于 Elasticsearch,關系型資料庫的 SQL 查詢用的人更多,大家也習慣用 SQL 進行資料的增删改查操作。
加上 Elasticsearch DSL 多少有一定的學習成本,是以在 Elasticsearch 早期 1.X——6.X版本發展過程中,聽到最多聲音是:
Elasticsearch 什麼時候支援 SQL?
類關系型資料庫中的 SQL 如何轉換成 Elasticsearch 中的 DSL?
國内的 NLPChina 團隊2015年左右開源的 elasticsearch-sql 插件非常火,star 達 6.2K。但跟進到7.9.3 版本之後,elasticsearch-sql 已被 DEPRECATED(原因未知)。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iZkhjM4ADOxY2MmRjN2ITOiVTZ0EmNlBDZ0IjYilTY48CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
位址:
https://github.com/NLPchina/elasticsearch-sql/實際上:Elasticsearch 在2018年6月15日前後釋出的 6.3 版本中已支援 SQL。
可以看一下 SQL 功能剛釋出後我寫的文章:
搶先 | 支援sql的Elasticsearch6.3全景概覽
3.2 Elastic 官方文檔介紹 Elasticsearch SQL
“Elasticsearch 具有高速、靈活、可擴充等特點,能夠滿足您的資料需求,而且其還可以使用 SQL。使用傳統資料庫句法來解鎖非傳統性能,例如在 PB 量級的資料中進行全文本搜尋,并實時獲得結果。”
https://www.elastic.co/cn/what-is/elasticsearch-sql3.3 Elasticsearch SQL 使用概覽
有圖有真相。
截圖中的 SQL 和 Mysql中的用法幾乎完全一緻。
SELECT * FROM library ORDER BY page_count DESC
3.4 Elasticsearch SQL 的優點
極易上手
類關系型資料庫 SQL 查詢,會 SQL 操作 Elasticsearch 不費勁。
無需第三方依賴
高版本7.X已支援(7.1+版本 xpack基礎功能免費),早期版本還需要安裝 xpack 插件,現在都不需要。
4、Elasticsearch SQL 選型還需要考慮哪些因素?
4.1 Elasticsearch SQL 尚存在不足
多表關聯支援不足
Elasticsearch 無法完美無縫的實作 Mysql 的多表關聯(Join)功能, 原因:受限于 Elasticsearch 資料模型(寬表、Nested類型、Join類型)。
嵌套 select 支援不足
舉例:如下 MySQL 查詢語句在 Elasticsearch 執行的話,結果可能達不到預期。
SELECT COUNT(subquery.item_id) total
FROM (
SELECT item_id, COUNT(item_id) nofbs, CAST(timestamp AS DATE) date, user_email
FROM select_download_user
GROUP BY item_id, CAST(timestamp AS DATE), user_email
) subquery;
https://www.elastic.co/cn/blog/an-introduction-to-elasticsearch-sql-with-practical-examples-part-2 https://stackoverflow.com/questions/67166581/elasticsearch-sql-count-function-does-not-work-with-subquery-on-elasticsearch4.2 Elasticsearch JDBC / ODBC 仍未免費
盡管 REST 方式可以使用,但絕大多數Java、Python 用戶端使用者更習慣使用 JDBC 方式連接配接 Elasticsearch。
參見官方文檔的描述,JDBC 和 ODBC 都需要白金版付費購買 Liscene 授權才可以使用。
4.3 Elasticsearch SQL 國内公司使用現狀調查
正所謂:“他山之石,可以攻玉”、“知己知彼、百戰百勝”。
如下是累計近 2000人 + 的 Elasticsearch 學習微信群(共 181 人參與)的随機調研結果,僅供選型參考。
問卷題目:“Elasticsearch 6.3 以後推出的SQL,你的企業場景使用了嗎?”
PS:問卷題目并不嚴謹(如:選項内容比較随意,單選并不合理),但群衆的眼光是雪亮的,問卷結果會給選型提供非常有價值的參考。
5、小結
關注銘毅天下公衆号的讀者都會發現,我們一般會把官方文檔、官方網站或者官方部落格的位址、源碼截圖放到最醒目的位置。
目的是想知會廣大讀者:官方文檔是官方角度的權威介紹,相比其他論壇、部落格要權威。也希望大家養成閱讀官方文檔的習慣。
聲明一下,本文并沒有說:不讓使用 Elasticsearch SQL,請不要過分解讀。
本文從選型視角,列舉了Elasticsearch SQL 發展曆程、優點、缺點、180 + 企業使用調研,目的是解答文章開頭的線上問題。如果能讓廣大讀者的 Elasticsearch SQL 選型少走不必要的彎路,我會非常欣慰。
歡迎大家留言說一下自己 Elasticsearch SQL 使用情況。
不當之處,歡迎指正交流。