Bootstrap

clickhouse中如何查询分区表分区及表容量查询

clickhouse中如何查询分区表分区及表容量–这个问题相信大家在使用clickhouse分区表时都会经常遇到,其实clickhouse表的元数据信息都存储在system.parts表中,可以通过该表对clickhouse上所有表进行查询表容量大小、行数、压缩率及分区信息等进行查询了解。

1. system.parts表schema解析

system.parts表schema说明如下:

`partition`(String)-- 分区名称。
`name`(String)-- 数据部分的名称。
`part_type`(String)-- 数据部分的存储格式。
`active`(UInt8)-- 指示数据部分是否处于活动状态的标志。如果数据部分处于活动状态,则会在表中使用它。否则,将其删除。合并后,不活动的数据部分仍然保留。
`marks`(UInt64)-- 标记数。要获得数据部分中的大约行数,请乘以marks索引粒度(通常为8192)(此提示不适用于自适应粒度)。
`rows`(UInt64)-- 行数。
`bytes_on_disk`(UInt64)-- 所有数据片段的总大小(以字节为单位)。
`data_compressed_bytes`(UInt64)-- 数据片段中压缩数据的总大小。不包括所有辅助文件(例如,带标记的文件)。
`data_uncompressed_bytes`(UInt64)-- 数据片段中未压缩数据的总大小。不包括所有辅助文件(例如,带标记的文件)。
`marks_bytes`(UInt64)-- 带标记的文件的大小。
`modification_time`DateTime--包含数据片段的目录被修改的时间。这通常对应于数据零件创建的时间。
`remove_time`DateTime-- 数据片段变为非活动状态的时间。
`refcount`(UInt32)-- 使用数据片段的位置数。大于2的值表示在查询或合并中使用了数据部分。
`min_date`Date-- 数据片段中日期键的最小值。
`max_date`Date-- 数据片段中日期键的最大值。
`min_time`DateTime-- 数据片段中日期和时间键的最小值。
`max_time`DateTime-- 数据片段中日期和时间键的最大值。
`partition_id`(String)-- 分区的ID。
`min_block_number`(UInt64)-- 合并后组成当前部分的数据片段的最小数量。
`max_block_number`(UInt64)-- 合并后组成当前部分的最大数据片段数。
`level`(UInt32)-- 合并树的深度。零表示当前零件是通过插入而不是通过合并其他零件来创建的。
`data_version`(UInt64)-- 用于确定应将哪些突变应用于数据部分(版本高于的突变data_version)的编号。
`primary_key_bytes_in_memory`(UInt64)-- 主键值使用的内存量(以字节为单位)。
`primary_key_bytes_in_memory_allocated`(UInt64)-- 为主键值保留的内存量(以字节为单位)。
`is_frozen`(UInt8)-- 显示分区数据备份存在的标志。1,备份存在。0,备份不存在。有关更多详细信息,请参见“冻结分区”。
`database`(String)-- 数据库的名称。
`table`(String)-- 表的名称。
`engine`(String)-- 不带参数的表引擎的名称。
`path`(字符串)-- 包含数据零件文件的文件夹的绝对路径。
`disk`(字符串)-- 存储数据部分的磁盘的名称。
`hash_of_all_files`(字符串)-- 压缩文件的sipHash128。
`hash_of_uncompressed_files`(String)-- 未压缩文件(带有标记的文件,索引文件等)的sipHash128。
`uncompressed_hash_of_compressed_files`(String)-- 压缩文件中的数据的sipHash128,就好像它们是未压缩的一样。
`delete_ttl_info_min`DateTime-- TTL DELETE规则的日期和时间键的最小值。
`delete_ttl_info_max`DateTime-- TTL DELETE规则的日期和时间键的最大值。
`move_ttl_info.expression`(Array(String))-- 表达式数组。每个表达式定义一个TTL MOVE规则。
`move_ttl_info.min`(Array(DateTime))-- 日期和时间值的数组。每个元素都描述了TTL MOVE规则的最小键值。
`move_ttl_info.max`(Array(DateTime))-- 日期和时间值的数组。每个元素都描述了TTL MOVE规则的最大键值。
`bytes`(UInt64)-- bytes_on_disk的别名。
`marks_size`(UInt64)-- marks_bytes的别名。

