Как эффективно изменить порядок составленного первичного ключа в Clickhouse

У меня есть таблица со схемой

CREATE TABLE traffic (date Date, val1 UInt64, 'val2' UInt64 ...) ENGINE = ReplicatedMergeTree (date, (val1, val2), 8192);

ключ раздела здесь дата. Я хочу изменить порядок с (val1, val2) на (val2, val1)

Я знаю только один способ - переименовать эту таблицу в someting (traffic_temp), создать таблицу с именем «trafic» и упорядочить (val2, val1) и скопировать данные из temp в трафик, а затем удалить временную таблицу.

Но набор данных огромен, есть ли лучший способ сделать это?


person Tomyhill    schedule 24.11.2020    source источник


Ответы (1)


По-другому никак. Только 1_.

Вы можете использовать clickhouse-copier, но он делает то же самое insert select

person Denny Crane    schedule 24.11.2020
comment
Один дополнительный вопрос. Скажем, моя таблица имеет порядок в моде Order (val1, val2, val3), теперь большая часть моего запроса select работает, когда ключи предоставляются указанным выше способом (для 90% случаев использования это идеально), но для других 10% случаев пользователь не имеет значения начального ключа (val1) и предоставляет val3. Таким образом, производительность явно плохая, но скажем, хочу ли я обслужить это также, не меняя схему? Возможно ли это в какой-то степени ??? Я хочу несколько удовлетворить оба случая и немного повысить производительность для второго варианта использования. - person Tomyhill; 24.11.2020
comment
Мощность val3 относительно высока (около 20-40 тыс.), Поэтому она оставалась последней в порядке расположения схемы. - person Tomyhill; 24.11.2020
comment
Но могу ли я немного улучшить производительность второго варианта использования! - person Tomyhill; 24.11.2020
comment
Вы можете попробовать пропустить индексы для val3. Иногда (очень редко) может помочь индекс пропуска. В этом случае я использую дополнительные таблицы для имитации инвертированных индексов. - person Denny Crane; 24.11.2020
comment
Я попытался пропустить индекс, да, с точки зрения производительности, я не увидел никакого прироста, но количество обработанных строк почти уменьшилось до половины, я считаю, что это полезно для снижения ввода-вывода и потребления процессора, верно ?? - person Tomyhill; 25.11.2020