Size: a a a

ClickHouse не тормозит

2020 August 13

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dj
всем добрый день ещё раз (особенно тем у кого функциональщина головного мозга =) )

есть таблица EAV в виде
datadatetime, pk1, textualpk1, textualpk2, keycolumn, valuecolumn

кардиналити на pk1 высокий, на key не очень.

в целях отчетности она пивот-иться в вид:
pk1, textualpk1, textualpk2, keycolumn, valuedate1, valuedate2, valuedate3

, пока запрос такой.

with [toDate('2020-04-06') , toDate('2020-04-07') , toDate('2020-04-08')] as "report_dates" 
select pk1, keycolumn,
any("textualpk1") as "textualpk1" , -- very fat strings
any("textual2pk1") as "textual2pk1" , -- very fat strings
(groupArrayInsertAt(Null, 3)(tuple(toNullable("keycolumn")), toUInt32(indexOf("report_dates" , toDate("datadatetime")) -1)).1 as "valuecolumn")[1] as "2020-04-06" ,
"param_values"[2] as "2020-04-07" ,
"param_values"[3] as "2020-04-08"
from keyvalues
group by "pk1" , "keycolumn";

когда строк комбинаций pk1*key очень много жрет память 125 млн строк на 22 ГБ в виду очень Жирных текстовых колонок.
можно как нибудь умнее переписать?

PS. в память словарь с pk1, textualpk1 не влезает. в нашей версии ssd_cache ещё не подвезли.
есть оптимизация  -- group by использует индекс, может запрос вообще стримабл можно сделать?
источник

D

Dj in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
есть оптимизация  -- group by использует индекс, может запрос вообще стримабл можно сделать?
#1 будет ли эта оптимизация работать при наличии where pk1 IN (xxx) — большой IN
#2 чтобы эта оптимизация работала надо докинуть keycolumn в конец индекса, и все?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Sergey Lossev
Т.е. Enum8 был расширен полем 'dcm'

В итоге WHERE по этому значению не работает напрямую
SELECT *
FROM db.tb
WHERE ProjectID==7
AND src=='dcm'


И нужно делать инвертированный фильтр
SELECT *
FROM db.tb
WHERE ProjectID==7
AND not (src=='hz' OR src=='ga' OR src=='bq' OR src=='ym' OR src=='adriver' OR src=='sizmek' OR src=='weborama' OR src=='crm')


Но ведь это же черезжопство...
Явно какая-то ошибка
ну еще один баг https://github.com/ClickHouse/ClickHouse/issues/13675

detach / attach помогает
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dj
#1 будет ли эта оптимизация работать при наличии where pk1 IN (xxx) — большой IN
#2 чтобы эта оптимизация работала надо докинуть keycolumn в конец индекса, и все?
не знаю
источник

A

Aleks in ClickHouse не тормозит
Подскажите как можно поменять Uint64 в string в DataGrip выдает timeout а без этого не выдает данные 🙁 Или как можно их вернуть?
источник

SC

Smoked Cheese in ClickHouse не тормозит
toString(column)?
источник

SC

Smoked Cheese in ClickHouse не тормозит
почему ты решил что проблема именно из-за типа?
источник

SC

Smoked Cheese in ClickHouse не тормозит
таймаут пробовал увеличивать?
источник

SL

Sergey Lossev in ClickHouse не тормозит
Это равносильно перезапуску КХ?
источник

A

Alex in ClickHouse не тормозит
Прошу прошения, что снова встреваю (( подскажите пожалуйста по синтаксису вложенных запросов, как правильно переписать пример

SELECT
      t1.field1,
      (select t2.field2, t2.field3
        from table2 t2 where t2.field = t1.field1
      )
FROM table1 t1

чтобы он стал рабочим? ругается что не видит t1.field1 во вложенном запросе...
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Sergey Lossev
Это равносильно перезапуску КХ?
да
источник

pk

papa karlo in ClickHouse не тормозит
Alex
Прошу прошения, что снова встреваю (( подскажите пожалуйста по синтаксису вложенных запросов, как правильно переписать пример

SELECT
      t1.field1,
      (select t2.field2, t2.field3
        from table2 t2 where t2.field = t1.field1
      )
FROM table1 t1

чтобы он стал рабочим? ругается что не видит t1.field1 во вложенном запросе...
для начала поджойнить t1 на t2
источник

SL

Sergey Lossev in ClickHouse не тормозит
Отлично. Запланирую тогда на ночь перезапуск )
источник

A

Alex in ClickHouse не тормозит
papa karlo
для начала поджойнить t1 на t2
от джойнов я и пытаюсь уйти
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Alex
Прошу прошения, что снова встреваю (( подскажите пожалуйста по синтаксису вложенных запросов, как правильно переписать пример

SELECT
      t1.field1,
      (select t2.field2, t2.field3
        from table2 t2 where t2.field = t1.field1
      )
FROM table1 t1

чтобы он стал рабочим? ругается что не видит t1.field1 во вложенном запросе...
дада в чатик писать нельзя. только читать
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Alex
Прошу прошения, что снова встреваю (( подскажите пожалуйста по синтаксису вложенных запросов, как правильно переписать пример

SELECT
      t1.field1,
      (select t2.field2, t2.field3
        from table2 t2 where t2.field = t1.field1
      )
FROM table1 t1

чтобы он стал рабочим? ругается что не видит t1.field1 во вложенном запросе...
не поддерживает коррелированные подзапросы КХ. Внешние словари м.б. ?
источник

A

Alex in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
не поддерживает коррелированные подзапросы КХ. Внешние словари м.б. ?
а как быть? джойнить не вариант, там их 5 штук второстепенных таблиц... сейчас пробовали joinGet - падаем по нехватке оперативки
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Alex
а как быть? джойнить не вариант, там их 5 штук второстепенных таблиц... сейчас пробовали joinGet - падаем по нехватке оперативки
Внешние словари ?
источник

A

Alex in ClickHouse не тормозит
а чем это лучше JoinGet, словари тоже загрузятся в оперативку и так же ее забьют... (по крайней мере в документации написано что очень похоже работает)
источник

NK

Nursultan Kariev in ClickHouse не тормозит
Alex
а как быть? джойнить не вариант, там их 5 штук второстепенных таблиц... сейчас пробовали joinGet - падаем по нехватке оперативки
Технически, можно попробовать через union all и группировку, но затраты оперативки будут примерно одинаковые (наверное, точно не уверен)
источник