2017-07-07 17 views
1

私はLogテーブルとMergeTreeテーブルを持っています。 system.columnsテーブルには、data_compressed_bytesの列があり、各テーブルの各列に圧縮されたバイト数を示します。 MergeTreeテーブルの値は列の下に表示されますが、Logテーブルの列の値はすべてゼロであることがわかります。Clickhouseに圧縮テーブルエンジンをログします

Log

┌─database─┬─table──┬─name───────────┬─type─────┬─data_compressed_bytes─┬─data_uncompressed_bytes─┬─marks_bytes─┐ 
│ default │ logs │ log_time  │ DateTime │      0 │      0 │   0 │ 
│ default │ logs │ start_time  │ DateTime │      0 │      0 │   0 │ 

MergeTree

┌─database─┬─table─────┬─name────────┬─type─────┬─data_compressed_bytes─┬─data_uncompressed_bytes─┬─marks_bytes─┐ 
│ default │ logs_m │ log_date │ Date  │    1221802 │    20000000 │  19536 │ 
│ default │ logs_m │ log_time │ DateTime │    25181624 │    40000000 │  19536 │ 

それはエンジンのタイプLogの列が実際に圧縮されるか、またはされていないことを意味している場合ので、私は疑問に思って。

ClickHouse documentationTinyLogが圧縮けどLogわからないと私はsystem.columnsテーブルにそれを表示されていないされていることを述べています。

答えて

2

ログエンジンは、列データとTinyLogを圧縮します。 docから

引用:

TinyLogディスク上のデータを格納する最も簡単なテーブルエンジン。各 列は別々の圧縮ファイルに格納されます。

ログは、小さなマークのファイルが の列ファイルに存在する点でTinyLogと異なります。

ログは(MergeTreeとは違って)かなり簡単エンジンであり、メタ情報の多くを保存しないため、カラムの圧縮と解凍サイズに関する情報をsystem.columns表に反映されません自分自身の列ファイルについて(圧縮された列サイズを持つsizes.jsonファイルのみを維持します)。

だから、ログの列に対してsystem.columns.data_compressed_bytesを設定することが可能であるが、同時にsystem.columns.data_uncompressed_bytesはゼロになりますし、それが疑問に見えることがあります。

+0

私の質問にお答えいただきありがとうございます。 'Log'エンジンを使ってテーブルの各列にどれだけの圧縮が達成されたかを知ることができますか? –

+0

はい。しかし、それはかなりトリッキーです。 aptを使用してclickhouse-compressor utilをインストールし、次のコマンドを実行する必要があります:/var/lib/clickhouse/data/default/log/*.binのfの ; echo $ f "compressed:" 'stat -c"%s "$ f'" uncompressed: "' cat $ f | clickhouse-compressor --decompress | wc -c'; done ここで、/ var/lib/clickhouse/data/default/log /はdefault.logテーブルのデータディレクトリです –

関連する問題