184 похожих чатов

Коллеги, и снова я с вопросами :) Есть кейс, описанный еще

в 2019 году в issue: https://github.com/ClickHouse/ClickHouse/issues/7895

den crane отвечал на него.
У меня есть похожая ситуация, но чуть другая:
Есть таблица на 200 млн. строк. В ней есть поле ID с типом UUID (это важно). При попытке посчитать количество уникальных ID (требуется именно точное значение)
select uniqExact(ID) from table
запрос либо выполнится (от 30 до 40 сек), либо просто упадет по нехватке памяти буквально через секунду после старта. Если же делать отбор по строке, или числовому полю - все отрабатывает без out-of-memory,

Собственно, вопрос - uniqExact так и остался медленным и нет никакого "импортозамещения" от него? :)
ver: version 22.3.2.1

10 ответов

39 просмотров
Алексей-Фирсов Автор вопроса

@den_crane, подскажите, ничего не изменилось с тех пор? Особенно интересует момент с UUID, уж очень медленно по нему считается uniqExact....

Алексей Фирсов
@den_crane, подскажите, ничего не изменилось с тех...

нет, ничего, и планов менять нет. Зачем вам Exact? Для того чтобы побороть проблему памяти можно считать кусками select uniqExactIf(a, cityHash64(a)%5=0) from + select uniqExactIf(a, cityHash64(a)%5=1)from .. select uniqExactIf(a, cityHash64(a)%5=4)from

Алексей-Фирсов Автор вопроса
Denny [Altinity]
нет, ничего, и планов менять нет. Зачем вам Exact?...

У нас поступают данные и заказчику нужны именно точные количества присланных данных...

Алексей-Фирсов Автор вопроса
Алексей Фирсов
Ну это все равно недопустимо долго.....

никто uniqExact не использует для UUID( это же оверкил для аналитики

Алексей Фирсов
Ну это все равно недопустимо долго.....

есть небольшой хак которым иногда пользуемся select uniqExact(device) from ... => 5.2 sec select uniqExact(cityHash64(device)) from ... => 3.4 sec

Алексей-Фирсов Автор вопроса
Konstantin Ilchenko
никто uniqExact не использует для UUID( это же ове...

пробовали его в UInt128 переводить, и прочие бубны - все равно долго...

Konstantin Ilchenko
есть небольшой хак которым иногда пользуемся sele...

это коллизии, и неверный результат, проще сразу uniq

Denny [Altinity]
это коллизии, и неверный результат, проще сразу un...

это сколько данных должно быть для колизии, пока за 3 года было 0, около 20 млрд уников

Konstantin Ilchenko
это сколько данных должно быть для колизии, пока з...

в смысле? хеш 64 бит это 50% вероятность коллизии на 2 млрд.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта