
Roman
21.08.2017
19:58:21
11 вечера ?

Alex
21.08.2017
20:01:12
это да ?
в итоге получается SELECT date, runningAccumulate(state) FROM (SELECT date, countState() AS state FROM table GROUP BY date ORDER BY date)

Kirill
21.08.2017
20:04:27
круто! спасибо огромное! а то весь мозг сломал себе уже)

Google

Rayan
22.08.2017
05:18:32
в CH можно вычислить моду?

Alexey
22.08.2017
06:38:37
Привет. Где можно больше прочитать про сжатие данных в ClickHouse? Например, у меня есть колонка, в которой храниться unix timestamp в миллисекундах, при вставке значение монотонно увеличивается. Может ли ClickHouse его эффективно сжать? Как?

Vsevolod
22.08.2017
06:40:11
любой алгоритм компрессии может
за счет сжатия повторяющихся частей

Kirill
22.08.2017
06:42:43

Rayan
22.08.2017
06:43:44
@kshvakov понятно, думал вдруг есть более интереснее решение

Alexey
22.08.2017
06:44:05
Это понятно. Вопросы в другом.
1. Как узнать что он применяется? Как это увидеть? Как узнать степень сжатия?
2. Есть ли возможность указать специфический алгоритм? "Любой алгоритм компрессии" будет не так эффективен в этом случае, как специфический на delta encoding.

Vsevolod
22.08.2017
06:48:25
компрессия указывается в конфиге zstd за счет FSE сожмет не особо хуже всех этих поделок с delta encoding, а гемора будет намного меньше кмк

Alexey
22.08.2017
06:54:21
http://www.vldb.org/pvldb/vol8/p1816-teller.pdf
Эта "поделка" от Facebook'а (авторов zstd, к слову) сжимает timestamp'ы гораздо лучше, и без "гемора".

Vsevolod
22.08.2017
06:57:22
я думал, речь идет о собственном выборе более удобной точки отсчета

Vladimir
22.08.2017
06:57:43

Alexey
22.08.2017
06:58:06
да, это про неё пейпер

Vsevolod
22.08.2017
06:58:44
ну и Facebook - это не авторы zstd, а примазавшиеся

Google

Vladimir
22.08.2017
06:59:15
Да, есть даже простые реализации на го
Которые наверное не сложно на плюсы переписать

Vsevolod
22.08.2017
06:59:15
писал zstd бешеный француз Yan Collet (который до этого написал lz4)

Vladimir
22.08.2017
06:59:45
https://github.com/dgryski/go-tsz

Alexey
22.08.2017
07:01:06

Vsevolod
22.08.2017
07:02:03
он написал zstd до прихода в фейсбук. я zstd еще тогда начинал использовать в своем проекте

Vladimir
22.08.2017
07:02:11
Короче достаточно сильно хочется разную компрессию по столбцам и для чисел вот реализацию гориллы

Vsevolod
22.08.2017
07:02:37
так она же не для чисел, а именно для монотонно возрастающих таймстампов

Alexey
22.08.2017
07:03:06
У меня именно так

Vsevolod
22.08.2017
07:03:14
не уверен, что ей не сплохеет, если таймстамп ВНЕЗАПНО уменьшится по сравнению с текущим (это надо статью внимательно читать)

Alexey
22.08.2017
07:04:02
Сжатие пострадает, но данные не поломаются
Ну и сжимать-то можно (и, наверное, нужно) позже, при слиянии и сортировке
> Как узнать что он применяется? Как это увидеть? Как узнать степень сжатия?
Вот этот вопрос остался. Я посмотрел все метрики, но как посчитать текущую степень сжатия таблицы или куска так и не понял

Рулон
22.08.2017
07:43:24
Доброе утро! Сколько должно быть в среднем блоков в фоне слияния
у меня 74 это нормально?

Vladimir
22.08.2017
08:00:59
я б посоветовал почитать реализацию на Го, она маленькая, простая
и работает
оно кстати работает и для float64 и для пар uint64/float64, uint32/float64

