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
┌─────总行数─┬─原始大小─┬─压缩大小───┬─压缩率─┐
│ 8751892418 │ 3.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 │ 3 │ 86.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-01 │ 14060 │ 2.62 MiB │ 810.42 KiB │ 30 │
│ 2020-12-02 │ 13010 │ 2.44 MiB │ 759.27 KiB │ 30 │
│ 2020-12-03 │ 13918 │ 2.62 MiB │ 817.41 KiB │ 30 │
│ 2020-12-04 │ 22038 │ 4.12 MiB │ 1.26 MiB │ 31 │
│ 2020-12-05 │ 30104 │ 5.57 MiB │ 1.72 MiB │ 31 │
│ 2020-12-06 │ 30606 │ 5.72 MiB │ 1.74 MiB │ 30 │
│ 2020-12-07 │ 20413 │ 3.83 MiB │ 1.16 MiB │ 30 │
│ 2020-12-08 │ 12305 │ 2.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。