メインコンテンツへスキップ
Elasticsearch と ClickHouse はどちらも幅広いデータ型をサポートしていますが、その基盤となるストレージやクエリのモデルは根本的に異なります。このセクションでは、一般的に使われる Elasticsearch のフィールド型を、対応するものがある場合は ClickHouse の同等の型に対応付け、移行の判断に役立つ補足情報も提供します。対応する型が存在しない場合は、代替案や補足事項をコメントに記載しています。

注意事項

  • 配列: Elasticsearch では、すべてのフィールドがネイティブで配列をサポートしています。ClickHouse では、配列を明示的に定義する必要があります (例: Array(String)) 。一方で、特定の位置の要素にアクセスしてクエリできるという利点があり、たとえば an_array[1] のように扱えます。
  • マルチフィールド: Elasticsearch では、同じフィールドを複数の方法で索引化 できます (例: textkeyword の両方) 。ClickHouse では、このパターンは個別のカラムやビューで表現する必要があります。
  • Map と JSON 型 - ClickHouse では、Map 型は resourceAttributeslogAttributes のような動的なキー・バリュー構造を表現するためによく使われます。この型では任意のキーを実行時に追加できるため、柔軟なスキーマレス インジェストが可能で、考え方としては Elasticsearch の JSON オブジェクトに近いものです。ただし、考慮すべき重要な制約があります。
    • 値の型を統一する必要がある: ClickHouse の Map カラムでは、値の型を一貫させる必要があります (例: Map(String, String)) 。異なる型の値は、型変換なしではサポートされません。
    • 性能上のコスト: Map の任意のキーにアクセスするには、マップ全体をメモリに読み込む必要があるため、性能面で不利になる場合があります。
    • サブカラムがない: JSON とは異なり、Map のキーは真のサブカラムとして表現されないため、ClickHouse での効率的な索引化、圧縮、クエリに制約があります。
    こうした制約があるため、ClickStack は Map から、ClickHouse の強化された JSON 型への移行を進めています。JSON 型は、Map の多くの欠点を解消します。
    • 真の列指向ストレージ: 各 JSON パスはサブカラムとして保存されるため、効率的な圧縮、フィルタリング、ベクトル化クエリ実行が可能です。
    • 異種型のサポート: 異なるデータ型 (例: 整数、文字列、配列) を、型変換や型の統一なしで同じパス配下に共存させることができます。
    • ファイルシステムのスケーラビリティ: 動的キー (max_dynamic_paths) および型 (max_dynamic_types) に対する内部制限により、キー集合のカーディナリティが高い場合でも、ディスク上のカラムファイルの爆発的な増加を防げます。
    • 高密度な格納: null や欠損値はスパースに格納されるため、不要なオーバーヘッドを避けられます。 JSON 型は、特にオブザーバビリティ ワークロードに適しており、スキーマレス インジェストの柔軟性と ClickHouse ネイティブ型の性能およびスケーラビリティを両立します。そのため、動的な属性フィールドにおける Map の理想的な置き換えとなります。 JSON 型の詳細については、JSON ガイド および “How we built a new powerful JSON data type for ClickHouse” を参照することをおすすめします。
最終更新日 2026年7月2日