aliyun-sql插件是一個SQL解析插件,借助該插件可以使用SQL語句查詢Elasticsearch中的數據。后續aliyun-sql插件將不再對外提供服務,您可以使用官方提供的x-pack-sql插件使用SQL語句查詢Elasticsearch中的數據。
aliyun-sql插件已不對新客戶提供服務,目前僅存量客戶可以使用,后續aliyun-sql插件將不再對外提供服務。如需使用SQL語句查詢Elasticsearch中的數據,可以使用Elastic官方提供的x-pack-sql插件,具體信息請參見sql-search-api。
前提條件
阿里云Elasticsearch實例版本為6.7.0及以上,7.10.0以下。
已安裝aliyun-sql插件。
您可在插件配置頁面查看插件的安裝情況。
注意事項
在使用aliyun-sql插件前請確保Elasticsearch集群的aliyun.sql.enabled參數設置為true,可在Kibana控制臺上進行設置,具體操作步驟請參見登錄Kibana控制臺。
您可以手動卸載aliyun-sql插件。卸載時,請先在Kibana控制臺中執行以下命令,關閉插件配置(aliyun.sql.enabled)。
PUT _cluster/settings { "persistent": { "aliyun.sql.enabled": null } }
卸載插件會觸發集群重啟。如果在卸載過程中沒有關閉插件配置,會導致重啟流程卡住。此時可執行以下命令清空歸檔配置,恢復重啟流程。
PUT _cluster/settings { "persistent": { "archived.aliyun.sql.enabled": null } }
語法介紹
aliyun-sql插件使用MySQL 5語法,支持豐富的Function及表達式,詳情請參見Function和表達式。
基本查詢
SELECT [DISTINCT] (* | expression) [[AS] alias] [, ...] FROM table_name [WHERE condition] [GROUP BY expression [, ...] [HAVING condition]] [ORDER BY expression [ ASC | DESC ] [, ...]] [LIMIT [offset, ] size]
Join查詢
SELECT expression FROM table_name JOIN table_name ON expression [WHERE condition]
重要進行Join查詢時,阿里云Elasticsearch會限制單表最大查詢數,默認為10000條數據。您可以通過設置集群動態參數max.join.size修改最大查詢數。例如,在Kibana中執行以下代碼,指定最大查詢數為20000。
PUT /_cluster/settings { "transient": { "max.join.size": 20000 } }
aliyun-sql插件的Join查詢是指Inner Join,底層通過Merge Join實現。使用Join查詢時,需要確保Join字段隨著Elasticsearch文檔ID遞增或遞減。Join字段僅支持數值類型,不支持字符串類型。
操作步驟
- 登錄目標阿里云Elasticsearch實例的Kibana控制臺,根據頁面提示進入Kibana主頁。登錄Kibana控制臺的具體操作,請參見登錄Kibana控制臺。說明 本文以阿里云Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際界面為準。
- 在左側導航欄,單擊Dev Tools。
在Console中執行如下命令,開啟插件配置。
PUT _cluster/settings { "transient": { "aliyun.sql.enabled": true } }
寫入數據。
說明aliyun-sql只支持查詢類請求,不支持寫入類請求,因此以下示例通過bulk寫入數據。
學生信息數據
PUT stuinfo/_doc/_bulk?refresh {"index":{"_id":"1"}} {"id":572553,"name":"xiaoming","age":"22","addr":"addr1"} {"index":{"_id":"2"}} {"id":572554,"name":"xiaowang","age":"23","addr":"addr2"} {"index":{"_id":"3"}} {"id":572555,"name":"xiaoliu","age":"21","addr":"addr3"}
學生排名數據
PUT sturank/_doc/_bulk?refresh {"index":{"_id":"1"}} {"id":572553,"score":"90","sorder":"5"} {"index":{"_id":"2"}} {"id":572554,"score":"92","sorder":"3"} {"index":{"_id":"3"}} {"id":572555,"score":"86","sorder":"10"}
執行SQL查詢語句。
使用Join查詢學生名稱和排名。
POST /_alisql { "query":"select stuinfo.name,sturank.sorder from stuinfo join sturank on stuinfo.id=sturank.id" }
執行成功后,aliyun-sql將返回table信息。columns中包含列名和類型,rows中包含行數據。
{ "columns" : [ { "name" : "name", "type" : "text" }, { "name" : "sorder", "type" : "text" } ], "rows" : [ [ "xiaoming", "5" ], [ "xiaowang", "3" ], [ "xiaoliu", "10" ] ] }