Google

Vladimir
22.08.2017
08:02:21
для малых изменений оно просто позволяет писать несколько бит на точку

Александр
22.08.2017
08:09:29
Ребят, по поводу replacing merge tree вопрос. Если делать апдейт по одной строке, то я так полагаю эта операция будет крайне дешевая для КХ т.к. фактически партиция в которой строка лежит не меняется?
Просто мне потребуется раз в 10 минут обновлять некоторое количество строк. Инсерты будут делаться по одной строке.

Tima
22.08.2017
08:14:13

Александр
22.08.2017
08:18:13
Просто не факт, что у меня будет такой поток данных на апдейт, я при всем желании больше 1к строк не выжму )
Да и строк у меня там будет не очень много

Tima
22.08.2017
08:25:32

Vladimir
22.08.2017
08:28:30
мне кажется нужно только думать не в масштабах строк, а в масштабах "количество INSERT'ов в секунду"
а сколько строк - да сколько получится за это время

Vladislav
22.08.2017
08:29:58
если я правильно понимаю, то проблема не в малом числе строк, а в большом количестве инсертов

Vladimir
22.08.2017
08:30:04

Vladislav
22.08.2017
08:30:16
мы решили у себя этой тулзой: https://github.com/nikepan/clickhouse-bulk

Vladimir
22.08.2017
08:30:17
а точнее в слиянии большого количества кусков
и как я понимаю, фактически 1 инсерт запрос делает 1 кусок
поэтому я выше и предложил подходить к вопросу как "инсертов в секунду"
а не "инсерты батчами по N строк"

Александр
22.08.2017
08:51:34
Ладно, подумаю как батчить все это добро. Просто по этим данным будет очень много агрегации проводиться в дальнейшем, ни mysql ни postgres с этим не справятся ) Данные нужны быстро, а данные из серии "общее время в системе" и пр., которое считается в фоне другими процессами
И проблема в том,что если есть 40к юзеров, то по каждому в разный промежуток времени поступают новые данные и после новой пачки данных это "общее время в системе" апдейтится.

Google

Aliaksandr
22.08.2017
09:18:40

Vladimir
22.08.2017
09:19:42

Vladislav
22.08.2017
10:24:28
Никто не сталкивался с проблемой репликации структуры таблицы на свеже поднятую машину? Чтобы не накатывать на каждую машину таблицу из некоторого скрипта, а чтобы она приезжала с других реплик.

Oleksandr
22.08.2017
10:29:22
было раз, попробуй сделать один инсерт, потом почему-то репликация начинает работать

Vladislav
22.08.2017
10:30:41
Не очень понял... Как это поможет стянуть определение таблицы с другой ноды?
Я имею в виду — есть ли способ получить определение таблицы с одной из других нод, чтобы не создавать её руками.

Oleksandr
22.08.2017
10:36:58
а, это вроде как невозможно
мы через salt + liquebase накатываем

Vladislav
22.08.2017
10:40:51
Ну у нас сейчас схема на s3 лежит и после alter-ов её надо не забывать менять, ищем более вменяемый способ :)

Alexander
22.08.2017
12:37:55
И еще посмотрите в https://clickhouse.yandex/docs/en/single/index.html#distributed-ddl-queries-on-cluster-section

Vladislav
22.08.2017
12:40:34
Ну с distributed насколько я понимаю нужно всё равно иметь local таблицу, если нода была в кластере и умерла, а после поднялась на замену пустая, то разве distributed закинет на неё все DDL исполнявшиеся?

