【问题标题】:Clickhouse: split output on selectClickhouse:选择时拆分输出
【发布时间】:2019-01-24 17:41:55
【问题描述】:

在 Clickhouse 上执行选择,在通过物化视图从 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)

为什么输出显示为分成两组?

【问题讨论】:

    标签: apache-kafka clickhouse


    【解决方案1】:

    如果我没记错的话,当数据来自不同的块时,输出会被拆分,通常也会导致在不同的线程中处理。如果您想摆脱它,请将您的查询包装在外部选择中

    select * from (...)
    

    【讨论】:

    • 或者添加order by子句。
    【解决方案2】:

    MergeTree Engine 专为更快的 WRITE 和 READ 操作而设计。

    通过在部分中插入数据,然后将数据离线合并到单个部分中以实现更快的读取,可以实现更大的写入。

    可以看到数据分区如下目录:

     ls /var/lib/clickhouse/data/database_name/table_name
    

    如果您运行以下查询,您会发现数据现在在单个组中可用,并且在上述位置也有一个新分区可用:

    optimize table MY_TABLE_NAME
    

    优化表强制合并分区,但在通常情况下,您可以将其留在 Click house 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多