ClickHouse のテーブルパーツとは何ですか?
ClickHouse の MergeTree engine family に含まれる各テーブルのデータは、ディスク上では不変の
data parts の集合として構成されています。
これを説明するために、イギリスで売買された不動産の取引日、町、通り、価格を記録した この テーブル (UK property prices dataset をもとに調整) を使用します:
ClickHouse server が上の図に示した 4 行のサンプル insert (たとえば INSERT INTO ステートメント 経由) を処理すると、いくつかのステップが実行されます。 ① ソート: 行はテーブルのソートキー
(town, street) に従ってソートされ、ソート後の行に対して スパースプライマリインデックス が生成されます。
② 分割: ソート済みのデータはカラムごとに分割されます。
③ 圧縮: 各カラムは圧縮されます。
④ ディスクへの書き込み: 圧縮されたカラムは、insert のデータパーツを表す新しいディレクトリ内に、バイナリのカラムファイルとして保存されます。スパースプライマリインデックスも圧縮され、同じディレクトリに格納されます。
テーブルで使用しているエンジンによっては、ソートとあわせて追加の変換が行われる場合があります。
データパーツは自己完結型であり、中央カタログがなくても内容を解釈するために必要なすべてのメタデータを含んでいます。スパースプライマリインデックスに加え、パーツには、セカンダリのデータスキッピングインデックス、カラム STATISTICS、チェックサム、min-max 索引 (パーティション化 を使用している場合) など、さらに多くのメタデータが含まれます。
パーツのマージ
初期パーツ数とマージのオーバーヘッドを最小限に抑えるため、データベースクライアントでは、たとえば一度に 20,000 行を挿入するようにタプルをまとめて挿入するか、非同期挿入モードを使用することが推奨されています。このモードでは、ClickHouse は同じテーブルに対する複数の受信 INSERT の行をバッファリングし、バッファサイズが設定可能なしきい値を超えるか、タイムアウトになるまで、新しいパーツを作成しません。
テーブルのパーツの監視
_part を使用すると、サンプルテーブルで現在存在するすべてのアクティブなパーツの一覧をクエリできます。