Size: a a a

ClickHouse не тормозит

2019 December 12

SS

Sergey Son in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
TestTable для чего? там для лежат какие-то признаки для диапазонов?
Пример из жизни. Есть таблица заказов у которой есть колонка даты начала доставки и дата окончания доставки ( интервал ожидания доставки ) есть менеджер который хочет видеть сколько за каждый день есть ожидающих заказов, при этом имеет возможность выбрать несколько не пересекающихся интервалов типа текущий месяц и 2 месяца назад. Запрос формирует таблицу в которой в каждой строке есть идентификатор заказа и день если он был в интервале ожидания
источник

RM

Ruslan Moldabekov in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
Теоритически можно написать UDF даже на баше и сделать ее executable словарем
Интересно
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Sergey Son
Пример из жизни. Есть таблица заказов у которой есть колонка даты начала доставки и дата окончания доставки ( интервал ожидания доставки ) есть менеджер который хочет видеть сколько за каждый день есть ожидающих заказов, при этом имеет возможность выбрать несколько не пересекающихся интервалов типа текущий месяц и 2 месяца назад. Запрос формирует таблицу в которой в каждой строке есть идентификатор заказа и день если он был в интервале ожидания
я понял, нужны типа дни, ясно. Это проще на клиенте нагенерить. у range есть ограничение на 100млн в блоке, я наступал
источник

SS

Sergey Son in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
я понял, нужны типа дни, ясно. Это проще на клиенте нагенерить. у range есть ограничение на 100млн в блоке, я наступал
в него не упираемся интервал в 100М дней выбрать не получится
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Mykola
Народ, подскажите нубу, начинающему познавать clickhouse.


Делаю поиск по координатам (geospatial)

Структура таблицы:

CREATE TABLE log (
       
uuid UUID,
       
timestamp DateTime,
       
longitude Float64,
       
latitude Float64
   )
   ENGINE = MergeTree
   PARTITION BY toYYYYMM(timestamp)
   ORDER BY (longitude, latitude)

Запрос:

SELECT *
FROM log
WHERE (longitude >=
$minLon) AND (longitude <= $maxLon) AND (latitude >= $minLat) AND (latitude <= $maxLat)
AND (greatCircleDistance(longitude, latitude, 35.18694, 47.7442) <=
$radius)
ORDER BY timestamp ASC
LIMIT 10


Сначала тормозило если использовать в WHERE только greatCircleDistance, потом догадался, что нужно сделать индекс на longitude, latitude и в WHERE допольнительно по этим полям фильтровать.

Вопросы:
1) Возможно есть какой то более родной способ оптимизировать скорость greatCircleDistance, так что бы не фильтровать по полям longitude, latitude, или и так норм?
2) Мне так же иногда нужно делать выборки по uuid и там получется полный скан и тормозит.

SELECT COUNT(*) FROM log WHERE uuid='4c7210c1-45fa-4eac-aef5-7bf1c180bd07'

Направьте пожалуйста, как такое можно оптимизировать?
Возможно для этого как то подойдут "Индексы пропуска данных"?
В документации как то не подробно описано, пока не разобрался толком в них.
сделать вторую таблицу отсортированную по uuid (да положить все данные еще раз) (можно с помощью MV)

посмотрите на geoToH3 , уберовские шестиугольники h3 (для первой части)
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Lev
Подскажите плз. Есть таблица (a Date, b Value). Как в кликхаусе правильно выбрать строку вида (a Date, b Value, c Value) где с - значение в той же таблице, но из строки в которой a Date меньше, допустим, на 30 минут?
можно джойн (наверное asof джойн хорошо подходит), можно групбай, что делать если значений таких много?
источник

L

Lev in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
можно джойн (наверное asof джойн хорошо подходит), можно групбай, что делать если значений таких много?
Всм строчек или то, что что я обозвал c?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Lev
Всм строчек или то, что что я обозвал c?
если строк которые на 30мин меньше больше чем одна?
источник

L

Lev in ClickHouse не тормозит
limit 1. Меня устроит))) то, что подобное джоином делается-понятно. У меня просто в голове немного не укладывается как условие ON задать...
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Lev
limit 1. Меня устроит))) то, что подобное джоином делается-понятно. У меня просто в голове немного не укладывается как условие ON задать...
я понял, тут в любом случае декартово произведение получается, не решить эту задачу в КХ, не хватит памяти
источник

EM

Evgeny Makarov in ClickHouse не тормозит
Mykola
Народ, подскажите нубу, начинающему познавать clickhouse.


Делаю поиск по координатам (geospatial)

Структура таблицы:

