ClickHouse | 为什么select的输出会倍拆分
2023-08-13
控制台输出这样的时候,很疑惑
:) select * from test
SELECT *
FROM test
┌─s───┬───i─┐
│ foo │ 123 │
└─────┴─────┘
┌─s───┬───i─┐
│ bar │ 567 │
└─────┴─────┘
更快的写入是通过将数据写入多个分区来实现的,然后将数据离线合并到单个分区中以实现更快的读取
写入时会根据每次写入的批次或 max_insert_block_size
(将大型写入拆分为单独的批次)
- 每次写入的批次
- 默认一条
insert
插入的数据为同一个数据分区,不同insert
插入的数据为不同的分区
- 默认一条
查询数据时往往是多线程查询,所有输入数据来自不同的分区,会由不同的线程的处理,命令行客户端在收到后立即打印
如果使用的查询不包含任何合并块的阻塞运算符(group by、order by 等),结果就会一一返回。
查看数据分区
/var/lib/clickhouse/data/database_name/table_name
optimize table {table_name}
优化表会强制合并分区,数据现在在单个分区中
- https://stackoverflow.com/questions/51899472/clickhouse-split-output-on-select
- https://stackoverflow.com/questions/55302833/why-does-clickhouse-client-return-multiple-tables