В DDL стоит заменить Float64 для денег и отказаться от партиционирования по amount. Репликацию, ключ сортировки и шардирование нужно проверить отдельно.
CREATE TABLE raw.local_transactions ON CLUSTER cluster_4x2 (
В 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.