在将复制的mysql数据库重新加载到clickhouse的过程中,使用“clickhouse mysql”时,我遇到了“单个insert块的分区太多”的问题,似乎无法继续。
到目前为止,我尝试过的一些事情:
将“max\u partitions\u per\u insert\u block”设置为零,以查看是否可以通过。
将--mempool max行数设置为5000、10.000和20.000,以便跳过100.000的默认加载
创建表时使用partition by toyyyymmdd(created)
clickhouse表创建为,这与自动创建(--create table)非常相似,只是它确实缺少一些可为null的类型:
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\uu tablename?当我第一次开始使用clickhouse和clickhouse mysql时,我遇到了一个奇怪的情况——创建表。它在开始迁移内容时停止了,过了一段时间我才意识到表名从“schema”.“table name”更改为“schema”.“schema\u table-name”。重命名表名之后--migrate表就可以运行了。
1条答案
按热度按时间ljo96ir51#
每个插入块的最大分区数—限制单个插入块中的最大分区数。零意味着无限。如果块包含太多分区,则引发异常。此设置是一个安全阈值,因为使用大量分区是一个常见的误解。
默认情况下,每个插入块的最大分区数=100
所以呢
PARTITION BY toYYYYMMDD(created)
如果您的插入时间超过100天,则插入将失败。PARTITION BY toYYYYMM(created)
如果您的insert覆盖100个月以上,则您的insert将失败。nullable—占用两倍的磁盘空间,比notnullable慢两倍。
schema get repeated db.db\uu tablename——询问clickhouse mysql的创建者altinity——看起来像个bug。