天天看點

且慢!聽說你線上環境準備選型 Elasticsearch SQL 了?

相比于 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(原因未知)。

且慢!聽說你線上環境準備選型 Elasticsearch SQL 了?

位址:

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-sql

3.3 Elasticsearch SQL 使用概覽

有圖有真相。

且慢!聽說你線上環境準備選型 Elasticsearch SQL 了?
且慢!聽說你線上環境準備選型 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-elasticsearch

4.2 Elasticsearch JDBC / ODBC 仍未免費

盡管 REST 方式可以使用,但絕大多數Java、Python 用戶端使用者更習慣使用 JDBC 方式連接配接 Elasticsearch。

參見官方文檔的描述,JDBC 和 ODBC 都需要白金版付費購買 Liscene 授權才可以使用。

且慢!聽說你線上環境準備選型 Elasticsearch SQL 了?
https://www.elastic.co/cn/downloads/jdbc-client https://www.elastic.co/cn/subscriptions

4.3 Elasticsearch SQL 國内公司使用現狀調查

正所謂:“他山之石,可以攻玉”、“知己知彼、百戰百勝”。

如下是累計近 2000人 + 的 Elasticsearch 學習微信群(共 181 人參與)的随機調研結果,僅供選型參考。

問卷題目:“Elasticsearch 6.3 以後推出的SQL,你的企業場景使用了嗎?”

PS:問卷題目并不嚴謹(如:選項内容比較随意,單選并不合理),但群衆的眼光是雪亮的,問卷結果會給選型提供非常有價值的參考。

5、小結

關注銘毅天下公衆号的讀者都會發現,我們一般會把官方文檔、官方網站或者官方部落格的位址、源碼截圖放到最醒目的位置。

目的是想知會廣大讀者:官方文檔是官方角度的權威介紹,相比其他論壇、部落格要權威。也希望大家養成閱讀官方文檔的習慣。

聲明一下,本文并沒有說:不讓使用 Elasticsearch SQL,請不要過分解讀。

本文從選型視角,列舉了Elasticsearch SQL 發展曆程、優點、缺點、180 + 企業使用調研,目的是解答文章開頭的線上問題。如果能讓廣大讀者的 Elasticsearch SQL 選型少走不必要的彎路,我會非常欣慰。

歡迎大家留言說一下自己 Elasticsearch SQL 使用情況。

不當之處,歡迎指正交流。