ClickHouse/docs/ru/operations/table_engines/custom_partitioning_key.md
Ivan Blinkov 0a4a5b36cc
Some WIP on documentation refactoring (#2659)
* Additional .gitignore entries

* Merge a bunch of small articles about system tables into single one

* Merge a bunch of small articles about formats into single one

* Adapt table with formats to English docs too

* Add SPb meetup link to main page

* Move Utilities out of top level of docs (the location is probably not yet final) + translate couple articles

* Merge MacOS.md into build_osx.md

* Move Data types higher in ToC

* Publish changelog on website alongside documentation

* Few fixes for en/table_engines/file.md

* Use smaller header sizes in changelogs

* Group up table engines inside ToC

* Move table engines out of top level too

* Specificy in ToC that query language is SQL based. Thats a bit excessive, but catches eye.

* Move stuff that is part of query language into respective folder

* Move table functions lower in ToC

* Lost redirects.txt update

* Do not rely on comments in yaml + fix few ru titles

* Extract major parts of queries.md into separate articles

* queries.md has been supposed to be removed

* Fix weird translation

* Fix a bunch of links

* There is only table of contents left

* "Query language" is actually part of SQL abbreviation

* Change filename in README.md too

* fix mistype
2018-07-18 13:00:53 +03:00

5.8 KiB
Raw Blame History

Произвольный ключ партиционирования

Начиная с версии 1.1.54310 доступна возможность создания таблиц семейства MergeTree с произвольным выражением партиционирования (не только по месяцу).

Ключ партиционирования может представлять собой произвольное выражение из столбцов таблицы, а также кортеж из таких выражений (аналогично первичному ключу). Ключ партиционирования может отсутствовать. При создании таблицы ключ партиционирования указывается в описании движка (ENGINE) с новым синтаксисом:

ENGINE [=] Name(...) [PARTITION BY expr] [ORDER BY expr] [SAMPLE BY expr] [SETTINGS name=value, ...]

Для MergeTree таблиц выражение партиционирования указывается после PARTITION BY, первичный ключ после ORDER BY, ключ сэмплирования после SAMPLE BY, а в SETTINGS можно указать index_granularity (не обязательно, значение по умолчанию 8192), а также другие настройки из MergeTreeSettings.h. Остальные параметры движка по-прежнему указываются в скобках после его названия. Пример:

ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/name', 'replica1', Sign)
    PARTITION BY (toMonday(StartDate), EventType)
    ORDER BY (CounterID, StartDate, intHash32(UserID))
    SAMPLE BY intHash32(UserID)

Традиционному партиционированию по месяцу соответствует выражение toYYYYMM(date_column).

Таблицу старого стиля сконвертировать в таблицу с произвольным партиционированием нельзя (только через INSERT SELECT).

После создания такой таблицы слияние кусков будет работать только для кусков с одинаковым значением выражения партиционирования. Замечание: это означает, что нежелательно делать слишком гранулированное партиционирование (более порядка тысячи партиций), иначе производительность SELECT будет неудовлетворительной.

Чтобы указать партицию в командах ALTER PARTITION, нужно указать значение выражения партиционирования (или кортежа). Поддерживаются константы и константные выражения. Пример:

ALTER TABLE table DROP PARTITION (toMonday(today()), 1)

удалит партицию за текущую неделю с типом события 1. То же самое для запроса OPTIMIZE. Чтобы указать единственную партицию непартиционированной таблицы, укажите PARTITION tuple().

Замечание: для таблиц старого стиля можно указывать партицию и как число 201710, и как строку '201710'. Синтаксис для таблиц нового типа более строг к типам (аналогично парсеру входного формата VALUES). Также, ALTER TABLE FREEZE PARTITION для таблиц нового типа работает по полному совпадению (не по префиксу).

В таблице system.parts в столбце partition указывается значение выражения партиционирования, пригодное к использованию в запросах ALTER (если убрать квотирование). В столбце name указывается имя куска, формат которого изменился.

Было: 20140317_20140323_2_2_0 (минимальная дата - максимальная дата - номер минимального блока - номер максимального блока - уровень).

Стало: 201403_2_2_0 (ID партиции - номер минимального блока - номер максимального блока - уровень).

ID партиции - это её строковый идентификатор (по возможности человекочитаемый), используемый для имён кусков на файловой системе и в ZooKeeper. Его можно указывать в запросах ALTER вместо значения ключа партиционирования. Пример: ключ партиционирования toYYYYMM(EventDate), в ALTER можно указывать либо PARTITION 201710, либо PARTITION ID '201710'.

Больше примеров в тестах 00502_custom_partitioning_local и 00502_custom_partitioning_replicated_zookeeper.