Kirill
22.08.2017
12:40:55
Как можно "полечить" ошибку ?
2017.08.22 12:38:37.150005 [ 19 ] <Error> executeQuery: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Assertion violation: !_path.empty() in file "/home/robot-metrika-test/jenkins/workspace/clickhouse-packages-build/sources/contrib/libpoco/Foundation/src/File_UNIX.cpp", line 370, e.what() = Assertion violation (from 192.168.198.9:47588) (in query: INSERT INTO events

Vladislav
22.08.2017
12:45:27
Show create table судя по всему хорошее решение, он возвращает схему с учётом alter-ов, насколько я вижу. (Хотя в документации сказано, что возвращает query, которым была создАНА таблица)

Kirill
22.08.2017
13:35:31
Ошибка
Assertion violation: !_path.empty() in file
пока возникает только если запись идет с уделенной машины из другого ДЦ, локальные воркеры пишут (есть подозрение что началось все после обновление до последней версии). Это все немного печально, т.к. данные не доставляются

Alex
22.08.2017
13:36:23
С какой и до какой версии вы обновлялись?
локальные воркеры это в смысле запущенные на локалхосте?

Kirill
22.08.2017
13:38:30
c 54245 до 54276
да, те что на локалхост


M
22.08.2017
13:41:22
Добрый день. Версия клика 1.1.54276.
Упал сервер с ошибкой
2017.08.22 13:15:18.167509 [ 161 ] <Error> BaseDaemon: (from thread 148) Terminate called without an active exception
2017.08.22 13:15:18.167526 [ 161 ] <Error> BaseDaemon: ########################################
2017.08.22 13:15:18.167543 [ 161 ] <Error> BaseDaemon: (from thread 148) Received signal Aborted (6).
2017.08.22 13:15:18.381555 [ 161 ] <Error> BaseDaemon: 0. /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38) [0x7f8912317428]
2017.08.22 13:15:18.381569 [ 161 ] <Error> BaseDaemon: 1. /lib/x86_64-linux-gnu/libc.so.6(abort+0x16a) [0x7f891231902a]
2017.08.22 13:15:18.381576 [ 161 ] <Error> BaseDaemon: 2. clickhouse-server() [0x11cdd5d]
2017.08.22 13:15:18.381600 [ 161 ] <Error> BaseDaemon: 3. clickhouse-server(__cxxabiv1::__terminate(void (*)())+0x6) [0x37b17d6]
2017.08.22 13:15:18.381607 [ 161 ] <Error> BaseDaemon: 4. clickhouse-server() [0x37b1821]
2017.08.22 13:15:18.381617 [ 161 ] <Error> BaseDaemon: 5. clickhouse-server(ThreadPool::ThreadPool(unsigned long)+0x637) [0x300a487]
2017.08.22 13:15:18.381642 [ 161 ] <Error> BaseDaemon: 6. clickhouse-server(DB::MergingAggregatedMemoryEfficientBlockInputStream::MergingAggregatedMemoryEfficientBlockInputStream(std::vector<std::shared_ptr<DB::IBlockInputStream>, std::allocator<std::shared_ptr<DB::IBlockInputStream> > >, DB::Aggregator::Params const&, bool, unsigned long, unsigned long)+0xe58) [0x2f080a8]
2017.08.22 13:15:18.381653 [ 161 ] <Error> BaseDaemon: 7. clickhouse-server(DB::InterpreterSelectQuery::executeMergeAggregated(bool, bool)+0x174) [0x2e7e364]
2017.08.22 13:15:18.381663 [ 161 ] <Error> BaseDaemon: 8. clickhouse-server(DB::InterpreterSelectQuery::executeSingleQuery()+0x1a66) [0x2e81266]
2017.08.22 13:15:18.381671 [ 161 ] <Error> BaseDaemon: 9. clickhouse-server(DB::InterpreterSelectQuery::executeWithoutUnion()+0x58) [0x2e819e8]
2017.08.22 13:15:18.381679 [ 161 ] <Error> BaseDaemon: 10. clickhouse-server(DB::InterpreterSelectQuery::executeFetchColumns()+0x16dc) [0x2e839ec]
2017.08.22 13:15:18.381687 [ 161 ] <Error> BaseDaemon: 11. clickhouse-server(DB::InterpreterSelectQuery::executeSingleQuery()+0x32) [0x2e7f832]
2017.08.22 13:15:18.381695 [ 161 ] <Error> BaseDaemon: 12. clickhouse-server(DB::InterpreterSelectQuery::executeWithoutUnion()+0x1c5) [0x2e81b55]
2017.08.22 13:15:18.381703 [ 161 ] <Error> BaseDaemon: 13. clickhouse-server(DB::InterpreterSelectQuery::execute()+0x31) [0x2e81bb1]
2017.08.22 13:15:18.381710 [ 161 ] <Error> BaseDaemon: 14. clickhouse-server() [0x29c099c]
2017.08.22 13:15:18.381726 [ 161 ] <Error> BaseDaemon: 15. clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>)+0x1eb) [0x29c1b8b]
2017.08.22 13:15:18.381740 [ 161 ] <Error> BaseDaemon: 16. clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x1efc) [0x10f856c]
2017.08.22 13:15:18.381750 [ 161 ] <Error> BaseDaemon: 17. clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x32b) [0x10fa61b]
2017.08.22 13:15:18.381758 [ 161 ] <Error> BaseDaemon: 18. clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x2fe) [0x3421eee]
2017.08.22 13:15:18.381766 [ 161 ] <Error> BaseDaemon: 19. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x3416fff]
2017.08.22 13:15:18.381774 [ 161 ] <Error> BaseDaemon: 20. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x13b) [0x341d43b]
2017.08.22 13:15:18.381785 [ 161 ] <Error> BaseDaemon: 21. clickhouse-server(Poco::PooledThread::run()+0xb7) [0x3688287]
2017.08.22 13:15:18.381792 [ 161 ] <Error> BaseDaemon: 22. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x36542c5]
2017.08.22 13:15:18.381804 [ 161 ] <Error> BaseDaemon: 23. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f8912dc76ba]

