нужно, чтобы файлы в таблице были выстроены определённом порядке: 'NV' - всегда всплывали наверх, а затем уж всё остальное (в частности 'Online'). Одновременно с этим, хочу использовать и второе поле сортировки - дату продажи (не спрашивайте, зачем)
Пытаюсь указать обратный порядок сортировки в секции ORDER BY, но создавать такое не хочет, ругается:
CREATE TABLE db.sale (
-- ...
filetype String,
sale_date Date
-- ...
) ENGINE = MergeTree()
PARTITION BY
(filetype, toYYYYMMDD(sale_date))
ORDER BY
(filetype DESC, sale_date)
SETTINGS
index_granularity = 8192
Пишет ошибку в районе DESC, sale_date)
Приходится извращаться таким образом
(внимание на секцию ORDER BY):
CREATE TABLE db.sale (
-- ...
filetype String,
sale_date Date
-- ...
) ENGINE = MergeTree()
PARTITION BY
(filetype, toYYYYMMDD(sale_date))
ORDER BY
((filetype=='NV'?'0':(filetype=='Online'?'1':'2')), sale_date)
SETTINGS
PARTITION BY
(filetype, toYYYYMMDD(sale_date))
ORDER BY
((filetype=='NV'?'0':(filetype=='Online'?'1':'2')), sale_date)
SETTINGS
index_granularity = 8192
Шохарактерно, таблицу создаёт и не ругается
Что не так в синтаксисе? Или наоборот - всё верно, и другого способа нет?
ORDER BY xxx DESC нужно писать уже в самом запросе, он будет использовать индекс нормально. неважно что там в таблице физически сначала NV и потом Online или наоборот - нет. ну и без ORDER BY в SELECT запросе никто вам ничего не гарантирует в никакой базе.
Обсуждают сегодня