Clickhouse:按选择

时间:2018-08-17 16:20:51

标签: apache-kafka clickhouse

在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)

为什么输出看起来分成两组?

2 个答案:

答案 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上。