Clickhouse:在 select 上拆分输出
Clickhouse: split output on select
在通过实体化视图从 KafkaEngine table 加载的 MergeTree table 上对 Clickhouse 执行 select,一个简单的 select 显示输出拆分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)
为什么输出分成两组?
如果我没记错的话,当数据来自不同的块时,输出会被拆分,而且通常会导致在不同的线程中处理。如果您想摆脱它,请将查询包装在外部 select
select * from (...)
MergeTree Engine 专为更快的写入和读取操作而设计。
更快的写入是通过分块插入数据,然后将数据离线合并为单个部分以实现更快的读取。
可以在以下目录看到数据分区:
ls /var/lib/clickhouse/data/database_name/table_name
如果您 运行 以下查询,您会发现数据现在在单个组中可用,并且在上述位置也有一个新分区可用:
optimize table MY_TABLE_NAME
优化 table 强制合并分区,但一般情况下,您可以将其保留在 Click house 上。
在通过实体化视图从 KafkaEngine table 加载的 MergeTree table 上对 Clickhouse 执行 select,一个简单的 select 显示输出拆分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)
为什么输出分成两组?
如果我没记错的话,当数据来自不同的块时,输出会被拆分,而且通常会导致在不同的线程中处理。如果您想摆脱它,请将查询包装在外部 select
select * from (...)
MergeTree Engine 专为更快的写入和读取操作而设计。
更快的写入是通过分块插入数据,然后将数据离线合并为单个部分以实现更快的读取。
可以在以下目录看到数据分区:
ls /var/lib/clickhouse/data/database_name/table_name
如果您 运行 以下查询,您会发现数据现在在单个组中可用,并且在上述位置也有一个新分区可用:
optimize table MY_TABLE_NAME
优化 table 强制合并分区,但一般情况下,您可以将其保留在 Click house 上。