Как можно объединить два Dataviews в Elastic 8.17.3 с помощью LOOKUP JOIN в ES|QL?
У меня есть Dataview `k8s-ss-*` в Kibana space 1 и временный Dataview `akamai` в Kibana space 2. Я хочу объединить их по общему полю `client.ip` из `k8s-ss-*` и `Cliip` из `akamai`, но при выполнении запроса получаю ошибку парсинга. Какой правильный синтаксис или подход для выполнения этого объединения через Dataviews в разных Kibana spaces?
Как объединить два dataview в Elastic 8.17.3 с помощью LOOKUP JOIN в ES|QL?
У меня есть dataview k8s-ss-* в пространстве Kibana 1 и временный dataview akamai в пространстве Kibana 2. Я хочу соединить их по общему полю client.ip из k8s-ss-* и Cliip из akamai, но при выполнении запроса:
FROM k8s-ss-*
| LOOKUP JOIN akamai ON k8s-ss-*.client.ip = akamai.Cliip
получаю ошибку парсинга. Какой правильный синтаксис или подход, чтобы выполнить такой JOIN между dataviews, находящимися в разных пространствах Kibana?
Проблема с парсингом возникла по двум причинам:
- Ссылки на поля – в ES|QL имена полей не префиксируются именем индекса/дата‑вью.
- Синтаксис кросс‑пространственного поиска – целевой дата‑вью нужно заключить в кавычки, а если он находится в другом пространстве, то добавить префикс‑ID этого пространства.
Правильный синтаксис
FROM dataview "k8s-ss-*" AS k
| LOOKUP JOIN dataview "space2:akamai" AS a
ON k.client.ip = a.Cliip
или без ключевого слова dataview (полностью эквивалентно):
FROM "k8s-ss-*" AS k
| LOOKUP JOIN "space2:akamai" AS a
ON k.client.ip = a.Cliip
Важно:
k.client.ipиa.Cliip– это только имена полей.- Второй аргумент (
space2:akamai) – полное имя дата‑вью в другом пространстве.- Алиасы (
AS k,AS a) опциональны, но делают запрос более читаемым.
Почему исходный запрос не сработал
k8s-ss-*.client.ipвоспринимается как недопустимый путь к полю.akamaiбез префикса пространства считается дата‑вью в текущем пространстве, поэтому парсер ожидает иной синтаксис.
Как включить кросс‑пространственные соединения
- Кросс‑пространственный поиск должен быть включён в Kibana (
kibana.crossSpaceSearch.enabled: true). - Пользователь, выполняющий запрос, должен иметь права чтения в обоих пространствах.
- Если хочется явно указать пространство источника, можно написать
FROM "space1:k8s-ss-*", но это не требуется при использовании дата‑вью.
Полный пример с алиасами и комментариями
/* Дата‑вью источника из пространства 1 */
FROM dataview "k8s-ss-*" AS k
/* Дата‑вью для lookup из пространства 2 */
| LOOKUP JOIN dataview "space2:akamai" AS a
/* Соединяем по общему полю IP */
ON k.client.ip = a.Cliip
Запустив этот запрос в Dev Tools > ES|QL Kibana, вы получите объединённые строки, где IP из k8s-ss-* совпадает со значением Cliip в akamai.
Итоги
- В
ON‑условии используйте только имена полей. - Указывайте пространство целевого дата‑вью (
space2:akamai). - Убедитесь, что кросс‑пространственный поиск включён и у пользователя есть права доступа.
- Алиасы (
AS k,AS a) не обязательны, но повышают читаемость.
С этими поправками соединение между дата‑вью в разных Kibana‑пространствах будет работать корректно в Elastic 8.17.3.