Size: a a a

ClickHouse не тормозит

2021 February 14

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Required Optional
Попробывал. Работает. Только возник вопрос что делать если выбираются миллиарды строк. Вылетит по ограничению памяти - как пить дать... Хотелось бы найти возможность агригирововать в массив/вектор и на последнем селекте схлопнуть в одно значение...
Вы бы пример сделали create table /insert . Иначе я вообще не могу понять что вы делаете
источник

RO

Required Optional in ClickHouse не тормозит
Dmitry Titov
А такое вам подходит?

 select avgArray(a) from (select [1,2] a union all select [3,4]);
Вот не совсем дело в том, что агрегация идет на нескольких уровнях по разным ключам. Но за наводку спасибо попробыю расширить до avgArrayMerge и avgArrayState :)
источник

RO

Required Optional in ClickHouse не тормозит
ok
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Nikolay Matrosov
Подключение по https, я где-то натыкался, что это из-за того, что в этом варианте нет сессий.
так date_time_input_format можно задать в профиле пользователя, дажe default , сразу для всех
источник

NM

Nikolay Matrosov in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
так date_time_input_format можно задать в профиле пользователя, дажe default , сразу для всех
Вот бы понять как это сделать в managed CH в яндекс облаке. Но возможно это вопрос не для этого чата.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
им никто не пользуется, он полусырой

его запили китайские товарищи которые его используют для хранения системного каталога (таблиц /  партов), доку им просто лень писать
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Michael M
переписал на FexedString(32) . Но возник другой затык:

INSERT INTO users (id, password, email, ip4, ip6, created_time) VALUES (?, ?, ?, ?, ?, NOW())

выдаёт ошибку
block: expected 6 arguments (columns: id, password, email, ip4, ip6, created_time), got 5

NOW() почему-то не считается за аргумент. тут https://clickhouse.tech/docs/ru/sql-reference/statements/insert-into/ пишут, что вроде должен now() раьботать.
now() вычисляется в клиенте в native протоколе, просто кладите время из go, или в таблице default now()
есть values и есть values, во втором now() нельзя
первый обрабатывается AST парсером и ограничен в размере , второй стрим-парсером (бесконечный размер), go шлет в native протоколе значения в потоке байт, а не строки.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Michael M
со строками String наверное нехорошо получится при хранении захэшированного пароля, ибо "ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными." https://clickhouse.tech/docs/ru/sql-reference/statements/insert-into/

Хотя проверил, пробелы не удалились не в String ни тем более в FixedString
>ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными.

хахаха, это вообще не про это.

В КХ можно послать запрос и поток данных в любом формате сразу за ним, типа

insert into .... FORMAT CSV aaaa,bbb
или
insert into .... FORMAT CSV
aaaa,bbb


так вот, КХ отсечет перревод строки и пробел и получится
insert into .... FORMAT CSVaaaa,bbb в обоих случаях, поэтому если вам нужен проблел, кодируйте или используйте кавычки
insert into .... FORMAT CSV " aaaa",bbb

ну и есть FORMAT VALUES
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
go-driver работает вообще по другому, он уже посылает native, там нет строк, никто ничего не парсит и не преобразует.
String уже лежит как поток байт с длиной в первом байте (LEB128)
источник

RO

Required Optional in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
Вы бы пример сделали create table /insert . Иначе я вообще не могу понять что вы делаете
│ BANK01 │ [-382027.7277729492,-462555.7492099457,-464911.66043786623,-462028.9013549423,-461222.0658594389,-459110.2605309143,-462110.13541677856,-474592.76222924807,-472756.2056711655,-472985.6387689438,-476655.1002396088,-482372.5853895874,-481029.5939890137,-599362.135541687,-593322.0785178833,-593516.9220861206,-591159.5291293946,-582582.145520401,-580697.4547926636,-584521.949050354,-579132.4638452148,-579977.796850586,-577249.4227490844,-576361.7331831437,-584666.8616625976,-680712.1889024659,-673691.625566574,-674348.8167692871,-673912.3229681397,-674355.0927485505,-669571.1525837097,-655032.92269664,-659156.6018437329,-657171.50569413,-650312.4031078491,-650822.4176351929,-643141.0352939024,-738160.1845296021,-736548.4970706176,-745087.2054772186,-748903.183479065,-750003.6290894928,-763329.4727076415,-748016.6473790626,-745552.4676313477,-749724.0300841522,-752045.1437392501,-757000.6563478851,-754129.3921060485,-832330.8844984436,-831333.8082076836,-825409.120256775,-829895.7014300537,-833415.4122294617,-833277.9486544189,-805501.6971527404,-800706.0400564575,-798021.5948696594,-804815.7560373535,-801515.1559024963,-862278.6482202759,-881722.4348654785,-845864.8886193847,-855356.3467983856,-912812.9479505005,-928547.2836486816,-882645.851282959,-894745.1470905456,-931645.04449823,-951065.2575427399,-887260.1255637894,-900246.0588118896,-933507.8480134363,-953290.3289089355,-867605.5404692993,-877811.9440755615,-884218.4342084274,-903341.6490632325,-809289.4401252441,-827456.7927196579,-831405.445302124,-838873.594312439,-743917.5992837982,-751565.9112805176,-747664.854947937,-757428.9294031982,-653039.0601838989,-665426.056008728,-658492.2253411255,-663875.5618041992,-554464.4786547852,-560313.7918171769,-546460.238678772,-555858.1419050789,-441599.183900177,-449886.06819848635,-430999.7116485901,-439871.0551259155,-318418.6896154709,-323907.07263095095,-298425.5869941864,-304305.61327981565,-181437.716723526,-184433.62062892914,-155123.88539707827,-157799.87671917723,-30966.613309368135,-32062.133894329072] │
└────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