CREATE TABLE log (
       
uuid UUID,
       
timestamp DateTime,
       
longitude Float64,
       
latitude Float64
   )
   ENGINE = MergeTree
   PARTITION BY toYYYYMM(timestamp)
   ORDER BY (longitude, latitude)

Запрос:

SELECT *
FROM log
WHERE (longitude >=
$minLon) AND (longitude <= $maxLon) AND (latitude >= $minLat) AND (latitude <= $maxLat)
AND (greatCircleDistance(longitude, latitude, 35.18694, 47.7442) <=
$radius)
ORDER BY timestamp ASC
LIMIT 10


Сначала тормозило если использовать в WHERE только greatCircleDistance, потом догадался, что нужно сделать индекс на longitude, latitude и в WHERE допольнительно по этим полям фильтровать.

Вопросы:
1) Возможно есть какой то более родной способ оптимизировать скорость greatCircleDistance, так что бы не фильтровать по полям longitude, latitude, или и так норм?
2) Мне так же иногда нужно делать выборки по uuid и там получется полный скан и тормозит.

SELECT COUNT(*) FROM log WHERE uuid='4c7210c1-45fa-4eac-aef5-7bf1c180bd07'

Направьте пожалуйста, как такое можно оптимизировать?
Возможно для этого как то подойдут "Индексы пропуска данных"?
В документации как то не подробно описано, пока не разобрался толком в них.
а что, сильно тормозит? сколько данных
может MergeTree вместо Log?
можете также попробовать что-то типа колонок с UTM зонами или Slippy Maps  (tiles) сделать и по ним дополнительно фильтровать
greatCircleDistance кстати недавно в 3 раза ускорили, правда вроде бы еще не в релизе (в changeloge нет) но в мастере https://github.com/ClickHouse/ClickHouse/pull/7307
источник

K

Khurshid in ClickHouse не тормозит
select  * from Table
where EventTime  > Now()  -   1 hour  

как сравнить ?
источник

M

Mykola in ClickHouse не тормозит
Evgeny Makarov
а что, сильно тормозит? сколько данных
может MergeTree вместо Log?
можете также попробовать что-то типа колонок с UTM зонами или Slippy Maps  (tiles) сделать и по ним дополнительно фильтровать
greatCircleDistance кстати недавно в 3 раза ускорили, правда вроде бы еще не в релизе (в changeloge нет) но в мастере https://github.com/ClickHouse/ClickHouse/pull/7307
Так вроде MergeTree и используется.
На самом деле первый вопрос не тормозит, я решил индексами это.
Тут скорее интересно какие best practice, если нужны к этим же данным запросы по другим полям оптимизировать, например вот поиск по uuid.

Вот предложили делать вторую такую же таблицу с другими индексами. Но это же получиться данные в 2 раза увеличатся, не очень вариант, если данных сотни терабайт.
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Khurshid
select  * from Table
where EventTime  > Now()  -   1 hour  

как сравнить ?
now() - interval 1 hour
источник

M

Mykola in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
сделать вторую таблицу отсортированную по uuid (да положить все данные еще раз) (можно с помощью MV)

посмотрите на geoToH3 , уберовские шестиугольники h3 (для первой части)
Вторая таблица это вариант, но у меня сейчас 200 терабайт данных и че то как то не охота из них делать 400 терабайт :)
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Mykola
Вторая таблица это вариант, но у меня сейчас 200 терабайт данных и че то как то не охота из них делать 400 терабайт :)
у вас 200ТБ из трех полей? Вам вторую таблицу можно сделать узкую, просто uuid и поля указатели на первичный ключ первой

ну и конечно КХ это не про точечный поиск по uuid.
источник

N

Nikolay in ClickHouse не тормозит
А у вас там вроде нет условия на партиции или есть ?
источник

pk

papa karlo in ClickHouse не тормозит
первое можно ускорить подходящим геохешом, если что-то известно про радиусы, второй запрос по той же таблице нормально работать не будет.
источник

M

Mykola in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
у вас 200ТБ из трех полей? Вам вторую таблицу можно сделать узкую, просто uuid и поля указатели на первичный ключ первой

ну и конечно КХ это не про точечный поиск по uuid.
Там полей штук 30.
Gzip архив данных весит примерно 200T.
Я надеюсь что в кликхаусе будет весить меньше :)
Пока пристреливаюсь, думаю на чем пилить это все.
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Mykola
Там полей штук 30.
Gzip архив данных весит примерно 200T.
Я надеюсь что в кликхаусе будет весить меньше :)
Пока пристреливаюсь, думаю на чем пилить это все.
КХ быстро делает group by. Если аналитических запросов не будет, тогда КХ тут вообще не к месту, и тогда кассандра.
источник