Elasticsearch Sql
ElasticSearch 6.3.x 버전부터 X-Pack을 통해 SQL-Like Query 기능을 제공한다. Index 에 대해서 SQL 질의를 바로 하는 것이 아니라, ElasticSearch 에 최적화된 DSL 로 translate 한 뒤 해당 DSL을 이용해 조회한다.
SELECT SQL만 가능하고, multi-index 조회 (join SQL)은 수행되지 않는다. 또한 스칼라 서브쿼리 등 조금만 복잡해져도 잘 안 됨.
Kibana와 Curl REST API 를 이용할 수 있는 것은 물론, jdbc 연결도 지원한다.
다음은 sql-cli, curl 을 이용한 조회방법이다.
테스트 데이터 입력
PUT /library/book/_bulk?refresh
{"index":{"_id": "Leviathan Wakes"}}
{"name": "Leviathan Wakes", "author": "James S.A. Corey", "release_date": "2011-06-02", "page_count": 561}
{"index":{"_id": "Hyperion"}}
{"name": "Hyperion", "author": "Dan Simmons", "release_date": "1989-05-26", "page_count": 482}
{"index":{"_id": "Dune"}}
{"name": "Dune", "author": "Frank Herbert", "release_date": "1965-06-01", "page_count": 604}
sql-cli
elasticsearch-sql-cli 실행
elasticsearch-sql-cli node7.big:9200
elasticsearch-sql-cli elastic:tmaxtmax@node7.big:9200
elasticsearch-sql-cli 종료
sql> exit;
Bye!
sql 질의
sql> SELECT * FROM library WHERE release_date < '2000-01-01';
author | name | page_count | release_date
---------------+---------------+---------------+------------------------
Dan Simmons |Hyperion |482 |1989-05-26T00:00:00.000Z
Frank Herbert |Dune |604 |1965-06-01T00:00:00.000Z
Kibana Dev Console
POST /_xpack/sql?format=txt
{
"query": "SELECT * FROM library WHERE release_date < '2000-01-01'"
}
CURL RESTful API
curl \
-u elastic:tmaxtmax \
-X POST "node7.big:9200/_xpack/sql?format=txt" \
-H 'Content-Type: application/json' \
-d'
{
"query": "SELECT * FROM library WHERE release_date < \u00272000-01-01\u0027"
}
'