Для Elasticsearch 6.5.4 и более новых версий Open Distro for Elasticsearch SQL позволяет писать запросы на SQL, а не на язык запросов Elasticsearch domain-specific language (DSL).
Пользователи, знакомые с SQL, могут использовать SQL для поиска данных в кластерах Elasticsearch.
Войдите в Kibana и, на Dev Tools страницу, отправьте запросы к _opendistro/_sql используя параметры запроса или тело запроса.
Например, выполните следующую команду, чтобы получить 50 записей из my-index индекс:
POST _opendistro/_sql{"query": "SELECT * FROM my-index LIMIT 50"}
По умолчанию результат запроса возвращается в формате JSON. Чтобы вернуть данные в формате CSV, установите format параметр в команде следующим образом:
POST _opendistro/_sql?format=csv{"query": "SELECT * FROM my-index LIMIT 50"}
Когда результат запроса возвращается в формате CSV, каждая строка соответствует документу, а каждый столбец — полю.
Например, выполните следующую команду, чтобы получить 10 записей из kibana_sample_data_flights индекс.
curl -XPOST https://localhost:9200/_opendistro/_sql -u username:password -k -d '{"query": "SELECT * FROM kibana_sample_data_flights LIMIT 10"}' -H 'Content-Type: application/json'
localhost указывает адрес доступа к кластеру. username and password указывают имя пользователя и пароль для доступа к кластеру в режиме безопасности соответственно.
Open Distro for Elasticsearch поддерживает следующие операции SQL: statements, conditions, aggregations, include and exclude fields, common functions, joins и show.
Statement | Пример |
|---|---|
Select | SELECT * FROM my-index |
Delete | DELETE FROM my-index WHERE _id=1 |
Where | SELECT * FROM my-index WHERE ['field']='value' |
Order by | SELECT * FROM my-index ORDER BY _id asc |
Group by | SELECT * FROM my-index GROUP BY range(age, 20,30,39) |
Limit | SELECT * FROM my-index LIMIT 50 (default is 200) |
Union | SELECT * FROM my-index1 UNION SELECT * FROM my-index2 |
Minus | SELECT * FROM my-index1 MINUS SELECT * FROM my-index2 |
Как и любой сложный запрос, большие UNION и MINUS могут перегрузить или даже вызвать сбой вашего кластера.
Condition | Пример |
|---|---|
Like | SELECT * FROM my-index WHERE name LIKE 'j%' |
And | SELECT * FROM my-index WHERE name LIKE 'j%' AND age > 21 |
Or | SELECT * FROM my-index WHERE name LIKE 'j%' OR age > 21 |
Count distinct | SELECT count(distinct age) FROM my-index |
In | SELECT * FROM my-index WHERE name IN ('Bob', 'David') |
Not | SELECT * FROM my-index WHERE name NOT IN ('Bob') |
Between | SELECT * FROM my-index WHERE age BETWEEN 20 AND 30 |
Aliases | SELECT avg(age) AS Average_Age FROM my-index |
Date | SELECT * FROM my-index WHERE birthday='1990-11-15' |
Null | SELECT * FROM my-index WHERE name IS NULL |
Aggregation | Пример |
|---|---|
avg() | SELECT avg(age) FROM my-index |
count() | SELECT count(age) FROM my-index |
max() | SELECT max(age) AS Highest_Age FROM my-index |
min() | SELECT min(age) AS Lowest_Age FROM my-index |
sum() | SELECT sum(age) AS Age_Sum FROM my-index |
Pattern | Пример |
|---|---|
include() | SELECT include('a*'), exclude('age') FROM my-index |
exclude() | SELECT exclude('*name') FROM my-index |
Функция | Пример |
|---|---|
floor | SELECT floor(number) AS Rounded_Down FROM my-index |
trim | SELECT trim(name) FROM my-index |
log | SELECT log(number) FROM my-index |
log10 | SELECT log10(number) FROM my-index |
substring | SELECT substring(name, 2,5) FROM my-index |
round | SELECT round(number) FROM my-index |
sqrt | SELECT sqrt(number) FROM my-index |
concat_ws | SELECT concat_ws(' ', age, height) AS combined FROM my-index |
/ | SELECT number / 100 FROM my-index |
% | SELECT number % 100 FROM my-index |
date_format | SELECT date_format(date, 'Y') FROM my-index |
Необходимо включить fielddata в отображении документа, чтобы большинство строковых функций работали корректно.
Join | Пример |
|---|---|
Inner join | SELECT s.firstname, s.lastname, s.gender, sc.name FROM student s JOIN school sc ON sc.name = s.school_name WHERE s.age > 20 |
Left outer join | SELECT s.firstname, s.lastname, s.gender, sc.name FROM student s LEFT JOIN school sc ON sc.name = s.school_name |
Cross join | SELECT s.firstname, s.lastname, s.gender, sc.name FROM student s CROSS JOIN school sc |
Подробнее о ограничениях смотрите Соединения.
Команды Show отображают индексы и отображения, соответствующие шаблону индекса. Вы можете использовать * or % для шаблонов.
Show | Пример |
|---|---|
Show tables like | SHOW TABLES LIKE logs-* |
Open Distro for Elasticsearch SQL поддерживает inner joins, left outer joins и cross joins. У соединений есть следующие ограничения:
WHERE (a.type1 > 3 OR a.type1 < 0) AND (b.type2 > 4 OR b.type2 < -1)
Следующее утверждение не будет работать:
WHERE (a.type1 > 3 OR b.type2 < 0) AND (a.type1 > 4 OR b.type2 < -1)
Драйвер Java Database Connectivity (JDBC) позволяет интегрировать Open Distro for Elasticsearch с вашими приложениями бизнес‑аналитики (BI).
Подробнее о том, как загрузить и использовать файлы JAR, см. GitHub Repositories.