Clickhouse - "Too many partitions for single INSERT block"
Clickhouse - "Too many partitions for single INSERT block"
在将复制的 MySQL 数据库重新加载到 Clickhouse 期间,使用“clickhouse-mysql”我 运行 进入“单个 INSERT 块的分区太多”,我似乎无法进步。
到目前为止,我已经尝试过的一些事情:
- 将“max_partitions_per_insert_block”设置为零,看看它是否会
打通。
- 使用 --mempool-max-rows 到 5000、10.000 和
20.000,以便它跳过 100.000 默认加载
- 在创建 table
时使用 PARTITION BY toYYYYMMDD(created)
Clickhouse table 的创建方式与自动创建 (--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 时,我遇到了奇怪的情况。它在开始迁移内容时停止,我花了一段时间才意识到 table 名称从“schema”更改为“schema”。“table-name”到“schema”。schema__table-name”。重命名 table 后,--migrate-table 可以 运行.
max_partitions_per_insert_block -- 限制单个 INSERTed 块中的最大分区数。零意味着无限。如果块包含太多分区,则抛出异常。此设置是一个安全阈值,因为使用大量分区是一种常见的误解。
默认 max_partitions_per_insert_block = 100
因此 PARTITION BY toYYYYMMDD(created)
如果您的插入涵盖超过 100 个不同的日子,您的插入将失败。
PARTITION BY toYYYYMM(created)
如果您的插入内容涵盖超过 100 个不同的月份,您的插入内容将失败。
Nullable -- 最多占用两倍磁盘 space 并且比 notNullable 慢两倍。
模式重复 DB.DB__tablename -- 询问 clickhouse 的创建者 Altinity-mysql -- 看起来像一个错误。
在将复制的 MySQL 数据库重新加载到 Clickhouse 期间,使用“clickhouse-mysql”我 运行 进入“单个 INSERT 块的分区太多”,我似乎无法进步。
到目前为止,我已经尝试过的一些事情:
- 将“max_partitions_per_insert_block”设置为零,看看它是否会 打通。
- 使用 --mempool-max-rows 到 5000、10.000 和 20.000,以便它跳过 100.000 默认加载
- 在创建 table 时使用 PARTITION BY toYYYYMMDD(created)
Clickhouse table 的创建方式与自动创建 (--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 时,我遇到了奇怪的情况。它在开始迁移内容时停止,我花了一段时间才意识到 table 名称从“schema”更改为“schema”。“table-name”到“schema”。schema__table-name”。重命名 table 后,--migrate-table 可以 运行.
max_partitions_per_insert_block -- 限制单个 INSERTed 块中的最大分区数。零意味着无限。如果块包含太多分区,则抛出异常。此设置是一个安全阈值,因为使用大量分区是一种常见的误解。
默认 max_partitions_per_insert_block = 100
因此 PARTITION BY toYYYYMMDD(created)
如果您的插入涵盖超过 100 个不同的日子,您的插入将失败。
PARTITION BY toYYYYMM(created)
如果您的插入内容涵盖超过 100 个不同的月份,您的插入内容将失败。
Nullable -- 最多占用两倍磁盘 space 并且比 notNullable 慢两倍。
模式重复 DB.DB__tablename -- 询问 clickhouse 的创建者 Altinity-mysql -- 看起来像一个错误。