DC
есть таблица 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"когда строк комбинаций pk1*key очень много жрет память 125 млн строк на 22 ГБ в виду очень Жирных текстовых колонок.
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";
можно как нибудь умнее переписать?
PS. в память словарь с pk1, textualpk1 не влезает. в нашей версии ssd_cache ещё не подвезли.