【问题标题】:Is Log a compressed table engine in Clickhouse是在 Clickhouse 中记录压缩表引擎吗
【发布时间】:2017-12-11 04:43:51
【问题描述】:

我有一个Log 表和一个MergeTree 表。在system.columns 表中,它有一个列data_compressed_bytes,显示为每个表的每个列压缩的字节数。我可以看到 MergeTree 表在列下显示值,但对于 Log 表,列显示全零。

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 表中没有看到。

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    Log引擎压缩列数据以及TinyLog。

    引用doc

    TinyLog 最简单的表引擎,将数据存储在磁盘上。每个 列存储在单独的压缩文件中。

    Log 与 TinyLog 的不同之处在于,“标记”的小文件与 列文件。

    关于列的压缩和解压缩大小的信息不会反映在 system.columns 表中,因为 Log 是一个非常简单的引擎(不像 MergeTree) 并且不存储关于自己的列文件的大量元信息(它只维护具有压缩列大小的 sizes.json 文件)。

    因此,可以为 Log 的列设置 system.columns.data_compressed_bytes,但同时设置 system.columns.data_uncompressed_bytes strong> 将为零,它可能看起来有问题。

    【讨论】:

    • 感谢您回答我的问题。你知道我怎样才能知道使用Log 引擎对表中的每一列实现了多少压缩?
    • 是的。但这很棘手。您需要使用 apt 安装 clickhouse-compressor util 并运行以下命令: for f in /var/lib/clickhouse/data/default/log/*.bin;做 echo $f "压缩:" stat -c "%s" $f "未压缩:" cat $f | clickhouse-compressor --decompress | wc -c;其中 /var/lib/clickhouse/data/default/log/ 是 default.log 表的数据目录
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2021-10-13
    • 2020-04-24
    • 2019-11-02
    • 2019-04-25
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多