Перейти к основному содержанию

Поиск в ClickStack и Elastic

ClickHouse — это движок с нативной поддержкой SQL, изначально созданный для высокопроизводительных аналитических рабочих нагрузок. Elasticsearch, напротив, предоставляет SQL-подобный интерфейс, транслируя SQL в базовый DSL запросов Elasticsearch, — то есть SQL в нем не является средством первого класса, а функциональный паритет ограничен. ClickHouse не только поддерживает полноценный SQL, но и расширяет его набором функций, ориентированных на обсервабилити, таких как argMax, histogram и quantileTiming, которые упрощают выполнение запросов к структурированным журналам, метрикам и трассировкам. Для простого анализа журналов и трассировок интерфейс ClickStack (HyperDX) предоставляет синтаксис в стиле Lucene для интуитивной текстовой фильтрации по запросам вида поле-значение, диапазонам, подстановочным шаблонам и другим конструкциям. Это сопоставимо с синтаксисом Lucene в Elasticsearch и элементами Kibana Query Language. Интерфейс поиска поддерживает этот знакомый синтаксис, но за кулисами преобразует его в эффективные SQL-условия WHERE, что делает работу привычной для пользователей Kibana и при этом позволяет при необходимости использовать всю мощь SQL. Это позволяет задействовать весь набор функций поиска по строкам, функций сходства и функций даты и времени в ClickHouse. Ниже мы сравним языки запросов Lucene в ClickStack и Elasticsearch.

Поисковый синтаксис ClickStack и строка запроса Elasticsearch

И ClickStack, и Elasticsearch предоставляют гибкие языки запросов для удобной фильтрации журналов и трассировок. Если строка запроса Elasticsearch тесно связана с его DSL и движком индексирования, то ClickStack поддерживает синтаксис в стиле Lucene, который под капотом переводится в ClickHouse SQL. В таблице ниже показано, как распространённые шаблоны поиска работают в обеих системах, с акцентом на сходство синтаксиса и различия в их внутреннем выполнении.

Различия между exists/missing

В отличие от Elasticsearch, где поле может полностью отсутствовать в событии и, следовательно, действительно «не существовать», в ClickHouse все столбцы должны быть определены в схеме таблицы. Если поле не передано в событии вставки:
  • Для полей Nullable будет установлено значение NULL.
  • Для полей, не допускающих NULL (по умолчанию), будет подставлено значение по умолчанию (часто это пустая строка, 0 или эквивалентное значение).
В ClickStack мы используем второй вариант, так как Nullable не рекомендуется. Это означает, что проверка того, «существует» ли поле, в смысле Elasticsearch напрямую не поддерживается. Вместо этого можно использовать field:* или field != '', чтобы проверить наличие непустого значения. Таким образом, невозможно отличить действительно отсутствующие поля от явно пустых. На практике это различие редко вызывает проблемы в сценариях обсервабилити, но о нём важно помнить при переносе запросов между системами.
Последнее изменение 3 июля 2026 г.