идея получить что-то типа

┌─csa────┬─MtmAvg───┐
│ BANK01 │-хххх.ххх │
└────────┴──────────┘

попутно профикcив баг с sumForEach
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Required Optional
│ BANK01 │ [-382027.7277729492,-462555.7492099457,-464911.66043786623,-462028.9013549423,-461222.0658594389,-459110.2605309143,-462110.13541677856,-474592.76222924807,-472756.2056711655,-472985.6387689438,-476655.1002396088,-482372.5853895874,-481029.5939890137,-599362.135541687,-593322.0785178833,-593516.9220861206,-591159.5291293946,-582582.145520401,-580697.4547926636,-584521.949050354,-579132.4638452148,-579977.796850586,-577249.4227490844,-576361.7331831437,-584666.8616625976,-680712.1889024659,-673691.625566574,-674348.8167692871,-673912.3229681397,-674355.0927485505,-669571.1525837097,-655032.92269664,-659156.6018437329,-657171.50569413,-650312.4031078491,-650822.4176351929,-643141.0352939024,-738160.1845296021,-736548.4970706176,-745087.2054772186,-748903.183479065,-750003.6290894928,-763329.4727076415,-748016.6473790626,-745552.4676313477,-749724.0300841522,-752045.1437392501,-757000.6563478851,-754129.3921060485,-832330.8844984436,-831333.8082076836,-825409.120256775,-829895.7014300537,-833415.4122294617,-833277.9486544189,-805501.6971527404,-800706.0400564575,-798021.5948696594,-804815.7560373535,-801515.1559024963,-862278.6482202759,-881722.4348654785,-845864.8886193847,-855356.3467983856,-912812.9479505005,-928547.2836486816,-882645.851282959,-894745.1470905456,-931645.04449823,-951065.2575427399,-887260.1255637894,-900246.0588118896,-933507.8480134363,-953290.3289089355,-867605.5404692993,-877811.9440755615,-884218.4342084274,-903341.6490632325,-809289.4401252441,-827456.7927196579,-831405.445302124,-838873.594312439,-743917.5992837982,-751565.9112805176,-747664.854947937,-757428.9294031982,-653039.0601838989,-665426.056008728,-658492.2253411255,-663875.5618041992,-554464.4786547852,-560313.7918171769,-546460.238678772,-555858.1419050789,-441599.183900177,-449886.06819848635,-430999.7116485901,-439871.0551259155,-318418.6896154709,-323907.07263095095,-298425.5869941864,-304305.61327981565,-181437.716723526,-184433.62062892914,-155123.88539707827,-157799.87671917723,-30966.613309368135,-32062.133894329072] │
└────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

идея получить что-то типа

┌─csa────┬─MtmAvg───┐
│ BANK01 │-хххх.ххх │
└────────┴──────────┘

попутно профикcив баг с sumForEach
а если массив получается из сотен тысяч, то не дешевле сделать arrayJoin добавить позицию в groupby с помощью arrayEnumerate, просто посчитать sum GROUP BY csaId, scenario,trade, position а потом снаружи посчитать avg
источник

RO

Required Optional in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
а если массив получается из сотен тысяч, то не дешевле сделать arrayJoin добавить позицию в groupby с помощью arrayEnumerate, просто посчитать sum GROUP BY csaId, scenario,trade, position а потом снаружи посчитать avg
да пробывал. Проблема тут такая: если сразу распаковывать массив, то квери будет длиться довольно долго. Проще работать с массивами на каждом этапе и в конце схлопывать в одно значение - работает намного быстрее... И экономичнее. Для линейных метрик работает просто класс. Только если добавляем нелинейность все летит в таратары... думал сделать преагрегацию в массив xxxState на всех уровнях кроме последнего. Но не влазит причем КХ ругается на аргумент лямбды функции...
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
это arrayMap(x -> avgState(mtms[x]), arrayEnumerate(mtms)) AS mtms,
=== arrayMap(x -> avgState(x),mtms) AS mtms,

но смысла делать массив avgState из массива нет никакого, ну хранилось в массиве [1,15] а будет [1,15] только с лишним байтом
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
вот хранится у вас

