Clickhouse - «Слишком много разделов для одного блока INSERT» - PullRequest
0 голосов
/ 08 апреля 2020

Во время перезагрузки реплицированной базы данных MySQL в Clickhouse, используя «clickhouse- mysql», я сталкиваюсь с «Слишком много разделов для одного блока INSERT», и мне кажется, что я не могу прогрессировать.

Пока что некоторые вещи, которые я пробовал:

  1. устанавливают "max_partitions_per_insert_block" в ZERO, чтобы посмотреть, пройдет ли он.
  2. с использованием --mempool-max-rows до 5000, 10.000 и 20.000, чтобы пропустить загрузку по умолчанию 100.000
  3. с использованием PARTITION BY toYYYYMMDD (созданного) при создании таблицы

Таблица Clickhouse создается как, что очень похоже на то, как автоматическое создание c (--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.

1 Ответ

0 голосов
/ 09 апреля 2020

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__tablename - спросите у Altinity создателя clickhouse- mysql - похоже на ошибку.

...