【问题标题】:Clickhouse - "Too many partitions for single INSERT block"Clickhouse - “单个 INSERT 块的分区太多”
【发布时间】:2020-07-20 21:27:31
【问题描述】:

在将复制的 MySQL 数据库重新加载到 Clickhouse 期间,使用“clickhouse-mysql”遇到“单个 INSERT 块的分区太多”,我似乎无法继续。

到目前为止,我尝试过的一些事情:

  1. 将“max_partitions_per_insert_block”设置为零,看看它是否会 通过。
  2. 使用 --mempool-max-rows 到 5000、10.000 和 20.000,以便它跳过 100.000 默认加载
  3. 在创建表时使用 PARTITION BY toYYYYMMDD(created)

Clickhouse 表的创建方式与自动创建 (--create-table) 的方式非常相似,只是它确实错过了一些 NULLABLE 类型。:

CREATE TABLE DB.DB__main (
`id` Int64,
 `user_id` Int64,
 `screenname` String,
 `created` DateTime,
 `tweet_id` Int64,
 `tweet` String,
 `retweet_count` Nullable(Int32),
 `mediastatus` Nullable(String),
 `country` Nullable(String),
 `countrycode` Nullable(String),
 `city` Nullable(String),
 `latitude0` Nullable(String),
 `longitude0` Nullable(String),
 `latitude1` Nullable(String),
 `longitude1` Nullable(String),
 `latitude2` Nullable(String),
 `longitude2` Nullable(String),
 `latitude3` Nullable(String),
 `longitude3` Nullable(String),
 `datetime` DateTime,
 `datetime_update` Nullable(DateTime),
 `status` Nullable(String),
 `div0` Nullable(String),
 `div1` Nullable(String),
 `div2` Nullable(Int64),
 `datasource` Nullable(String)
) ENGINE = ReplacingMergeTree() PARTITION BY toYYYYMM(created) ORDER BY (id, user_id, screenname, created, tweet_id, datetime)

另外,为什么架构会重复 DB.DB__tablename?当我第一次开始使用 Clickhouse 和 clickhouse-mysql --create-table 时,我遇到了奇怪的情况。它在开始迁移内容时停止了,我花了一段时间才意识到表名从“schema”.“table-name”更改为“schema”.“schema__table-name”。重命名表名后,--migrate-table 可以运行。

【问题讨论】:

    标签: insert clickhouse


    【解决方案1】:

    max_partitions_per_insert_block -- 限制单个 INSERTed 块中的最大分区数。零意味着无限。如果块包含太多分区,则抛出异常。此设置是一个安全阈值,因为使用大量分区是一种常见的误解。

    默认情况下 max_partitions_per_insert_block = 100

    所以PARTITION BY toYYYYMMDD(created) 如果您的插入涵盖超过 100 个不同的日期,您的插入将失败。 PARTITION BY toYYYYMM(created) 如果您的插入涵盖超过 100 个不同的月份,您的插入将失败。

    Nullable -- 占用最多两倍的磁盘空间,比 notNullable 慢两倍。

    模式得到重复 DB.DB__tablename -- 询问 Clickhouse-mysql 的创建者 Altinity -- 看起来像一个错误。

    【讨论】:

    • 谢谢,这有帮助。我使用了“--mempool-max-rows=1000”,然后它没有通过。也感谢 Nullable 评论,总是很好学习:-)。
    猜你喜欢
    • 2021-12-11
    • 2021-05-07
    • 2019-01-17
    • 2020-05-25
    • 1970-01-01
    • 2012-01-27
    • 2019-07-28
    相关资源
    最近更新 更多