- DETACH PARTITION|PART — Перемещает партицию или часть в каталог
detachedи удаляет сведения о ней. - DROP PARTITION|PART — Удаляет партицию или часть.
- DROP DETACHED PARTITION|PART — Удаляет часть или все части партиции из
detached. - FORGET PARTITION — Удаляет метаданные партиции из ZooKeeper, если она пуста.
- ATTACH PARTITION|PART — Добавляет партицию или часть из каталога
detachedв таблицу. - ATTACH PARTITION FROM — Копирует партицию данных из одной таблицы в другую и присоединяет её.
- REPLACE PARTITION — Копирует партицию данных из одной таблицы в другую и заменяет ею существующую.
- MOVE PARTITION TO TABLE — Перемещает партицию данных из одной таблицы в другую.
- CLEAR COLUMN IN PARTITION — Сбрасывает значение указанного столбца в партиции.
- CLEAR INDEX IN PARTITION — Сбрасывает указанный вторичный индекс в партиции.
- FREEZE PARTITION — Создаёт резервную копию партиции.
- UNFREEZE PARTITION — Удаляет резервную копию партиции.
- FETCH PARTITION|PART — Загружает часть или партицию с другого сервера.
- MOVE PARTITION|PART — Перемещает партицию/часть данных на другой диск или том.
- UPDATE IN PARTITION — Обновляет данные в партиции по условию.
- DELETE IN PARTITION — Удаляет данные в партиции по условию.
- REWRITE PARTS — Полностью переписывает части в таблице (или в конкретной партиции).
DETACH PARTITION|PART
detached. Сервер забывает об отсоединённой партиции данных, как будто её не существует. Сервер не будет знать об этих данных, пока вы не выполните запрос ATTACH.
Пример:
detached всё что угодно: удалить их из файловой системы или просто оставить там.
Этот запрос реплицируется — он перемещает данные в каталог detached на всех репликах. Обратите внимание, что выполнить этот запрос можно только на реплике-лидере. Чтобы узнать, является ли реплика лидером, выполните запрос SELECT к таблице system.replicas. Либо, что проще, выполните запрос DETACH на всех репликах — все реплики сгенерируют исключение, кроме реплик-лидеров (поскольку допускается наличие нескольких лидеров).
DROP PARTITION|PART
DROP DETACHED PARTITION|PART
detached.
Подробнее о том, как задать выражение партиционирования, читайте в разделе Как задать выражение партиционирования.
FORGET PARTITION
ATTACH PARTITION|PART
detached. Можно добавить данные для всей партиции или для отдельной её части. Примеры:
detached.
Если данные есть, запрос проверяет их целостность. Если всё в порядке, запрос добавляет данные в таблицу.
Если реплика, не являющаяся инициатором и получившая команду ATTACH, обнаруживает в собственном каталоге detached часть с корректными контрольными суммами, она присоединяет данные без их получения с других реплик.
Если части с корректными контрольными суммами нет, данные загружаются с любой реплики, у которой эта часть есть.
Вы можете поместить данные в каталог detached на одной реплике и использовать запрос ALTER ... ATTACH, чтобы добавить их в таблицу на всех репликах.
ATTACH PARTITION FROM
table1 в table2.
Обратите внимание:
- Данные не будут удалены ни из
table1, ни изtable2. table1может быть временной таблицей.
- Обе таблицы должны иметь одинаковую структуру.
- Обе таблицы должны иметь одинаковые ключ партиционирования, ключ ORDER BY и первичный ключ.
- Обе таблицы должны иметь одинаковую политику хранения.
- Целевая таблица должна включать все индексы и проекции из исходной таблицы. Если в целевой таблице включена настройка
enforce_index_structure_match_on_partition_manipulation, индексы и проекции должны быть идентичны. В противном случае целевая таблица может содержать надмножество индексов и проекций исходной таблицы.
REPLACE PARTITION
table1 в table2 и заменяет существующую партицию в table2. Операция атомарна.
Обратите внимание:
- Данные из
table1не удаляются. table1может быть временной таблицей.
- Обе таблицы должны иметь одинаковую структуру.
- Обе таблицы должны иметь одинаковый ключ партиционирования, одинаковый ключ ORDER BY и одинаковый первичный ключ.
- Обе таблицы должны использовать одинаковую политику хранения.
- Целевая таблица должна включать все индексы и проекции исходной таблицы. Если в целевой таблице включена настройка
enforce_index_structure_match_on_partition_manipulation, индексы и проекции должны быть идентичны. В противном случае целевая таблица может содержать надмножество индексов и проекций исходной таблицы.
MOVE PARTITION TO TABLE
table_source в table_dest, удаляя данные из table_source.
Чтобы запрос выполнился успешно, должны быть соблюдены следующие условия:
- Обе таблицы должны иметь одинаковую структуру.
- Обе таблицы должны иметь одинаковый ключ партиционирования, одинаковый ключ ORDER BY и одинаковый первичный ключ.
- Обе таблицы должны иметь одинаковую политику хранения.
- Обе таблицы должны использовать движки одного семейства (реплицируемые или нереплицируемые).
- Целевая таблица должна включать все индексы и проекции из исходной таблицы. Если в целевой таблице включена настройка
enforce_index_structure_match_on_partition_manipulation, индексы и проекции должны быть идентичны. В противном случае целевая таблица может иметь надмножество индексов и проекций исходной таблицы.
CLEAR COLUMN IN PARTITION
DEFAULT, этот запрос устанавливает для столбца указанное значение по умолчанию.
Пример:
FREEZE PARTITION
PARTITION не указана, запрос создает резервную копию всех партиций сразу.
Весь процесс резервного копирования выполняется без остановки сервера.
2019) — тогда запрос создаст резервную копию всех соответствующих партиций. О том, как задать выражение партиционирования, читайте в разделе Как задать выражение партиционирования.
Во время выполнения запроса для создания снимка данных создаются жесткие ссылки на данные таблицы. Жесткие ссылки размещаются в каталоге /var/lib/clickhouse/shadow/N/..., где:
/var/lib/clickhouse/— рабочий каталог ClickHouse, указанный в конфигурации.N— инкрементный номер резервной копии.- если указан параметр
WITH NAME, то вместо инкрементного номера используется значение параметра'backup_name'.
Если вы используете набор дисков для хранения данных таблицы, каталог
shadow/N появляется на каждом диске, и в нем хранятся части данных, соответствующие выражению PARTITION./var/lib/clickhouse/. Запрос выполняет chmod для всех файлов, запрещая запись в них.
После создания резервной копии вы можете скопировать данные из /var/lib/clickhouse/shadow/ на удаленный сервер, а затем удалить их с локального сервера. Обратите внимание, что запрос ALTER t FREEZE PARTITION не реплицируется. Он создает локальную резервную копию только на локальном сервере.
Запрос создает резервную копию практически мгновенно (но сначала дожидается завершения текущих запросов к соответствующей таблице).
ALTER TABLE t FREEZE PARTITION копирует только данные, но не метаданные таблицы. Чтобы создать резервную копию метаданных таблицы, скопируйте файл /var/lib/clickhouse/metadata/database/table.sql.
Чтобы восстановить данные из резервной копии, выполните следующие действия:
- Создайте таблицу, если она не существует. Чтобы получить запрос, используйте файл .sql (замените в нем
ATTACHнаCREATE). - Скопируйте данные из каталога
data/database/table/внутри резервной копии в каталог/var/lib/clickhouse/data/database/table/detached/. - Выполните запросы
ALTER TABLE t ATTACH PARTITION, чтобы добавить данные в таблицу.
max_threads.
Дополнительные сведения о резервном копировании и восстановлении данных см. в разделе “Backup and Restore in ClickHouse”.
UNFREEZE PARTITION
frozen-партиции с указанным именем. Если предложение PARTITION опущено, запрос удаляет резервные копии всех партиций сразу.
CLEAR INDEX IN PARTITION
CLEAR COLUMN, но сбрасывает индекс, а не данные столбца.
FETCH PARTITION|PART
- Загружает партицию|часть с указанного сегмента. В ‘path-in-zookeeper’ необходимо указать путь к сегменту в ZooKeeper.
- Затем запрос помещает загруженные данные в каталог
detachedтаблицыtable_name. Используйте запрос ATTACH PARTITION|PART, чтобы добавить данные в таблицу.
- FETCH PARTITION
- FETCH PART
- Запрос
ALTER ... FETCH PARTITION|PARTне реплицируется. Он помещает часть или партицию в каталогdetachedтолько на локальном сервере. - Запрос
ALTER TABLE ... ATTACHреплицируется. Он добавляет данные на все реплики. На одну из реплик данные добавляются из каталогаdetached, а на остальные — с соседних реплик.
ALTER TABLE, он не изменяет структуру таблицы и не сразу изменяет данные, доступные в таблице.
MOVE PARTITION|PART
MergeTree. См. Использование нескольких блочных устройств для хранения данных.
ALTER TABLE t MOVE:
- Не реплицируется, поскольку у разных реплик могут быть разные политики хранения.
- Возвращает ошибку, если указанный диск или том не настроен. Запрос также возвращает ошибку, если условия перемещения данных, указанные в политике хранения, неприменимы.
- Может возвращать ошибку, если данные, которые нужно переместить, уже были перемещены фоновым процессом, параллельным запросом
ALTER TABLE t MOVEили в результате фонового слияния данных. В этом случае пользователю не нужно выполнять никаких дополнительных действий.
UPDATE IN PARTITION
Пример
См. также
DELETE IN PARTITION
Пример
ПЕРЕСОЗДАНИЕ ЧАСТЕЙ
use_const_adaptive_granularity, по умолчанию применяются только к новым частям.
Пример
См. также
Как задать выражение партиционирования
ALTER ... PARTITION разными способами:
- Как значение из столбца
partitionтаблицыsystem.parts. Например,ALTER TABLE visits DETACH PARTITION 201901. - С помощью ключевого слова
ALL. Его можно использовать только с DROP/DETACH/ATTACH/ATTACH FROM. Например,ALTER TABLE visits ATTACH PARTITION ALL. - Как кортеж выражений или констант, соответствующий (по типам) кортежу ключей партиционирования таблицы. Если ключ партиционирования состоит из одного элемента, выражение нужно обернуть в функцию
tuple (...). Например,ALTER TABLE visits DETACH PARTITION tuple(toYYYYMM(toDate('2019-01-25'))). - С помощью ID партиции. ID партиции — это строковый идентификатор партиции (по возможности человекочитаемый), который используется в качестве имени партиции в файловой системе и в ZooKeeper. ID партиции должен быть указан в операторе
PARTITION ID, в одинарных кавычках. Например,ALTER TABLE visits DETACH PARTITION ID '201901'. - В запросах ALTER ATTACH PART и DROP DETACHED PART для указания имени части используйте строковый литерал со значением из столбца
nameтаблицы system.detached_parts. Например,ALTER TABLE visits ATTACH PART '201901_1_1_0'.
String его значение нужно указывать в кавычках ('). Для типов Date и Int* кавычки не нужны.
Все приведённые выше правила также применимы к запросу OPTIMIZE. Если при оптимизации непартиционированной таблицы нужно указать единственную партицию, задайте выражение PARTITION tuple(). Например:
IN PARTITION указывает партицию, к которой применяются выражения UPDATE или DELETE в запросе ALTER TABLE. Новые части создаются только для указанной партиции. Таким образом, IN PARTITION помогает снизить нагрузку, когда таблица разделена на множество партиций, а обновить данные нужно только точечно.
Примеры запросов ALTER ... PARTITION приведены в тестах 00502_custom_partitioning_local и 00502_custom_partitioning_replicated_zookeeper.