2.查看数据库总体容量、行数、压缩率

localhost :) SELECT
:-]     sum(rows) AS `总行数`,
:-]     formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
:-]     formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
:-]     round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
:-] FROM system.parts;

SELECT
    sum(rows) AS `总行数`,
    formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
    formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
    round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
FROM system.parts

Query id: 38b59b29-d394-48a3-9424-c7354270b8ea

┌─────总行数─┬─原始大小─┬─压缩大小───┬─压缩率─┐
│ 87518924183.06 TiB │ 345.38 GiB │     11 │
└────────────┴──────────┴────────────┴────────┘

1 rows in set. Elapsed: 1.679 sec. Processed 18.14 thousand rows, 11.92 MB (10.80 thousand rows/s., 7.10 MB/s.)

3.查看数据表容量、行数、压缩率

在此查询一张测试标签表的信息

--在此查询一张临时表的信息
localhost :) SELECT
:-]     table AS `表名`,
:-]     sum(rows) AS `总行数`,
:-]     formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
:-]     formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
:-]     round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
:-] FROM system.parts
:-] WHERE table IN ('label')
:-] GROUP BY table;

SELECT
    table AS `表名`,
    sum(rows) AS `总行数`,
    formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
    formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
    round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
FROM system.parts
WHERE table IN ('label')
GROUP BY table

Query id: da621ae1-5a1b-4394-8ccd-db60bf628bfd

┌─表名──┬─总行数─┬─原始大小─┬─压缩大小─┬─压缩率─┐
│ label │      386.00 B  │ 151.00 B │    176 │
└───────┴────────┴──────────┴──────────┴────────┘

1 rows in set. Elapsed: 0.005 sec.

3.查看数据表分区信息

查看测试表在20年12月的分区信息

--查看测试表在20年12月的分区信息
localhost :) SELECT
:-]     partition AS `分区`,
:-]     sum(rows) AS `总行数`,
:-]     formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
:-]     formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
:-]     round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
:-] FROM system.parts
:-] WHERE (database IN ('fct_boss')) AND (table IN ('fct_boss_register_event')) AND (partition LIKE '2020-12-%')
:-] GROUP BY partition
:-] ORDER BY partition ASC;

SELECT
    partition AS `分区`,
    sum(rows) AS `总行数`,
    formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
    formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
    round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
FROM system.parts
WHERE (database IN ('fct_boss')) AND (table IN ('fct_boss_register_event')) AND (partition LIKE '2020-12-%')
GROUP BY partition
ORDER BY partition ASC

Query id: 3c4c68e7-bdf1-41c7-a337-ddbdc3dfab1b

┌─分区────────┬─总行数──┬─原始大小───┬─压缩大小─────┬──压缩率─┐
│ 2020-12-01140602.62 MiB  │ 810.42 KiB  │     30 │
│ 2020-12-02130102.44 MiB  │ 759.27 KiB  │     30 │
│ 2020-12-03139182.62 MiB  │ 817.41 KiB  │     30 │
│ 2020-12-04220384.12 MiB  │ 1.26 MiB    │     31 │
│ 2020-12-05301045.57 MiB  │ 1.72 MiB    │     31 │
│ 2020-12-06306065.72 MiB  │ 1.74 MiB    │     30 │
│ 2020-12-07204133.83 MiB  │ 1.16 MiB    │     30 │
│ 2020-12-08123052.31 MiB  │ 711.07 KiB  │     30|  ......    |        |           |             |        |
└────────────┴────────┴───────────┴─────────────┴────────┘

4.查看数据表字段的信息

localhost :) SELECT
:-]     column AS `字段名`,
:-]     any(type) AS `类型`,
:-]     formatReadableSize(sum(column_data_uncompressed_bytes)) AS `原始大小`
:-]     formatReadableSize(sum(column_data_compressed_bytes)) AS `压缩大小`,
:-]     sum(rows) AS `行数`
:-] FROM system.parts_columns
:-] WHERE (database = 'test') AND (table = 'label')
:-] GROUP BY column
:-] ORDER BY column ASC ;

