ClickStack と Elastic での検索
argMax、histogram、quantileTiming のようなオブザーバビリティ向けのさまざまな関数も備えており、構造化されたログ、メトリクス、トレースに対するクエリを簡潔に記述できます。
シンプルなログやトレースの調査には、ClickStack UI (HyperDX) が、フィールドと値によるクエリ、範囲指定、ワイルドカードなどに対応した、直感的なテキストベースの絞り込みを行える Lucene スタイルの構文 を提供します。これは、Elasticsearch の Lucene 構文 や、Kibana Query Language の一部に相当します。
この検索インターフェイスは、こうした馴染みのある構文をサポートしつつ、内部ではそれを効率的な SQL の WHERE 句に変換します。そのため、Kibana ユーザーにも親しみやすく、必要に応じて SQL の強力な機能も活用できます。これにより、ClickHouse の 文字列検索関数、類似度関数、日時関数 を幅広く活用できます。
以下では、ClickStack と Elasticsearch の Lucene クエリ言語を比較します。
ClickStack 検索構文と Elasticsearch query string の比較
Exists/missing の違い
insert イベントでフィールドが指定されていない場合は、次のようになります。
Nullableフィールドでは、NULLが設定されます。- 非 Nullable フィールド (デフォルト) では、デフォルト値 (多くの場合は空文字列、0、またはそれに相当する値) が設定されます。
Nullable は推奨されていないため、後者を使用します。
この挙動により、Elasticsearch の意味でフィールドが「存在する」かどうかを確認することは、直接的にはサポートされていません。
代わりに、空でない値があるかどうかは、field:* または field != '' を使って確認できます。そのため、実際に欠落しているフィールドと、明示的に空のフィールドを区別することはできません。
実運用では、この違いがオブザーバビリティのユースケースで問題になることはほとんどありませんが、システム間でクエリを移行する際には、この点を意識しておくことが重要です。