В MergeTree первичный ключ задаёт разреженный индекс для отбора данных, но не запрещает дубликаты. Это отличается от ограничения PRIMARY KEY в PostgreSQL.
Что такое первичный ключ в ClickHouse и чем он отличается от первичного ключа в обычных БД?
В MergeTree первичный ключ задаёт разреженный индекс для отбора данных, но не запрещает дубликаты. Это отличается от ограничения PRIMARY KEY в PostgreSQL.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В MergeTree первичный ключ задаёт разреженный индекс для отбора данных, но не запрещает дубликаты. Это отличается от ограничения PRIMARY KEY в PostgreSQL.
ORDER BY определяет сортировку данных внутри частей, а PRIMARY KEY — ключ индексирования; при отдельном задании он должен соответствовать префиксу ключа сортировки. Индекс хранит ориентиры по группам строк, а не отдельную запись для каждой строки.
Поэтому одинаковые значения допустимы. Уникальность и выбор актуальной версии решаются отдельно, с учётом движка и запросов. Нельзя переносить ожидания от OLTP-ключа на ClickHouse без проверки семантики.
Источник: clickhouse.com.