┌───────Date─┬─trade─┬──mtms────────────────────────────────
│ 2019-04-15 │     0 │ [-173183.03125,-160897.515625,-187025.546875,-191051.421875,
│ 2019-04-15 │     0 │ [1]

что нужно посчитать? среднее от всех значений mtms ?
источник

RO

Required Optional in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
это arrayMap(x -> avgState(mtms[x]), arrayEnumerate(mtms)) AS mtms,
=== arrayMap(x -> avgState(x),mtms) AS mtms,

но смысла делать массив avgState из массива нет никакого, ну хранилось в массиве [1,15] а будет [1,15] только с лишним байтом
Разве? Если я делаю так то получается что там гне все так просто:
SELECT
   avgArrayState(arrayMap(x -> (x * factor), mtms)) AS mtms,
   csaId,
   scenario,
   trade
FROM mtms
WHERE (toUInt64(csaId) IN (1)) AND (toUInt64(trade) IN (0)) AND (((Date IN ('2019-04-15')) AND (commit IN (1))) OR ((Date IN ('2019-04-16')) AND (commit IN (1))))
GROUP BY
   csaId,
   scenario,
   trade
LIMIT 2

Query id: 600b7084-cfe2-4e73-832a-e2424d502d9a

┌─mtms─┬─csaId─┬─scenario─┬─trade─┐
│ �����     │     1 │     1924 │     0 │
│ @�p�A� │     1 │     1551 │     0 │
└──────┴───────┴──────────┴───────┘

2 rows in set. Elapsed: 0.022 sec. Processed 16.38 thousand rows, 3.81 MB (748.90 thousand rows/s., 174.16 MB/s.)
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Required Optional
Разве? Если я делаю так то получается что там гне все так просто:
SELECT
   avgArrayState(arrayMap(x -> (x * factor), mtms)) AS mtms,
   csaId,
   scenario,
   trade
FROM mtms
WHERE (toUInt64(csaId) IN (1)) AND (toUInt64(trade) IN (0)) AND (((Date IN ('2019-04-15')) AND (commit IN (1))) OR ((Date IN ('2019-04-16')) AND (commit IN (1))))
GROUP BY
   csaId,
   scenario,
   trade
LIMIT 2

Query id: 600b7084-cfe2-4e73-832a-e2424d502d9a

┌─mtms─┬─csaId─┬─scenario─┬─trade─┐
│ �����     │     1 │     1924 │     0 │
│ @�p�A� │     1 │     1551 │     0 │
└──────┴───────┴──────────┴───────┘

2 rows in set. Elapsed: 0.022 sec. Processed 16.38 thousand rows, 3.81 MB (748.90 thousand rows/s., 174.16 MB/s.)
>Разве?
400%
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Required Optional
Разве? Если я делаю так то получается что там гне все так просто:
SELECT
   avgArrayState(arrayMap(x -> (x * factor), mtms)) AS mtms,
   csaId,
   scenario,
   trade
FROM mtms
WHERE (toUInt64(csaId) IN (1)) AND (toUInt64(trade) IN (0)) AND (((Date IN ('2019-04-15')) AND (commit IN (1))) OR ((Date IN ('2019-04-16')) AND (commit IN (1))))
GROUP BY
   csaId,
   scenario,
   trade
LIMIT 2

Query id: 600b7084-cfe2-4e73-832a-e2424d502d9a

┌─mtms─┬─csaId─┬─scenario─┬─trade─┐
│ �����     │     1 │     1924 │     0 │
│ @�p�A� │     1 │     1551 │     0 │
└──────┴───────┴──────────┴───────┘

2 rows in set. Elapsed: 0.022 sec. Processed 16.38 thousand rows, 3.81 MB (748.90 thousand rows/s., 174.16 MB/s.)
если вы клиенты альтинити, то проще в issue/ митинге обсудить
источник

RO

Required Optional in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
если вы клиенты альтинити, то проще в issue/ митинге обсудить
Думал есть известный вариант. Спасибо будем пробывать через вас официально.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
может и есть, я просто знал математику когда-то на уровне 3го класса и уже забыл, я мыслю на языке SQL, я например не знаю что такое "нелинейность"
источник

RO

Required Optional in ClickHouse не тормозит
линейная функция это a*x+b*y+c=0 все функции, которые не могут представлены так с выбором параметров a b c нелинейные, например x^2. Одно из главных свойств линейности - вы можете применить на разных подмножествах, а потом применить функцию на результаты этих подмножеств и результат будет верен на объедении этих подмножеств. Для нелинейных функций это не верно.
Пример линейной функции - сумма если возьмем множество 1 2 3 4 5  то сумма(сумма(1,2),сумма(3,4,5)=сумма(1,2,3,4,5)
Пример нелинейной функции - среднее: среднее(среднее(1,2),среднее(3,4,5)) != среднее(1,2,3,4,5) так как 3,75!=3
источник