全部產品
Search
文件中心

Elasticsearch:使用方法

更新時間:Oct 22, 2024

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欄位僅支援數實值型別,不支援字串類型。

操作步驟

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 在左側導覽列,單擊Dev Tools
  3. Console中執行如下命令,開啟外掛程式配置。

    PUT _cluster/settings
    {
      "transient": {
        "aliyun.sql.enabled": true
      }
    }
  4. 寫入資料。

    說明

    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"}
  5. 執行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"
        ]
      ]
    }