Для кластеров OpenSearch Open Distro for OpenSearch SQL позволяет писать запросы на SQL вместо языка запросов OpenSearch (DSL).
Пользователи, знакомые с SQL, могут использовать SQL для поиска данных в кластерах OpenSearch.
Войдите в OpenSearch Dashboards и, на Dev Tools странице, отправляйте запросы, используя параметры запросов или тело запроса к _plugins/_sql.
Например, выполните следующую команду, чтобы получить 50 записей из my-index индекс:
1234POST _plugins/_sql{"query": "SELECT * FROM my-index LIMIT 50"}
По умолчанию результат запроса возвращается в формате JSON. Чтобы вернуть данные в формате CSV, установите формат параметр в команде следующим образом:
1234POST _plugins/_sql?format=csv{"query": "SELECT * FROM my-index LIMIT 50"}
Когда результат запроса возвращается в формате CSV, каждая строка соответствует документу, а каждый столбец соответствует полю.
Например, выполните следующую команду, чтобы получить 10 записей из opensearch_dashboards_sample_data_flights индекс.
curl -XPOST https://localhost:9200/_opendistro/_sql -u username:password -k -d '{"query": "SELECT * FROM opensearch_dashboards_sample_data_flights LIMIT 10"}' -H 'Content-Type: application/json'
localhost указывает адрес доступа к кластеру. имя пользователя и пароль указывают имя пользователя и пароль для доступа к кластеру в режиме безопасности соответственно.
Open Distro for Elasticsearch поддерживает следующие операции SQL: операторы, условия, агрегаты, включение и исключение полей, общие функции, соединения и отображение.
Оператор | Пример |
|---|---|
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 |
Минус | SELECT * FROM my-index1 MINUS SELECT * FROM my-index2 |
Как и любой сложный запрос, большие операторы UNION и MINUS могут перегрузить или даже привести к сбою вашего кластера
Условие | Пример |
|---|---|
LIKE | SELECT * FROM my-index WHERE name LIKE 'j%' |
И | SELECT * FROM my-index WHERE name LIKE 'j%' AND age > 21 |
ИЛИ | SELECT * FROM my-index WHERE name LIKE 'j%' OR age > 21 |
Количество уникальных | SELECT count(distinct age) FROM my-index |
IN | SELECT * FROM my-index WHERE name IN ('Bob', 'David') |
Не | SELECT * FROM my-index WHERE name NOT IN ('Bob') |
Между | SELECT * FROM my-index WHERE age BETWEEN 20 AND 30 |
Псевдонимы | SELECT avg(age) AS Average_Age FROM my-index |
Дата | SELECT * FROM my-index WHERE birthday='1990-11-15' |
NULL | SELECT * FROM my-index WHERE name IS NULL |
Агрегация | Пример |
|---|---|
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 |
Шаблон | Пример |
|---|---|
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 в документном сопоставлении, чтобы большинство строковых функций работали правильно.
Соединение | Пример |
|---|---|
Внутреннее соединение | 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 |
Левое внешнее соединение | SELECT s.firstname, s.lastname, s.gender, sc.name FROM student s LEFT JOIN school sc ON sc.name = s.school_name |
Кросс‑соединение | SELECT s.firstname, s.lastname, s.gender, sc.name FROM student s CROSS JOIN school sc |
Для получения подробной информации об ограничениях смотрите Соединения.
Команды Show отображают индексы и сопоставления, которые соответствуют шаблону индекса. Вы можете использовать * или % как подстановочный символ.
Показать | Пример |
|---|---|
Показать таблицы, похожие на | SHOW TABLES LIKE logs-* |
Open Distro for OpenSearch 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 OpenSearch с вашими приложениями бизнес‑аналитики (BI).
Подробную информацию о том, как загружать и использовать JAR‑файлы, см. GitHub Репозитории.