メインコンテンツへスキップ
ClickHouse Cloud で Memoryテーブルエンジンを使用する場合、データはすべてのノード間でレプリカされません (これは仕様です) 。すべてのクエリが同じノードにルーティングされ、Memoryテーブルエンジンが期待どおりに動作するようにするには、次のいずれかを行います。
  • すべての操作を同じセッションで実行する
  • clickhouse-client など、TCP またはネイティブインターフェイス (スティッキー接続をサポート) を使用するクライアントを使う
Memoryエンジンは、非圧縮のデータをRAMに格納します。データは、読み取り時に受信したときとまったく同じ形式で格納されます。つまり、このテーブルからの読み取りは実質的にコストがかかりません。 同時実行のデータアクセスは同期されます。ロック時間は短く、読み取り操作と書き込み操作は互いにブロックしません。 索引はサポートされていません。読み取りは並列化されます。 単純なクエリでは、非常に高いスループット (10 GB/秒超) を実現できます。これは、ディスクからの読み取りや、データの展開、デシリアライズが不要なためです。 (多くの場合、MergeTreeエンジンのスループットもほぼ同程度に高いことは付記しておきます。) サーバーを再起動すると、テーブル内のデータは失われ、テーブルは空になります。 通常、このテーブルエンジンを使う妥当な理由はあまりありません。ただし、テストや、比較的少ない行数 (約100,000,000行まで) に対して最大速度が必要なタスクには使用できます。 Memoryエンジンは、システムによって、外部クエリデータ用の一時テーブル (「クエリ処理用の外部データ」の節を参照) や、GLOBAL IN の実装 (「IN 演算子」の節を参照) に使用されます。 Memoryエンジンのテーブルサイズを制限するために上限と下限を指定でき、これにより実質的に循環バッファとして動作させることができます (エンジンパラメータ を参照) 。

エンジンパラメータ

  • min_bytes_to_keep — メモリテーブルにサイズ上限が設定されている場合に保持する最小バイト数。
    • デフォルト値: 0
    • max_bytes_to_keep が必要
  • max_bytes_to_keep — メモリテーブル内で保持する最大バイト数。各 insert 時に最も古い行が削除されます (つまり循環バッファ) 。大きな ブロック を追加する際、削除対象となる最も古い行のまとまりを削除すると min_bytes_to_keep の制限を下回る場合、最大バイト数は指定した上限を超えることがあります。
    • デフォルト値: 0
  • min_rows_to_keep — メモリテーブルにサイズ上限が設定されている場合に保持する最小行数。
    • デフォルト値: 0
    • max_rows_to_keep が必要
  • max_rows_to_keep — メモリテーブル内で保持する最大行数。各 insert 時に最も古い行が削除されます (つまり循環バッファ) 。大きな ブロック を追加する際、削除対象となる最も古い行のまとまりを削除すると min_rows_to_keep の制限を下回る場合、最大行数は指定した上限を超えることがあります。
    • デフォルト値: 0
  • compress - メモリ内のデータを圧縮するかどうか。
    • デフォルト値: false

使用方法

設定の初期化
設定の変更
注: bytes の上限指定パラメータは同時に設定できますが、実際に適用されるのは maxmin のうち低い方の制限値です。

また、行の場合:
最終更新日 2026年7月2日