Я нашел несколько примеров в документации, где первичные ключи создаются путем передачи параметров в раздел ENGINE. Но я не нашел описания ни одного аргумента для ENGINE, что он означает и как мне создать первичный ключ. Заранее спасибо. Было бы здорово добавить эту информацию в документацию, если ее нет.
Как создать первичные ключи в ClickHouse
Ответы (1)
Первичный ключ поддерживается для семейства механизмов хранения MergeTree. https://clickhouse.tech/docs/en/engines/table_engines/mergetree_family/mergetree/
Обратите внимание, что для наиболее серьезных задач следует использовать движки семейства MergeTree.
Он указывается как параметры для механизма хранения.
Механизм принимает параметры: имя столбца типа Date, содержащего дату, выражение выборки (необязательно), кортеж, определяющий первичный ключ таблицы, и степень детализации индекса.
Пример без поддержки выборки:
MergeTree(EventDate, (CounterID, EventDate), 8192)
Пример с поддержкой выборки:
MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192)
Итак, (CounterID, EventDate)
или (CounterID, EventDate, intHash32(UserID))
- это первичный ключ в этих примерах.
При использовании ReplicatedMergeTree также есть два дополнительных параметра, идентифицирующие сегмент и реплику.
Первичный ключ указывается при создании таблицы и не может быть изменен позже.
Несмотря на название, первичный ключ не уникален. Он просто определяет порядок сортировки данных для оптимальной обработки запросов диапазона. Вы можете вставить в таблицу много строк с одинаковым значением первичного ключа.
MergeTree(EventDate, (CounterID, EventDate), 8192)
, и предложением Order By? Что произойдет, если я оставлю аргументы для механизма хранения пустыми, но предоставлю аргументы для Order by?
- person lloiacono; 26.10.2020