- 01 April 2018 (80 messages)
-
-
У меня тут появился некоторый интерес по запуску ClickHouse в контейнерах и интересно было бы почитать о каких-нибудь success stories по этому поводу. Интересны, в первую очередь: rkt, porto, lxc ну и о docker тоже можно. По porto, по понятным причинам - это всё к Яндекс, кое что есть тут https://www.youtube.com/watch?v=2QJgCTF1cIE , но может где-то что-то есть ещё?
-
Ну все таки это про докер, и пока тут какие то печальные истории с оф образом кх в докерхабе, яндексоиды обещали делать сборки не на стороне докерхаба а у себя и должно стать все лучше
-
Я бы сказать честно лучше бы сам эти образы собирал в данном случае
-
В lxc ещё у меня крутиться тестовый кх, вроде никаких проблем не наблюдаю
-
запускать для production или для разработки?
-
Для создания нового продукта, что-то вроде cloud-native clickhouse ;)
-
Образ я могу создать, интересны некие подводные камни, как падает, насколько часто и почему и т.д.
-
Да вроде не падает, каких то подводных камней вроде тоже не было
-
память в основном
надо тюнить под "малый размер"
меньше background операций -
проблем с volumes я не заметил
но у меня не продакшен
у меня чисто тестовые среды -
Добрый день! Может кто-нибудь знает в каком направлении копать / как решить проблему? Используется async python драйвер, запросы отправляются в 4 потока. Сначала все нормально, но потомк вылезает ошибка
clickhouse_driver.errors.NetworkError: Code: 210. Device or resource busy (localhost:9000)
Сервер GCP, свежий, установлены только clickhouse, pandas, + python драйвер для кх. Понимаю, что скорее всего не под адресу, но все может кто сталкивался. -
-
А что за драйвер?
-
GitHub - mymarilyn/aioch: aioch - is a library for accessing a ClickHouse database over native interface from the asyncio
aioch - is a library for accessing a ClickHouse database over native interface from the asyncio - GitHub - mymarilyn/aioch: aioch - is a library for accessing a ClickHouse database over native int...
-
Судя по всему, aioch. И судя по сорцам либы, должен использоваться executor, т.е. асинхронность не нативная, а реализована на отдельных процессах/тредах/etc. Что логически наводит на мысль о том, почему ошибка возникла. Вывод: не делать к кх из питона асинхронные запросы, по крайней мере с этой либой. Попробуйте какой-нибудь асинхронный одбц клиент (если для кх реализован одбц интерфейс, не в курсе, есть ли он)
-
Но с одбц может получиться та же петрушка, так что особо я бы на него не надеялся
-
-
А зачем вам асинхронность вообще с кх? Так много конкурентных запросов?
-
Ещё и с пандасом, так что могу предположить, что нужно просто разово (+/-) загрузить результаты запроса
-
-
Раз тут зашло за клиенты CH, то может быть кто0то знает в чём может быть дело. Линкуюсь статически и пытаюсь создать соединение в лоб. Но, когда уничтожаются объекты Connection, ConnectionTimeouts и закрывается логгер Poco, бросается SIGSEGV на мьютексе. Нельзя использовать коннектшены как это делаю я или как-то нужно инициализировать и разрушать Poco явно?
https://pastebin.com/saHpsW25 -
Я бы залил все варианты как внешний словарь и одним запросом перебрал все комбинации на стороне бд
-
По крайней мере, попробовал бы:)
-
-
Добрый день!
На VPS на примонтированном диске случился зависон, в результате
<Error> (Data): Considering to remove broken part /mnt/volume-fra1-01/clickhouse//data/mybase/postback/20180401_20180401_1463046_1463046_0 because it's impossible to repair.
Файла по указанному пути не существует. Нагуглить пока ничего не удалось. -
-
овх сегодня ночью ? ну он потерял часть данных, ругнулся и пошел дальше работать, в чем собственно проблема ?
-
-
а проверку диска делали после рестарта ?
-
что там вообще с файлухой в итоге ?
-
-
у меня что то подобное писал но там реплика есть у кх и вроде как само все просралось, так все таки это ночное падение овх во франции?
-
-
-
сегодня поднял там один сервер у до
-
-
Был ребут после последнего обновления? В какой то версии что-то меняли в инит скрипте
-
-
-
-
-
-
Переписал все на asyncio / aiohttp и http клиент, не помогло
-
-
Администраторы чата, дабы содержать его в чистоте, рассмотрите возможность запуска сюда бота против спамеров - например вот
https://tgcreator.ru/bot/cleanerchatbotБот @cleanerchatbot - Chat Cleaner BotПривет! Я могу: • Удалять сообщения содержащие ссылки (vk.com,telegram.me,https://t.me и прочие) • Удалять стикеры, документы, фото, видео, аудио, голосовые, пересланные из каналов сообщения • Удалять сообщения за флуд - по умолчанию 3 сообщения в секунду • Удалять команды для ботов и прочее... Попробуй меня!
-
Всем добрый вечер! Уважаемые знатоки, подскажите одну вещь?
Есть кластер 4х2 (4 шарда, 2 реплики). Есть таблица ReplicatedMergeTree, поверх нее есть Distributed.
Мне необходимо раз в сутки чистить данные в этой таблице, которые старше недели от текущего дня. Ключ партиционирования - колонка с типом Date. Я на сервере могу выполнить запрос на получение всех кусков таблицы, но вопрос в том, что я получаю локальные куски...если мне нужн подчистить данные на всем кластере, то это мне ходить потребуется по всему кластеру? -
Что бы собрать информацию о чем чистить, т.к. partition в system.parts указывается как месяц, например 201802, а не как день...
-
-
Через DROP PARTITION
-
-
Только вот не понятно одно - нужно ли по кластеру ползать и собирать партиции, которые можно шлепнуть? )
-
Ну можно сделать detach и архивировать
-
Нам архив не требуется, т.к. там логи обработки данные, которые актуальны максимум три дня
-
Похоже придется по всему кластеру ездить и собирать партиции :( Еще проблема с тем, что запрос на удаление партиции реплицируется и тут как бы не знаешь где реплика, где что :) Нужно писать определялку (
-
Блин, судя по названиям партиций, Clickhouse при указании колонки типа Date в качестве ключа партиционирования наваливает данные в партции по месяцам...
-
Верно, ну можно чистить просто реже
-
-
Блин, судя по названиям партиций, Clickhouse при указании колонки типа Date в качестве ключа партиционирования наваливает данные в партции по месяцам...
-
Я уже нашел пример с данными за неделю. Можно использовать toStartOfDay()
-
Ура! Оно работает! :) Теперь гораздо проще партиции разбирать на запчасти!
-
-
-
если вы использовали старый синтаксис для создания merge tree, то да, он использует столбец с датой, но партиции делает по toYYYYMM(_)
-
В том то и дело, что новый. Просто у меня там было Partition by (eventDate), где eventDate - колонка типа Date
-
Я, конечно могу ошибаться из-за первой версии таблицы, которую могли не обновить
-
Но факт в том, что show create table показал мне partition by и там был eventDate
-
И партиции по месяцам раскладывались
-
Так не должно быть. Можете проверить на простом примере?
-
-
Да
-
Сейчас займусь
-
Хм, все работает отлично. Скорее всего не обновили таблицу и я подумал, что с КХ что-то не так. Прошу прощения за диверсию :)
-
Спасибо :)
-
а можно так партицирование на лету изменить ?
-
Лично я менял партиционирование переливкой данных
-
Нет.
-
А если у меня в ключе партиционирования кортеж, например, (eventType, eventDate), то при запросе select ... from table where eventType = 'some-type', поиск затронет только те партиции, которые относятся к этому eventType?
-
Да.
-
Супер! Спасибо!
- 02 April 2018 (131 messages)
-
-
Приветствую.
Есть вопрос про бэкап/репликацию. В документации говорится, что для этого лучше всего делать репликацию на несколько серверов и если кто-то что-то удалил, то просто на одной из реплик нужно взять данные путем ATTACH PARTITION.
Не совсем понятен принцип. То есть на одном сервере, который в кластере нам нужно скажем, каждый час по крону делать DETACH? Чтобы в случае чего восстановиться? -
Если кто-то что-то удалил - это тоже реплицируется, например DROP PARTITION.
-
а если дроп тейбл делать то оно не реплицируется
-
Да, я это понимаю, отсюда и вопросы у меня. Просто если мы будем DETACH/FREEZE делать, то оно будет выгружаться в detached/shadow каталоги и можем оттуда их достать путем ATTACH PARTITION.
Вот хотелось бы понять это так как я описал или все-таки есть какой-то true-way способ, которым рекомендуют пользоваться. Как интересно в Яндексе это реализовано?! -
ну а зачем удалять то ?
-
фриз делает в целом хардлинки и если удалить из кх то данные все равно по идее останутся
-
DETACH отцепит кусок данных от таблицы и он не будет доступен, FREEZE сдалает хардлинк, т.е. и данные будут доступны и бэкап на том же сервере
-
Всем привет
Есть ли какой-то механизм для отправки метрик clickhouse в graphite или statsd ?
Чтобы лучше понимать что происходит с кластером. -
Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Спасибо!
-
Товарищи, всем доброго. Вопрос возник, не кидайтесь в меня лучами добра, пожалуйста.
archlinux x64, попытка установить из aur.
Результат:
Building CXX object dbms/src/Storages/System/CMakeFiles/clickhouse_storages_system.dir/StorageSystemAsynchronousMetrics.cpp.o
In file included from /tmp/yaourt-tmp-littlewolf/aur-clickhouse/src/ClickHouse-1.1.54362-stable/dbms/src/Storages/System/StorageSystemAsynchronousMetrics.cpp:5:0:
/tmp/yaourt-tmp-littlewolf/aur-clickhouse/src/ClickHouse-1.1.54362-stable/dbms/src/Columns/ColumnString.h: В функции-члене «virtual DB::BlockInputStreams DB::StorageSystemAsynchronousMetrics::read(const Names&, const DB::SelectQueryInfo&, const DB::Context&, DB::QueryProcessingStage::Enum&, size_t, unsigned int)»:
/tmp/yaourt-tmp-littlewolf/aur-clickhouse/src/ClickHouse-1.1.54362-stable/dbms/src/Columns/ColumnString.h:96:45: ошибка: «*((void*)&<anonymous> +8)», возможно, используется без инициализации в данной функции [-Werror=maybe-uninitialized]
const size_t size_to_append = s.size() + 1;
~~~~~~^~
cc1plus: все предупреждения считаются ошибками
make[3]: *** [dbms/src/Storages/System/CMakeFiles/clickhouse_storages_system.dir/build.make:63: dbms/src/Storages/System/CMakeFiles/clickhouse_storages_system.dir/StorageSystemAsynchronousMetrics.cpp.o] Ошибка 1
make[2]: *** [CMakeFiles/Makefile2:4078: dbms/src/Storages/System/CMakeFiles/clickhouse_storages_system.dir/all] Ошибка 2
make[1]: *** [CMakeFiles/Makefile2:5483: dbms/src/Server/CMakeFiles/clickhouse.dir/rule] Ошибка 2
make: *** [Makefile:1252: clickhouse] Ошибка 2
Уже пятый день бьюсь, не арбайтенит. -
юзайте в докере его
-
-
Ну тут видимо надо заморочиться, уже сто лет сказать честно не компилил ничего. если чего то нет в репах то реально проще это в докере принести
-
-
cmake -DNO_WERROR=1
-
вообще оказалось довольно легко он собирается, можно и через инструкцию по сборке и через cmake, и всяких примеров думаю уйма на гитхабе
-
yaourt -S clickhouse
-
-
Подскажите как удалить партиции за определенную дату со всех реплик
-
alter table TABLE on cluster CLUSTER_NAME drop partition PARTITION
-
должен быть включен distributed ddl
-
DROP PARTITION реплицируется
-
Ок. Спасибо
-
alter table TABLE drop partition PARTITION должно быть достаточно
-
в пределах шарда же?
-
Да
-
Реплики тоже вроде как в пределах шарда )
-
чет ссылка ведет просто на доку. Можешь поточнее скинуть?)
-
-
Он эту ошибку и выдаёт.
-
пожалуйста)
-
Подскажите пожалуйста, решал ли кто-нибудь задачу поставить CH без рута ?
-
А можете пояснить по FREEZE? Попробовал на большой активной таблице (постоянно идет запись) - исходник около 25000 файлов, в архвие 50. По размеру как будто тоже раза в 2 меньше. Он мержит перед архивацией? Или что-то игнорирует? Или у меня запрос еще не закончился? Я подождал минут пять, ничего не меняется.
-
Низкий тебе поклон! Спасибо огромное!
-
-
FREEZE бэкапит только активные куски, а в директории таблицы лежат ещё и старые (которые были помержены). Старые удаляются через 8 минут.
-
понял, спасибо
-
Joined.
-
подскажите, плиз, ошибка точь-в-точь как в ишью, куда копнуть чтобы долго и мучительно не выяснять в чем проблема? https://github.com/yandex/ClickHouse/issues/1617Crash on SHOW TABLES request #1617
Version: 54318 Got exception on simple SHOW TABLES request: # clickhouse-client ClickHouse client version 1.1.54318. Connecting to localhost:9000. Connected to ClickHouse server version 1.1.54318. ...
-
-
ну мне кажется тут проще копированием схемы и дроп тейбл делать
-
А или вы не все партиции хотите в таблице удалить ?
-
В цикле, например: https://github.com/ClickHouse-Ninja/clickhouse-partition-cleaner/blob/master/clickhouse-partition-cleaner#L59ClickHouse-Ninja/clickhouse-partition-cleaner
ClickHouse partition cleaner. Contribute to ClickHouse-Ninja/clickhouse-partition-cleaner development by creating an account on GitHub.
-
-
-
-
А скрипт клевый, спасибо. Положу в копилку :)
-
пока никак.
-
Спасибо, буду использовать итератор снаружи
-
Joined.
-
Вчера нечто подобное писал для проекта...чистит партиции старше определенного возраста
-
-
Ну просто они известно как называются
-
если я хочу изменить индекс в таблице t0, можно сделать как-то проще, чем
// есть таблица
t0(d Date, x Int8, y Int8) engine = MergeTree(d, (x, y), 8192)
// хочу индекс (y, x)
create table t1 engine = MergeTree(d, (y, x), 8192) as select * from t0
drop table t0
// хочу индекс (x, y)
create table t0 engine = MergeTree(d, (x, y), 8192) as select * from t1
drop table t1
? -
На самом деле эта таблица еще и распределенная/шардированная по 3 нодам, хочется как-то минимальными усилиями это сделать
-
Господа, а можно ли поменять PARTITION BY для таблицы? Меня устроит, что предыдущие части будут лежать как лежали, всё равно в конце-концов таки удалятся. Вот будущие бы...
-
сейчас нельзя. вариант с сохранением старых данных со старым ключом партиционирования, скорее всего, будет сложно сделать
-
проще не получится. нужно пересортировывать данные с новым ключом, это все равно полный проход по ним
-
Да, это понятно, я рассчитывал на какой-то шорткат
-
Спасибо
-
а есть какой-то способ преобразовать старые данные? или только INSERT INTO ... FROM SELECT?
-
сейчас только insert select
-
-
Просто на репликах уже есть Replicated таблицы, хватит того, что данные на них реплицируются, или вьюшку лучше тоже реплицировать? И как тогда всё это будет работать: не задвоятся ли данные на VIEW, если сначала попадут туда с реплицируемой таблицы, а потом при репликации самого VIEW? ...
-
materilized view не будет наполняться на реплике
-
боюсь ошибиться, но кажется, что при фетче кусков вставка в VIEW не происходит. если так, то придется делать Replicated
-
-
Добрый день!
В CH есть функция подобная rank() (нумерация строк)? -
>rowNumberInAllBlocks()
- вероятно это -
Как-то можно отдебажить причину вылета клиента? Коннекчусь через докер (```clickhouse-client —host $REMOTE_CH_HOST```), запускаю запрос и он (клиент) через пару секунд отваливается молча
-
на сервере
2018.04.02 14:38:52.824757 [ 264 ] <Error> executeQuery: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof, e.what() = DB::Exception (from 10.8.0.174:57874) (in query: CREATE TABLE shard_0.foo_2 ENGINE = ReplicatedMergeTree('/clickhouse/tables/0/foo_2’, 'node0', day, (x, y), 8192) as select * from shard_0.foo), Stack trace:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x15) [0x82e3db5]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x21) [0x2cc1371]
2. /usr/bin/clickhouse-server(DB::throwReadAfterEOF()+0x4c) [0x2cc13dc]
3. /usr/bin/clickhouse-server(DB::readVarUInt(unsigned long&, DB::ReadBuffer&)+0x1f9) [0x2cd2de9]
4. /usr/bin/clickhouse-server(DB::TCPHandler::isQueryCancelled()+0x149) [0x2ccd139]
5. /usr/bin/clickhouse-server(DB::TCPHandler::processOrdinaryQuery()+0x2fe) [0x2ccddae]
6. /usr/bin/clickhouse-server(DB::TCPHandler::runImpl()+0x547) [0x2cd12e7]
7. /usr/bin/clickhouse-server(DB::TCPHandler::run()+0x2a) [0x2cd1f2a]
8. /usr/bin/clickhouse-server(Poco::Net::TCPServerConnection::start()+0xe) [0x85caf8e]
9. /usr/bin/clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x169) [0x85cb369]
10. /usr/bin/clickhouse-server(Poco::PooledThread::run()+0x76) [0x8be1c86]
11. /usr/bin/clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x37) [0x8bdde97]
12. /usr/bin/clickhouse-server() [0x8d9675e]
13. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76b9) [0x7f2d0d4926b9]
14. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6c) [0x7f2d0cebf41c]
2018.04.02 14:38:52.851555 [ 264 ] <Warning> TCPHandler: Client has gone away. -
ок, спасибо
-
Что странно - count() по таблице назначения растет, т.е. вроде как все в порядке
-
-
-
-
привет, а как жить, если при вставке в distributed получаю такой вот отлуп?
Block structure mismatch in RemoteBlockOutputStream stream: different number of columns
При этом та же вставка в локальную таблицу - все ок.
Distributed создается так: CREATE TABLE reports_1.events_all AS reports_1.events ....
Полагаю, что дело в полях, которые имеют default значение и не заполняются явно при вставке -
в таблице случайно нет alias столбцов?
-
alias - нет
-
есть такие вот, и на них судя по всему, ругань и идет
ssid │ UInt64 │ DEFAULT │ cityHash64(session_id)
в них даныне не вставляются из TabSeparated явно, но эти дефолты прописаны и в локальной, и в дистрибутед таблице -
причем, такое ощущение, что работать перестало после обновления до последней версии
-
Релиз ClickHouse 1.1.54362, 2018-03-11......
"Удалена настройка strict_insert_defaults. Если вы использовали эту функциональность, напишите на clickhouse-feedback@yandex-team.com."
https://github.com/yandex/ClickHouse/search?utf8=%E2%9C%93&q=strict_insert_defaults&type=
Если [strict_insert_defaults=1](../operations/settings/settings.md#settings-strict_insert_defaults), то столбцы, для которых не определены DEFAULT, необходимо перечислить в запросе.
....yandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
все без DEFAULT перечислены
-
в общем, когда и в distributed, и в локальных таблицах есть одни и те же дефолты, и когда их не указываешь при инсерте - ругань. если из дистрибутед убрать неуказываемые столбцы, то все работает
-
а кроме цепочки селектов есть возможность дубли по некоторым колонкам отфильтровать или, другими словами, делать выборки только по уникальным строкам?
пример, есть сырые данные с дублями
IP | UA |
127.0.0.1 | 123 |
127.0.0.1 | 123 |
127.0.0.1 | 123 |
127.0.0.2 | 234 |
127.0.0.2 | 234 |
127.0.0.2 | 345 |
127.0.0.2 | 345 |
надо выбирать из сгруппированных по ip+ua, в данном случае из такой таблицы
127.0.0.1 | 123 |
127.0.0.2 | 234 |
127.0.0.2 | 345 |
в чем разница: в первом случае COUNT(*) .... GROUP BY IP будет
3
4
а во втором
1
2 -
Не знаю как в кх но в SQL можно группировать по двум полям в гроупбай
-
-
Не очень понял почему у вас должно получиться 1, 2
-
select max(ua) from table group by ip
-
или наоборот min
-
"посчитай мне количество строк, относящихся к группе 127.0.0.1-123"
"посчитай мне количество строк, относящихся к группе 127.0.0.2-234"
"посчитай мне количество строк, относящихся к группе 127.0.0.2-345" -
и это в подзапрос
-
вот и получается 3, 2, 2
-
потому что там по сути SELECT из SELECT'a, я там выше пример привел в чем разница
-
вот похоже на то что нужно, но думал есть вариант без подзапроса обойтись, хотя это вроде достаточно элегантно тоже
-
select ip,ua, count(*) from table group by ip,ua чем не подходит?
-
в случае он 3 2 2 и вернет
-
во втором 1 1 1
-
почему там 1,2 то должно быть?
-
-
а нужно то сколько получить?
-
1,2 ?
-
я всеравно ничего не понял)
-
-
я не понял смысла
-
почему нельзя добавить в group by ua
-
ну это пример синтетический, у меня таблица на сотню колонок в реальности.
потому что, если, выражаясь в терминах веб-сессий, у меня записано много хитов, а потом надо посчитать количество уникальных пользователей с IE, например, то группируя по IP, UA я все равно получу их хиты.
поэтому мне надо сначала свернуть их до уникальных пользователей, а их уже считать. -
-
-
-
Друзья, всем привет
есть простая таблица вида
url_hash | value_type | value
делаю преобразование в столбцы по value_type вида
SELECT url_hash,
sumIf(value, value_type = 1) AS count_value_type_1,
sumIf(value, value_type = 2) AS count_value_type_2,
sumIf(value, value_type = 3) AS count_value_type_n
from data_raw
group by url_hash
подскажите, как подобное провернуть, когда value - это массив? -
sumIf поменять на sumArrayIf
-
я наверное не очень внятно сформулировал, поэтому и непонятно всем.
по сути, вопрос к первой таблице такой:
сколько уникальных пользователей пришло с каждого из айпи?
ответ будет именно 1 и 2.
вот можно ли это посчитать одним селектом? -
спасибо! в моем случае значения по value_type уникальны, заменил на anyIf
-
select uniq(user) group by ip?
-
SELECT IP, uniq(UA) FROM table GROUP BY IP
-
Есть идеи как поискать утечки памяти в СH ?
Два тестовых сервера (1.1.54343) один clickhouse-server --daemon сожрал 60 ГБ, его реплика 30ГБ
1. VIRT 66GB RES 35GB
(сюда идет бесконечная загрузка create TinyLog , insert into TinyLog from TSV, insert into *MergeTree select from TinyLog, drop TinyLog, таблиц много (соответственно заливающих запросов тоже много), данных ТБ-ы)
2. VIRT 30GB RES 12GB
(реплика первого).
mem type: 1 / 2
Dictionaries: memory taken: 6.15 GB / 6.15 GB
PK allocated memory: 2.26 GB / 2.07 GB
PK in memory : 1.35 GB / 1.35 GB
на графике 1-го (VIRT) есть ступеньки вверх +~10GB -
можно посмотреть на значения метрик generic.current_allocated_bytes и generic.heap_size из system.asynchronous_metrics. heap_size должен быть близок к размеру потребляемой памяти. если current_allocated_bytes небольшой, то память просто занимается кучей для экономии
-
еще можно посмотреть на memory_usage таблице system.query_log. возможно, что память занимают выполняющиеся запросы
-
1. VIRT 66GB RES 35GB
select metric, formatReadableSize(value) from system.asynchronous_metrics where metric like ('%generic.%')
generic.heap_size 51.97 GiB
generic.current_allocated_bytes 28.74 GiB
2. VIRT 30GB RES 12GB
generic.heap_size 18.80 GiB
generic.current_allocated_bytes 9.44 GiB
т.е. утечки нет? -
Похоже, что все нормально.
-
то есть мы не получили подтвержения, что утечка есть :)
-
ОК, понял, спасибо.
-
Кажется мне нужно лямбда выражение, а не очень понимаю как это работает. Мне нужно подсчитать количество элементов массива, удовлетворяющих определенной регулярке, может быть есть какой-то мануал, который по полочкам у меня в голове всё расставит?
-
Опубликована презентация с Субботника по базам данных: https://clickhouse.yandex/presentations/database_saturday_2018/
-
arrayCount(x -> match(x, 'regexp'), arr)
-
Спасибо большое, то что нужно!
Если вдруг попадётся на глаза удобное руководство про лямбда функции для чайников - тоже буду благодарен :) -
есть еще arrayExists , если подойдет булевый результат. вроде как работает шустрее
-
Да, спасибо! Кстати именно arrayExists используется Метрикой для формирования отчётов с фильтрами)
- 03 April 2018 (182 messages)
-
Joined.
-
Добрый день
-
Будет ли резервныый канал на случай, если телеграм закроют?
-
Так а прокси?
-
За исключением прокси, VPN и т.п.
-
группа в гугле есть)
-
покопавшись в логах, выяснил что проблема в "Received signal Illegal instruction (4)." при определенных операциях на клиенте и после этого сервер падает. Ну а потом по истории этой группы выяснил, что для использования активной сборки нужно расширение SSE4.2, а на серваке сейчас стоит старенький Intel Xeon E5450. Написал для тех, у кого подобная проблема возникнет.
-
-
Добрый день!
Наткнулся на странное поведение. Есть таблица на 16 миллонов строк. Делаю запрос
SELECT count(), uniq(tr_viol_id) FROM default.simple_tmp
получаю результат 16299674 и 16285919
Делаю второй запрос
SELECT tr_viol_id FROM default.simple_tmp group by tr_viol_id having count() > 1
получаю пустой результат. Поле не ключевое. Как такое может быть? -
-
А кто-то может подсказать как для ReplicatedReplacingMergeTree использовать новый синтаксис с партиционированием? Там просто есть колонка version
-
-
-
-
да также, например:
CREATE TABLE ...
(
...
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table_local', '{replica}')
PARTITION BY day
ORDER BY (show_id, campaign_id, flight_id, creative_id, day)
SETTINGS index_granularity = 8192 -
А как version указать?
-
-
Вижу, доку, там пишут, что вроде просто version передают после номера реплики
-
ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table_local', '{replica}', ver)
-
Спасибо!
-
-
Всем привет!
Хочу обновить КХ. Возникает такая проблема
alexm93@alexm93-VirtualBox:~/chtest$ sudo apt-get update
Ign:1 http://repo.yandex.ru/clickhouse/xenial stable InRelease
Hit:2 http://ru.archive.ubuntu.com/ubuntu xenial InRelease
Ign:3 http://repo.yandex.ru/clickhouse/deb/stable main/ InRelease
Hit:4 http://ru.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit:5 http://ru.archive.ubuntu.com/ubuntu xenial-backports InRelease
Ign:6 http://repo.yandex.ru/clickhouse/xenial stable Release
Hit:7 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease
Hit:8 http://repo.yandex.ru/clickhouse/deb/stable main/ Release
Ign:9 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages.diff/Index
Ign:10 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages.diff/Index
Ign:11 http://repo.yandex.ru/clickhouse/xenial stable/main all Packages
Ign:12 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en_US
Ign:13 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en
Hit:14 http://security.ubuntu.com/ubuntu xenial-security InRelease
Ign:15 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 DEP-11 Metadata
Ign:16 http://repo.yandex.ru/clickhouse/xenial stable/main DEP-11 64x64 Icons
Ign:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages
Ign:18 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages
Ign:11 http://repo.yandex.ru/clickhouse/xenial stable/main all Packages
Ign:19 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 InRelease
Ign:12 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en_US
Ign:13 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en
Hit:20 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 Release
Ign:15 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 DEP-11 Metadata
Ign:16 http://repo.yandex.ru/clickhouse/xenial stable/main DEP-11 64x64 Icons
Ign:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages
Ign:18 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages
Ign:11 http://repo.yandex.ru/clickhouse/xenial stable/main all Packages
Ign:12 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en_US
Ign:13 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en
Ign:15 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 DEP-11 Metadata
Ign:16 http://repo.yandex.ru/clickhouse/xenial stable/main DEP-11 64x64 Icons
Ign:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages
Ign:18 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages
Ign:11 http://repo.yandex.ru/clickhouse/xenial stable/main all Packages
Ign:12 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en_US
Ign:13 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en
Ign:15 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 DEP-11 Metadata
Ign:16 http://repo.yandex.ru/clickhouse/xenial stable/main DEP-11 64x64 Icons
Ign:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages
Ign:18 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages
Ign:11 http://repo.yandex.ru/clickhouse/xenial stable/main all Packages
Ign:12 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en_US
Ign:13 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en
Ign:15 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 DEP-11 Metadata
Ign:16 http://repo.yandex.ru/clickhouse/xenial stable/main DEP-11 64x64 Icons
Ign:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages -
Ign:18 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages
Ign:11 http://repo.yandex.ru/clickhouse/xenial stable/main all Packages
Ign:12 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en_US
Ign:13 http://repo.yandex.ru/clickhouse/xenial stable/main Translation-en
Ign:15 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 DEP-11 Metadata
Ign:16 http://repo.yandex.ru/clickhouse/xenial stable/main DEP-11 64x64 Icons
Err:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64 Packages
404 Not Found [IP: 213.180.204.183 80]
Ign:18 http://repo.yandex.ru/clickhouse/xenial stable/main i386 Packages
Reading package lists... Done
W: The repository 'http://repo.yandex.ru/clickhouse/xenial stable Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: Failed to fetch http://repo.yandex.ru/clickhouse/xenial/dists/stable/main/binary-amd64/Packages 404 Not Found [IP: 213.180.204.183 80]
E: Some index files failed to download. They have been ignored, or old ones used instead. -
Сто лет как сменился репо , смотрите закрепленный пост
-
использую репозиторий из https://clickhouse.yandex/#quick-startClickHouse DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
даже по ссылке которую вы дали уже измененный репо
-
делаю как раз по этой интсрукции
sudo apt-key adv —keyserver keyserver.ubuntu.com —recv E0C56BD4 # optional
sudo apt-add-repository "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/"
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start
clickhouse-client -
Ну а кто старый то репо удалять будет )
-
Err:17 http://repo.yandex.ru/clickhouse/xenial stable/main amd64
-
этол откуда у вас ?
-
-
Joined.
-
Всех приветствую.
Вопрос: можно ли использовать КХ для полнотекстового поиска по комментариям и постам из вк???? -
можно
-
не лучшая идея , все таки не тот юзкейс, вам в еластик сфинкс
-
Joined.
-
Конечно можно, и это даже будет работать. Но все таки кликхаус в меньшей степени про работу с текстовыми данными, и другие специализированные решения подойдут вам лучше. Расскажите про ваш кейс, объёмы и структуры данных, думаю вам помогут подобрать правильный инструмент.
-
Возникла такая же ошибка при поиске по полю типа UUID в таблицах семейства MergeTree. При запросе вылехает ошибка DB::Exception: Bad type of Field.
https://github.com/yandex/ClickHouse/issues/1770
Если кто сталкивался, скажите как решали проблему?UUID field type #1770Looks like bug in new data type UUID. Used version 1.1.54327 I can create table with uuid field, insert data using simple string, representing uuid like '0c5049ab-a9fe-46c6-aee6-bcb5e414a19c' The problem in using UUID typed field in WHER...
-
Кейс: надо хранить для нескольких групп надо хранить все посты, все комменты, все лайки, всех подписчиков с инфой о них
-
Искать по постам, комментам, инфе в профиле по ключевым словам
-
постгрес, разложить по вектору и повесить GIN индекс
-
-
Объём : пользователи ~10 млн
Посты ~5 млн
Комменты~50*посты
Лайки~1000*посты
Хотел с этого начать, но не хочу чтобы это было верхней границей
Отчёты::
Текстовые поля
1) все посты с ключевыми словами (в идеале с морфологией)
Числовые и даты
1)все агрегации и джойны -
-
вам точно в постгрес
-
Всем спасибо, что подняли веки)))
-
Можно решить только одним способом - взять и поправить тип UUID, сейчас он не работает
-
-
-
При попытке дропнуть базу с MATERIALIZED VIEW (SummingMergeTree) таблицей, поймал ошибку:
Received exception from server (version 1.1.54370):
Code: 60. DB::Exception: Received from 127.0.0.1:9003. DB::Exception: Table funprodwh..inner.TurnoversNet doesn't exist..
И базу не прибить. Помог только detach (кстати, в дока написано что detach database нет, а на самом деле есть) и удаление руками из папки с метаданными.
Такое тут пробегало, или сделать issue? -
-
Пока с таким не сталкивался, но можно попробовать добавить логин и пароль в ссылку: https://user:pass@www.example.com/dictionary
-
так уже пробовал - не работает :(
-
Ограничьте по айпи просто
-
А через браузер получается просмотреть данные по такой ссылке?
-
-
-
А какую ошибку пишет в system.dictionaries?
-
В запросе брали имя таблицы в обратные кавычки?
-
подскажите пожалуйста, с какими опциями собрать СH чтобы в результате получились отдельные (server, client итд),статически слинкованные бинари ?
-
Вообще таблицу не упоминал, сразу дропал базу (DROP DATABASE), в которой была куча таблиц, предполагая что дропнуться все таблицы автоматом (почти так и произошло). Имя базы без кавычек.
-
да, хотел написать про имя базы
-
должно сработать с обратными кавычками
-
-
Привет. Подскажите пожалуйста, а работает ли resharding?
Хочется при добавлении ноды в кластер перенести шард на новый сервер. На гитхабе нашел подобный вопрос, он еще открыт и последний комментарий от 20 сентября 2017 года (https://github.com/yandex/ClickHouse/issues/198).Resharding doesnt work · Issue #198 · yandex/ClickHouseHi. I use clickhouse version: ii clickhouse-server-base 1.1.54022 amd64 clickhouse-server-base I want to use resharding, if i need to improve performance of my database by adding an other node in t...
-
2018.04.03 16:44:52.394881 [ 35 ] <Error> ExternalDictionaries: Failed reloading 'regions' external dictionary: Code: 86, e.displayText() = DB::Exception: Received error from remote server https://name:password@URL/CH_dict_regions.tsv. HTTP status code: 401 Unauthorized, body: <html>
-
Joined.
-
Joined.
-
Если Телеграм закроют, то мы сначала подождём примерно пол дня, чтобы проверить, не откроют его обратно, а потом заведём канал в другой системе.
Есть предпочтения, какая альтернатива лучше? -
jabber пока ещё актуален
-
irc ))
-
плюсую irc
-
icq
-
но скорее всего это будет слак :)
-
нафиг, для него нет десктопного клиента под линукс
-
Есть, но лучше бы его не было
-
Тем более
-
Жабер ирк ICQ скорее мертвы чем живы
-
Вероятно в моде нынче слака
-
там десктопный клиент и сайт - примерно одно и то же, разве нет?
-
ямб в открытый доступ яндекс не планирует ?
-
вполне себе жив irc
-
Так там вроде на электроне клиент должен быть под все
-
Да, электрон вроде
-
"на электроне" == "вебклиент"
-
и да, линуксовый слак на электроне, особых жалоб нет, используем давно
-
Ну ровным счётом я не знаю пользователей ирк кроме себя, о чем то это да и говорит
-
Ну и покупать клиента, чтобы сидеть на единственном канале...
-
Есть подозрение что телеграм тоже на электроне
-
я множество знаю и теперь тебя. но в любом случае, ирк для коммерческих контор маловероятен
-
Joined.
-
Зачем покупать он бесплатный
-
щьто
-
Либо я не понимаю, что у них в https://slack.com/pricing, либо в бесплатной версии нет доступа к внешним каналам
-
-
телеграм, кстати, не на электроне, судя по https://github.com/telegramdesktop/tdesktopGitHub - telegramdesktop/tdesktop: Telegram Desktop messaging app
Telegram Desktop messaging app. Contribute to telegramdesktop/tdesktop development by creating an account on GitHub.
-
+100500 за рассылки, кстати...
-
Вроде всегда был, я раньше сидел, теперь только рабочие слаки остались
-
Скорее, это было что-то альтернативное.
-
QT
-
хотя принцип примерно тот же
-
Угу, C++ и всётакоэ...
-
Подскажите - кто-то анализировал разницу (в скорости обработки / в хранении) при различных способах записи URL в кликхаус. Сейчас храним целиком в строках, думаю - не попробовать ли по частям хранить - протокол, домен, путь (как таблицу?), параметры URL. Может есть какие-то best practice на этот счет?
-
По идее должно лучше жаться и некоторые типы запросов должны быстрее выполняться. Но если обратно весь URL целиком понадобится - не факт что склеишь в "первозданном" виде.
-
Мы храним целый URL в одном столбце и ещё дополнительно только домен в другом столбце. Если выбирать только домен, то это быстрее на порядки.
Если вам часто надо выбирать, например, только протокол - то его тоже положите в отдельный столбец.
А из столбца с целым URL можно домен не вырезать, так как разница будет небольшой.
И ещё довольно важно вырезать из URL отдельные "мусорные" параметры - например, какие-то длинные шифрованные параметры в base64, которые вы не можете расшифровать. После сжатия они могут отнять в районе 90% места. -
В качестве дополнительных трюков - можно декодировать %-последовательности в URL в UTF-8, но только кроме символов /, &, =, ?, #, ", \, чтобы не портить структуру URL-а. Чтобы получить красивые строки для отображения в отчётах, вида https://yandex.ru/?text=упячка. При этом важно, что %-кодированные последовательности могут быть не обязательно в UTF-8 и кодировку надо правильно определять.Link
Найдётся всё
-
а есть какой то реальный кейс, чтобы хранить URL as is со всеми квери?
-
Пользуемся только Slack и только Telegram. Однако Slack не так легок для общения.
-
всегда казалось, что достаточно хранить оптимизированный URL без квери для разного рода отчетности
-
Да, типичный кейс - логи для расследований.
-
если потом по этому урлу надо куда-то ходить, то при любой его обработке найдутся такие люди, у которых на измененном урле что-нибудь перестанет работать.
-
@milovidov_an можете подсказать что-нибудь по этому вопросу? баг или фича? https://github.com/yandex/ClickHouse/issues/2124Подзапрос выполняется в неверной БД. #2124
Имеется кластер БД, называется mydb_cluster, имеется БД mydb. БД по умолчанию - mydb_cluster. Есть табличка такая: CREATE TABLE mydb.traffic_stats ( ts_spawn UInt32, user_id UInt32, ...) ENGINE =...
-
Спасибо.
-
На мой взгляд - это фича :) Причем даже задокументированная: https://clickhouse.yandex/docs/ru/query_language/queries/#_8
-
>При использовании обычного IN-а, запрос отправляется на удалённые серверы, и на каждом из них выполняются подзапросы в секциях IN / JOIN.
-
действительно, забыл про это
-
Ну а то что на "удаленных серверах" отсутствует таблица которая нужна для выполнения подзапроса с IN - это уж вопрос планирования схемы базы.
-
дада, я понял
-
фича
-
спасибо
-
Если вместо IN написать GLOBAL IN то наверное заработает.
-
Тогда советую ещё раз всё перепроверить и создать тикет на гитхабе.
-
Нет, теперь для этого отдельная тулза https://clickhouse.yandex/docs/ru/single/#utils-clickhouse-copier
-
Как работают правила include'ов?
-
В показаном примере из файла /etc/metrika.xml будет подставлена секция <remote-servers>
-
Как-то так работает :) А подробности вроде бы есть в документации. Или я не правильно понял вопрос?
-
привет
есть такая проблема
2 шарда по 2 реплики
на всех шардах есть таблица MergeTree
так же на всех шардах есть таблица Distributed которая смотрит в эти MergeTree
в какой-то момент запросы на первый шард начинают возвращать ошибку о том, что якобы на репликах второго шарда нет MergeTree таблиц которые он ищет
лечится пересозданием Distributed таблицы на первом шарде, но помогает ненадолго. через какое-то время проблема повторяется
с чем может быть связано? -
примерно так
<xsl:template match="*[@incl]" name="inc">
<xsl:copy>
<xsl:variable name="x" select="@incl"/>
<xsl:apply-templates select="document($metrika_path)/yandex/*[name()=$x]/node()"/>
</xsl:copy>
</xsl:template> -
-
А, в remote-servers.xml все должно быть завёрнуто в <remote_servers>?
-
-
какой ещё remote-servers.xml? :) Файл с подстановками по умолчанию: /etc/metrika.xml
-
-
-
-
-
> xslt
кх готов в энтерпрайз -
Но на самом деле можно и не использовать этот файл с подстановками. А просто в config.xml или в conf.d написать <yandex>
<remote_servers>
<test_cluster>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>node2</host>
<port>9000</port>
</replica>
</shard>
</test_cluster>
</remote_servers>
</yandex> -
Может, они у меня из инклуда подключаются
-
Вот чего-чего, а примеров оч не хватает.
-
Супер! То, что нужно. Благодарчик
-
если верить доке, то нужен элемент include_from, а не атрибут
-
Но все равно почитайте: https://clickhouse.yandex/docs/ru/operations/configuration_files/ :)
-
-
Это не ко мне, я не из Яндекса :) Из моего опыта: этот файл с подстановками правда полезен если один и тот же фрагмент конфигурации нужно многократно в разных местах использовать. Например для <networks> при создании пользователей - чтобы не перечислять несколько подсетей каждый раз. При конфигурации кластера - я так и не понял привносит ли он что-то дополнительно, по сравнению с просто выделенным в отделный файл "подконфигом".
-
Процитирую ридми который писал для наших ОПсов.
Configuration of ClickHouse is stored in XML files.
With distribution 2 files came: config.xml (main server settings), and users.xml (users, profiles, quotes).
Generally best practice is to leave the default configs unchanged, and make all the config changes in separate files.
With that new default settings coming in newer versions will be properly set up.
All files from conf.d folder will be attached to config.xml
All files from users.d folder will be attached to users.xml
For each XML node you can set up following attributes:
1) remove="remove" : remove the node from config
2) replace="replace" : replace the node with new variant
3) incl="node_name" : get the node from substitutions file
4) from_zk = "/path/to/node". The element value is replaced with the contents of the node at /path/to/node in ZooKeeper -
Ну и например в conf.d/listen.xml записано:
<?xml version="1.0"?>
<yandex>
<listen_host replace="replace">::</listen_host>
</yandex> -
в users.d/disable_default.xml
<?xml version="1.0"?>
<yandex>
<!-- Remove default users (defined in users.xml), we allow access by passwords only -->
<users>
<default remove="remove" />
<readonly remove="remove" />
</users>
</yandex> -
А в users.d/zeppelin.xml
<?xml version="1.0"?>
<yandex>
<users>
<zeppelin>
<password>secret</password>
<networks incl="networks" />
<profile>readonly</profile>
<quota>default</quota>
<allow_databases>
<database>data</database>
</allow_databases>
</zeppelin>
</users>
</yandex> -
и т.д.
-
пришел к аналогичному, но пользователь default оказался нужен для репликации.
-
[ 63%] Building CXX object utils/config-processor/CMakeFiles/config-processor.dir/config-processor.cpp.o
/root/ClickHouse/libs/libdaemon/src/BaseDaemon.cpp: In member function 'void SignalListener::onFault(int, siginfo_t&, ucontext_t&, ThreadNumber) const':
/root/ClickHouse/libs/libdaemon/src/BaseDaemon.cpp:375:26: error: 'BUS_MCEERR_AR' was not declared in this scope
case BUS_MCEERR_AR:
^~~~~~~~~~~~~
/root/ClickHouse/libs/libdaemon/src/BaseDaemon.cpp:375:26: note: suggested alternative: 'BUS_OBJERR' -
-
Нет смысла уже скоро выйдет восьмерка
-
-
Подскажите кто как делает периодическую загрузку файлов в кх, не хочется писать костыли. Сильно не пинайте, только начал знакомство с кх.
-
-
А в чем проблема через кликхаусклиент и готово
-
А можно немного подробнее
-
Ну там есть загрузка данных из файла в доке есть это
-
Какой нибудь CSV или tsv
-
Кажется, в доку пора разместить FAQ
-
Или где то рядом...
-
Вроде как в master поправлено
-
-
я мастер брал, собралось под 6й центось
-
-
Пасиб, оч полезно.
-
угу. Кстати - есть какие-то планы чтоб это поправить? вроде бы должно быть не сложно: https://github.com/yandex/ClickHouse/blob/6f015d8942ce66e0a25cd6657deaf5659148f60d/dbms/src/Storages/StorageReplicatedMergeTree.cpp#L3256yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
в настройках можно указать профиль для системных задач с помощью ключа <system_profile>
-
Это немного о другом. Для репликации (ReplicatedMergeTree) и так соединяется с лидером без пароля и с пользователем default.
-
В доке написано что можно указывать в настроках remote_servers юзера и пароль к каждому серверу. Они не заменяют default для репликации?
Я у себя юзера поменял, но не тестил без default. -
Distributed можно настроить c custom паролем, ReplicatedMergeTree нет.
-
-
-
-
-
-
Нет, не появились.
-
-
Не в ближайших.
-
- 04 April 2018 (129 messages)
-
-
Рассказываем, как продолжить пользоваться Telegram в случае его блокировки.
Открыть статью.Как обойти блокировку Telegram?VPN Чтобы исключить влияние государственной цензуры на ваши коммуникации, на доступ и распространение информации - в первую очередь предлагаем вам установить VPN, как наиболее комплексное решение. Рекомендуем выбрать VPN из данной подборки, где отобраны защищенные сервисы, проверенные международными и российскими цифровыми активистами: VPNLove.me Большинство из этих VPN уже высказали свое негативное отношение к государственной цензуре и отказались от сотрудничества с Роскомнадзором по фильтрации пользовательского…
-
спасибо
-
Коллеги, можете подсказать в чем может быть проблема: при попытке сделать ALTER TABLE ON CLUSTER ADD COLUMN для DistributedMergeTree таблицы получаю такое сообщение:
DB::Exception: Table BLA-BLA isn\'t replicated, but shard #2 is replicated according to its cluster definition, e.what() = DB::Exception 11 0 -
Насколько я помню ON CLUSTER недоделано для Distributed, нужно руками на каждой машине запрос выполнить
-
-
Спасибо за пояснение
-
-
ну обычно это слишком много мелких вставок
-
в system.merges и system.replication_queue
-
-
Добрый день, коллеги
Делаю инсерт в таблицу такого вида
INSERT INTO table VALUES (UUIDStringToNum('f9520747-1a12-4aa0-8ab2-d7ba615bc3e2')), (UUIDStringToNum('f9520747-1a12-4aa0-8ab2-d7ba615bc3e2'))...
При больших объемах иногда возникают ошибки такого вида:
DB::Exception: Unknown identifier: UUIDStringToNum, e.what() = DB::Exception
Или
DB::Exception: Unknown identifier: UUIDStrin, e.what() = DB::Exception
Кто что думает? -
вроде вчера писали что тип ууид не работает в кх , но может не так поняол
-
Я вставляю в поле типа FixedString(16) значение, которую получаю на вызоде функции UUIDStringToNum
-
ну ошибка говорит что нет функции ууидтунум
-
вероятно ее нет , либо старая версия и там ее нет , либо новая и там ее выпилили
-
если вставлять по одной строке, то все ок
но если вставить разом 1000 строк, к примеру, начинают валиться подобные ошибки -
Попробуйте из лога вытащить именно ту строку (или пачку строк), которая дает сбой. Есть вероятность, что это получится сделать
-
Кто подскажет куда копать? Временами CH рестартится сам по себе в логах только <Information> Application: Received termination signal (Terminated) и других намеков на причину нету
-
OOM killer ?
-
Возможно, а не подскажете, как проверить?
-
dmesg
-
Спасибо, dmesg - есть записи срабатывания oom killer, но для другого процесса.
-
Ребят, есть словарь из 19 строк, в кликхаусе подтягиваются только 11 строк, ошибок нет, словарь обновляется. В чем может быть причина, что не все строки видит?
словарь из файла -
понял в чем, ключ дублируется, только уникальные загружает
-
-
Distributed таблица поделит данные по ключу партиционирования и перешлет на шарды
-
-
на серверсайде
-
клиент вообще по сути не знает что у вас там под капотом , он просто видит таблицу
-
клиент не знает create, клиент не знает настройки кластера, у него туда может просто не быть доступа
-
-
Joined.
-
У меня в одном из стобцов храняться пути к файлам, я хочу поискать по ним и не могу правильно двоеточие экранировать.
Вот такие строчки в КХ
c:\ex\abonentsservice\13.91.0.1065_deployments-181833\abonents.exe
c:\ex\abonentsservice\13.91.0.1065_deployments-181833\abonents.exe
Вот так я пробую
select Image from wssg.sysmon_logs where Date=today() and EventId=3 and Image like 'с:\ex%' limit 100
Не работает. -
>like 'с:\\ex%' limit 100
-
тоже нет
-
DB::Exception: Exception: OptimizedRegularExpression: cannot compile re2: ^c:\\ex, error: invalid escape sequence: \\e., e.what()
-
SELECT
'c:\\example' AS path,
match(path, '^c:\\\\ex') AS match
┌─path────────┬─match─┐
│ c:\\example │ 1 │
└─────────────┴───────┘
1 rows in set. Elapsed: 0.001 sec. -
а Dockerfile на будущее поправили так что он сейчас сломан?
-
Добрый день!
Подскажите, есть ли способ более активно кэшировать данные?
Есть таблица из которой постоянно селектят разными однотипными запросами мы знаем, что этот набор, в 99,5% случаев - последние сутки. Но чтение диска происходит "до дыр", практически постоянно данные перечитываются. Отчасти, это проблема со стороны приложения, которое может ждать не более 30сек, потом запрос повторяется..
Но что можно сделать на стороне clickhouse ? -
если в память влазит, то например держать последние сутки в памяти
-
-
-
У меня вопрос. Можно ли создавать Nested структуры данных во вьюшках или простых select-запросах?
SELECT Nested(1 AS a, 2 AS b) AS c
Received exception from server:
Code: 46. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Unknown function Nested. -
use_uncompressed_cache не поможет ли?
-
а более простым способом никак?
-
неа, не помогает, увеличивал
-
можно попробовать в *like* четыре обратных слеша вместо двух
-
<uncompressed_cache_size>68719476736</uncompressed_cache_size> вот так сейчас, этого должно хватать на неделю данных
-
а включить не забыли? 😄 он выключен по дефолту
-
эмм
-
-
Для запросов, читающих хоть немного приличный объём данных (миллион строк и больше), кэш разжатых блоков автоматически выключается, чтобы оставить место для действительно мелких запросов. Поэтому, можно держать настройку use_uncompressed_cache всегда выставленной в 1.
Можно комментарий? про миллион строк - это про набор данных в запросе или про количество прочитанных строк в исходных данных ? -
Прочитаных строк в исходных данных
-
а если у меня почти все запросы читают 1+ млн ?
-
-
значит у меня кеш не работает?
-
а то думал почему запросы резко стали выполнятся из 100 мс 3 секунды
-
-
-
-
Это можно посмотреть в метриках select * from system.events where event in ('UncompressedCacheHits', 'UncompressedCacheMisses')
-
Ребят, а есть ли способ заставить КХ автоматически преобразовывать данные при вставке? Чтобы работало также как DEFAULT expr, а не только когда в запросе INSERT не указан соответствующий столбец.
-
Joined.
-
Есть одна тачка с одним инстансом КХ, одна большая табличка (порядка 10^9 строк), один HDD, движок MergeTree. Данные каждый раз читаются с диска, не из кэша. Запрос вида SELECT col1, ..., coln FROM SomeTable ... . Запрос на чтение одним клиентом одновременно отрабатывает за 100ms, двумя -- каждый по 200ms, ..., n -- каждый по n*100ms, ...
1. Можно ли при совершении n конкурентных запросов заставить отвечать первому клиенту за 100ms, второму за 200ms, ..., n-ному за n*100ms, ...?
2. Пусть данные хранятся на разных дисках, осуществляется несколько конкурентных запросов, каждый к своему диску. Насколько сильно эти запросы будут влиять на время выполнения друг друга?
3. Есть ли продвижение по "Store data at multiple disk volumes of a single server" (https://www.altinity.com/blog/2018/1/8/clickhouse-roadmap-2018) -
может стоит просто их на ссд положить, там нет проблемы парралельного чтения
-
-
ну либо разнести просто в шард на несколько мелких серверов как у нас например сделано
-
ну а как вы на один хдд диск положили 30 тб ?
-
-
ну больше шпинделей больше иопсов
-
да, но я не могу быть уверен, что при увеличении количества дисков оно станет работать быстрее, потому что не знаю как оно там внутри у себя сериализует запросы, какие локи держит и какое отношение последовательного кода к параллельному
фича ж даже официально не поддерживается пока что -
Очень параллельно на чтение все
-
Несколько шардов все таки лучшее решение
-
-
-
Ну ставьте по два диска
-
В RAID1
-
Каждый шард будет выполнять часть задача абсолютно параллельно по сути н шардов будет в н раз быстрее
-
-
Не является там же логарифмическая зависимость на обычных хдд , можно больше получить на час 15к оборотов
-
На сас
-
А как вы определили что у вас 30 Тб в сжатом виде?
-
я залил около 10млрд псевдослучайных строк в кликхаус, посмотрел, сколько получилось, экстраполировал на тот срок за который у меня уже есть данные
ну и в другой БД оно занимает 30ТБ в пожатом lz4-ом виде -
-
-
-
Ну так у вас данные что ли псевдостучайные?
-
На таких данных конечно и скорость и сджатие будут минимальными
-
-
-
Вероятно просто кликхаус не ваш вариант
-
-
Ну данные у вас не такие как он любит
-
-
Ну вы не даете нам понять от этого так и происходит ) загадка без вводных всегда сложно
-
Joined.
-
ну и запросы чистый селект данных не юзкейс кликхауса
-
-
ну покажите пример пару строчек это всегда лучше чем много слов и догадки , мало колонок тоже не айс для кх
-
Такого нет
-
Причем тут колво колонок? Хоть 2, хоть 202. У КХ вполне определеный кейс - много неизменяемых строк, мало запросов (без сложных join)
-
insert_quorum для вставки и select_sequential_consistency для чтения
-
-
-
И да, если нужно извлечь все колонки (5 записей из 2х милиардов) - вот это не для КХ
-
ага, кейс записи -- append only, кейс чтения -- просто достать из базы
-
-
/stat@combot
-
Не обязательно просто чтение. Ещё и посчитать какой-нибудь средний доход зеленного пользовате в каждую пятую минуту в январе 2006
-
это я про свой кейс
-
вам просто запросы надо в очередь выстроить? chproxy ?
# Enable requests queueing - chproxy will queue up to max_queue_size
.... -
Спасибо
-
Меня сегодня позабавило другое, если физически нет default database кластера из конфига, то ломается Distributed с напрямую указанными именами бд :-)
-
Я подумывал так защититься от ошибок создания таблиц on cluster без прямого указания бд, но видимо не судьба
-
Подскажите в чем может быть дело: полгода бесперебойно работал сервер КХ, Вдруг невозможно приконектиться, но сервер работает, работу делает, логи пишет. Рестарт сервиса помог
-
-
-
Все подключения исправно закрываются, да и странно что за все время не возникало такой проблемы. И оом не убил бы процесс?
-
-
Локально пытался конектится, не давало.
-
Рестарт помог, а поднялся после убийства процесса не помогло, тоже странно
-
-
Спасибо, посмотрю
-
-
Да, стандартный
-
рекомендую поменять на warning
<logger>
<level>warning</level>
...
</logger>
если стандартный - то есть trace, то анализируйте логи CH - их будет достаточно)
может быть что угодно. в моей практике был случай, когда на сервере линки резервировались бондингом и ucarp, и при переключении на резервный линк из-за неправильной настройки обеспечивающих резервироание сервисов не работал и локалхост до переключения обратно на мастер линк. -
Спасибо, буду рыть в логах
-
ну и можно посмотреть просто dmesg там оом всегда есть
- 05 April 2018 (205 messages)
-
-
-
-
Нет, самостоятельно он так не умеет, но можно написать собственное решение которое будет пережимать данные.
-
у меня ReplacingMergeTree перестала мержить данные
-
ни автоматом ни через OPTIMIZE table
-
если добавить final то возвращает нормально
-
но всеравно не мержит
-
Напишите
SET optimize_throw_if_noop = 1;
и запустите OPTIMIZE.
Он напишет, почему не хочет мержить. -
Code: 388. DB::Exception: Received from localhost:9000, ::1. DB::Exception: There are no need to merge parts according to merge selector algorithm.
-
Значит мержить слишком рано.
-
но у меня select count(*) from table возвращает цифру больше чем select count(*) from table final
-
уже 4 дня прошло
-
как перестало мержить
-
сервер перезапускал
-
место свободное есть
-
ночью нагрузки нет вообще
-
а смержится должно примерно половина таблицы
-
Фоновый мерж выполняется согласно некоторой эвристике, которая позволяет сэкономить количество перезаписи данных - если есть несколько кусков неравномерного размера, то он предпочитает подождать появления новых данных, а только потом мержить, вместо того, чтобы домерживать до конца.
-
Можно форсировать мерж с помощью
OPTIMIZE TABLE ... PARTITION ... FINAL -
а не планируется сделать optimize final для таблицы целиком?
-
Нет.
-
кинул новую порцию дублей, он начал мержить
-
но в итоге недомержилось 5 записей
-
и даже OPTIMIZE TABLE ... PARTITION ... FINAL
-
не убрал эти 5 записей
-
-
шардинг к зукиперу не имеет отношения
-
в зукипере только репликация
-
Движок MergeTree поддерживает индекс по первичному ключу и по дате и обеспечивает возможность обновления данных в реальном времени.
-
а давно так стало?
-
шардинг весь в конфиге и названии дистрибьютед таблицы настраивается
-
именно часть про обновление в реальном времени
-
спасибо. почитаю
-
а чтобы селекты со всех шардов были прозрачными? для этого кипер не нужен разве?
-
селектам вообще зукипер не нужен
-
в чем прозрачность то , одинаковость реплик вы сами обеспечиваете если у вас нет зукипера
-
если вы про это конечнр
-
-
Можно настроить шарды и делать запросы через Distibuted поверх них
-
тогда у вас будут данные со всех нод в одном запросе
-
для этого зукипер не нужен , просто обычный шардинг с дистрибьютед
-
спасибо, я в библиотеку :)
-
Всегда так было
-
странно
-
Скорее всего вы имеете ввиду обновление данных в таблице, тогда нет. Считайте что это про обновление данных по "F5" - можете писать и сразу же получать "актуальный" результат
-
я просто инсерт делаю в MergeTable и он сразу заменяет старые на новые в зависимости от ключа?
-
тогда в ReplacedMergeTable теряется смысл?
-
Он ничего не меняет, вы можете делать запросы на чтение в реальном времени (данные обновляются в реальном времени)
-
печально
-
я думал он обновлять может
-
тогда движок поддерживает не обновление в реальном времени, а добавление в реальном времени
-
Привет. Подскажите пожалуйста, имеет ли смысл использовать тип UUID для хранения уникальных идентификаторов? Есть ли с ним какие то проблемы? В changelog репозитории CH указано, что поддержка UUID неполная.
-
Проблем куча, используйте FixedString(16)
-
а можете привести пример, какие могут возникнуть проблемы с UUID ?
-
Ломает репликацию, не работает CAST, хранит обратный набор байт и не совместим со стандартными UUIDTo* функциями, не работают операции сравнения, а так можно использовать )
-
понятно, спасибо )
-
UUID тип сейчас вообще частично сломан
-
поэтому в данный момент есть только вариант с FixedString
-
UUID field type #1770
Looks like bug in new data type UUID. Used version 1.1.54327 I can create table with uuid field, insert data using simple string, representing uuid like '0c5049ab-a9fe-46c6-aee6-bcb5e414a19c' The problem in using UUID typed field in WHER...
-
Конечно очень хотелось бы чтобы разработчики исправили CAST оператор и операции сравнения для UUID. Жить бы стало проще. Может кто нибудь дать estimatation по срокам на эти баги?
-
Вчера сказали исправьте сами и пришлите пул реквест, так что со сроками все ясно, как только сам починишь
-
))))
-
Ловлю очень странное поведение
`SELECT DISTINCT stack_trace
FROM dfs.error
WHERE emergency_datetime > toDateTime('2018-04-05 11:30:34')
LIMIT 10
Received exception from server (version 1.1.54370):
Code: 171. DB::Exception: Received from localhost:9001, 127.0.0.1. DB::Exception: Block structure mismatch in UNION stream: different number of columns:
stack_trace String String(size = 0)
stack_trace String String(size = 0), emergency_datetime DateTime UInt32(size = 0).
`
`
:) describe dfs.error
DESCRIBE TABLE dfs.error
┌─name───────────────┬─type─────┬─default_type─┬─default_expression─┐
│ incoming_message │ String │ │ │
│ stack_trace │ String │ │ │
│ emergency_date │ Date │ │ │
│ emergency_datetime │ DateTime │ │ │
└────────────────────┴──────────┴──────────────┴────────────────────┘
4 rows in set. Elapsed: 0.001 sec.
` -
version 1.1.54370.
-
dfs.error - это Distrebuted таблица
-
к локальной - работает
-
похоже на это: https://github.com/yandex/ClickHouse/issues/2156
но будет отлично, если вы добавите свой пример со структурой таблиц и конфигурацией кластера, на котором падает запрос[Exception] DB::Exception: Block structure mismatch in UNION stream: different number of columns · Issue #2156 · yandex/ClickHouseenv clickhosue-server:version 1.1.54370 centerlog is a distributed table table structure table centerlog ( type String, date Date, time DateTime, appname String, module String, category String, sub...
-
-
Пойду откатываться(((((
-
-
есть параметр lifetime, можно его покрутить. но меньше 5 секунд, кажется, не получится сделать
а еще можно сделать system reload dictionary dict_name
https://clickhouse.yandex/docs/en/dicts/external_dicts_dict_lifetime/#dicts-external_dicts_dict_lifetime -
-
-
Коллеги, а по массивам можно делать IN , или обязательно arrayExists ?
-
has()
-
да, я неверно сказал. если словарь не загружается, то время следующей попытки увеличивается экспоненциально
-
-
а вот это странно. запрос должне возвращать ошибку, что словарь не загружен
-
сейчас попытаюсь воспроизвести
-
воспроизвести не получилось. пример:
ELECT dictGetString('fail', 'String_', toUInt64(2))
Received exception from server (version 1.1.54373):
Code: 1000. DB::Exception: Received from localhost:9004, ::1. DB::Exception: Exception: Connections to all replicas failed: test@localhost:12345 as user 123. Stack trace:
SELECT dictGetString('mysql_flat_5', 'String_', toUInt64(2))
┌─dictGetString(\'mysql_flat_5\', \'String_\', toUInt64(2))─┐
│ 18198135717204167749 │
└───────────────────────────────────────────────────────────┘
Можете поделиться какой-нибудь минимальной конфигурацией, на которой такое происходит? -
Вопрос по StorageFile.
Почему нельзя создать таблицу из файла на сервере?
CREATE TABLE fileTest
(
id UInt32,
data String
)
ENGINE = File(TabSeparated, '/path_to_clickhouse/data/test.tsv')
DB::Exception: Using file descriptor or user specified path as source of storage isn't allowed for server daemons -
у меня сорсы - tsv'шки через https за nginx
20 словарей. если указаны все - один обязательно стрельнет timeout'ом
трейс -
11. /usr/bin/clickhouse-server(DB::ExternalDictionaries::ExternalDictionaries(std::unique_ptr<DB::IExternalLoaderConfigRepository, std::default_delete<DB::IExternalLoaderConfigReposit
2018.04.05 08:31:03.549125 [ 4 ] <Error> BaseDaemon: ########################################
2018.04.05 08:31:03.549146 [ 4 ] <Error> BaseDaemon: (from thread 1) Received signal Aborted (6).
2018.04.05 08:50:51.446143 [ 1 ] <Error> ExternalDictionaries: Cannot create external dictionary 'section' from config path /etc/clickhouse-server/dictionaries.xml: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Timeout: connect timed out: XXX:443, e.what() = Timeout
2018.04.05 08:50:51.446929 [ 1 ] <Error> ExternalDictionaries: reloadFromConfigFile has thrown while reading from /etc/clickhouse-server/dictionaries.xml: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Timeout: connect timed out: XXX:443, e.what() = Timeout -
Народ, а подскажите, в чем может быть проблема и куда копать, если КХ перестал отвечать и отдавать Ok по адресу сайт:порт?
-
ну посмотрите ошибки в нгинксе
-
посмотреть оом киллер и логи кх
-
оом киллер? Это че?
-
-
линукс киллер если память кончилась
-
ну если словаря нет то как то сложно работать всему что на него завязано
-
вроде и не было такого, создаете таблицу, заливаете данные и з файла кх клиентом
-
-
-
-
Ха, а знаете какой прикол - если захожу со Старбакса, ничего не пишет и висит, а если с расшаренного Андроида - пишет Ok =)
-
Коллеги, привет. В деве залил в БД фейковые данные. После этого стала вылетать такая ошибка абсолютно при любом запросе. Даже если ввести DROP DATABASE. В чем может быть проблема?
-
-
-
специально запрещено, чтобы не читать произвольные файлы. можно создать с именем по умолчанию
-
-
-
наверно, все словари идут одновременно обновляться, и один не успевает по таймауту
-
-
когда все словари недоступы из-за одного, конечно, плохо. попробую воспроизвести конкретно для http словарей
-
скорее всего нет. на всякий случай проверю
-
-
-
словарь cached?
-
-
Аргумент добавлен и специально запрещен, этот тезиз непонятен
-
в clickhouse-local должен работать
-
У вас один сервер (чей hostName()) выдаётся в итоге мёржит результаты с разных серверов (на которые указывает Distributed)
-
это ожидаемое поведение
-
Если вы в консольном клиенте выставите set distributed_group_by_no_merge=1; и выполните внутренний запрос, то там появятся hostname
-
status_updated входит в выражение шардинга для Distributed?
-
-
2018.04.05 12:44:23.383013 [ 8 ] <Error> HTTPHandler: Code: 195, e.displayText() = DB::Exception: User default is not allowed to connect from address ::ffff:10.21.90.20, e.what() = DB::Exception, Stack trace:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x15) [0x73178b5]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1e) [0x19ca19e]
2. /usr/bin/clickhouse-server(DB::SecurityManager::authorizeAndGetUser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Poco::Net::IPAddress const&) const+0x5aa) [0x6729a4a]
3. /usr/bin/clickhouse-server(DB::Context::setUser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Poco::Net::SocketAddress const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x80) [0x666d310]
4. /usr/bin/clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x542) [0x19e4f02]
5. /usr/bin/clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x397) [0x19e9aa7]
6. /usr/bin/clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x335) [0x7632085]
7. /usr/bin/clickhouse-server(Poco::Net::TCPServerConnection::start()+0xe) [0x762ad4e]
8. /usr/bin/clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x165) [0x762b115]
9. /usr/bin/clickhouse-server(Poco::PooledThread::run()+0x76) [0x73e6f36]
10. /usr/bin/clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x37) [0x73e32a7]
11. /usr/bin/clickhouse-server() [0x76fcfae]
12. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76b9) [0x7f77de1ed6b9]
13. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6c) [0x7f77ddc1a41c] -
-
-
-
при этом...
[12:53] icinga-labs:~ (✓)# curl -I http://10.27.4.12:8123
HTTP/1.1 200 OK
Date: Thu, 05 Apr 2018 12:53:42 GMT
Connection: Keep-Alive
Keep-Alive: timeout=3
Content-Type: text/html; charset=UTF-8
Content-Length: 4 -
есть шанс, что получится позже, если сейчас идет много мержей. а еще, возможно, на какой-нибудь реплике выставлен max_bytes_to_merge_at_max_space_in_pool меньше, чем у остальных
-
-
-
а причина смерти ?
-
наверно, в users.xml этот адрес не прописан
-
память , проц, место на диске?
-
да, он не прописан
-
-
-
сложно сказать, в определенный момент он говорит
2018-04-05 12:53:06,115 - INFO [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:Leader@496] - Shutting down
2018-04-05 12:53:06,116 - INFO [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:Leader@502] - Shutdown called -
-
да, звучит логично
-
сделаете?)
-
я бы сделал. надо с коллегами посоветоваться
-
Коллеги подскажите можно ли при билде image с КХ сразу выполнить операции создание схемы БД
пытаюст сделать вот так:
RUN cat schema.sql | clickhouse-server --client --database=default
но появляется ошибка
Code: 210. DB::NetException: Connection refused: (localhost:9000, 127.0.0.1) -
-
Да там же команда RUN из докер билд файла, но там по сути же кх не запущен
-
Надо как то хитро его запустить и потом через && заливать и потом убить его
-
да
-
-
-
-
-
привет
есть такая проблема
2 шарда по 2 реплики
на всех шардах есть таблица MergeTree
так же на всех шардах есть таблица Distributed которая смотрит в эти MergeTree
в какой-то момент запросы на первый шард начинают возвращать ошибку о том, что якобы на репликах второго шарда нет MergeTree таблиц которые он ищет
Code: 279. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::NetException. DB::NetException: All connection tries failed. Log:
There is no table .tablename on server: db4.hostname:9000
лечится пересозданием Distributed таблицы на первом шарде, но помогает ненадолго. через какое-то время проблема повторяется
с чем может быть связано? -
можно подробнее, у меня в этой директории лежит 2 папки: default и system
-
-
нельзя. возможно, не так сложно добавить
-
например вы хотите создать БД test, а в ней таблицу table, делаете так:
создаете файл test.sql
ATTACH DATABASE test
ENGINE = Ordinary
файл test/table.sql
ATTACH TABLE table /* синтаксис как и у CREATE TABLE*/
(
Date Date,
...
)
ENGINE = MergeTree(Date, Date, 8192) -
Пулл реквесты приветствуются?
-
конечно!
-
тогда, видимо, придется делать поддержку произвольного константного выражения для limit
-
-
странная ситуация. а на db4.hostname:9000 в логах видно, что запрос до нее доходит?
нет ли еще одного процесса, слушающего 9000? -
на db4 в логах нет этих запросов
-
тут важный нюанс - на этих же серверах есть другая пара MergeTree:Distributed таблиц и с ней все впорядке
-
еще вот такое странное в логах
Code: 84, e.displayText() = DB::Exception: Directory /data/clickhouse/data/mydb/mytable/tmp_merge_20180402_20180408_547040_547110_12/ already exists -
спасибо, отличная идея, а ты не знаешь почему билд крешится когда я помещаю файлы в директорию /var/lib/clickhouse/metadata/default ?
-
Нет, а какая ошибка?
-
в stdout ни чего полезного не падает, в dockerfile следующие команды
COPY default/ /var/lib/clickhouse/metadata/default/
USER root
RUN chown -R clickhouse:clickhouse /var/lib/clickhouse/metadata/default/
USER clickhouse -
у вас несколько zookeeper серверов?
-
да
-
а они точно видят друг-друга? и не запущены в single mode?
-
видят точно. в логах видно что они пингуют друг друга
-
telnet zookeeper-node 2181 и сказать там mntr
-
На одном из узлов будут в числе прочего строки типа:
zk_followers 2
zk_synced_followers 2
zk_pending_syncs 0 -
Тогда точно зукиперы друг друга видят
-
есть такое, да
zk_followers 3
zk_synced_followers 3
zk_pending_syncs 0 -
Просто по симптомам их действия не согласуются по какой-то причине
-
прям вот постоянно воспроизводится (
2018.04.05 18:15:23.426996 [ 156 ] <Warning> ConnectionPoolWithFailover: There is no table . mytable_merge_tree on server: db2:9000,
2018.04.05 18:15:23.427776 [ 156 ] <Warning> ConnectionPoolWithFailover: There is no table . mytable_merge_tree on server: db4:9000,
2018.04.05 18:15:23.450765 [ 33 ] <Error> executeQuery: Code: 279, e.displayText() = DB::NetException: All connection tries failed. Log:
There is no table . mytable_merge_tree on server: db2:9000,
There is no table . mytable_merge_tree on server: db4:9000,
, e.what() = DB::NetException (from 127.0.0.1:60784) (in query: select count() from mytable), Stack trace: -
только на одной ноде. на второй ноде этого же шарда все в порядке.
ни ошибок, ни запросов в логах на остальных нодах не происходит в момент этого запроса -
интересно еще то, что слева и справа от точки должны быть имя базы и таблицы
-
mytable_merge_tree - условное имя
-
понял
-
Joined.
-
Joined.
-
-
2018.04.05 19:49:14.281393 [ 16 ] <Trace> rt.redir_lr (StorageReplicatedMergeTree): Executing log entry to merge parts 20180209_61656_61656_0, 20180209_61657_61657_0, 20180209_61658_61658_0, 20180209_61659_61659_0, 20180209_61660_61660_0, 20180209_61661_61661_0, 20180209_61662_61662_0, 20180209_61663_61663_0 to 20180209_61656_61663_1
2018.04.05 19:49:14.281410 [ 16 ] <Warning> rt.redir_lr (StorageReplicatedMergeTree): Part 20180209_61656_61656_0 is covered by 20180209_61656_61661_1 but should be merged into 20180209_61656_61663_1. This shouldn't happen often.
2018.04.05 19:49:14.281416 [ 16 ] <Debug> rt.redir_lr (StorageReplicatedMergeTree): Don't have all parts for merge 20180209_61656_61663_1; will try to fetch it instead
2018.04.05 19:49:14.282019 [ 198 ] <Warning> rt.redir_lr (StorageReplicatedMergeTree, PartCheckThread): Checking part 20180209_61656_61663_1
2018.04.05 19:49:14.282030 [ 16 ] <Information> rt.redir_lr (StorageReplicatedMergeTree): DB::Exception: No active replica has part 20180209_61656_61663_1 or covering part
2018.04.05 19:49:14.282165 [ 198 ] <Warning> rt.redir_lr (StorageReplicatedMergeTree, PartCheckThread): Checking if anyone has a part covering 20180209_61656_61663_1.
2018.04.05 19:49:14.282500 [ 198 ] <Warning> rt.redir_lr (StorageReplicatedMergeTree, PartCheckThread): Found parts with the same min block and with the same max block as the missing part 20180209_61656_61663_1. Hoping that it will eventually appear as a result of a merge. -
-
-
-
С настройками по умолчанию, ZooKeeper является бомбой замедленного действия:
Сервер ZooKeeper не будет удалять файлы со старыми снепшоты и логами при использовании конфигурации по умолчанию (см. autopurge), это является ответственностью оператора.
Эту бомбу нужно обезвредить. -
-
https://clickhouse.yandex/docs/ru/single/ CTRL+F "бомбой"
-
-
вы пробовали эти данные поселектить из базы, их правда нет? говорят, такие сообщения это норма для зукипера, на них не стоит обращать внимания
-
-
-
-
-
-
-
-
-
-
а параметры use_uncompressed_cache /uncompressed_cache_size динамические? или нужен рестарт?
-
-
Это нормально 🙂
-
ZK не хранит данных как таковых же
-
-
информацию о БД, задания
-
сервисные и координационные нужды обеспечивает
-
Я за zk начал следить после печального опыта эксплуатации ранних версий kafka, autopurge ещё опции в конфигами не было. Мой "рекорд" - под 2 терабайта снэпшотов
-
работает v1.1.54292 (Debian GNU/Linux 9 (stretch) + mariadb-client-10.1) ходит за словарями к percona 5.7
обновляю до 54343 получаю: external dictionary: Poco::Exception. Code: 1000, e.code() = 2027, e.displayText() = mysqlxx::BadQuery: Malformed packet
(from thread 1) Received signal Segmentation fault (11).
Address: NULL pointer.
....
clickhouse-server(DB::MySQLBlockInputStream::MySQLBlockInputStream(mysqlxx::Pool::Entry const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&,
DB::Block const&, unsigned long)+0x9b) [0x65cfeeb]
заменил на mysql-client 5.7 не помогло.
В итоге вернул v1.1.54292.
Не понимаю что ему надо-то? mysql-client 5.5 ? -
- 06 April 2018 (153 messages)
-
-
-
-
-
https://www.altinity.com/clickhouse/ эти ребята вроде что-то типа такого делают, может ошибаюсь
-
Альтинити так-то русские ребята, думаю и в России смогут
-
-
а какая именно поддержка нужна?
-
ну то есть у вас уже есть инсталяция CH и у вас какие то проблемы? или вас надо платно проконсультировать на тему подойдет ли CH под ваш workload?
или вас интересует мониторинг CH 24x7 ? -
Обычно ентерпрайзу надо и то и то и побольше
-
Да верно, комплексный подход. Поставить, настроить и тд сами можем, но в случае проблем багов, необходимо обеспечивать решения, которые бы не приводили к отказу или потери данных.
-
Привет, я все с теми же неожиданными рестартами, заметил что они происходят как-то по расписанию:
2018.04.06 01:00:01.488274 [ 509 ] <Information> Application: Received termination signal (Terminated)
2018.04.06 02:00:02.012034 [ 508 ] <Information> Application: Received termination signal (Terminated)
2018.04.06 03:00:02.183767 [ 510 ] <Information> Application: Received termination signal (Terminated)
2018.04.06 04:00:02.502462 [ 4188 ] <Information> Application: Received termination signal (Terminated) -
Кто знает почему может CH рестартиться сам по себе?
-
OOM киллер не убивал
-
крон, скорее всего
-
Уж больно регулярно срабатывает
-
Коллеги а как можно быстро автоматически создать схему БД в КХ , я так поманию что клиент командной строки не может выполнить больше одной операции за раз ? я хотел сделать вот так , но это больше одной операции он не выполняет
cat /schema.sql | clickhouse-server --client -
Разделители добавить ;
-
multi-query есть параметр
-
и можно много в схема sql положить
-
-
это наверно в системд надо смотреть
-
Да, но они чаще рестартят при умирании.
-
В кроне было, сейчас вроде закомментирован
-
Да, распавн
-
CREATE TABLE requests (
request_date Date MATERIALIZED toDate(request_time),
request_time DateTime,
request_uri String
) ENGINE=MergeTree(request_date, (request_time, request_uri), 8192);
SELECT * FROM requests ORDER BY request_date DESC LIMIT 10; -
Запрос видимо поднимает всю таблицу? Как такое оптимизировать? ...
-
-
WHERE
-
Есть Altinity, официальный партнер Яндекса. Подробнее можете у @alexanderzaitsev узнать
-
Это в cron.d нужно смотреть
-
Подскажите пожалуйста хотя бы куда копать
Есть два шарда по две реплики КХ
на все репликах созданы MergeTree таблицы mytable_real
поверх них на всех репликах созданы Distributed таблицы mytable
какое-то время все работает хорошо но потом одна из реплик начинает сходить с ума
например:
- при запросе select count() from mytable выдает ошибку об отсутствии таблицы mytable_real на втором шарде
- при insert'e в mytable выдает ошибку об отсутствии колонки в таблице mytable_real. при это колонка присутствует и вставка непосредственно в mytable_real происходит без проблем -
а что говорит
sudo netstat -tulpn | grep :9000
на каждой реплике? нет ли там нескольких слушающих процессов? -
Какая версия КХ? Железо или докер и прочее? Адреса как ip прописаны или именами (если второе то возможно по хостнейму выдаются разные ip и сервер начинает ходить не туда). Вообще старнное поведение для Distributed, там все очень просто
-
версия 1.1.54370
стоит не в докере
железки по 4 ядра, 16Гб памяти (m4.xlarge)
хосты прописаны именами -
тут еще важный нюанс - на серверах есть другие таблицы созданные так же. с ними все в порядке
-
Диски разные? Живые?
-
да. остальные ноды прекрасно видят ту одну, у которой проблемы
-
Иногда появялется такая ошибка:
>DB::Exception: ZooKeeper session has been expired
- какая-то нужная натсройка не устанволена? -
Пробовали указывать хосты ip-адресами, чтобы отсечь возможные проблемы с резолвером?
-
thanks)
-
еще нет, но сейчас попробуем
-
но у нас они прописаны в /etc/hosts
-
и в zookeeper ip адреса
-
это не помогло (
-
Joined.
-
-
можно
-
-
-
-
быстрее. главное, не вставлять суммарно чаще где-то одного блока в секунду. Если в серднем блок вставляется N секунд, то можно вставлять в N потоков.
-
для нескольких последних вставленных блоков храним чексумму в зукипере
-
сборку с clang5 тестируем стандартными функциональными тестами. пакеты, если не ошибаюсь, собираем в gcc
-
Блок = max_insert_block_size число строк? На стороне сервера нет тротлинга? А если вставлять в реплицируемую таблицу? Если есть две реплики, то вставлять в 2 N потоков?
-
джентельмены, кх умеет решардить данные при добавлении нового шарда? если не умеет, то планируется ли появление этого функционала?
-
clcikhouse-copier
-
есть отдельная тулза, есть описание в доке
-
это копипаста, немного не то
мой вопрос связан с появлением DELETE -
т.е. есть два шарда, заполненных на 50%, добавляю 3 и ожидаю, что после перешардирования каждый окажется заполнен на 30%
-
> Блок = max_insert_block_size число строк?
да
> На стороне сервера нет тротлинга?
не должно быть (могу ошибаться)
> Если есть две реплики, то вставлять в 2 N потоков?
Если через Distributed, то в N. Можно непосредственно в каждую реплику вставлять разные данные (по N в каждую) -
-
Joined.
-
только не 30, а 20, наверное
-
вы абсолютно правы, я лишь хотел донести мысль
-
насколько актуальна оценка про UPDATE/DELETE в Q1-Q2 2018?
-
-
То, что в roadmap, пока актуально. https://clickhouse.yandex/docs/ru/roadmap/
-
а апдейт будет настоящим?
-
спасибо!
-
про решардинг правда ничего не нашел, своими силами только если?
-
Настоящими. Но не мгновенными. Если очень примерно, что можно будет указать, какие данные и с какими условиями должны быть удалены, а далее в фоне это изменение будет постепенно применяться к кускам. Примерно как мержи.
Опять же, возможно я где-то ошибаюсь :) -
гарантированно или как в ReplacedMergeTable ?
-
гарантированно
-
а это будет новый движок или в простой MergeTable добавите?
-
своими силами или через clcikhouse-copier
-
просто в MergeTree
-
-
/root/rpmbuild/BUILD/ClickHouse-07718746959cfc85fcb8ffd29d97c8e217b082a2/contrib/poco/Foundation/src/Thread_STD_POSIX.cpp:170:6: error: no matching function for call to 'pthread_setaffinity_np'
if (pthread_setaffinity_np(_pData->thread->native_handle(), &cpuset) != 0)
^~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:477:12: note: candidate function not viable: requires 3 arguments, but 2 were provided
extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, -
-
-
-
-
Joined.
-
А обратно-совместимо или только для таблиц, созданных в новых версиях?
-
-
Joined.
-
-
Joined.
-
Joined.
-
подскажите плиз, что такое VersionedCollapsingMergeTree?
-
-
Имеется задача прислывать старые данных с локальных серверов который могут быть недоступные долго время, при это получается что часть данных будут писаться в текущем времени и часть отправлятся как старые данные, насколько мне изветсно это плохо, стоит ли создавать ради такого таблицу на каждую метрику или для это задачи плохо подходит кх?
-
ReplacingMergeTree не дает гарантий отсутствия дубликатов. Но вроде OPTIMIZE фиксит.
-
насколько я понял, к ReplacingMergeTree нужно относиться как к MergeTree, то есть селектить с учетом того, что там могут быть дубли. ReplacingMergeTree просто экономит место на диске, схлопывая дубли. Но можно, например как я, схлопывать данные сразу после вставки c помощью optimize table partition final, и радоваться костылю :)))
-
Мне не нужна гарантия отсутствия дубликатов. Пока мне интересно как часто оно запускает эту процедуру
-
-
у меня 4 дня не запускалось
-
-
пока я снова не начал туда дубли фагачить
-
да это даже ответ на мой вопрос
-
и в итоге всеравно 5 дублей осталось)
-
которые даже через optimize table partition final не убирались
-
-
-
у меня 5 всеравно осталось
-
они потом пропали
-
-
после какойто очередной партии
-
у меня 1 сервер
-
-
-
даже на optimize table partition final нельзя надеятся
-
и нифига не сразу
-
у меня основная проблема - это когда обновление версии
-
почти всегда нужно заново залить данные в кх
-
не буду же я дропать таблицу и ждать полной синхры)
-
-
мы заливаем свежие данные почти сразу
-
но при обновлении у нас меняются логики вычисления полей
-
добавляются столбцы
-
В свете последних новостей (блокировка Телеграма) вот годный VPN-чик полностью не за деньги, есть под все платформы.
https://psiphon.ca/ru/download.html
Но я бы socks - сервак поднял)Psiphon | Скачайте приложение для Android или клиентское ПО для Windows.Скачайте Psiphon для Windows и Android напрямую и бесплатно
-
лучше бы ссылку на программу эмиграции)
-
-
-
в канаду усложнили
-
года 2-3 назад
-
-
вроде вот только опять упростили
-
вроде ничего с 2015 года не поменялось
-
нужен контракт с работодателем
-
но с контрактом и в сша можно ехать
-
-
-
blue card тоже надо контракт
-
с контрактом можно почти в любую страну
-
-
-
-
-
совсем плохо все с кадрами?
-
-
-
-
-
-
Мда, вам с такими мыслями по скорее бы на родину вернутся, в глубинку желательно, там то точно все родное и на русском. Позор, приезжая в другую страну вы обязаны принять её законы и язык. И да, и не флудить тут например
-
-
))) скажите это Парижу)) ну и всей Германии приютившей братьев наших меньших... Ах да. Извините за флуд)
-
А есть где-то публичная ветка, например на GitHub ?
-
кажется, здесь что-то похожее: https://github.com/yandex/ClickHouse/commits/mergetree-mutations2
может быть есть ещеyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
Спасибо
-
- 07 April 2018 (38 messages)
-
Именованные подстановки не реализованы. Сейчас есть только ?
-
Добрый день! Кто графаной пользуется с плагином для КХ, подскажите, пожалуйста, как побороть проблему автоподстановки "default." перед названиями таблиц. В табиксе оно как-то решено само. В графане пытаюсь выполнить запрос вроде:
SELECT
t,
groupArray((channel, c)) as groupArr
FROM
(
SELECT
(intDiv(timestamp, 216000) * 216000) * 1000 as t,
channel,
count() c
FROM
mydatabase.transactions ANY
LEFT JOIN mydatabase.dict_channel USING merch_name
WHERE
event_date >= toDate(1491559351)
AND timestamp >= 1491559351
GROUP BY
t,
channel
ORDER BY
t,
channel
)
GROUP BY
t
ORDER BY
t
Графана транслирует ошибку от кх:
Code: 60, e.displayText() = DB::Exception: Table default.mydatabase.dict_channel doesn't exist., e.what() = DB::Exception
В редакторе запросов выбрана явно нужная база. Так же пробовал различные комбинации. Если убрать вообще префикс с базой из запроса, то ругается вот так
Code: 60, e.displayText() = DB::Exception: Table default.dict_channel doesn't exist., e.what() = DB::Exception -
-
-
-
-
-
У вас таблица с данными случаем не в бд отличной от той где лежит distributed
-
Ну или справочник тот же
-
-
И в одной бд?
-
-
-
-
-
-
похоже, что это проблема кх. Воспроизвел так:
на версии 1.1.54236 в консоли кх выполнил запрос НЕ делая USE перед этим (именно так ведь работают запросы через HTTP):
Code: 60, e.displayText() = DB::Exception: Table default.mydatabase.dict_channel doesn't exist., e.what() = DB::Exception
А на версии 1.1.54343 все то же самое отработало корректно.
Не в курсе, может такое поведение - это отключаемая фича?) -
Joined.
-
Может у вас дефолтные базы разные на разных серверах?
-
-
-
Можете попробовать ещё разные форматы, просто добавьте в конце запроса, например, `format Vertical`. В документации есть полный список
-
-
-
OMFG! да я просто люблю этих ребят! https://github.com/Vertamedia/chproxy#spread-inserts-among-cluster-shards
-
-
Нет, КХ сам не чистит партиции, но для query_log можно задать произвольный ключ партиционирования чтоб можно было удалять не по месяцам
-
-
Приветстую.
А какие параметры КХ можете посоветовать для построения графиков в системе мониторига? Я хочу, скажем в заббикс добавить мониторинг КХ, чтобы в случае сбоя можно было по графикам быстро понять из-за чего это произошло? Ну или оповещения настроить при достижении определенных значений. -
Порты , логин , зукипер, количество записей
-
а какие-нибудь параметры из таблиц
system.metrics
system.asynchronous_metrics
system.events
нет необходимости? -
Ну смотря какие падения вы хотите мониторить , в целом мне хватает мониторинга процессора, памяти и места на диске
-
иногда стоит ещё rps, возможно даже с инсертами отдельно
-
в графане это выглядит вот так
https://grafana.com/dashboards?search=clickhouseGrafana Dashboards - discover and share dashboards for Grafana. | Grafana LabsGrafana.com provides a central repository where the community can come together to discover and share dashboards.
-
Joined.
-
-
(v1.1.54327.) случилось странное. У сервера 64ГБ, oom начал прибивать КХ (BackgrProcPool).
Добавил своп 64ГБ, и вот теперь я увидел что clickhouse-server скушал всю память и своп VIRT 170GB/ RES 61GB.
Идет мердж:
elapsed: 2233
progress: 0.00140
num_parts: 13
total_size_bytes_compressed: 148508434057
total_size_marks: 20606
bytes_read_uncompressed: 95158253980
rows_read: 237568
bytes_written_uncompressed: 9574550341
rows_written: 131072
memory_usage: 179221182948
Подозреваю, что в той таблице появились строки размером до 4МБ, которые очень хорошо жмутся в пару КБ.
Может это причина?
Никогда такого не было, и что делать теперь? -
В общем поменял max_bytes_to_merge_at_max_space_in_pool с 200Г на 50Г, видимо КХ мержить эти парты уже не будет.
- 08 April 2018 (38 messages)
-
-
-
-
Сервера теперь горят?
-
-
Привет всем, подскажите новичку. есть таблица с движком MergeTree. при импорте данных часть данных экспортировалась несколько раз и в таблице образовались дубли. как быть, как он них можно проще избавиться?
-
Проще заново залить данные без дублей
-
при условии что данные эти существуют, правда ведь?
-
-
-
я почему-то ожидал от КХ что понятие первыичный ключ будет гарантировать защиту от дублей. но нет....
-
-
есть
-
это же обязательное поле
-
-
-
да
-
-
-
-
щас попробую
-
-
похоже это из-за того что дубли попали в разные месяца😁
-
-
когда-нибудь схопнутся))
Обратите внимание, что дедупликация данных производится лишь во время слияний. Слияние происходят в фоне в неизвестный момент времени, на который вы не можете ориентироваться. Некоторая часть данных может так и остаться необработанной. Хотя вы можете вызвать внеочередное слияние с помощью запроса OPTIMIZE, на это не стоит рассчитывать, так как запрос OPTIMIZE приводит к чтению и записи большого объёма данных.
Таким образом, ReplacingMergeTree подходит для фоновой чистки дублирующихся данных в целях экономии места, но не даёт гарантий отсутствия дубликатов. -
-
Вопрос про мониторинг Clickhouse
если clickhouse по умолчанию умеет слать свои метрики в graphite ??
тогда где можно найти grafana dashboards для этих graphite метрик? никто случайно не делал? -
мне кажется не совсем корректная подставновка в Tabix - http://joxi.ru/vAWKbKhkwyaxAW
должно быть UInt64, иначе ошибка синтаксиса1523208592516 (35 kb) uploaded April 8, 2018 Joximade using Joxi.net
-
Плагин меняет запрос когда используются макросы или когда пользователь использует format. Чтобы применить изменения запрос преобразовывается в ast и собирается назад. Да, это не всегда работает так как надо. Но пользователь вполне может не использовать макросы и формат и передавать запрос as is
-
-
Проверьте, пожалуйста, исходящий запрос во вкладке Network или нажав в Графане кнопку Generated SQL под запросом на предмет подстановки default.
-
-
эти макросы заменяются реплейсом
-
макросы $rate, $columns - парсером
-
Тогда это не для всех запросов выполняется. Вот здесь в запросе этих макросов не было, а запрос пересобирался
https://github.com/Vertamedia/clickhouse-grafana/issues/42Latest version broke some of queries #42May be it was broken in 1.4.1 or in 1.4.0. Plugin got query and send it to Clickhouse without some symbols. See resulting query. There is no comma here "AS t toRelativeMinuteNum" Sett...
-
-
Да, Вы правы. Я забыл, что поменял поведение при добавлении adhoc фильтров, т.к. для их работы модифицируется именно ast, который потом снова собирается в запрос но с изменениями после преобразования. Я отключу такое поведение, если не используются adhoc фильтры. Спасибо, что обратили внимание
-
- 09 April 2018 (110 messages)
-
-
https://github.com/vstakhov/clickhouse-rpm - если кому интересноvstakhov/clickhouse-rpm
ClickHouse DBMS build script for RHEL based distributions - vstakhov/clickhouse-rpm
-
👍🏻
-
Господа, в логах есть следующее:
2018.04.09 12:26:05.022486 [ 213 ] <Error> ServerErrorHandler: Code: 291, e.displayText() = DB::Exception: Access denied to database default, e.what() = DB::Exception, Stack trace: -
Как бы узнать, на каком хосте ошиблись с настройками клиента?
-
коннект - по tcp, про него известно только: TCPHandler: Client has not sent any data.
-
Обновите, пожалуйста, 1.4.3 ещё и в grafana "store".
-
https://github.com/Altinity/clickhouse-rpm вот же есть чудесный билд-скрипт, который все из пакетов ставит, не надо вообще ничего из сорцов собиратьAltinity/clickhouse-rpm
ClickHouse DBMS build script for RHEL based distributions - Altinity/clickhouse-rpm
-
-
-
-
читаю по привычке доку на английком, нашел такой перл:
position(haystack, needle)
Search for the 'needle' substring in the 'haystack' string. Returns the position (in bytes) of the found substring, starting from 1, or returns 0 if the substring was not found. It has also chimpanzees. -
шимпанзе то за что
-
-
только я не понял есть такая функция positionCaseInsensitive() или это шутка?
-
есть, проверил)
-
-
-
-
у меня есть заготовка template для KX на основе идей добрых людей, которые сделали шаблон для ZK — но вот до графиков у меня руки не дошли — если есть желание — можешь приделать их
-
Да, давайте. Я пока прикрутил tcp_conn, http_conn, MemoryTracking, Query из system.metrics
-
-
разве это не то поведение которе вам было нужно?:
SELECT substring('some text string for example', 3)
┌─substring(\'some text string for example\', 3)─┐
│ me text string for example │
└─────────────────────────── -
https://github.com/yandex/ClickHouse/blob/master/CONTRIBUTING.md - ссылка на Developer guide ведёт на 404yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
@ztlpn @milovidov_an
Ребят, добрый день! Надыбал кейс когда Buffer таблица не очищает данные почему то.
1. Создаем ReplacingMergeTree таблицу
2. Для нее создаем Buffer таблицу
3. Пишем данные в Buffer таблицу
4. Делаем DROP Buffer таблицы
5. Делаем SELECT в ReplacingMergeTree таблицу - записей из буффера нет.
6. Повторно создаем Buffer таблицу
7. Делаем SELECT в только что созданную Buffer таблицу и видим там строки, которые были ранее вставленны
В логах ошибок нет. -
Версия 1.1.54370
-
предположу, что удаление происходит не сразу, а вы таблицу Buffer с тем же именем создаете
-
Да. Просто в документации написано, что сброс данных происходит при DROP Buffer таблицы
-
А по факту этого не произошло в моем случае
-
Так же в документации написано
Данные сбрасываются из буфера и записываются в таблицу назначения, если выполнены все min-условия или хотя бы одно max-условие.
У меня max_time стоит 60 и данные до сих пор не сбросились, хотя прошло уже минут 10 -
И вот такая строка из буффера превращается вот в такую.
https://img.facedsid.ru/jtzrz.jpg -
Буффер таки сработал после нескольких переудалений
-
Вот create table для таблицы
CREATE TABLE IF NOT EXISTS video_seconds_views (
entityIri String,
courseId UInt64,
learnerId UInt64,
testColumn String,
secondsViews Nested(
viewId String,
startedAt DateTime,
endedAt DateTime,
secondsViewed Array(UInt8),
secondsCounts Array(UInt32)
),
version DateTime
) ENGINE = ReplacingMergeTree(version) PARTITION BY entityIri ORDER BY (learnerId, entityIri) SETTINGS index_granularity = 8192; -
а зачем вообще удалять буфер ?
он для того и сделан, чтобы писать в него, он когда надо перекинет данные.
и читать надо из буфера.
тогда будут подтягиваться все данные -
Блин, я его удалил, что бы очистить принудительно, что бы проверить теорию относительно порчи данных
-
И вот такая строка из буффера превращается вот в такую.
https://img.facedsid.ru/jtzrz.jpg -
И теория таки подтвердилась. Если в Nested есть Array, числовой по крайней мере, то при сбросе буфера массив "опустошается" чудным образом
-
Хы...все веселее! При записи в саму таблицу такая же канитель. Просто пустые массивы пишутся
-
я думаю что это хороший повод для issue на github?
-
Я хочу узнать вкурсе ли ребята или нет и потом уже заводить issue ) Может быть у них есть задача во внутреннем трекере
-
например, многомерные массивы нельзя сохранить в таблицы с движком семейства MergeTree
-
И в это же время в changelog 1.1.54337
Добавлена поддержка хранения многомерных массивов и кортежей (тип данных Tuple) в таблицах. -
Заводите issue. Поддержка была добавлена, но такие проблемы могут случаться.
-
Ок. А как от них можно избавиться? ) Например тип на String можно сменить?
-
issue сейчас заведу
-
Можно попробовать. Сам еще не сталкивался, так что не знаю, что посоветовать.
-
-
Смена типа не помогает. Все ок работает только именно с Array(Array()), но Nested внутри которого Array - не работает ни с числами, ни со строками.
-
но ведь nested, внутри которого array, это и есть array(array())
-
Но при этом в движке Buffer это срабатывает, скорее всего из-за того, что есть AS table... и вот show create table показывает, что там не Nested, а именно Array(Array(String)) например и в Buffer таблице все ок работает.
-
Да, но факт остается фактом. Если в SQL запросе на создание таблицы фигурирует Nested внутри которого есть колонка типа Array, то при вставке данных в такую таблицу - все что в многомерном массиве - испаряется. Пример я приводил выше. Сейчас создал просто вот такого вида таблицу
CREATE TABLE IF NOT EXISTS video_seconds_views (
entityIri String,
courseId UInt64,
learnerId UInt64,
testColumn String,
secondsViews_ViewId Array(String),
secondsViews_StartedAt Array(DateTime),
secondsViews_EndedAt Array(DateTime),
secondsViews_SecondsViewed Array(Array(UInt8)),
secondsViews_SecondsCounts Array(Array(UInt32)),
version DateTime
) ENGINE = ReplacingMergeTree(version) PARTITION BY entityIri ORDER BY (learnerId, entityIri) SETTINGS index_granularity = 8192;
и все работает -
Joined.
-
Multidimensional array does not work in Nested columns #2193
There is an example of table structure with Nested column which contains two Array columns. CREATE TABLE IF NOT EXISTS video_seconds_views ( entityIri String, courseId UInt64, learnerId...
-
Спасибо!
-
-
Здравствуйте! Возможно как-то узнать sharding key уже созданной distributed таблицы?
-
наверное show create table поможет
-
Хм. Спасибо. А в системных табличках без чтения DDL?
-
-
Подскажите, есть ли туториал как настроить ZooKeeper для работы с ReplicatedMergeTree таблицами ?
-
Или для относительно небольших обьемов(50 инсертов в секунду) лучше использовать репликацию посредством Distributed таблиц ?
-
всегда лучше использовать зукипер
-
50 инсертов уже не мало, лучше бы по реже и большими пачками
-
к сожалению так не получиться, вот смотрю в сторону Buffer таблиц, но их тоже критикуют
-
кафку поставить?
-
да вот не перебор ли, мб и так база справиться
-
вешатся будет
-
наглухо
-
периодически
-
А как критикуют буферные таблицы?
-
Если таблица назначения является реплицируемой, то при записи в таблицу Buffer будут потеряны некоторые ожидаемые свойства реплицируемых таблиц. Из-за произвольного изменения порядка строк и размеров блоков данных, перестаёт работать дедупликация данных, в результате чего исчезает возможность надёжной exactly once записи в реплицируемые таблицы.
В связи с этими недостатками, таблицы типа Buffer можно рекомендовать к применению лишь в очень редких случаях. -
это из офф документации
-
не ужели все так плохо? Вешаться на вставку ? Или и чтении в том числе ? Я пока столькнлся только с тем что место на диске выжирается, но это при нескольких тысячах инсертов в секунду
-
а подскажите такую штуку, у меня есть небольшой набор пар "ключ-значение", типа
MyId | Description
1111 | Petya
2222 | Vasya
и выборка из другой большой таблицы, которую я группирую по MyId, в виде
1111 | 49
2222 | 1023
я бы хотел вместо кодов видеть поля из Description из первой таблицы
то есть это должно быть
Petya | 49
Vasya | 1023
есть какой-то элегантный способ эту задачу решить? -
ну вроде как через dictionary можно, либо join
-
Ну, дедупликация не будет работать и с 99.9 % самодельных батчеров, так что это меньшее зло
-
-
-
-
-
:) select groupArray(a) from (select arrayJoin([1,5,2,9,3,8,18,4]) a order by a)
┌─groupArray(a)──────┐
│ [1,2,3,4,5,8,9,18] │
└────────────────────┘ -
ага? чего его нет в доках
-
:) select arraySort([1, 5, 2, 9, 3, 8, 18, 4])
┌─arraySort([1, 2, 3, 4, 5, 8, 9, 18])─┐
│ [1,2,3,4,5,8,9,18] │
└──────────────────────────────────────┘
класс )) а в доке нема -
-
-
Я баловался до поры инсертами в сотню потоков. Выжимал хороший инсерт рейт, но как только стал писать чуточку больше (объем данных), то КХ стало плохо. Он действительно подвисал на фоновых мерджах. У меня на сервере крутится 100 процессов, которые обрабатывают данные и готовят к записи в КХ. Я просто пишу все это дело в кучу по разным файлам. Раз в минуту формирую список файлов, которые нужно вставить в КХ, перемещаю их в другую директорию, мерджу в один файл и вставляю. Максимальная задержка - 1 минута, что вполне себе ок., учитывая то, что это не вешает сервак даже на чтение, а api падало по таймаутам достаточно часто, несмотря на то, что у меня 4 шарда по 2 реплики.
-
Можно сделать PR в гитхабе с исправленной документацией! :)
-
Спасибо, а реплики с replicatedMergeTree или distributed ?
-
replicated, а поверх них distributed (на всех шардах и репликах), пишу данные в случайную реплику
-
Т.е. случайно одну из восьми машин выбираю и туда пишу
-
Тогда надо в сторону буфер смотреть
-
Тут все используют репликейтед нет смысла его не использовать если нужна гарантия одинаковых данных на репликах
-
Блин, не могу найти документы как этот зоокипер настроить
-
Я буфер использую тоже, но для таблиц в которые данные ну просто в ничтожных количествах пишутся
-
Так distributed тоже режим реплики поддерживает , но смущает что почему то данные могут немного разъехаться
-
В ничтожных - это сколько ?, в доке пишут что несколько тыщ в секунду держит
-
Ну, это если по одной строке писать ) я пишу в такие таблице не чаще чем 500 строк в минуту. Просто данных больше нет.
-
Оно по дефолту умеет , вы разберитесь что такие зукипер сперва
-
Ну тут очевидно если что то пошло не так оно не умеет разруливать это
-
-
Ну там надо понимать что можно записать что тысяч сорок в секунду одним батчем но нельзя записать сто тысяч строк по одной
-
Это я понял , в принципе устраивает
-
Зукипер это как etcd примерно только по сути распределённая файловая система на джава
-
Завтра попробую разобраться, сегодня с наскоку не получилось . Доку для разработчиков надо читать ? Или для админов ?
-
Ок, буду настраивать replicated tree
-
Для админов
-
-
-
- 10 April 2018 (91 messages)
-
а правильно ли я понимаю что
Common/ProfileEvents.h
эта статистика не хранится в system таблицах и может быть доступна только через <use_graphite>true</use_graphite> ? -
В system.events доступна
-
SELECT * FROM system.events
не могу найти DuplicatedInsertBlocks со значнеием 0
в graphite выгружается
оно там появляется только есил репликация есть? -
-
-
значит не нужна!
-
-
-
-
а что-то типа POW нет разве?
-
-
Joined.
-
AsynchronousMetrics.MaxPartCountForPartition
а кто нибудь может точно объяснить что именно означает эта метрика? -
парни привет, вы наверно сталкивались с проблемой DB::Exception: Timeout exceeded: elapsed 5.000088625 seconds, когда запрос после 5 секунд валится, есть атрибут max_execution_time, который отвечает за это дело, но при прописывании в конфиге и ребуте после этого, значение в таблице settings остается тем же
-
-
-
-
спасибо, думал, что в config.xml
-
-
отлично, спасибо
-
Joined.
-
Народ, подскажите, а есть ли в РФ компании, предоставляющие поддержку CH?
-
-
Они вроде в UK
-
Они вполне себе и в России, вы можете связаться @alexanderzaitsev
-
Спасибо!
-
-
Привет, я использую
-
node-clickhouse этот? он стабилен?
-
у нас в продакшене вот это https://github.com/apla/node-clickhouse
стабилен, проблем нетGitHub - apla/node-clickhouse: Yandex ClickHouse driver for nodejsYandex ClickHouse driver for nodejs. Contribute to apla/node-clickhouse development by creating an account on GitHub.
-
добрый день
подскажите пожалуйста какие допустимые значения для настройки
distributed_product_mode
в документации этого нет -
-
Ачввпммрьодлтииттто
-
робит-робит
-
"deny", "local", "global", "allow"
-
спасибо. а не подскажите заодно для каких случаев какое значение? )
-
Я не знаю, но есть вот такой кусок кода:
/// The setting for executing distributed subqueries inside IN or JOIN sections.
enum class DistributedProductMode
{
DENY = 0, /// Disable
LOCAL, /// Convert to local query
GLOBAL, /// Convert to global query
ALLOW /// Enable
}; -
спасибо
-
Мм, господа, подтвердите плиз, допустим есть шард, в нем к примеру 2 реплики, на которых при запуске были вывполнены правильные create table, затем на одной из реплик были выполнены какие либо alter, которые успешно отреплицировались, теперь я добавляю 3 реплику в шард, для того чтобы поднялась репликация я на новой реплике так же должен сказать create table, теперь вопрос схема таблицы должна быть такая же точно как на тех двух уже сущесвтующих репликах?
-
-
мы не можем залить на новую реплику некую промежуточную схему и затем при помощи alter довести ее до состояния остальных реплик в шарде, поскольлку это корректируюшие alter бутут в свою очередь реплицированы, что может привести к странным результатам (если таблица вообще создастся)
-
ясно, спасибо
-
Подскажите пожалуйста, почему может не проходить репликация в одном направление. Есть две таблица с репликациеями между ними, если писать в node1 , то данные в node2 появляються, Наборот - нет. Причем в system.replicas видно что queue_size увеличивается.
Тут http://collabedit.com/vpg4u по system_replicas результат селектов. -
-
проверил, все ок
-
а вот с node1 на node2 не пашет
-
В system.replication_queue почему оно не работает
-
-
да, там last_exception: Poco::Exception. Code: 1000, e.code() = 111, e.displayText() = Connection refused, e.what() = Connection refused
-
резолвится
-
Вот, в /var/log/clickhouse-server/clickhouse-server.err.log будет более подробно куда он стучится и вот то куда он стучится недоступно
-
Я следовал вашему сообщению. Если верить логу что вы дали то проблемы с доступом как раз к node2, и данные не появляются в ней, так как очередь копится на первой. Посмотрите в настройки node2, возможно на ней просто закрыт порт, она слушает неправильный адрес, или прописано что-то плохое в https://clickhouse.yandex/docs/en/operations/server_settings/settings/#interserver_http_port
-
спасибо, разобрался, просто node2 слушал локалхост . Как раз с node1 на node2 проходила репликация, в другую сторону нет, проверил дважды.
-
🤔
-
Joined.
-
а кто нить у себя в проде дедупликацию отключает для репликейтед таблиц ?
-
-
по дефолту 100 блоков, я возможно упрусь, так как планирую активно юзать ReplicatedAggregatingMergeTree
-
-
Пример:
У нас есть демон который читает из кафки и сбрасывает блоки по таймеру или при определенном количестве строк в блоке. Если что-то пошло не так эти строки из буфера не удаляются и встявятся потом, в каком это будет порядке не понятно, как и количество строк которое мы сбросим. Поэтому у нас дедупликация работать не может -
-
ок, наверное действительно надо постараться что бы в проде попасть на дедупликацию
-
Добрый вечер. Если в clickhouse-client вставить из буффера какой-нибудь длиннющий многострочный запрос - то фрагменты этого запроса (обычно на конце линий) волшебным и весьма неприятным образом теряются. Сначала грешил на screen/ssh но локально тоже самое. Кто-то сталкивался, или это у меня какой-то неправильный билд?
-
-
-
Можно ходить, ничего страшного нет
-
-
Обычно я использую для неопределенной даты окончания периода -- 9999-12-31 23:59:59
Получается удобно писать
вместо date_begin <= today() and (date_end >= today() or date_end is null)
я пишу today() between date_begin and date_end
Но CH превращает 9999-12-31 23:59:59 --> 1970-01-01 19:59:59
И что делать? Как жить дальше? Что использовать в виде суперудаленного будущего? -
-
Ок. Спс. Надеюсь я сдохну до 38 года и меня коллеги не достанут за такие красивые грабли.
-
Там же давно до 2106 подняли
-
1.1.54310
Диапазон значений типов Date и DateTime расширен до 2105 года. -
-
ОК, отлично, но вообще 70 лет хватит не всем (Desperate gas producers sign 100-year shipping deals....).
-
если Газпром заюзаеют CH, тогда придется подумать )
-
гораздо хуже, что он начинается с 1970 года
-
Здравствуйте! Есть таблица типа Memory. После удаления таблицы память не освобождается. Только после перезапуска сервера. Это баг или фича? Или есть возможность покрутить конфигурацию, что бы память срузу освобождалась. ClickHouse server version 1.1.54370
-
скорее всего фича. Кстати какая память? Вот пример из top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3189 clickho+ 20 0 0.105t 0.022t 40820 S 1480 12.0 48474:04 clickhouse-serv
Я бы на VIRT столбик вообще не смотрел, т.е. реально КХ занимает 0.022TБ. -
Нет, вроде физическая
До добавления таблицы
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3928 clickho+ 20 0 1819520 1,029g 38588 S 0,0 6,6 0:04.20 /usr/bin/clickhouse-server —config=/etc/clickhouse-server/config.xml
После добавления таблицы
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3928 clickho+ 20 0 1844096 1,170g 42748 S 0,0 7,5 0:05.80 /usr/bin/clickhouse-server —config=/etc/clickhouse-server/config.xml
После drop table
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3928 clickho+ 20 0 1844096 1,169g 42748 S 0,3 7,5 0:05.89 /usr/bin/clickhouse-server —config=/etc/clickhouse-server/config.xml
З.Ы. Таблица мелкая - 3KK строк. -
1,169g ну по-моему это нормально, это не отдаст, чтобы не перезапрашивать.
Можно смотреть
SELECT metric, formatReadableSize(value) FROM system.asynchronous_metrics where (metric LIKE 'generic%')
сколько показывает generic.current_allocated_bytes, должно быть около 1,169 (не отличаться в разы) -
-
-
-
-
-
Прямо после drop'a
generic.heap_size 1.25 GiB
generic.current_allocated_bytes 1.14 GiB
Через секунд 30
generic.heap_size 1.25 GiB
generic.current_allocated_bytes 23.54 MiB
Это он оказывается для heap'а держит. Спасибо за консультацию. -
угу. По ощущениям - это связано в первую очередь со сложностью запроса, во вторую очередь с размером. Т.е. тривиальные большие запросы без проблем из буфера вставляются, а нетривиальные большие - часто портятся при вставке. Попробую сделать воспроизводимый пример.
-
Снять трейс всех тредов через gdb и показать -
sudo apt install clickhouse-common-dbg gdb
sudo gdb -ex run -batch -ex 'set pagination off' -ex "set logging file gdb.log" -ex 'set logging on' -ex 'continue' -ex 'thread apply all backtrace' -ex 'detach' -ex 'quit' -p $(pidof clickhouse-server) -
-
-
- 11 April 2018 (149 messages)
-
Всем кому интересно как мониторить Clickhouse встроенными в CH средствами
собрал демо-стенд
https://github.com/Slach/clickhouse-metrics-grafana
планирую улучшать Dashboards и добавить Moira Alerts
и попробую все таки написать документациюSlach/clickhouse-metrics-grafanaClickhouse grafana dashboard with graphite storage - Slach/clickhouse-metrics-grafana
-
Интересно, надо будет прикрутить к себе, спасибо
-
-
Подскажите пожалуйста, CH из коробки, столбец с часто повторяющимися значениями Строки, создает ли CH под капотом какой-то словарь по столбцу для улучшения производительности, отъедает ли эта оптимизация оперативки у системы для дальнейшего отображения резулататов запроса? Спасибо
-
не создает
-
в целом все данные пожаты, тем более повторяющиеся
-
спасибо!
-
Друзья, приветствую!
подскажите, есть ли аналог mysql функции bit_count? (не нашел в доке)
нужно посчитать расстояние Хэмминга по симхешу -
а как вот это прикрутить в графану?
https://github.com/Slach/clickhouse-metrics-grafana/tree/master/grafanaSlach/clickhouse-metrics-grafanaclickhouse-metrics-grafana - Clickhouse grafana dashboard with graphite storage
-
-
-
-
а зачем удалять?
-
ну потому-что я скопировал на другой сервер
локально бекапы ненужны -
Все что в shadow можно удалить. Саму папку лучше сотавить
-
а почему лучше оставить
-
Если будете делать бекапы еще, они будут складыватсья в эту папку
-
Я не уверен, что CH сам ее создаст
-
-
-
Привет!
Подскажите, кто знает
Например, есть таблица, где три колонки(date, value, type)
И в type есть три возможных значения
Как теперь это таблицу "транспонировать", чтобы эти три возможных значения стали новыми колонками?
Как нибудь по-простому можно? -
привет, у меня типа такого
insert into agg_table (url_hash, count_in_301_redirects, count_in_3xx_redirects, count_in_canonicals)
SELECT url_hash,
sumIf(value, vtype = 1) AS count_in_301_redirects,
sumIf(value, vtype = 2) AS count_in_3xx_redirects,
sumIf(value, vtype = 3) AS count_in_canonicals
from raw_table -
судя по справке все манипуляции с данными делаются через INSERT INTO table2 SELECT * FROM table1, т.е. перебросом в созданную таблицу по заданным критериям, а потом заменой исходной. Могу ошибаться, но ничего более подходящего не видел
-
Окей, всем спасиб)
-
судя по
SELECT *
FROM system.functions
WHERE name LIKE '%bit%'функции нет, но ее должно быть несложно добавить, можете сделать задачу об этом. -
-
новыми колонками в структуре или выводе select?
-
-
Joined.
-
Я может не совсем правильно объяснил что хочу
Но вот как сейчас :
date | value | type
-------------------
1 | 10 | 1
1 | 15 | 2
1 | 20 | 3
И как я хочу :
date | type_1 | type_2 | type_3
------------------------------
1 | 10 | 15 | 20 -
можно создать 3 колонки, а вставлять данные только в type, а в доп.колонках сделать типа
col1 DEFAULT (if type='monkey', 1, 0)
, они будут сами заполняться -
-
Я так и думал(
Ну ладно, спасибо -
для тех у кого тянется через прометеус уже есть дашборды от fl1egor
-
-
там будет другого со временем, если руки дойдут
-
Приветствую , работали с командой в CH , но он упал , при вызове комманды : clickhouse-client --password ... выдает ошибку : code: 210. BD:netexception: connection refused: (localhost: 9000, ::1) проверили этот порт ничем другим не занят, конфиги отредактировали (так что содержит и :: и ::1). Как запустить ?
-
проверьте не закомментированы ли строчки с ::, я на этом обжигался
-
Нет, везде стоит < , вместо , <!
-
Joined.
-
Подскажите пожалуйста функцию, для вычисления интервала между датами
-
через таймстамп?
-
да
-
это было предложение)
-
select toDate('2018-02-01') - toDate('2018-01-01')
не?) -
Спасибо
-
-
Подзапрос?
-
-
Думал, но не сильно ли нагрузит базу?
-
-
-
-
-
-
-
-
-
:) select game_id, sum(user_id) as sm from event_log group by game_id having sm = 6;
SELECT
game_id,
sum(user_id) AS sm
FROM event_log
GROUP BY game_id
HAVING sm = 6
┌─game_id─┬─sm─┐
│ 186 │ 6 │
└─────────┴────┘
1 rows in set. Elapsed: 0.279 sec. Processed 7.95 million rows, 63.57 MB (28.52 million rows/s., 228.17 MB/s.) -
-
Подскажите пожалуйста что делать в случае <Debug> MergeTreeReadPool: Slow read, event №1. ? Запрос просто выгребает данные за весь день, дата в индексе
-
ничего не делать. Если у вас много потоков на чтение, то с каждым таким событием он будеи их уменьшать. Можете это запретить настройкой.
Это значит что во время чтнения анализатор говорит что уж слижком медленно, и наверное высокая нагрузка на диск, и тем самым уменьшает в дальнейшем кол-во потоков на чтение -
-
-
Можно полагать, что SSD будут в этом случае показывать лучше результаты против HDD?
-
в любом случае да. но тут многое зависит от кол-ва одновременных запросов и прочего. Если завысить max_threads то и SSD будет тормозить
-
спасибо за ответы
-
Joined.
-
впрочем, если контролируете кол-во одновременных запросов (например через chproxy) и знаете что дисковую подсистему можно подгрузить то можно поиграться с read_backoff_max_throughput и read_backoff_min_interval_between_events_ms. И выставить так, чтобы чтнение было с max_threads как можно дольше
-
Добрый день. Имеется 3 таблицы, а именно связка Kafka -> MaterializedView -> MergeTree (все по официальной документации)
SQL таблиц следующий:
-- ClickHouse table
CREATE TABLE IF NOT EXISTS webrtc_stats_audio_received_kafka
(
timestamp UInt64,
clientPlatform String,
clientId String,
appVersion String,
conferenceId String,
participantId String,
trackId String,
audioDelay UInt16,
audioDelayDiff UInt16,
isHighAudioDelayDiff UInt8
)
ENGINE = Kafka('localhost:9092', 'webrtc_stats_audio_received', 'webrtc_stats_audio_received_clickhouse', 'JSONEachRow');
-- ClickHouse table
CREATE TABLE IF NOT EXISTS webrtc_stats_audio_received_merge_tree
(
date Date,
timestamp UInt64,
clientPlatform String,
clientId String,
appVersion String,
conferenceId String,
participantId String,
trackId String,
audioDelay UInt16,
audioDelayDiff UInt16,
isHighAudioDelayDiff UInt8
)
ENGINE = MergeTree(date, (trackId, date), 8192);
-- ClickHouse table
CREATE MATERIALIZED VIEW IF NOT EXISTS webrtc_stats_audio_received_materialized_view TO webrtc_stats_audio_received_merge_tree AS
SELECT
toDate(timestamp) AS date,
toUInt64(round(timestamp / 1000000)) AS timestamp,
clientPlatform,
clientId,
appVersion,
conferenceId,
participantId,
trackId,
audioDelay,
audioDelayDiff,
isHighAudioDelayDiff
FROM webrtc_stats_audio_received_kafka;
При отсутствии записи в кафка топик в логах вижу достаточно частые пары логов:
clickhouse_1 | 2018.04.11 13:15:53.353265 [ 26 ] <Debug> StorageKafka (webrtc_stats_audio_received_kafka): Started streaming to 1 attached views
clickhouse_1 | 2018.04.11 13:15:57.855020 [ 26 ] <Debug> StorageKafka (webrtc_stats_audio_received_kafka): Stopped streaming to views
При непрерывной записи данных в кафка топик (где-то раз в секунду) вижу только
clickhouse_1 | 2018.04.11 13:15:53.353265 [ 26 ] <Debug> StorageKafka (webrtc_stats_audio_received_kafka): Started streaming to 1 attached views
а стоппед стриминг не появляетс. Причем данные в мердж три не появляются. И только после того, как я прекращаю запись в кафка топик, в логах внезапно появляется
clickhouse_1 | 2018.04.11 13:25:57.865020 [ 26 ] <Debug> StorageKafka (webrtc_stats_audio_received_kafka): Stopped streaming to views
а также в мердж три появляются все "накопленные" вьюхой данные. Как будто активная запись в кафка таблицу заставляет вьюшку накапливать и ждать окончание записи в кафка таблицу.
Использую докер, версия ClickHouse, на которой появились проблемы: 1.1.54370
До этого все предположительно работало на версии 1.1.54327
Настройки выглядят верно: max_block_size │ 65536 и stream_flush_interval_ms │ 7500
Спасибо! -
Здравствуйте
Пытаемся восстановиться после потери железного хоста по инструкции: https://clickhouse.yandex/docs/ru/table_engines/replication/#_4
На хосте жил 1 из 3х Zookeeper и 1 из 4х ClickHouse - будем считать, что это реплика одного шарда
Zookeeper был просто переустановлен
КХ после выполнения процедуры вроде ожил
Но количество записей (ReplicatedMergeTree, count(*)) в нем и в его реплике _больше_ того, что было ранее
Причем логи полны всяких разных записей, самые удивительные это
<Debug> executeQuery: (from 192.168.0.43:56604) INSERT INTO events ...
Этот INSERT с "соседа" -
-
-
-
-
-
-
Joined.
-
-
-
-
-
-
-
Спасибо :)
-
-
-
-
-
круто, спасибо!
-
я через DataGrip подключаюсь)
-
еще есть replicate(42, range(10))
-
Написал issue: https://github.com/yandex/ClickHouse/issues/2211clickhouse-client problems with paste huge & complicated multiline query #2211
Centos7, altinity build. Try to run clickhouse-client -m, and paste the following query: CREATE TABLE sdfklsjdflkjerwouer ( a31 UInt64, sdf6 UInt8, sd52 ...
-
в принципе, под macOS сейчас кликхаус собирается нормально
-
но требуется очень много времени и места
-
-
у меня есть только довольно старая сборка под мак, я бы не рекомендовал её использовать
-
клиент и сервер это один бинарь :)
-
v1.1.54343 под мак, самая последняя стабильная не собралась
https://github.com/arduanov/homebrew-clickhouseGitHub - arduanov/homebrew-clickhouse: ClickHouse for MacOS Sierra and High Sierra.ClickHouse for MacOS Sierra and High Sierra. Contribute to arduanov/homebrew-clickhouse development by creating an account on GitHub.
-
как вариант можно этим клиентом
https://github.com/filimonov/chc
или этим
https://github.com/hatarist/clickhouse-cliGitHub - filimonov/chc: chc: ClickHouse portable command line clientchc: ClickHouse portable command line client. Contribute to filimonov/chc development by creating an account on GitHub.
-
там не все идеально, но в некоторых моментах даже лучше чем оригинальный (например есть autocompletion)
-
-
Читаю спеку для Distibuted таблиц https://clickhouse.yandex/docs/ru/table_engines/distributed/ , абзац про весы шардов :
Для выбора шарда, на который отправляется строка данных, вычисляется выражение шардирования, и берётся его остаток от деления на суммарный вес шардов. Строка отправляется на шард, соответствующий полуинтервалу остатков от prev_weights до prev_weights + weight, где prev_weights - сумма весов шардов с меньшим номером, а weight - вес этого шарда. Например, если есть два шарда, и у первого выставлен вес 9, а у второго 10, то строка будет отправляться на первый шард для остатков из диапазона [0, 9), а на второй - для остатков из диапазона [10, 19).
"а на второй - для остатков из диапазона [10, 19)" - тут разве не дожен быть полуинтервал [9,19 ) ? -
сейчас есть возможность собрать именно один клиент но зависимостей у него всеравно большая часть сервера
-
а можно ли у КХ настроить flush-интервал к диску?
-
👍
-
какая-то непонятная фигня, все версии КХ свежее чем 1.1.54327 падают на mysql словарях на ядрах 4.9.51-1
Запускаю в lcx контейнере, причем не важно какой контейнер debian8 или 9, попробовал все версии mysql / maria/percona клиентов, упорно получаю Malformed packet
<Error> ExternalDictionaries: Cannot create external dictionary 'test_dict' from config path /etc/clickhouse-server/dict/test_dict.xml: Poco::Exception. Code: 1000, e.code() = 2027, e.displayText() = mysqlxx::BadQ
uery: Malformed packet (mysqlhosttest:3306), e.what() = mysqlxx::BadQuery
https://pastebin.com/rxAUuWdA
Проблема только с КХ, из mysql (клиент) теже запросы выполняются без проблем. -
-
сейчас попробую. Но проблема что gcc-7 тоже придется собирать.
-
-
-
-
-
да, а что?
-
-
-
-
да, буду благодарен, я готов рискнуть, мне только КХ собрать и проверить поможет или нет.
-
сколько времени gcc собирается? 12 ядер/32 гига?
-
-
-
А баш тоже непубличный (pastebin)
Ну и спасибо. Буду ждать. -
-
-
-
-
OK. спасибо, попробую.
-
-
-
-
-
Вы знаете - не помню
-
-
-
-
вот первый раз за 20 лет с линуксом работаю с дебианом, на текущем месте работы один сплошной дебиан, а шо делать?
-
-
я думаю примерно в 15 хостингах из 20, будут несколько удивлены идее поставить freebsd и драйвера тупо не найдут для некоторых железок.
-
-
-
да спасибо, я КХ-то собирал уже несколько раз, но на убунта-сервер, разберусь.
по скрипту вот доставил уже (nvptx из sid)
wget http://ftp.us.debian.org/debian/pool/main/n/nvptx-tools/nvptx-tools_0.20180301-1_amd64.deb
dpkg -i nvptx-tools_0.20180301-1_amd64.deb
apt-get install dpkg-dev debhelper patchutils quilt -
-
Joined.
-
nvptx это маленький скрипт вроде.
попробовать можно gcc-7 из сида, но что-то я сомневаюсь, там поди зависимостей пол сида.
в общем начал gcc7 собираться -
-
@milovidov_an, доброй ночи! :) А планируется ли сделать для nested колонок нечто подобное:
select visitId, goal.* from visits array join goals as goal ? Т.е. что бы через * можно было селектить все соедржимое nested колонки? -
Давно хочу сделать. Уже проверял вариант, в котором так сделано, но пока не закончено.
-
Это жизнь многим упростит! :)
-
Будем ждать! Спасибо!
- 12 April 2018 (252 messages)
-
-
-
-
-
-
Приветик! разворачиваем кластер. можно ли пилить на виртуалках ? или производительность будет намного хуже?
-
-
Спасибо
-
да у нас на виртуалках
-
Подскажите пожалуйста, как лучше хранить параметры http урлов?
Может есть какие устоявшиеся паттерны ?
Хочется
1. уметь искать самые частые сочетания параметров для конкретного урла
2. использовать значения параметров в условиях выборки урлов
3. минимизировать объем дискового хранилища
Я придумал только вложенную таблицу, где на каждый тип параметра отдельное поле -
мб весь урл стрингом?)
-
А почему не контейнеры? Оверхед меньше и все немного проще
-
Joined.
-
это упадничество)
-
ну не знаю, мне норм. все задачи решаются через функции:
https://clickhouse.yandex/docs/en/single/#extracturlparameterurl-name -
Я не разбираюсь :) Пришли технари и спросили, вам виртуалки подойдут? да/нет)
-
а какие у Вас объемы?
очень строчки длинные, боюсь места много надо будет
я хотел бы хранить ~50 * 10^9 строчек и при этом влезть в 0,5-0,8TB
а параметров бывает до 2KB на 1 запрос,в разжатом виде) -
в месяц ~2млрд строк
так а если вы эти строчки разложите по полям у вас разве получится сэкономить объем? -
если очень много одинаковых данных то да
-
-
я только не понимаю, насколько хорошо сжимаются массивы
например, что лучше — хранить столбец со строками, или столбец с массивами строк, порезанных по разделителю ? -
Подскажите, пожалуйста, как работает ODBC-драйвер сейчас? Кто пользуется. Есть ли проблемы?
-
-
под винду так и не смог завести, плюнул и использую http, все хорошо
-
понятно, спасибо). мы сейчас используем компоненты визуализации DevExpress (возможно, кто-то трогал), там очень просто создавать dashboard к любым источникам, вот думаю, нужно ли кардинально менять dashboard, в случае если я захочу делать витрины на clickhouse.
-
но, видимо, надо методом проб и ошибок.
-
после включения distributed_ddl перестали создаваться таблицы с произвольным ключом партиционирования:
Syntax error: failed at position 338 (line 14, col 1):
CREATE TABLE db.table_local ON CLUSTER repl
(
date Date,
page_id UInt64,
project String,
account String,
tag_id UInt64,
revenue UInt64,
shows UInt64,
clicks UInt64,
type String
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table_local', '{replica}')
PARTITION BY date
ORDER BY (page_id, account, tag_id, date)
SETTINGS index_granularity = 8192
Expected one of: INTO OUTFILE, FORMAT
подсвечивает PARTITION
версия 1.1.54343 -
-
@OlgaRudneva если DevExpress под .NET то вот ADO.NET provider через нативный протокол: https://github.com/killwort/ClickHouse-NetGitHub - killwort/ClickHouse-Net: Yandex ClickHouse fully managed .NET client
Yandex ClickHouse fully managed .NET client. Contribute to killwort/ClickHouse-Net development by creating an account on GitHub.
-
поняла, спасибо)
-
-
точно, просто многие хотят странного и принимают странные решения
-
-
-
Было ару дней назад в переписке.
-
Joined.
-
-
Вы можете подписаться на любой активный канал о СУБД и увидеть кучу проблем
-
ну это проблемы из разряда я не следил за зукипером и кончилось место и он умер
-
или у нас сдохли диски и на ноде был кх и зукипер и теперь не пойми что получилось
-
Больше напоминаем проблемы я сам выстретил в себе в ногу и пистолет плохой
-
Либо вы можете обойтись без кх и тогда вам кх не нужен, либо нет. Альтернатив продукту нет.
Т.е. выбирать не из чего. Либо платить деньги за редшифт и вертику, сильно больше, чем затраты на доп. программистов и круглосуточных дба. -
Есть как минимум Greenplum
-
он как минимум на постгресе и это про другое
-
-
у него внутри же постгрес
-
что то банальный импорт и замена data source не взлетает :)
-
PostgreSQL даже "ванильный" очень расширяемая штука, например Citus и https://github.com/postgrespro/vops. В Greenplum используется кодовая база PostgreSQL, но он там сильно переписан как, собственно, и VirticaGitHub - postgrespro/vops
Contribute to postgrespro/vops development by creating an account on GitHub.
-
ну когда изучал вопрос как то про него нигде не увидел инфы , думаете так будет быстро варить триллион записей как кх на слабом железе?
-
не будет
-
Вы с каким префиксом данных хоаните? Кликхаус надо настроить
-
Посмотрите config.xml в репозитории
-
Greenplum медленнее КХ, но за счет более продвинутой поддержки SQL, работы с типами данных и отсутствием ряда проблем молодого продукта он, вполне себе, может быть более правильным выбором чем КХ
-
Медленнее для нас не вариант, именно скорость основной критерий у нас по выбору, чтобы строить отчёты онлайн
-
-
-
не уверен, что понял правильно
я взял доску queries, которая дергает таблицу system, поменял data source и еще какие то настройки сверху нужны? -
-
unexpected query_log отсутствует в system
-
Кажется, должен помочь arrayMap
-
вам нужно поменять настройки КХ так, чтобы он начал логировать запросы. По дефолту он этого не делает
-
Спасибо, сейчас попробую
-
Я не знаю, есть ли в указанном репо инструкция как это сделать, но вы можете взять ее отсюда в разделе How to install
https://grafana.com/dashboards/2515ClickHouse Queries dashboard for Grafana | Grafana LabsHelps to visualize most frequent, slowest, failed queries. Shows queries rate per second, table with last queries
-
инструкции в моем репо нет еще
-
Greenplum же совсем для других целей, не для olap
-
??? ;) колончный greenplum не для OLAP нагрузок? а для чего?
-
=) вот вы лучше скажите мне не смотрел ли кто в сторону
https://github.com/baidu/palo ?apache/incubator-dorisApache Doris (Incubating). Contribute to apache/incubator-doris development by creating an account on GitHub.
-
не увидел сначала что он и колоночно умеет
-
судя по тестам https://clickhouse.yandex/benchmark.html#[%2210000000%22,[%22ClickHouse%22,%22Vertica%22,%22Greenplum(x2)%22,%22Greenplum%22],[%220%22,%221%22]] он и рядом с CH не стоял
-
А кто подскажет функцию которая складывает значения в массивах по индексам?
Вот такие массивы. На выходе нужен массив такой же длинны, только где все просуммированно? https://img.facedsid.ru/bomqg.jpg -
Кто помнит на память? )
-
-
Joined.
-
У меня не два массива ( У меня есть например три массива одной длины:
[0,1,1,1]
[1,1,1,1]
[1,1,0,1]
На выходе нужно получить [2,3,2,3] например -
Я помню, что видел где то примеры, но не могу найти нигде (
-
-
Дааааа! То, что нужно! Спасибо!
-
Ну тут во-первых влияние "ошибки выжившего" . В основном народ начинает по чатам / форумам ходить если что-то не работает. Те у кого все работает - не ищут чаты / форумы чтоб написать "боже как же это восхитительно".
-
Вертика написана с нуля, там только парсер SQL взят внешний какой-то. Постгресовские корни в Гринпламе его сильно ограничивают. Примерно в три раза медленее Вертики на одинаковых данных.
-
А во вторых кликхаус действительно пока не идеален. Но с его неидеальностью вполне можно жить. Просто загрузите пару сотен гб данных и выполните какой-нибудь селект. Эффект "вау" гарантирую, особенно если пересаживаетесь с обычных строковых rdbms
-
Если пересаживаться со всяких хадупув и т.п. - то эффект "вау" тоже будет, но главным образом из-за того как всё может быть просто - не нужно сложных кластеров, мап-редьюсов, мезосов и т.п. просто загрузил данные из CSV и получил над ними полный контроль
-
В вертике постгресовые корни сильнее и эти корни Майкл Стоунбрейкер )
-
А если для веб-аналитики - то кликхаус обладает кучей очень специфических и очень полезных фичеров узко заточенных под эту конкретную проблему.
-
> В вертике постгресовые корни сильнее и эти корни Майкл Стоунбрейкер )
Он не корни, он садовник ) -
Подскажите, пожалуйста, не сталкивался ли кто-нибудь с необходимостью конвертировать uuid в формате mixed-endian в строку? Функция UUIDNumToString принимает uuid как big-endian. Пока только такое придумал:
-
UUIDNumToString(toFixedString(concat(reverse(substring(docUuid, 1, 4)), reverse(substring(docUuid, 5, 2)), reverse(substring(docUuid, 7, 2)), substring(docUuid, 9, 8)), 16))
-
Можно ли как-то попроще сделать?
-
Как вернуть массив элементов которых нет в базе из переданного массива
К примеру
В базе есть 1,2,5,7,9
Я передал 1,2,3,4,5,6,7,8,9
Получил 3,4,6,8 -
-
-
-
Они нормально отработают к примеру на 1М элементах в запросе? Или лучше делить?
-
Насколько оптимален этот запрос?
SELECT
arrayFilter(x -> has(groupArray(user_id),x)=0, [2,3,4,5]) AS res
FROM
download
WHERE user_id IN (2,3,4,5)
GROUP BY 1
LIMIT 100 -
-
Вот это
-
Как вернуть массив элементов которых нет в базе из переданного массива
К примеру
В базе есть 1,2,5,7,9
Я передал 1,2,3,4,5,6,7,8,9
Получил 3,4,6,8 -
-
Что-то вылетело, а какая функция объединяет элементы при агрегации, мне нужно как то так:
select client_id, make_array(watch_id) from hits group by client_id -
groupArray?
-
Добрый день. Уверен кто-то уже измерял разницу в скорости селектов по ключу если он Date или DateTime?
Сейчас у нас ключ в формате Date и нам этого вполне хватало, но вот пришла идея вводить часовые пояса, но тогда не достаточно просто даты, нужно и время -
Оно, спасибо!
-
Ну и храните время отдельным столбцом
-
Сейчас вопрос в другом. Настолько ли нам нужны часовые пояса, если существует просадка по времени. Если просадки нет или она незначительная, то так и сделаем, разве что ключ изменим
-
-
Всем доброго дня!
Нарвался на КХ при изучении систем, которые могли бы потянуть большие объемы данных, но по описанию вижу, что для OLTP оно не годится.
Сам я не разработчик, поэтому прошу помощи - подскажите на что можно посмотреть, если нужна высоконагруженная СУБД и обвязка?
Заранее спасибо! -
мы используем postgres+clickhouse )
-
в кликхаусе только нужные для аналитики данные
-
такчто вполне подходит
-
В кликхаусе только id шки? А имена словарями подключаете?
-
имена словарям подключаются уже в жаве
-
в кх только циферки
-
руки не доходят внешние справочники сделать
-
А почему не словари КХ?
-
Ясно
-
а так нам очень нравится
-
и нету риска
-
мы можем в любой момент дропнуть кх
-
и залить заново
-
Храните в оперативе? А сортировка по имени как?
-
Просто КХ дает сортировку и поиск по подключенным словарям
-
Это удобно для таблиц и поиска в целом
-
Аж глаз задёргался
-
-
А в чем проблема?
-
мы и так при переходе на новую версию дропаем)
-
потому что меняются логики формирования части атрибутов
-
ну у нас например 15T данных, куча разных скриптов и демонов данные льет, заливать заново это боль
-
-
Ну то понятно, я вот думаю как себя словари поведут, у нас я настаиваю на словарях, и не много стремно. Чтобы не вылезло боком.
-
я бы вот не рискнул делать кх основной бд
-
слишком много заморочек
-
с транзакциями и т.д.
-
нужно делать самому транзакции на уровне приложения
-
+ удаления нету
-
не подходит вообще для основной бд
-
ну у нас пока в 100 гб укладывается кх
-
словари из мускуля, живут в памяти прекрасно:
SELECT
type,
element_count
FROM system.dictionaries
┌─type───┬─element_count─┐
│ Hashed │ 2939 │
│ Hashed │ 966854 │
│ Hashed │ 1611475 │
│ Hashed │ 70 │
│ Hashed │ 29613 │
│ Hashed │ 61948 │
│ Hashed │ 3093 │
│ Hashed │ 3599277 │
│ Hashed │ 318636 │
│ Hashed │ 64 │
│ Hashed │ 19428 │
│ Hashed │ 15570993 │
│ Hashed │ 1028 │
│ Hashed │ 320681 │
│ Hashed │ 2745141 │
└────────┴───────────────┘ -
храним в оперативке, по имени не сортируем
-
если нужна сортировка по имени
-
у нас в справочниках есть поле ord
-
в котором указана нужна сортировка
-
потом что постоянно просят костыль в виде "а вот этого всегда вверху"
-
-
и вот это поле, если надо добавляем
-
КХ только для статистики, воркеры собирают данные(id шки в основном и числа) из mysql в дерномализованном виде и кладут в КХ, потом по этим данным строим отчеты
-
Всегда так делаю, не вижу ничего плохого
-
Ясно. Ну у каждого свои велосипеды
-
я вообще update и delete жду
-
чтобы весь кх переделать
-
и синхронизацию
-
и справочники
-
возможно еще микросервис на жаве заменить на lua
-
если получится подключится
-
Я не думаю что будет нормальный update
Скорее всего будет типа, давайте перепишем блок с данными где нужно обновить. -
у нас данные не так часто меняются
-
мб greenplum ?
-
но иногда надо
-
-
и делит очень нужен
-
даже пусть с переписыванием всего блока
-
+ чтобы при обновлении версии таблицу не дропать
-
а обновлять незаметно для пользователя
-
пусть оно там в фоне мержится
-
А слопование не подходит?
-
иногда надо удалить целиком без остатка
-
пытались сделать replacedmergetable
-
вообще не фонтан
-
-
а мне не помогает
-
вот сегодня
-
100к записей
-
делаю optimize table partition final
-
0 толку
-
всмысле 100к лишних записей
-
Ясно, а перезапись партиций. Типа если надо удалить, взять нужные данные из партиции, удалить и вставить снова
-
я хотел уже так делать
-
но это пока не критично
-
и можно дождатся update/delete
-
Ясно
-
пока данные за 20 минут переливаются
-
из постгреса в кх
-
можно дропать
-
-
у меня партиции по стандартному ключу
-
Главное чтобы update/delete не влияли на скорость выборки
-
может если сделать по 1 дню, то лучше станет
-
мы готовы смирится с падением скорости на какойто промежут времени
-
когда выполняется update/delete
-
днем у нас мало записей приходит
-
все в основном ночью
-
-
вчера обновлялся
-
думал, мб баг где
-
а нет
-
не помогло
-
-
и воспроизводится еще както странно
-
не всегда
-
может парты нельзя смержить потому что итоговый размер очень большой будет?
или дубликаты уже лежат в одном парте, нечего мержить (это пофикшено имхо) (если залить дубликаты одним инсертом, то они не схлопнуться) -
-
1 машина
-
места свободного чуть меньше чем сама бд занимает
-
-
-
но партиции то не больше гигобайта
-
это не важно, размер парта определяется параметром merge чего-то там.
-
Хорошая мысль про итоговый размер
-
на прошлой неделе у меня вообще дублей было столькоже, столько настоящих данных
-
просто х2
-
я изначально надеялся запихивать вообще все
-
при обновлении
-
и пусть оно там удалит старое
-
но чтото не пошло
-
-
медленно
-
почти в 5 раз
-
-
надо попробовать ключ по дням сделать
-
может легче станет
-
-
ну я не думаю что ему 90 гб для мержа мало
-
если реально так, то можно еще сотку выпросить
-
правда возмущаются, когда ссд просишь
-
вы проверьте есть ли вообще что мержить
select * from system.parts where table =
и параметр max_bytes_to_merge_at_max_space_in_pool -
ну я проверяю дубли сравнивая результат между final и не final запросом
-
дубликаты илиминируются при мерже партиций (в старых версиях КХ)
-
ну у меня вставки идут по месяцам
-
такчто просто в партицию кидается еще столькоже данных
-
сколько там было
-
при обновлении версии всмысле
-
я оговариваюсь, не партиций, а партов, каждый новый инсерт это новый парт, который будет смержен, а может и не будет, это зависит.
-
от чего зависит?
-
t.me/clickhouse_ru/48373Alexey Milovidov in ClickHouse не тормозит
Напишите SET optimize_throw_if_noop = 1; и запустите OPTIMIZE. Он напишет, почему не хочет мержить.
-
а это делал тогда
-
он мне говорил, что мержить нечего
-
Ну т.е. дубликаты залиты за один инсерт или я чего-то не понимаю.
-
были записи
-
я этиже записи заливаю, но немного измененнные
-
и с версией+1
-
одной пачкой
-
и ему походу норм
-
есть еще прикол, имя партиции сделайте копи паст из
select * from system.parts where table =
я однажды опечатался в цифре (11111) и не заметил, а КХ ничего не говорит , у него все successfully
optimize table mytable partition 11111 final
---
0 rows affected
optimize executed successfully -
Действительно, нужно какой-то результат выводить
-
я прямо через селект формировал строчку optimize table mytable partition 11111 final
-
такчто ошибок быть не могло
-
Вроде бы если поставить настройку optimize_throw_if_noop=1, то должно ругаться (по-умолчанию она выключена)
-
как узнать результирующий тип поля?
-
например вот SELECT IPv6StringToNum('2a00:1450:401b:804::200e') AS addr
такой тип будет у addr? -
Используйте toTypeName()
-
спасибо.
-
Joined.
-
Joined.
- 13 April 2018 (196 messages)
-
-
Привет!
А как работает [TO[db.]name] при создании MATERIALIZED VIEW?
Попытался выполнить
CREATE MATERIALIZED VIEW Turnovers2 TO Turnovers ENGINE = SummingMergeTree(RecordDate, ( RecordDate, NetID ), 8192) POPULATE;
на что получил синтаксическую ошибку на слове Engine (у таблицы Turnovers он MergeTree, если что).
В документации почти ничего. -
-
-
Ага. Тогда такой вопрос (юзкейс) :)
У нас есть одна большая таблица (миллиарды записей на 400 колонок). И к ней - MATERIALIZED VIEW c ENGINE = ReplicatedSummingMergeTree. Совершенно штатный случай - добавление к основной таблице новых колонок.
Непонятно, как поддерживать MATERIALIZED VIEW? В доках написано что ALTER не поддерживается. Дропать и потом подсоединять с POPULATE - это жесть, на проде будут потеряны записи для агрегирования во вьюхе (или остановится обработка очереди).
Быть может, использовать как раз TO, дропать вьюху, добавлять колонки в .inner, и снова создавать вьюху с TO? -
-
-
-
Есть ли какие планы по переносу этого канала в другой месенджер?
-
Текстовая трансляция
https://www.gazeta.ru/tech/2018/04/13_a_11715859.shtmlПятница, 13-е: черный день для TelegramМессенджер Telegram будет заблокирован на всей территории России — такое решение принял Таганский суд Москвы. Как заявила судья Смолина, это решение подлежит немедленному исполнению. «Газета.Ru» вела онлайн-трансляцию заседания, на котором решалась судьба Telegram.
-
и чо они за день решение вынесут?
-
Есть идея как то перекинуть все сообщения этой группы в архив. Очень выручает поиск по схожим вопросам и проблемам.
-
Могут и вынести и заблокировать
-
решение могут и за день вынести, а вот реализация может затянуться, если только они заранее не подготовились )
-
что, простите? а как же время на ожалование и все такое?
-
да подключить прокси
-
да и все
-
я тоже не вижу в этом проблемы
-
если заблочат вечером заморочусь, арендую vps гденить в европе
-
как будто мы не в IT работаем
-
мне кажется дуров должен сразу выпустить клиент со встроенным прокси и впн
-
функционал прокси добавили еще когда первые отголоски этого безобразия появились
-
В ОАЭ ни скайп, ни вотсапп, ни телеграмм, ни вайебер ... итд не работает голосовой вызов. ВПН трафик режут и штраф за использование 10.000$.
Понятно что решение найдем, но будет не удобно. -
-
-
-
Link
Яндекс 360 для бизнеса — набор сервисов для работы, объединенных общим интерфейсом. С его помощью можно решать самые разные задачи: вести переписку, хранить документы и проводить видеовстречи. Яндекс 360 объединяет Почту, Диск, Календарь, Телемост, Мессенджер и Заметки.
-
На 100%
-
-
китайцы режут легко
-
Все режут, если мобильный или доманий интернет
-
он похож на хттпс трафик только портом, а всем остальным отличается
-
Есть хитрость - vpn завернуть в https - только тогда работает
-
-
ябыл недавно в китае и каждый раз их фаервол все умнее и умнее
-
-
иногда просто не коннектит и все
-
-
Нет. Stunnel. Кстати его не плохо использовать для работы с CH
-
Ты не заметил что война идет?
-
-
Может дуров для россии просто секретные чаты отключит? Но архив группы надо обязательно сделать. Здесь очень много полезной инфы
-
Китайцы вроде весь трафик просто на себя переправляют и подсовывают сертификат фаервола, а там внутри уже смотрят на трафик. Вся страна под Mitm партии :)
-
архив вроде есть где то , я просто часто когда по кх ищу встречаю в инете на каком то сайте ответы с архива чата, но не запомнил где именно
-
-
Куда будем переезжать после блокировки Телеграма?
-
В матрицу)
-
-
Ребят я серьезно... Читаю канал много интересного...жаль терять.
-
-
Я тоже про матрицу https://matrix.orgLink
Matrix is an open standard for interoperable, decentralised, real-time communication
-
-
-
форум в торе?)
-
-
-
за уровнем жизни 😀
-
-
Будут блокировать.
-
почитайте про stunnel. Работало там, где все OpenVPN блокировались :)
коробочное решение:
https://github.com/StreisandEffect/streisandGitHub - StreisandEffect/streisand: Streisand sets up a new server running your choice of WireGuard, OpenConnect, OpenSSH, OpenVPN, Shadowsocks, sslh, Stunnel, or a Tor bridge. It also generates custom instructions for all of these services. At the end of the run you are given an HTML file with instructions that can be shared with friends, family members, and fellow activists.Streisand sets up a new server running your choice of WireGuard, OpenConnect, OpenSSH, OpenVPN, Shadowsocks, sslh, Stunnel, or a Tor bridge. It also generates custom instructions for all of these s...
-
-
О, а подскажите ссылку на чат русской федоры.
-
-
В новых версиях только MV созданные без TO могут пробрасывать дроп партиций, а так нужно руками делать
-
В телеграме? https://t.me/russianfedoraRussian Fedora Community
Чат русскоязычных поклонников Fedora. Новостной канал: @rfrnews Сайт: https://ru.fedoracommunity.org FAQ: https://russianfedora.github.io/FAQ Если вы не можете отправить ссылки и скриншоты - это антиспам бот, сообщите админу. Russian language only.
-
Спасибо
-
Пробовал. Блокируют в ОАЭ
-
может, вы на стандартном порту пробовали OpenVPN? У меня в арабских странах, в том числе в ОАЭ, летом работало.
-
Может плохо разобрался.
-
Есть задача - сделать дамп случайных данных из рабочей таблицы. Как это лучше всего делать? Обычный способ select * from table where rand() < 0.1 работать будет, я так понимаю, так себе
-
если вообще будет:
:) select count() from traffic_stats where rand() < 0.1;
SELECT count()
FROM traffic_stats
WHERE rand() < 0.1
┌─count()─┐
│ 1 │
└─────────┘
:) select count() from traffic_stats;
SELECT count()
FROM traffic_stats
┌─────count()─┐
│ 11151022329 │
└─────────────┘ -
где-то в этом чате что-то такое уже срашивали, но я чет не осилил найти
-
-
коллеги, добрый день!
подскажите, кто знает/сталкивался:
1. есть таблица MergeTree
2. есть MATERIALIZED VIEW от неё SummingMergeTree
при этом периодически наблюдается, что значения в суммируемых полях MV отличаются от сумм по полям таблицы с учётом группировок
отчего подобное может происходить?
версия 1.1.54304 -
select * from db.table where id % (случайное число) = 0 limit 100000
случайное число = select number from (select number from system.numbers limit 1000) order by rand() limit 1 -
Нету айди :(
-
Так бы да
-
Было б попроще
-
эммм... а rand() чего отдаёт? вроде как UInt32
https://clickhouse.yandex/docs/ru/functions/random_functions -
select number from (select number from system.numbers limit 100) where (rand() / 4294967295) < 0.1;
-
-
Joined.
-
на 11ккк строк памяти, боюсь, не хватит)
-
SELECT *
FROM traffic_stats
ORDER BY cityHash64(rand()) ASC
LIMIT 100
Ok.
Query was cancelled.
0 rows in set. Elapsed: 7.004 sec. Processed 270.06 million rows, 64.40 GB (38.56 million rows/s., 9.19 GB/s.) -
-
нет выражения для семплирования, без него же не работает вроде?
-
угу, не работает
-
-
заменить rand() на rand() / 4294967295 не пробовали?
-
ооо, так уже лучше, спасибо
SELECT count()
FROM traffic_stats
WHERE (rand() / 4294967295) < 0.00001
┌─count()─┐
│ 111618 │
└─────────┘ -
а в чем фишка? что-то связанное со взаимодействием флоата и инта?
-
а всё, догнал
-
:)
-
спасибо
-
:О)
-
-
день добрый, после обновления с 54337 до 54342 и выше сломались логи ( больше не пишутся в stdout и лог файлы), проблема наблюдается только при запуске в kubernetes (docker version - 17.03), все версии младше 54342 работают нормально. запускается через bash /entrypoint.sh - образ из докерхаба с кастомным entrypoint. Есть идеи куда посмотреть?
-
UP!
никто не сталкивался? -
в какую сторону отличается? Если в меньшую, много ли данных льете? Может просто не успевает?
-
да, в MV данных меньше
льём прилично
если не успевает — то как с этим бороться? -
для теста, попробуйте остановить наливку и подождать завершения всех мержей. Ну просто чтоб точно понимать оно это или нет. Поскольку я просто предположил.
-
хотя... 1М в час записей
-
разницу наблюдаю ещё за март, так что все мержи давно бы должны пройти уже
-
будем копаться
-
-
Добрый день,
может кто-нибудь подробней рассказать, когда лучше пользоваться PREWHERE, а когда WHERE
Судя по документации скорость запроса станет только лучше, если пользоваться PREWHERE -
PREWHERE нужен когда есть условия по колонке на которую нет индекса
-
-
Друзья , подскажите куда копать?
-
Clickhouse-client --host localhost работает
-
clickhouse-client -host Ip этого сервера -- refused
-
То есть сначала в PREWHERE указываем колонки, по которым нет индекса, а в WHERE те, которые входят в PK. или же можно все сразу указать в PREWHERE, эффект будет тот же?
-
порты вроде открыты (8123, 9000,9009)
-
вам поможет /etc/hosts и netstat -nlpd
-
-
По умолчанию слушает только lo, видимо у вас при -host ломится уже не туда
-
Ребят, всем привет!
Похоже я обнаружил issue в HTTP интерфейсе, а именно:
1) Пишу поток данных в HTTP интерфейс подобным образом: 'INSERT INTO table FORMAT RowBinary <binary data>'
2) Если так совпадает, что в <binary data> первый байт = 0x20 (пробел), CH не получается прочитать пачку данных в этом запросе (видимо скипает лишнего)
3) И возвращает Code: 33, e.displayText() = DB::Exception: Cannot read all data, e.what() = DB::Exception
version 1.1.54370
Это как-то можно обойти или создавать issue на github'e (поиском по чему-то подобному не нашел)?
Фикс видится простым (я надеюсь). Мне он мешает, поэтому скорее всего сделаю себе патч, могу позже сделать и pull request. -
В этом случае эффект быстрее будет если все в WHERE пихнуть, КХ сам пытается соптимизировать и закинуть колонки в PREWHERE. Вообще нужно пробовать на ваших данных и запросе, самый большой эффект когда нет в запросе индексных колонок и все пихаем в PREWHERE
-
Ок
Спасибо -
это в конфиге кликхауса?
-
-
без гражданства то
-
в чем проблема?
-
в PREWHERE имеет смысл заносить условие по неиндексной колонке, если размер колонки не большой (инт, дата и т.п.), при этом это условие даст хорошую фильтрацию данных
в этом случае КХ "быстро" пробежится по этой колонке, оставив для дальнейшего рассмотрения лишь отфильтрованное, а дальше уже будет разбираться с индексами из WHERE -
Joined.
-
Можно ли джоинить по двум параметрам?
-
-
как?
-
USING (a, b)
-
select a,b,c,d from (select 1 a, 2 b, 3 c) all left join (select 1 a, 2 b, 4 d) using (a,b)
-
Спасибо
-
и "по выражению"
select a,b,c,x,d from (select 1 a, 2 b, -5<0 x, 3 c) all left join (select 1 a, 2 b, -55<0 x,4 d) using (a,b,x) -
-
Нет
-
Коллеги, добрый день! Пытаюсь создать таблицу в CH получаю такую ошибку: Existing table metadata in ZooKeeper differs in primary key. Stored in ZooKeeper: event_date, cityHash64(event_id), local: time, cityHash64(event_id) раньше такой ключ был, но таблицу я удалил после этого, почему не удалились записи из zk?
-
их теперь надо вручную удалить?
-
а я кажется понял... удалил таблицу не со всех реплик
-
забыл ON CLUSTER
-
@kshvakov я тут проблему внезапную обнаружил с голанг драйвером.
Ошибка в конвертации time.Time в toDate/toDateTime. helpers.go:127
В коде это так: у меня дата — начало месяца 2015-03-01 00:00:00, поле типа DateTime.
Но драйвер конвертит эту дату в toDate(кол-во дней) и выборка в итоге некорректная из-за этого. Написал пока воркароунд — +1 наносекунда.
Issue на гитхабе вроде по этому поводу нет, я напишу, или может сам придумаю как пофиксить сразу с PR. -
Я знаю об этой проблеме, буду фиксить введя новые типы для даты и даты и времени с таймзоной
-
Окей! Спасибо
-
Здравствуйте. Подскажите пожалуйста, как можно посмотреть какие движки поддерживает кликхауз который уже установлен? Интересует движок MySQL , не уверен что версия которая сейчас установлена, поддерживает этот тип движка. Спасибо.
-
Можно просто попробовать создать таблицу с необходимым движком
-
в целом да, буду тогда пробовать
-
и еще вопрос по поводу MySQL движка, какие права нужны пользователю для правильной работы? или хватит SELECT привилегии?
-
-
У меня тут веселая история с КХ :)
-
2018.04.13 18:06:05.903434 [ 15 ] <Trace> InterpreterSelectQuery: FetchColumns -> Complete
-
Вот лог заваливает вот такими строками и запрос может висеть несколько минут
-
В таблице сего 3 строчки
-
Joined.
-
Версия 54370. Причем на 54343 этот запрос отрабатывает куда шустрей.
-
-
Поставьте логгер в Warning, зачем вам Tracę?
-
Дак я его спецом включил, что бы понять че происходит ) Почему запрос висит
-
CREATE TABLE test.video_views
(
entityIri String,
courseId UInt64,
learnerId UInt64,
actorId UInt64,
duration UInt16,
fullWatched UInt8,
fullWatchedDate DateTime,
fullWatchedDuration UInt16,
fullWatchedTime UInt16,
fullWatchedViews UInt16,
`views.viewId` Array(String),
`views.startedAt` Array(DateTime),
`views.endedAt` Array(DateTime),
`views.viewDuration` Array(UInt16),
`views.watchedPart` Array(Float32),
`views.fullWatched` Array(UInt8),
`views.progress` Array(Float32),
`views.reject` Array(UInt8),
`views.viewNumber` Array(UInt16),
`views.repeatingView` Array(UInt8),
`views.ranges` Array(String),
version DateTime
)
ENGINE = ReplacingMergeTree(version)
PARTITION BY entityIri
ORDER BY (learnerId, entityIri)
SETTINGS index_granularity = 8192 -
Таблица
-
Запрос
SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average`, if (isNaN((`overall-full-watched-learners-count`/`overall-watchers-count`) * 100), 0, (`overall-full-watched-learners-count`/`overall-watchers-count`) * 100) as `overall-watched-part`, if (isNaN((`full-watched-learners-count`/`watchers-count` * 100)), 0, (`full-watched-learners-count`/`watchers-count` * 100)) as `full-watched-part`, if (isNaN((`rejects-count`/`views-count` * 100)), 0, (`rejects-count`/`views-count` * 100)) as `rejects-part` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, -
`reject-views-duration-average`, `repeating-views-count-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average` FROM (SELECT `entityIri`, `watchers-count` FROM (SELECT `entityIri` FROM `CloM8CwMR2`) ANY LEFT JOIN (SELECT uniq(learnerId) as `watchers-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewDurationSum) as `time-repeating-average`, `entityIri` FROM (SELECT sum(views.viewDuration) as viewDurationSum, `entityIri`, `learnerId` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`repeatingView` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `reject-views-duration-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewsCount) as `repeating-views-count-average`, `entityIri` FROM (SELECT count() as viewsCount, `learnerId`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `courseId` = 1 AND `entityIri` IN `CloM8CwMR2` WHERE `views`.`repeatingView` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `views-duration-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.watchedPart) as `watched-part-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `rejects-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(progressMax) as `progress-average`, `entityIri` FROM (SELECT max(views.progress) as progressMax, `entityIri`, `learnerId` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedViews) as `views-count-before-full-watched-average`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT any(duration) as `duration`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `full-watched-learners-count`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-watchers-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-full-watched-learners-count`,
-
`entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `views-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedTime) as `time-before-full-watched-average`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) FORMAT JSON
-
-
Это еще маленький :)
-
Это из-за того, что можно сделать только один джоин за запрос...приходится городить лестницу из запросов и прокидывать колонки снизу вверх.
-
Но суть не в этом. Суть в том, что почему то на разных версиях этот запрос отрабатывает по разному. На текущей стабильной он работает капец как долго. Причем он примерно 160 секунд валит в логи вот такую строчку, что я скинул и потом за 1мс выполняет запрос.
-
-
-
-
-
-
Ктулху это хорошо - много свежей кальмарятины!
а проблему воспроизвести всеравно надо -
Я бы попробовал поочерёдно изнути наружу избавляться от джоинов и в теории можно будет понять на каком этапе тормозит.
А вообще накой вам такая сложная структура? Сделайте одну огромную таблицу и будет счастье -
-
-
-
Это локальные файлы
-
Которые как временные таблицы используются
-
-
Есть регрессия производительности при анализе запросов с большим количеством подзапросов в FROM. Я имел её ввиду ещё когда готовил релиз, но решил что это пока не очень важно, так как она начинает иметь значение на цепочках из хотя бы десятков подзапросов. Исправить можно.
-
Ваш запрос красиво выглядит в клиенте, надеюсь вы писали его не вручную.
-
Нет конечно :) У нас генератор таких запросов существует )
-
Это на самом деле маленький запрос. Мы собираем гораздо бОльшие запросы, да такие, что пришлось пилить транспорт через CLI клиент, т.к. использовались временные таблицы из локальных файлов + запрос на столько большой, что в URL не помещается из-за ограничения по длине :(
-
Будем ждать фикс! :) Надеюсь, что в чейнджлоге появится информация об исправлении!
-
Но ведь можно отправлять запрос по HTTP POST-ом. Также можно увеличить max_query_size, max_ast_elements, max_ast_depth, max_subqueries_depth,,,
-
Не получается, если мы отправляем запрос постом + multipart шлем
-
Мы даже хотели напилить фикс под это дело, что бы при отправке файлов на сервер по HTTP для запроса, можно было постом так же и запрос передать, но у нас спецов в плюсах не нашлось ( Просили знакомого сделать, но он предпочел не тратить на это время :(
-
Действительно, помню о таком.
-
Просто CLI не позволяет из PHP делать асинхронные запрос. Точнее это можно сделать, но блин...там будут кейсы когда останутся зомби процессы, а возиться с ними не хочется. Асинхронщина по HTTP давала нам не плохую скорость :) Но это не критично. Мы все тешим себя надеждой, либо дождаться официальной фичи, либо найти все таки разработчика на плюсах, который это поправит
-
Мы дали эту задачу незнакомому энтузиасту с улицы.
-
Даже не знаю как на это реагировать, но я посмеялся от души )))
-
Надеюсь, что сделает!
-
-
Да, можно. Для пользователя указывается список баз в allow_databases, например:
<users>
<username>
<password></password>
<allow_databases>
<database>test</database>
</allow_databases>
</username>
</users> -
Спасибо! А может быть тогда есть возможность пойти дальше и сделать для части баз RO доступ, а для части RW?
Может быть есть дока по этому поводу? -
Нет, так сделать нельзя. На данный момент в ClickHouse очень упращенный механизм разграничения прав
-
Телеграмм бот «Telegram Proxy (SOCKS5) Bot» в списке сайта Telegram-store.com
https://ru.telegram-store.com/catalog/bots/proxy_socks5_bot/ -
Joined.
- 14 April 2018 (18 messages)
-
Народ, кто нить решал подобную проблему? https://github.com/yandex/ClickHouse/issues/2070SegFault with Distributed Kafka Tables · Issue #2070 · yandex/ClickHouse
I am using Clickhouse 1.1.54362. Steps I followed: Verified everything works with a non-replicated table. Create local tables on all hosts in cluster Create distributed table on all hosts in cluste...
-
господа, нужно мне было сделать cumsum внутри групп, поискал я тут в группе и нашел только такое t.me/clickhouse_ru/2430
по аналогии сделал для своих данных https://gist.github.com/mephistopheies/971769aec94162da9314d86e3cc9bf45
имхо это какой то изврат дичайший, сообщение то на которое я ориентировался слегка старое, может с тех пор появился какой то более кошерный способ считать камсум?
upd: ессесно такой изврат вышел за пределы памяти -)Mariya Mansurova in ClickHouse не тормозитВ принципе, в CH тоже можно посчитать cumulative sum - не очень красиво, но вроде работает CREATE TABLE test ENGINE = Log AS SELECT arrayJoin([1, 2, 3]) as value SELECT value1 as value, sum(value2) as cumsum FROM (SELECT value as value1, 1 as fake FROM test ) ALL INNER JOIN (SELECT value as value2, 1 as fake FROM test ) USING fake WHERE value1 >= value2 GROUP BY value1
-
а можно воспроизведение этой проблемы поместить в скрипт чтоб запустить и упало? тогда было бы легче решить
-
Могу пошагово описать, с командами. Так норм?
-
-
Joined.
-
-
парни, привет. поделитесь как можно максимально быстро заджоинить справочник к distibuted таблице, либо нужно эту таблицу-справочник подключать как-то по другому. Ситуация следующая, есть 2 ноды, distributed таблица c ключом rand(), на первой ноде есть справочник, с которым пытаюсь заджоиниться, естественно получается медленно, тк, данным из второй ноды нужно джоиниться с этим справочником по сети
-
-
Joined.
-
у меня была такая идея,еще не пробовал, возможно есть более быстрые способы в виде подключения внешних словарей или чего-нибудь похожего
-
мне недавно подсказали про global join, может, вам тоже подойдет?
-
-
При использовании GLOBAL ... JOIN-а, сначала, на сервере-инициаторе запроса, выполняется подзапрос для вычисления "правой" таблицы, и затем эта временная таблица передаётся на каждый удалённый сервер, и на них выполняются запросы, с использованием этих переданных временных данных.
Следует быть аккуратным при использовании GLOBAL JOIN-ов. Подробнее читайте в разделе "Распределённые подзапросы" ниже. -
Положил ссылку на скрипт в изис https://github.com/yandex/ClickHouse/issues/2070. КХ падает даже без сообщений в топике Кафки. Как только вьюха подключается … сервер КХ умирает.SegFault with Distributed Kafka Tables · Issue #2070 · yandex/ClickHouse
I am using Clickhouse 1.1.54362. Steps I followed: Verified everything works with a non-replicated table. Create local tables on all hosts in cluster Create distributed table on all hosts in cluste...
-
-
Словари для таблиц-справочников - самое подходящее решение.
-
Спасибо, попробую
- 15 April 2018 (7 messages)
-
-
Joined.
-
-
-
Joined.
-
-
Интересно чем это начинание закончится? 🙂 https://github.com/yandex/ClickHouse/issues/2218A good notice - Enterprise ClickHouse Database IDE #2218
Hello Yandex friends, after several tests on ClickHouse, I felt the power of this tool. I would like to thank the wonderful work done by the Yandex team. We are already using the company where I wo...
- 16 April 2018 (100 messages)
-
а чувак TABIX то смотрел? ;) чем оно ему не угодило?
-
-
Да, все норм. 3 реплики, запрос простой ~3/10 раз подвисает с такой на несколько секунд.
-
-
Посмотрите логи кх, посмотрите логи syslog посмотрите dmesg
-
Ощущение что не хватает файлов или сокетов или соединений в фаерволе
-
Приветствую. Подскажите пожалуйста, обновояю сейчас версию clickhouse и смотрю что раньше использовался метод сжатия данных lz4 а сейчас zstd , вопрос в следующим что бы перейти на новый вид сжатия достаточно указать просто новый метод или же нужно как то переливать данные? Спасибо.
-
Данные переливать не нужно, новый метод сжатия будет работать для новых кусков
-
т.е. достаточно просто в конфиг файле изменить метод сжатия и все?
-
Да, этого должно хватить, но нужно понимать зачем оно вам
-
спасибо, для экономии места 🙂
-
а с zstd просядет скорость выборки?
-
-
-
просто нашел сравнение lz4 и zstd сжатия и вижу что zstd в плане выборки медленее, я так понимаю за счет того что данные больше сжаты
-
оставлю я наверное lz4 тогда 🙂
но спасибо за информацию -
Похоже файервол. Благодарю за помощь 🙏
-
Подскажите пожалуйста такой момент, можно ли как то делать подзапрос с другой таблицы?
в mysql можно сделать что то типа такого:
select
t1.id,
(select count table2 where event_date = t1.event_date and field2 = t1.field2) as cnt
from
table1 as t1
where
t1.event_date = curdate() and
field2 = 5 -
смотрел что можно через any left join но там идет сравнение по 1 полю, а нужно по двум
-
JOIN можно делать через несолько полей:
>USING id, user_id -
о, спасибо, сейчас попробую
-
а если название полей разное то уже никак?
-
в t1 - event_date в t2 - date поля
-
1. коррелированные подзапросы не поддерживаются.
2. конкретно этот запрос можно переписать в виде
select t1.id, cnt
from table1 join
(select field2,event_date,count() as cnt from table2 join ( select field2,event_date from table1 where event_date=curdate()) using field2,event_date group by field2,event_date)
using field2
может получиться что-то рабочее. -
select x as y в подзапросе - будут одинаковые
-
Спасибо за ссылку, понаблюдаю, интересно что получится )
-
-
Вроде он же
-
подскажите пожалуйста, как правильно посчитать количество уникальных кортежей параметров
есть таблица вида
create table hits(url String,params Nested (Name String,Value String))
хочется отфильтровать часть параметров по params.Name
1.arrayFilter(x -> x not in ('bad name1','bad name2'),params.Name)
2.из результата сделать тупл my_tuple
3.посчитать количество уникальных туплов на каждый url
select my_tuple,url,count
from hits group by my_tuple,url
group by my_tuple,url -
-
-
если не ошибаюсь,это будет количество уникальных элементов в кортеже на каждый url
а мне хотелось бы количество уникальных кортежей -
-
-
Добрый день, поднял старые бекапы. Но выборки перестали работать. Запрос падает с DB::Exception: Size of filter doesn't match size of column.
Версия 1.1.54370.
Подскажите, что можно сделать? Кастование полей к их типу поможет?
Думается мне что в той партиции были альтеры по ресайзу колонки в большую сторону.. но точно сказать не могу -
да. и мне хочется результат вида url, (name,value),count()
-
Мне помогло добавление полей в where, так что бы они при этом ни на что не влияли
-
и count() означает что, количество раз которое была такая комбинация url,name,value?
-
пробовал. выбрало чуточку больше, но итог все равно Exception. Позже попробую все поля что есть добавить в Where с условиями...
-
-
Joined.
-
Коллеги, привет!
Подскажите, пожалуйста, есть ли где -то сравнение кликхауса с BigQuery? -
-
спасибо! :)
-
Добрый день,
Пишем в лог таблицу пустое значение в поле (string), которое затем перетекает в другую таблицу в виде Nullable(UInt8). При Insert Select идет проверка исходного поля.
SELECT a FROM test
┌─a─┐
│ │
└───┘
Insert into test1 (b) select a=''?NULL:a from test;
Attempt to read after eof: Cannot parse UInt8 from String, because value is too short.
А вот когда делаем:
Insert into test1 (b) select a!=NULL?a:NULL from test;
работает.
SELECT b FROM test1
┌──b─┐
│ \N │
└────┘
Подскажите, в чем тут дело?
Спасибо -
-
-
когда вы явным образом что-то преобразуете, то есть немного больше уверенности в том, что получится то что вы ожидаете, а не "что-то". также например интересно, вот у вас a!=null ? a : null выдал null. на пустой строке, видимо. он ведь у вас вообще на любой строке это выдает? потому что с null не так надо сравнивать.
-
Спасибо, просто смутило то, что при a=''?NULL:a ClickHouse не обнаружил пустое значение в поле, хотя оно там есть (по крайней мере визуально, вместо \N).
-
-
Спасибо, будем знать
-
Спасибо!
-
есть вот такой набор сравнений http://tech.marksblogg.com/benchmarks.htmlSummary of the 1.1 Billion Taxi Rides Benchmarks
Benchmarks & Tips for Big Data, Hadoop, AWS, Google Cloud, PostgreSQL, Spark, Python & More...
-
sad
-
насколько показательно сравнение из этой статьи?
-
ну он там подробно методологию и шаги описывает по каждому тесту чтоб было понятно
-
просто в одном месте кластер, в другом видеокарта, а потом обычный проц
-
MergeTree(pickup_date, pickup_datetime, 8192)
SELECT cab_type, count(*)
FROM trips_mergetree
GROUP BY cab_type
SELECT passenger_count,
avg(total_amount)
FROM trips_mergetree
GROUP BY passenger_count
SELECT passenger_count,
toYear(pickup_date) AS year,
count(*)
FROM trips_mergetree
GROUP BY passenger_count,
year
SELECT passenger_count,
toYear(pickup_date) AS year,
round(trip_distance) AS distance,
count(*)
FROM trips_mergetree
GROUP BY passenger_count,
year,
distance
ORDER BY year,
count(*) DESC -
-
структура таблицы малость не подходит под запросы
-
ClickHouse C++ Meetup https://events.yandex.ru/events/meetings/16-May-2018/ClickHouse C++ Meetup, 16 мая 2018, Москва — События Яндекса
Приглашаем всех, кто пишет на С++, поговорить о СУБД ClickHouse.
-
None
-
Опубликовано видео с мероприятия "Субботник по базам данных": https://events.yandex.ru/events/yasubbotnik/31-march-2018/Я.Субботник по базам данных, 31 марта 2018, Санкт-Петербург — События Яндекса
31 марта прошёл Я.Субботник по базам данных в Санкт-Петербурге
-
спасибо за видео 🙂
-
-
Руководитель группы Алексей Миловидной
ошибка? -
-
-
-
а вам нужно равномерное распределение чего
-
-
-
-
-
-
значения нужны разные в зависимости от запроса. сбор например идет каждую сукунду но нужно иметь возможность получить значения с разными интервалами (5s, 10s, 30s, 60s, 1800s ... -> строить графики). подумал может это както на стороне базы можно решить не созраняя в отдельных таблицах
-
-
-
-
-
-
Спасибо! Говорят, у них спелл-чекер меня не узнаёт. Исправили.
-
Joined.
-
Joined.
-
-
Сейчас документации по этим метрикам нет.
-
-
-
-
yandex/ClickHouse was tagged: v1.1.54378-stable
Link: https://github.comhttps://github.com/yandex/ClickHouse/releases/tag/v1.1.54378-stable
Release notes:
v1.1.54378-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
@clickhouse_ru
-
Joined.
-
есть ли в клике функция или метод, которые позволяют быстро определить принадлежит ли тот или иной ipv4/6 набору подсетей?
-
Нет.
-
Впрочем, можно использовать словари типа trie.
-
Они позволяют классифицировать IP адреса по подсетям, как например, для geoip задачи.
-
Спасибо, будем смотреть
-
Вы случаем не в Роскомнадзоре работаете?)
-
😂😂😂😂😂
-
лол
- 17 April 2018 (255 messages)
-
😂👍
-
😭
-
😆😆😆😆😆
-
слышал это вы заблокировали 600к айпишников в амазоне
-
Интересно, какого это работать на Роскомнадзор... Наверное, потом ночью кошмары снятся)
-
Может быть подойдет:
>IPv4NumToStringClassC(ipv4) IN ('123.123.123.xxx', '123.123.124.xxx', '123.123.125.xxx', ...) -
минуту назад пришло письмо [members-discuss] Russian government blocked 2mln IPs at 16/04/2018 Умоляю остановитесь.
-
На Хабре уже разразились статьёй: https://habrahabr.ru/post/353630/РКН заблокировал несколько КРУПНЫХ подсетей Amazon и Google (UPD.: и продолжает блокировать новые!)
Сегодня вечером сразу на нескольких ресурсах появилась новость о блокировке РКН нескольких подсетей Amazon. Позже появилась информация, что в бан улетела и одна...
-
-
можно приводить ip к подсети
SELECT IPv4NumToString(bitAnd(IPv4StringToNum('127.0.0.100'), IPv4StringToNum('255.255.255.0')))
IPv4StringToNum - переводим в int
bitAnd - накладываем битовую маску на ip
IPv4NumToString - обратное преобразование int -> ip -
т.е. применяя bitAnd с ip и маской всегда получается адрес подсети
-
если адрес подсети совпадает это значит, что ip входит в сеть
-
Ip_trie словарь со списком всех интернет сетей и автономок, connection_log на несколько миллиардов строк, и запрос с группировкой и сортировкой по номеру автономки отрабатывает за разумное количество секунд.
-
Товарищи, есть таблица table, примерно 10 Гб (Engine=Log). Пытаюсь выполнить пободный запрос:
CREATE TABLE new_table Engine=Log AS
SELECT
id,
argMin(A, id),
argMin(B, id),
argMin(C, id),
argMin(D, id),
argMin(E, id),
argMin(F, id)
FROM table
GROUP BY id
Запрос требует около 30 Гб. Есть ли способ уменьшить память для выполнения запроса? -
Да, есть. Нужно выставить max_bytes_before_external_group_by в нужное вам значение
-
Ну у вас там таблица наверно на тридцать гигов получается, уберите группировку и по идее должно полегчать, так как чтобы отсортировать ему нужна полность таблица
-
Спасибо, понимал, что должен быть параметр, но не увидел его
-
Ребят, как лечить ошибку "502 Bad Gateway" выходит при создании таблицы
-
-
отказаться от нгинкса
-
Таймауты покрутить
-
504 это timeout
а тут похоже кто-то обрывает соединение с nginx до получения ответа -
или просто proxy_pass на nginx не на тот IP настроен
-
спасибо, nginx гляну
-
Точно )
-
-
Обычно такое когда nginx не может подсоединиться к апстриму. Кх в докере? Порт наружу проброшен?
-
КХ не в докере, порт проброшен.
-
Тогда в логах nginx должна быть информация что не так с апстримом.
-
хорошо, гляну, еще не заглядывал. спасибо
-
-
-
Joined.
-
Marek Vavruša в английском чатике может сказать почему, т.к. он словарь делал
-
-
-
-
-
Проблема ушла с новым релизом! Спасиб
-
-
Из постгреса можно уже сейчас подключать справочники через ODBC https://clickhouse.yandex/docs/en/dicts/external_dicts_dict_sources/#example-of-connecting-postgresql
-
Насчет внешнего источника для пользователей я не в курсе, может быть @milovidov_an что-то знает, но, я не думаю что Яндексу это очень нужно. Понятно что LDAP, например, нужен корпоративным пользователям, а если нужен то это только вопрос времени насколько быстро и в каком виде он появится (и кто его сделает). Сейчас, насколько мне известно, только Altinity выступает как сторонняя компания занимающаяся КХ, может еще кто-то есть и, скорее всего, инициатива должна исходить оттуда.
-
-
а не подскажете, как можно сделать distinct с or
-
типо
-
select count(distinct A or B) from table
-
-
Столкнулся с ошибкой: Cannot read all array values: read just 235 of 236.
Кто-то знает в чем дело? ) -
а что это должно выдавать в ответ?
-
число уникальных строчек
-
Судя по коду https://github.com/yandex/ClickHouse/blob/master/dbms/src/DataTypes/DataTypeArray.cpp#L234
Это происходит, если данные в колонках отличаются -
Но странно как КХ такое пропустил оО
-
число строчек у которых уникально что, A or B?
-
КХ много чего пропускает, потом встать не может :(
-
ну есть 2 поля, уникальность нужно проверять через OR
-
-
да, А и В это строки)
-
Добрый день кто нибудь пользовался jdbc драйвером для клика? Постоянно вылетает ошибка соединения
-
Пользуемся, бед не знаем
-
аналогично
-
Можно пример строки соединения. Ужо не знаю что ему не так
-
-
ClickHouse/clickhouse-jdbc
JDBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-jdbc development by creating an account on GitHub.
-
Это, видимо, у вас в Nested разные по длине колонки, сейчас КХ действительно никак это не чекает, просто пишутся как колонки где идет: название Nested структуры; точка; название колонки в структуре
-
Ну я тоже так подумал. Придется у себя это проверять. Раньше кх ругался на такое.
-
Вставляются они нормально, но при чтении он этот блок выкинет
-
Спасибо
-
Значит регрессия, надо править
-
Теперь лучше использовать clickhouse-client и clickhouse-server
-
@milovidov_an @ztlpn @kochetovnicolai завести issue?
-
Значит регрессия, надо править
-
Это, видимо, у вас в Nested разные по длине колонки, сейчас КХ действительно никак это не чекает, просто пишутся как колонки где идет: название Nested структуры; точка; название колонки в структуре
-
Да, лучше завести. При вставке, если правильно помню, действительно нет такой проверки.
-
я не прошёл собеседование, не благонадёжен и недостаточно неадекватен
-
-
😁
-
а как будет вести себя таблица join, если я начну в нее лить дубли?
-
Скорее всего покорно примет данные
-
Подскажите, пожалуйста, как и куда надо прописать use_uncompressed_cache? Да и все параметры https://clickhouse.yandex/docs/en/operations/settings/settingsSettings | ClickHouse Documentation
Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
В профиль прописать https://clickhouse.yandex/docs/ru/operations/settings/settings_profiles/
-
No check for length of nested columns data arrays #2231
In version 1.1.54343 Clickhouse checks lengths of nested column data arrays, but in 1.1.54362 this check disappeared. I didn't check older versions for fixes, but i think there is the same brok...
-
Спасибо!
-
Сейчас еще закину файлец с данными
-
Спасибо!
-
Возможно, достаточно вставить 1 строку с массивами разного размера, чтобы запрос упал?
-
Я точно не знаю. Я пытался сейчас на разных версиях с таблицей другой структуры это провернуть, что только не делал - не получилось. А вот конкретно со структурой как в issue и данными как в файле (там всего одна строка) - запрос на select * падает. На самом деле падает в любом случае, когда пытается nested прочитать
-
Скорее всего я смогу воспроизвести на минимальном примере, 5 мин
-
-
Спасибо!
-
Joined.
-
Спасибо! Я пробовал пример с одной строкой в Nested колонку и двумя значениями в массиве :) А вот наоборот не попробовал.
-
Всем привет. Может ли кто помочь с тонкой настройкой chproxy и CH? Напишите плиз в личку. А то один разобраться не могу. Само собой не даром.
-
При отправке 3 партий из 1800 запросов на добавления возникают ошибки у некотрых запросов: Unknown error field: Error: read ECONNRESET
Error: [ Id: 151B87319A4EE08F; User "default"(3) proxying as "default"(3) to "127.0.0.1:8123"(8); RemoteAddr: "135.159.86.36:43190"; LocalAddr: "135.159.86.36:9090"; Duration: 2.001769892s ]: cannot reach 127.0.0.1:8123; query: "" -
-
да именно так
-
Когда сократил max_concurrent_queries с 10 до 2 ошибок стало значительно меньше
-
-
шлите один инсерт с 1800 записями это решит ваши проблемы
-
try {
await ctx.getDB().querying(query);
} catch (e) {
console.error("Error /push-call-data", query, e)
} // и таких query - 1800 - 3 раза -
А что делать если это невозможно?
-
Писать в MySQL/PostgreSQL etc )
-
-
1800 INSERT - это поток или разовое?
-
Если разовое (скажем, раз-два в минуту) - можно и Buffer прикрутить.
-
Можите объяснить почему такие проблемы. и При уменьшении в chproxy max_concurrent_queries с 10 до 2 уменьшает количество ошибок?
-
1. Это поток. 2. Buffer уже прикручен. Изменение параметров буфер таблицы не влияет.
-
Он начинает в очереди держать запросы и одновременно пишет меньше.
-
Кеш что-то исправит. Но хорошо, а почему 10 одновременно для него проблема?
-
Кеш что-то исправит?
-
КХ заточен под вставку данных блоками, а не по одной строке
-
Понятно. Но эти данные сначала пишутся в Buffer таблицу, которая как я понимаю и призвана решить данный вопрос?
-
В нее тоже не рекомендуется лупить по одной записи в цикле
-
-
-
Так что тогда делать, допустим идет поток данных 1000 в секунду и их надо писать в одну таблицу
-
Joined.
-
Причем интересная закономерность. Если 500 записей в одном потоке и поток 1 - то все отлично. Если в течении 1 сек послать послать еще один поток в 500 записей начинаются ошибки.
-
Пишем в очередь, а из нее читаем и переодически сбрасываем одним инсертом в БД
-
Так вот и не понятно зачем тогда Buffer
-
chproxy так может?
-
Да и по сути это Buffer получается — разве нет?