
Alexander
26.04.2018
08:53:23
котелось бы вернуться к рзговору про "не менее 1000 записей в секунду", если есть разработчики движка, хотелось бы уточнений:
если вносить 1 или 10 или 100 или 1000 записей за INSERT, потом снимать с CH нагрузку и ждать сколь угодно долго, будет ли отличие в том, как это ляжет на диск?

Tima
26.04.2018
13:50:40
Есть ещё SYSTEM RELOAD DICTIONARY, подозреваю можно передать имя конкретного словаря, но не пробовал
А кто-нибудь пользуется superset-ом вместе с КХ? У меня простой запрос вида SELECT COUNT(*) работает, а запрос вида
SELECT mark, COUNT(*) FROM .... LIMIT 10 думает 30 секунд и пишет что превышет timeount. Хотя этот же запрос в консоле выполняется меньше чем за секунду. В логе КХ видно что запрос отрабатывает за меньше чем секунду, но что superset делает что-то ещё 30 секунд и в результате нифига.
Причем это именово вкладке "SQL Lab", в остальных режимах тоже думает, но всё равно показывает результат

Alexandr
26.04.2018
14:30:09
Всем привет. Помогите, пожалуста.
Имеются таблицы вида:
CREATE TABLE data.user_contacts
( date UInt32, user_id UInt32, site_id UInt32, timespan_start UInt32, timespan_end UInt32, timestamp_start DateTime, timestamp_end DateTime, date_day Date MATERIALIZED toDate(concat(substring(toString(date), 1, 4), '-', substring(toString(date), 5, 2), '-', substring(toString(date), 7, 2))))
ENGINE = MergeTree
PARTITION BY (date_day, site_id)
ORDER BY (date_day, site_id, timespan_start, timespan_end) SETTINGS index_granularity = 8192
CREATE TABLE data.events
( event_id String, site_id UInt32, date UInt32, timestamp_start DateTime, timestamp_end DateTime, quantity UInt32, total_event_id_duration UInt32, event_duration Int32 MATERIALIZED timestamp_end - timestamp_start, date_day Date MATERIALIZED toDate(concat(substring(toString(date), 1, 4), '-', substring(toString(date), 5, 2), '-', substring(toString(date), 7, 2))))
ENGINE = MergeTree
PARTITION BY date_day
ORDER BY (date_day, site_id, timestamp_start, timestamp_end, event_id) SETTINGS index_granularity = 8192
И запрос:
SELECT
event_id,
user_id,
date_day,
event_duration,
least(
timestamp_end,
timestamp_end_event
)- greatest(
timestamp_start,
timestamp_start_event
) AS intersected_duration,
total_event_id_duration
FROM
data.user_contacts ALL
INNER JOIN(
SELECT
events.event_id,
events.site_id,
events.date_day,
events.quantity,
events.timestamp_start AS timestamp_start_event,
events.timestamp_end AS timestamp_end_event,
event_duration,
total_event_id_duration
FROM
data.events
) events
USING(
date_day,
site_id
)
WHERE
date_day BETWEEN '2017-01-01' AND '2017-01-31'
AND
timestamp_start < timestamp_end_event
AND
timestamp_start_event < timestamp_end
Проблема заключается в большом потреблении оперативной памяти
Для справки:
1) ClickHouse server version 1.1.54380.
2) Данных в таблице data.user_contacts намного больше, чем информации в data.events
3) Индексы по непонятной причине используются только для ограничения data.user_contacts по датам и не участвуют в join
4) Пробовал создавать и такой индекс: (date_day, site_id) - результат не отличается от п.3
Подскажите, пожалуйста, как максимально эффективно соединить 2 таблицы по пересекающимся временным интервалам?