2017-07-07 29 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 documentation指出TinyLog被壓縮但不確定約Log,我在system.columns表中看不到。

回答

2

日誌引擎壓縮列數據以及TinyLog。從doc

行情:

TinyLog最簡單的表引擎,其存儲在盤上的數據。每個 列存儲在一個單獨的壓縮文件中。

日誌與TinyLog的不同之處在於,一個小的「標記」文件與 列文件在一起。

有關列的壓縮和解壓縮大小的信息不反映到system.columns表,因爲登錄是一個很簡單的發動機(與MergeTree),不存儲大量的元信息關於自己的列文件(它只維護壓縮列大小的sizes.json文件)。

因此,它可以設置system.columns.data_compressed_bytes的日誌列,但在同一時間system.columns.data_uncompressed_bytes將是零,它可能看起來有問題的。

+0

謝謝你回答我的問題。你知道我怎麼能找出它有多少壓縮它已經實現了每個列與'日誌'引擎表中的每一列? –

+0

是的。但這非常棘手。您需要使用apt安裝clickhouse-compressor util並運行以下命令: for f in /var/lib/clickhouse/data/default/log/*.bin; echo $ f「compressed:」'stat -c「%s」$ f'「uncompressed:」'cat $ f | clickhouse-compressor --decompress | wc -c';完成 其中/ var/lib/clickhouse/data/default/log /是default.log表的數據目錄 –