ClickHouse: Как перенести данные из таблиц с разными ключами разделов?

Я планирую переделать таблицу в ClickHouse, чтобы избежать проблем с производительностью и дедупликацией / управлением версиями при использовании ReplicatedReplacingMergeTree. Здесь OPTIMIZE FINAL можно запустить для удаления дубликатов, но нельзя запускать постоянно.

Итак, мы планируем сохранить таблицу A, секционируемую ежедневно, с входящими данными. Затем таблица B, разделенная на ежемесячные разделы, в которой будут храниться исторические данные. Запросы будут направлены в таблицу MERGE (не MergeTree), которая будет содержать и то, и другое.

А затем мы настроили действие по перемещению последнего раздела из A в B каждый день сразу после окончания дня.

Однако перемещение раздела, как в ПЕРЕМЕСТИТЬ РАЗДЕЛ В ТАБЛИЦУ где указано, что «Обе таблицы должны иметь один и тот же ключ раздела.», это невозможно. Подход состоит в том, чтобы скопировать данные из ежедневного раздела A в B, а затем отсоединить / удалить ежедневный раздел в A. Однако пока мы увидим дубликаты.

Как лучше всего передать эти данные из пункта А в пункт Б с минимальным воздействием? Какие еще варианты были бы?


person xmar    schedule 01.06.2020    source источник


Ответы (1)


Подход состоит в том, чтобы скопировать данные из ежедневного раздела A в B, а затем отсоединить / удалить ежедневный раздел в A. Однако пока мы увидим дубликаты.

вы можете копировать данные в промежуточную / временную таблицу TB (та же структура / разделение, что и B). Затем отбросьте раздел в A, затем перейдите из TB в B

person Denny Crane    schedule 01.06.2020
comment
Однако в этом случае мы перемещаем весь месячный раздел в B. Первый раз это нормально, но на второй день месяца в B уже будет месячный раздел для этого месяца. Итак, в этом случае мне пришлось бы накапливать полный месяц в промежуточной таблице, хранить его там в течение месяца и сбрасывать до B в конце месяца, включая его в таблицу слияния, верно? Затем, после перехода в B в конце месяца, промежуточную таблицу можно очистить - промыть и повторить :) Но в этом случае у нас также есть начальная проблема в копии из A в TB. - person xmar; 01.06.2020
comment
clickhouse.tech/docs/en/sql-reference / statement / alter / вы можете использовать ATTACH PARTITION FROM - person Denny Crane; 01.06.2020
comment
Хотя MOVE PARTITION также не удаляет данные из B. Итак, я не понимаю, почему вам нужно перемещать весь месяц. Я думаю, вы можете делать это ежедневно, добавляя один день к B и удаляя один из A. - person Denny Crane; 01.06.2020
comment
Спасибо. Похоже, что MOVE PARTITION удаляет (и я думаю, атомарно, отсюда и мой интерес): This query moves the data partition from the table_source to table_dest with deleting the data from table_source.. С ATTACH PARTITION FROM мне понадобится TB для изменения ключа раздела, но похоже, что это сработает, спасибо! Однако за это время будут дубликаты. - person xmar; 02.06.2020