Как создать первичные ключи в ClickHouse

Я нашел несколько примеров в документации, где первичные ключи создаются путем передачи параметров в раздел ENGINE. Но я не нашел описания ни одного аргумента для ENGINE, что он означает и как мне создать первичный ключ. Заранее спасибо. Было бы здорово добавить эту информацию в документацию, если ее нет.


person Yuriy Nazarenko    schedule 31.07.2016    source источник


Ответы (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 также есть два дополнительных параметра, идентифицирующие сегмент и реплику.

https://clickhouse.tech/docs/en/engines/table_engines/mergetree_family/replication/#creating-replicated-tables

Первичный ключ указывается при создании таблицы и не может быть изменен позже.

Несмотря на название, первичный ключ не уникален. Он просто определяет порядок сортировки данных для оптимальной обработки запросов диапазона. Вы можете вставить в таблицу много строк с одинаковым значением первичного ключа.

person uYSIZfoz    schedule 01.08.2016
comment
В чем разница между первичным ключом, определенным в качестве аргумента механизма хранения, т. Е. MergeTree(EventDate, (CounterID, EventDate), 8192), и предложением Order By? Что произойдет, если я оставлю аргументы для механизма хранения пустыми, но предоставлю аргументы для Order by? - person lloiacono; 26.10.2020