Google


M
22.08.2017
13:41:22
При этом на кластере (5 шард) был запущен запрос, который съел 80% памяти на сервере, где упал сервер.
Свободной памяти было еще 40 гиг.
Я верно понимаю что это упал из за фейла при мердже?
Сужу по MergingAggregatedMemoryEfficientBlockInputStream
Как с этим в теории можно бороться? Сейчас высталены лимиты по max_threads чуть больше кол-ва ядер. Лимиты по памяти на запрос, выставлены в рамках чуть меньше объема оперативки
Ожидалось что при таких условиях будут отменяться запросы с нехваткой памяти
но повторюсь, что память до конца не выело
Так же, после обновления на новую версию
перестали компилиться запросы
Пример
2017.08.22 13:40:09.525391 [ 28 ] <Error> Compiler: Code: 0, e.displayText() = DB::Exception: Cannot compile code:
LD_LIBRARY_PATH=/usr/share/clickhouse/bin/ /usr/share/clickhouse/bin/clang -B /usr/share/clickhouse/bin/ -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -D_GLIB
CXX_USE_CXX11_ABI=1 -pipe -msse4.1 -msse4.2 -mpopcnt -std=gnu++1z -fno-omit-frame-pointer -Wall -Wnon-virtual-dtor -Werror -O3 -DNDEBUG -x c++ -march=native -shared -fPIC -fvisibility=hidden -fno-implement-in
lines -isystem /usr/share/clickhouse/headers/usr/local/include/ -isystem /usr/share/clickhouse/headers/usr/include/ -isystem /usr/share/clickhouse/headers/usr/include/c++/*/ -isystem /usr/share/clickhouse/heade
rs/usr/include/x86_64-linux-gnu/ -isystem /usr/share/clickhouse/headers/usr/include/x86_64-linux-gnu/c++/*/ -isystem /usr/share/clickhouse/headers/usr/local/lib/clang/*/include/ -I /usr/share/clickhouse/headers/
dbms/src/ -I /usr/share/clickhouse/headers/contrib/libcityhash/include/ -I /usr/share/clickhouse/headers/contrib/libdouble-conversion -I /usr/share/clickhouse/headers/contrib/libpoco/Foundation/include/ -I /usr/
share/clickhouse/headers/contrib/libboost/boost_1_62_0/ -I /usr/share/clickhouse/headers/libs/libcommon/include/ -include /usr/share/clickhouse/headers/dbms/src/Interpreters/SpecializedAggregator.h -o /opt/click
house/build//15056633568159347706_6876590312518736700.so.tmp /opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp 2>&1 || echo Exit code: $?
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:5:70: error: expected unqualified-id
decltype(AggregatedDataVariants::key64)::element_type, TypeList<DB::(anonymous namespace)::GroupArrayGeneralListImpl<DB::(anonymous namespace)::NodeGeneral, false»?
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:5:71: error: use of undeclared identifier 'anonymous'
decltype(AggregatedDataVariants::key64)::element_type, TypeList<DB::(anonymous namespace)::GroupArrayGeneralListImpl<DB::(anonymous namespace)::NodeGeneral, false»?
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:5:167: error: expected a type
decltype(AggregatedDataVariants::key64)::element_type, TypeList<DB::(anonymous namespace)::GroupArrayGeneralListImpl<DB::(anonymous namespace)::NodeGeneral, false»?
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:7:2: error: unknown type name 'AggregateColumns'
AggregateColumns &, const Sizes &, StringRefs &, bool, AggregateDataPtr) const;
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:4:27: error: expected unqualified-id
template void Aggregator::executeSpecialized<
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:22:71: error: expected unqualified-id
decltype(AggregatedDataVariants::key64)::element_type, TypeList<DB::(anonymous namespace)::GroupArrayGeneralListImpl<DB::(anonymous namespace)::NodeGeneral, false»?
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:22:72: error: use of undeclared identifier 'anonymous'
decltype(AggregatedDataVariants::key64)::element_type, TypeList<DB::(anonymous namespace)::GroupArrayGeneralListImpl<DB::(anonymous namespace)::NodeGeneral, false»?
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:22:168: error: expected a type
decltype(AggregatedDataVariants::key64)::element_type, TypeList<DB::(anonymous namespace)::GroupArrayGeneralListImpl<DB::(anonymous namespace)::NodeGeneral, false»?
^
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:23:3: error: type-id cannot have a name
method, arena, rows, key_columns, aggregate_columns, key_sizes, keys, no_more_keys, overflow_row);
^~~~~~
/opt/clickhouse/build//15056633568159347706_6876590312518736700.cpp:23:9: error: expected ')'
method, arena, rows, key_columns, aggregate_columns, key_sizes, keys, no_more_
...


Alex
22.08.2017
13:53:36
Небольшая просьба - стены текста лучше в чат не кидать ?Лучше создайте issue

M
22.08.2017
13:59:43
Это да, но если будет очередное падение тогда можно отловить условие воспроизведения. И на основе создать баг. Сейчас это просто стектрейс, который может даст подсказку куда рыть. Например, что при обновлении нужно также обновить gcc или устнановить новую версию... или если упал клик при мердже, когда было недостаточно памяти, то уменьшить потребление памяти в запросах и установить квоты. Цель была в этом.
Но по стектрейсу идей нет?

Alex
22.08.2017
14:04:04
судя по стектрейсу создаётся тредпул со слишком большим количеством потоков

Kirill
22.08.2017
14:18:52
В общем, удаленный воркер писал у нас в Distributed таблицу чтоб данные размазать, переключили на обычную ошибка с
Assertion violation: !_path.empty() in file
пропала

M
22.08.2017
14:20:58

Dmitrii
22.08.2017
14:30:30
иногда кликхаус возвращает 404 без объяснения причин на вполне, казалось бы, валидный запрос версия 1.1.54276
к примеру
select target_host, metric_name
from lalala
where job_id=1499707
group by target_host, metric_name
order by target_host, metric_name FORMAT JSONCompact
not found (404) что?
чего он не нашел?