CREATE TABLE raw.local_transactions ON CLUSTER cluster_4x2 (

В DDL стоит заменить Float64 для денег и отказаться от партиционирования по amount. Репликацию, ключ сортировки и шардирование нужно проверить отдельно.

Короткий ответ

Что ответить на собеседовании

В DDL стоит заменить Float64 для денег и отказаться от партиционирования по amount. Репликацию, ключ сортировки и шардирование нужно проверить отдельно.

Подробный разбор

Ответ с пояснениями

Условие

CREATE TABLE raw.local_transactions ON CLUSTER cluster_4x2 ( transaction_id String, user_id String, amount Float64, created_at DateTime ) ENGINE = ReplicatedMergeTree() PARTITION BY amount ORDER BY (transaction_id);

CREATE TABLE raw.transactions ON CLUSTER cluster_4x2 ( transaction_id String, user_id String, amount Float64, created_at DateTime ) ENGINE = Distributed('cluster_4x2', 'raw', 'local_transactions', cityHash64(user_id));

Ответ

В DDL стоит заменить Float64 для денег и отказаться от партиционирования по amount. Репликацию, ключ сортировки и шардирование нужно проверить отдельно.

Для сумм обычно выбирают Decimal с подходящим масштабом, а для обслуживания истории — PARTITION BY toYYYYMM(created_at). Партиционирование по денежной величине создаёт множество разделов; floating-point ключи партиций также ограничены настройками ClickHouse.

ORDER BY (transaction_id) полезен не для всех аналитических фильтров: ключ выбирают по запросам. cityHash64(user_id) размещает события пользователя на одном шарде, но возможны горячие пользователи. ReplicatedMergeTree() без аргументов требует корректных стандартных путей и имён реплик; ON CLUSTER распространяет DDL, а не автоматически исправляет конфигурацию.

Источник: clickhouse.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее