在Clickhouse上执行选择,在通过Materialized View从KafkaEngine表加载的MergeTree表上,一个简单的选择在clickhouse-client
中显示输出分组:
:) select * from customersVisitors;
SELECT * FROM customersVisitors
┌────────day─┬─────────createdAt───┬──────────────────_id─┬───────────mSId─┬───────xId──┬─yId─┐
│ 2018-08-17 │ 2018-08-17 11:42:04 │ 8761310857292948227 │ DV-1811114459 │ 846817 │ 0 │
│ 2018-08-17 │ 2018-08-17 11:42:04 │ 11444873433837702032 │ DV-2164132903 │ 780066 │ 0 │
└────────────┴─────────────────────┴──────────────────────┴────────────────┴────────────┴─────┘
┌────────day─┬─────────createdAt───┬──────────────────_id─┬───────────────────mSId──┬────────xId─┬─yId─┐
│ 2018-08-17 │ 2018-08-17 10:25:11 │ 14403835623731794748 │ DV-07680633204819271839 │ 307597 │ 0 │
└────────────┴─────────────────────┴──────────────────────┴─────────────────────────┴────────────┴─────┘
3 rows in set. Elapsed: 0.013 sec.
引擎为ENGINE = MergeTree(day, (mSId, xId, day), 8192)
为什么输出看起来分成两组?
答案 0 :(得分:0)
如果我没记错的话,当数据来自不同的块时,输出将被拆分,通常还会导致在不同的线程中进行处理。如果要摆脱它,请将查询包装在外部选择中
select * from (...)
答案 1 :(得分:0)
MergeTree Engine 设计用于更快的WRITE和READ操作。
通过将数据部分插入来完成脂肪写入,然后将数据脱机合并到单个部分中,以加快读取速度。
您可以在以下目录中看到数据分区:
ls /var/lib/clickhouse/data/database_name/table_name
如果运行以下查询,则会发现该数据现在可以在一个组中使用,并且在上述位置还可以使用一个新分区:
optimize table MY_TABLE_NAME
优化表会强制合并分区,但是在通常情况下,您可以将其保留在Click house上。