mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Better docs
This commit is contained in:
parent
9d227b29aa
commit
47c0b124d2
@ -927,7 +927,7 @@ cat {filename} | clickhouse-client --query="INSERT INTO {some_table} FORMAT Parq
|
||||
clickhouse-client --query="SELECT * FROM {some_table} FORMAT Parquet" > {some_file.pq}
|
||||
```
|
||||
|
||||
Для обмена данными с экосистемой Hadoop можно использовать движки таблиц [`HDFS`](../../operations/table_engines/hdfs.md) и `URL`.
|
||||
Для обмена данными с экосистемой Hadoop можно использовать движки таблиц [`HDFS`](../operations/table_engines/hdfs.md) и `URL`.
|
||||
|
||||
## Схема формата {#formatschema}
|
||||
|
||||
|
@ -345,68 +345,59 @@ TTL date_time + INTERVAL 15 HOUR
|
||||
## Хранение данных таблицы на нескольких блочных устройствах {#table_engine-mergetree-multiple-volumes}
|
||||
|
||||
### Общее
|
||||
Данные таблиц семейства MergeTree могут храниться на нескольких блочных
|
||||
устройствах. Это может оказаться полезным, например, при неявном разделении
|
||||
данных одной таблицы на "горячие" и "холодные", когда наиболее свежая часть
|
||||
занимает малый объем и запрашивается регулярно, а большой хвост исторических
|
||||
данных запрашивается редко. При наличии в системе нескольких дисков, "горячая"
|
||||
часть данных может быть размещена на быстрых дисках (NVMe SSDs), а холодная на
|
||||
более медленных (HDD).
|
||||
Данные таблиц семейства MergeTree могут храниться на нескольких блочных устройствах. Это может оказаться полезным, например, при неявном разделении данных одной таблицы на "горячие" и "холодные", когда наиболее свежая часть занимает малый объем и запрашивается регулярно, а большой хвост исторических данных запрашивается редко. При наличии в системе нескольких дисков, "горячая" часть данных может быть размещена на быстрых дисках (NVMe SSDs), а холодная на более медленных (HDD).
|
||||
|
||||
Минимальной перемещаемой единицей для MergeTree является кусок (part). Данные
|
||||
одного куска могут находится только на одном диске. Куски могут перемещаться
|
||||
между дисками в фоне, согласно пользовательским настройкам, а также с помощью
|
||||
`ALTER` запросов.
|
||||
Минимальной перемещаемой единицей для MergeTree является кусок (part). Данные одного куска могут находится только на одном диске. Куски могут перемещаться между дисками в фоне, согласно пользовательским настройкам, а также с помощью [`ALTER`](../../query_language/alter.md#alter_move-partition) запросов.
|
||||
|
||||
### Термины
|
||||
* Диск -- примонтированное в файловой системе блочное устройство
|
||||
* Диск по умолчанию -- путь на файловой системе, указанный в `<path>` в основной конфигурации.
|
||||
* Том (Volume) -- упорядоченный набор равноценных дисков (схоже с [JBOD](https://ru.wikipedia.org/wiki/JBOD))
|
||||
* Политика хранения (StoragePolicy) -- множество томов с правилами перемещения
|
||||
данных между ними.
|
||||
* Диск — примонтированное в файловой системе блочное устройство.
|
||||
* Диск по умолчанию — путь на файловой системе, указанный в `<path>` в основной конфигурации.
|
||||
* Том (Volume) — упорядоченный набор равноценных дисков (схоже с [JBOD](https://ru.wikipedia.org/wiki/JBOD))
|
||||
* Политика хранения (StoragePolicy) — множество томов с правилами перемещения данных между ними.
|
||||
|
||||
У всех описанных сущностей, при создании, указываются имена, которые будут
|
||||
отражены в системных таблицах `system.storage_policies` и `system.disks`. Имя
|
||||
политики хранения используется как настройка у таблиц семейства MergeTree.
|
||||
У всех описанных сущностей, при создании, указываются имена, которые будут отражены в системных таблицах `system.storage_policies` и `system.disks`. Имя политики хранения используется как настройка у таблиц семейства MergeTree.
|
||||
|
||||
### Конфигурация
|
||||
|
||||
Диски, тома и политики хранения задаются в `xml` - конфигурации сервера.
|
||||
Диски, тома и политики хранения задаются в конфигурации сервера.
|
||||
|
||||
Конфигурация дисков имеет следующую структуру:
|
||||
|
||||
```
|
||||
```xml
|
||||
<disks>
|
||||
<fast_disk> <!-- disk name -->
|
||||
<path>/mnt/fast_ssd/clickhouse</path>
|
||||
</fast_disk>
|
||||
<slow_disk>
|
||||
<path>/mnt/slow_hdd/clickhouse</path>
|
||||
<disk1>
|
||||
<path>/mnt/hdd1/clickhouse</path>
|
||||
<keep_free_space_bytes>10485760</keep_free_space_bytes>_
|
||||
</slow_disk>
|
||||
</disk1>
|
||||
<disk2>
|
||||
<path>/mnt/hdd2/clickhouse</path>
|
||||
<keep_free_space_bytes>10485760</keep_free_space_bytes>_
|
||||
</disk2>
|
||||
|
||||
...
|
||||
</disks>
|
||||
```
|
||||
* имя диска задается внутри имени тега.
|
||||
* `path` -- путь по которому будут храниться данные сервера (каталоги
|
||||
`data`, `shadow`), должен быть терминирован `/`.
|
||||
* `keep_free_space_bytes` -- размер зарезервированного свободного места на
|
||||
диске.
|
||||
* `path` — путь по которому будут храниться данные сервера (каталоги `data`, `shadow`), должен быть терминирован `/`.
|
||||
* `keep_free_space_bytes` — размер зарезервированного свободного места на диске.
|
||||
|
||||
Порядок задания дисков не имеет значения.
|
||||
|
||||
Конфигурация политик хранения:
|
||||
|
||||
```
|
||||
```xml
|
||||
<policies>
|
||||
<ssd_hdd_in_order> <!-- policy name -->
|
||||
<hdd_in_order> <!-- policy name -->
|
||||
<volumes>
|
||||
<single> <!-- volume name -->
|
||||
<disk>fast_ssd</disk>
|
||||
<disk>slow_hdd</disk>
|
||||
<disk>disk1</disk>
|
||||
<disk>disk2</disk>
|
||||
</single>
|
||||
</volumes>
|
||||
</ssd_hdd_in_order>
|
||||
</hdd_in_order>
|
||||
|
||||
<moving_from_ssd_to_hdd>
|
||||
<volumes>
|
||||
@ -415,7 +406,7 @@ TTL date_time + INTERVAL 15 HOUR
|
||||
<max_data_part_size_bytes>1073741824</max_data_part_size_bytes>
|
||||
</hot>
|
||||
<cold>
|
||||
<disk>slow_hdd</disk>
|
||||
<disk>disk1</disk>
|
||||
</cold>
|
||||
<move_factor>0.2</move_factor>
|
||||
</volumes>
|
||||
@ -424,20 +415,15 @@ TTL date_time + INTERVAL 15 HOUR
|
||||
```
|
||||
|
||||
* имя политики и тома задаются внутри имен тегов.
|
||||
* `disk` -- диск, находящийся внутри тома.
|
||||
* `max_data_part_size_bytes` -- максимальный размер куска, который может
|
||||
находится на любом из дисков этого тома.
|
||||
* `move_factor` -- доля свободного места, при превышении которого данные
|
||||
начинают перемещаться на следующий том, если он есть (по умолчанию 0.1).
|
||||
* `disk` — диск, находящийся внутри тома.
|
||||
* `max_data_part_size_bytes` — максимальный размер куска, который может находится на любом из дисков этого тома.
|
||||
* `move_factor` — доля свободного места, при превышении которого данные начинают перемещаться на следующий том, если он есть (по умолчанию 0.1).
|
||||
|
||||
Порядок томов в полтиках хранения важен, при достижении условий на переполнение тома данные
|
||||
переносятся на следующий. Порядок дисков в томах так же важен, данные пишутся по
|
||||
очереди на каждый из них.
|
||||
Порядок томов в политиках хранения важен, при достижении условий на переполнение тома данные переносятся на следующий. Порядок дисков в томах так же важен, данные пишутся по очереди на каждый из них.
|
||||
|
||||
После задания конфигурации дисков и политик хранения их можно использовать, как
|
||||
настройку при создании таблиц:
|
||||
После задания конфигурации дисков и политик хранения их можно использовать, как настройку при создании таблиц:
|
||||
|
||||
```
|
||||
```sql
|
||||
CREATE TABLE table_with_non_default_policy (
|
||||
EventDate Date,
|
||||
OrderID UInt64,
|
||||
@ -449,12 +435,9 @@ PARTITION BY toYYYYMM(EventDate)
|
||||
SETTINGS storage_policy_name='moving_from_ssd_to_hdd'
|
||||
```
|
||||
|
||||
Все куски такой таблицы больше 1GB будут писаться сразу на диск `slow_hdd`.
|
||||
Также, при заполнении диска `fast_ssd` более чем на 80% данные будут переносится
|
||||
на диск `slow_hdd` фоновым процессом.
|
||||
Все куски такой таблицы больше 1GB будут писаться сразу на диск `disk1`. Также, при заполнении диска `fast_ssd` более чем на 80% данные будут переносится на диск `disk1` фоновым процессом.
|
||||
|
||||
По умолчанию используется политика хранения `default` в которой есть один том и
|
||||
один диск, указанный в `<path>`.
|
||||
По умолчанию используется политика хранения `default` в которой есть один том и один диск, указанный в `<path>`.
|
||||
|
||||
### Особенности работы
|
||||
|
||||
@ -462,32 +445,19 @@ SETTINGS storage_policy_name='moving_from_ssd_to_hdd'
|
||||
* В результате вставки (запрос `INSERT`).
|
||||
* В фоновых операциях слияний и мутаций.
|
||||
* При скачивании данных с другой реплики.
|
||||
* В результате заморозки партиций `ALTER TABLE ... FREEZE PARTITION`.
|
||||
* В результате заморозки партиций [`ALTER TABLE ... FREEZE PARTITION`](../../query_language/alter.md#alter_freeze-partition).
|
||||
|
||||
Во всех случаях, кроме мутаций и заморозки партиций, при записи куска
|
||||
выбирается том и диск в соответствии с указанной конфигурацией хранилища:
|
||||
Во всех случаях, кроме мутаций и заморозки партиций, при записи куска выбирается том и диск в соответствии с указанной конфигурацией хранилища:
|
||||
|
||||
1. Выбирается первый по порядку том, на котором есть свободное место для записи
|
||||
куска (`unreserved_space > current_part_size`) и который
|
||||
позволяет записывать куски требуемого размера `max_data_part_size_bytes > current_part_size`.
|
||||
2. Внутри тома выбирается следующий диск после того, на который была предыдущая
|
||||
запись и на котором свободного места больше чем размер куска
|
||||
(`unreserved_space - keep_free_space_bytes > current_part_size`)
|
||||
1. Выбирается первый по порядку том, на котором есть свободное место для записи куска (`unreserved_space > current_part_size`) и который позволяет записывать куски требуемого размера `max_data_part_size_bytes > current_part_size`.
|
||||
2. Внутри тома выбирается следующий диск после того, на который была предыдущая запись и на котором свободного места больше чем размер куска (`unreserved_space - keep_free_space_bytes > current_part_size`)
|
||||
|
||||
Мутации и запросы заморозки партиций в реализации используют [жесткие
|
||||
ссылки](https://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0).
|
||||
Жесткие ссылки между различными дисками не поддерживаются, поэтому в случае
|
||||
таких операций куски размещаются на тех же дисках, что и исходные.
|
||||
Мутации и запросы заморозки партиций в реализации используют [жесткие ссылки](https://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0). Жесткие ссылки между различными дисками не поддерживаются, поэтому в случае таких операций куски размещаются на тех же дисках, что и исходные.
|
||||
|
||||
В фоне куски перемещаются между томами на основе информации о занятом месте
|
||||
(настройка `move_factor`) по порядку, в котором указаны тома в конфигурации.
|
||||
Данные никогда не перемещаются с последнего тома и на первый том.
|
||||
В фоне куски перемещаются между томами на основе информации о занятом месте (настройка `move_factor`) по порядку, в котором указаны тома в конфигурации. Данные никогда не перемещаются с последнего тома и на первый том.
|
||||
|
||||
С помощью запроса `ALTER TABLE ... MOVE PART|PARTITION ... TO VOLUME|DISK ...`
|
||||
пользователь может принудительно перенести кусок или партицию с одного раздела
|
||||
на другой. При этом учитываются все ограничения, указанные для фоновых операций.
|
||||
В случае недостатка места или неудовлетворения ограничениям пользователь получит
|
||||
сообщение об ошибки.
|
||||
С помощью запроса `ALTER TABLE ... MOVE PART|PARTITION ... TO VOLUME|DISK ...` пользователь может принудительно перенести кусок или партицию с одного раздела на другой. При этом учитываются все ограничения, указанные для фоновых операций. В случае недостатка места или неудовлетворения ограничениям пользователь получит сообщение об ошибки.
|
||||
|
||||
Перемещения данных не взаимодействуют с репликацией данных, поэтому на разных
|
||||
репликах одной и той же таблицы могут быть указаны разные политики хранения.
|
||||
Перемещения данных не взаимодействуют с репликацией данных, поэтому на разных репликах одной и той же таблицы могут быть указаны разные политики хранения.
|
||||
|
||||
После выполнения фоновых слияний или мутаций старые куски не удаляются сразу, а через некоторое время (табличная настройка `old_parts_lifetime`). Также они не перемещаются на другие тома или диски, поэтому до момента удаления они продолжают учитываться при подсчёте занятого дискового пространства.
|
||||
|
@ -192,7 +192,8 @@ ALTER TABLE [db].name DROP CONSTRAINT constraint_name;
|
||||
- [CLEAR COLUMN IN PARTITION](#alter_clear-column-partition) – удалить все значения в столбце для заданной партиции;
|
||||
- [CLEAR INDEX IN PARTITION](#alter_clear-index-partition) - очистить построенные вторичные индексы для заданной партиции;
|
||||
- [FREEZE PARTITION](#alter_freeze-partition) – создать резервную копию партиции;
|
||||
- [FETCH PARTITION](#alter_fetch-partition) – скачать партицию с другого сервера.
|
||||
- [FETCH PARTITION](#alter_fetch-partition) – скачать партицию с другого сервера;
|
||||
- [MOVE PARTITION|PART](#alter_move-partition) -- переместить партицию/кускок на другой диск или том.
|
||||
|
||||
#### DETACH PARTITION {#alter_detach-partition}
|
||||
|
||||
@ -309,6 +310,9 @@ ALTER TABLE table_name FREEZE [PARTITION partition_expr]
|
||||
- `/var/lib/clickhouse/` — рабочая директория ClickHouse, заданная в конфигурационном файле;
|
||||
- `N` — инкрементальный номер резервной копии.
|
||||
|
||||
!!! note
|
||||
При использовании [нескольких дисков для хранения данных таблицы](../operations/table_engines/mergetree.md#table_engine-mergetree-multiple-volumes) директория `shadow/N` появляется на каждом из дисков, на которых были куски, попавшие под выражение `PARTITION`.
|
||||
|
||||
Структура директорий внутри резервной копии такая же, как внутри `/var/lib/clickhouse/`. Запрос выполнит 'chmod' для всех файлов, запрещая запись в них.
|
||||
|
||||
Обратите внимание, запрос `ALTER TABLE t FREEZE PARTITION` не реплицируется. Он создает резервную копию только на локальном сервере. После создания резервной копии данные из `/var/lib/clickhouse/shadow/` можно скопировать на удалённый сервер, а локальную копию удалить.
|
||||
@ -355,6 +359,27 @@ ALTER TABLE users ATTACH PARTITION 201902;
|
||||
|
||||
Несмотря на то что запрос называется `ALTER TABLE`, он не изменяет структуру таблицы и не изменяет сразу доступные данные в таблице.
|
||||
|
||||
#### MOVE PARTITION|PART {#alter_move-partition}
|
||||
|
||||
```sql
|
||||
ALTER TABLE table_name MOVE PARTITION|PART partition_expr TO DISK|VOLUME 'disk_name'
|
||||
```
|
||||
|
||||
Перемещает партицию или кусок на другой том или диск. Запрос работает только для движков семейства MergeTree. Подробнее о хранении данных на разных дисках читайте в разделе [Хранение данных таблицы на нескольких блочных устройствах](../operations/table_engines/mergetree.md#table_engine-mergetree-multiple-volumes).
|
||||
|
||||
Следует иметь ввиду:
|
||||
|
||||
- Запрос `ALTER TABLE t MOVE` не реплицируется, т.к. на разных репликах могут быть различные конфигурации политик хранения.
|
||||
- Запрос `ALTER TABLE t MOVE` будет возвращать ошибку, если указан несуществующий том или диск, а также в случае невыполнения условий перемещения данных, которые указаны в конфигурации политики хранения.
|
||||
- Запрос `ALTER TABLE t MOVE` может возвращать ошибку в случае, когда перемещаемые данные уже оказались перемещены в результате фонового процесса, конкурентного запроса `ALTER TABLE t MOVE` или как часть результата фоновой операции слияния. В данном случае никаких дополнительных действий от пользователя не требуется.
|
||||
|
||||
Примеры:
|
||||
|
||||
```sql
|
||||
ALTER TABLE hits MOVE PART '20190301_14343_16206_438' TO VOLUME 'slow'
|
||||
ALTER TABLE hits MOVE PARTITION '2019-09-01' TO DISK 'fast_ssd'
|
||||
```
|
||||
|
||||
#### Как задавать имя партиции в запросах ALTER {#alter-how-to-specify-part-expr}
|
||||
|
||||
Чтобы задать нужную партицию в запросах `ALTER ... PARTITION`, можно использовать:
|
||||
|
Loading…
Reference in New Issue
Block a user