SELECT
    column AS `字段名`,
    any(type) AS `类型`,
    formatReadableSize(sum(column_data_uncompressed_bytes)) AS `原始大小`,
    formatReadableSize(sum(column_data_compressed_bytes)) AS `压缩大小`,
    sum(rows) AS `行数`
FROM system.parts_columns
WHERE (database = 'test') AND (table = 'label')
GROUP BY column
ORDER BY column ASC

Query id: 6cbed55b-94e6-46c5-b965-93f71875bb39

┌─字段名─────┬─类型──────────┬─原始大小─┬─压缩大小─┬─行数─┐
│ childs     │ Array(String)0.00 B   │ 0.00 B   │    3 │
│ label_name │ String        │ 0.00 B   │ 0.00 B   │    3 │
│ user_id    │ String        │ 0.00 B   │ 0.00 B   │    3 │
└────────────┴───────────────┴──────────┴──────────┴──────┘

5. system.parts_columns表 schema解析

system.parts_columns表 schema说明如下:

`partition`(String)-- 分区名称。
`name`(String)-- 数据片段的名称。
`part_type`(String)-- 数据片段的存储格式。
`active`(UInt8)-- 指示数据部分是否处于活动状态的标志。如果数据部分处于活动状态,则会在表中使用它。否则,将其删除。合并后,不活动的数据部分仍然保留。
`marks`(UInt64)-- 标记数。要获得数据部分中的大约行数,请乘以marks索引粒度(通常为8192)(此提示不适用于自适应粒度)。
`rows`(UInt64)-- 行数。
`bytes_on_disk`(UInt64)-- 所有数据部分文件的总大小(以字节为单位)。
`data_compressed_bytes`(UInt64)-- 数据部分中压缩数据的总大小。不包括所有辅助文件(例如,带标记的文件)。
`data_uncompressed_bytes` (UInt64) --数据部分中未压缩数据的总大小。不包括所有辅助文件 (例如,带标记的文件)。
`marks_bytes` (UInt64) --带有标记的文件的大小。
`modification_time`DateTime--包含数据部分的目录被修改的时间。这通常对应于数据零件创建的时间。
`remove_time`DateTime--数据部分变为非活动状态的时间。
`refcount` (UInt32) --使用数据部分的位置数。大于2的值表示在查询或合并中使用了数据部分。
`min_date`Date--数据部分中日期键的最小值。
`max_date`Date--数据部分中日期密钥的最大值。
`partition_id` (String) --分区的ID。
`min_block_number` (UInt64) --合并后组成当前部分的数据部分的最小数量。
`max_block_number` (UInt64) --合并后组成当前部分的最大数据部分数。
`level` (UInt32) --合并树的深度。零表示当前零件是通过插入而不是通过合并其他零件来创建的。
`data_version` (UInt64) --用于确定应将哪些突变应用于数据部分 (版本高于的突变data_version)的编号。
`primary_key_bytes_in_memory` (UInt64) --主键值使用的内存量 (以字节为单位)。
`primary_key_bytes_in_memory_allocated` (UInt64) --为主键值保留的内存量 (以字节为单位)。
`database` (String) --数据库名称。
`table` (String) --表的名称。
`engine` (String) --不带参数的表引擎的名称。
`disk_name` (String) --存储数据部分的磁盘的名称。
`path` (String) --包含数据零件文件的文件夹的绝对路径。
`column` (String) --列的名称。
`type` (String) --列类型。
`column_position` (UInt64) --以1开头的表中列的顺序位置。
`default_kind` (字符串)  --表达类型 (DEFAULT,MATERIALIZED,ALIAS作为默认值),或者如果没有定义它为空字符串。
`default_expression` (String) --默认值的表达式,如果未定义,则为空字符串。
`column_bytes_on_disk` (UInt64) --列的总大小,以字节为单位。
`column_data_compressed_bytes` (UInt64) --列中压缩数据的总大小,以字节为单位。
`column_data_uncompressed_bytes` (UInt64) --列中解压缩数据的总大小,以字节为单位。
`column_marks_bytes` (UInt64) --带标记的列的大小,以字节为单位。
`bytes` (UInt64) --的别名bytes_on_disk。
`marks_size` (UInt64) --的别名marks_bytes。
;