@clickhouse_ru

Страница 538 из 723
Kukuzapa
24.05.2018
14:08:27
Добрый день, а как бд перенести на другой сервер?

Mike
24.05.2018
14:10:12
только версию нужно будет менять
Версия по доке optional? The last optional parameter for the table engine is the version column. When merging, it reduces all rows with the same primary key value to just one row. If the version column is specified, it leaves the row with the highest version; otherwise, it leaves the last row. А в жизни — нет?

Google
Mike
24.05.2018
14:10:53
ReplacingMergeTree
В любом случае — спасибо! На вид — оно

Wolf
24.05.2018
14:14:34
Добрый день, а как бд перенести на другой сервер?
через реплику, просто скопировав папку с данными кх , дамп ресторе.

Daniel
24.05.2018
14:22:01
ага, а это идея. может серваки с кликхаусом поднялись раньше серваков с зукипером. сейчас попробую перезапустить сервисы кх
всё так и было. вынесенный урок - ReadonlyReplica из system.metrics и is_readonly из system.replicas это не одно и то же =) по факту почти все CH были в ro, т.к. поднялись раньше зукиперов. я был прав - количество LeaderReplica по всем серверам CH в реплицируемой системе должно быть равно количеству шард. то есть среди реплик каждого шарда должна быть одна LeaderReplica

Wolf
24.05.2018
14:22:54
ну это очевидно

Daniel
24.05.2018
14:28:42
ну это очевидно
откуда это очевидно? по метрикам документация вообще голая. скиньте почитать, если где-то расписано

Wolf
24.05.2018
14:30:33
Ну это очевидно из того как работают реплики

Шарды как таковые физически то отсутствуют

Kirill
24.05.2018
14:55:17
откуда это очевидно? по метрикам документация вообще голая. скиньте почитать, если где-то расписано
Лидер назначает мержи внутри шарда. Ставит задачу: мержим такие-то куски и все они их мержат, соответственно он не может знать о кусках в других шардах, поэтому да - он один на шард

Wolf
24.05.2018
15:04:35
Совсем не верно , у реплики нет понятия шарда почитайте как оно работает в доке, у меня может быть прекрасно в одном как вы говорите шарде две реплицируемых таблицы и два лидера а шард то один

Реплицируемые таблицы работают через зукипер а там нет никаких записей про шарды как в конфиге кх

Stas
24.05.2018
15:12:15
а как указать формат выдачи при общении через http api? конкретно в CSV вывод интересует

Kirill
24.05.2018
15:17:24
Короче, они там завязаны на путь в ZK, но путь зависит от шарда, если не сделано что-то специально.

Google
Wolf
24.05.2018
15:19:23
У меня в голове шард и реплика - это одно и тоже
Нет, шарды и реплики которые описаны в конфиге кх имеют отношения к дистрибьютед таблица и не имеют отношения к реальным реплицируемым таблицам

Алексей
24.05.2018
15:30:13
Attaching to services_backend-clickhouse_1 backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/config.d/docker_related_config.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/config.d/dictionaries.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/users.d/users.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_upload_dictionary.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_affiliate-creative_dictionary.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_creative_dictionary.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_lead_dictionary.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_campaign-brand_dictionary.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_affiliate_dictionary.xml... backend-clickhouse_1 | Updating config file: /etc/clickhouse-server/dictionaries.d/mysql_brand_dictionary.xml... backend-clickhouse_1 | Starting ClickHouse server, version: 1.0.1-7050adf on node f17c80a8dd72 backend-clickhouse_1 | Include not found: clickhouse_remote_servers backend-clickhouse_1 | Include not found: clickhouse_compression backend-clickhouse_1 | Logging trace to /var/log/clickhouse-server/clickhouse-server.log backend-clickhouse_1 | Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log services_backend-clickhouse_1 exited with code 70docker-compose win10



timezone - прописал

Wolf
24.05.2018
15:32:43
Короче, они там завязаны на путь в ZK, но путь зависит от шарда, если не сделано что-то специально.
никак не зависит ) я могу как угодно эти пути генерить по сути то

prll
24.05.2018
15:37:40
timezone - прописал
возможно нужна сборка без sse

Алексей
24.05.2018
15:39:21
возможно нужна сборка без sse
Просто это все нормально запускается на ubuntu. Но на win10 не хочет.

prll
24.05.2018
15:39:59
было бы странно если бы запустилось

Алексей
24.05.2018
15:40:33
Хорошо, а как запустить? Я не очень разбираюсь в тонкостях.

prll
24.05.2018
15:41:03
по документации, из ubuntu или любой другой нормальной операционной системы

Алексей
24.05.2018
15:41:40
Те на win не пойдет?

prll
24.05.2018
15:42:47
возможно с использованием магических бубнов что-то получится, но как оно будет работать - никто не знает

Алексей
24.05.2018
15:43:34
Спасибо. Жаль.

Daniel
24.05.2018
16:16:27
Как начнете ловить "Too many parts" они и появятся
А в какой таблице? events или metrics?. Я про ошибки RejectedInserts

Anton
24.05.2018
16:22:01
Всем привет! Есть кластер с N шардами. На нем гоняются запросы к некоторой distributed таблице. Есть ли способ посмотреть все выполняющиеся процессы (system.processes) на кластере одним запросом? Или нужно обходить все шарды по очереди и на каждом смотреть system.processes? (Ну и более общий вопрос, можно ли к системным таблицам обращаться поверх всего кластера, аля distributed)

Anton
24.05.2018
16:46:02
Понял, спасибо А что насчет KILL QUERY в таком случае? можно сделать как-то поверх кластера?

Google
Anton
24.05.2018
16:47:04
Хотя вряд ли получится с одной машины убить процесс на другой..

Kirill
24.05.2018
16:48:36
Понял, спасибо А что насчет KILL QUERY в таком случае? можно сделать как-то поверх кластера?
Я не знаю, никогда не задавался таким вопросом, всегда лез на нужную машину и ручками прибивал )

Anton
24.05.2018
16:53:39
понятно, хотелось сделать более автоматическое решение) но спасибо за помощь

Daniel
24.05.2018
16:58:15
В секции <enabled_partitions> для clickhouse-copier есть предупреждение NOTE: In spite of this section is optional (if it is not specified, all partitions will be copied), it is strictly recommended to specify them explicitly. If you already have some ready paritions on destination cluster they will be removed at the start of the copying since they will be interpeted as unfinished data from the previous copying!!! это получается, если я добавляю шард в существующий кластер и делаю задачу копирования партиций с решардингом из кластера в него же самого, на уже существующих серверах удалятся партиции? но как тогда они будут скопированы и перешардированы? звучит абсурдно)

Ilya
24.05.2018
19:37:07
Коллеги, добрый вечер. Такой вопрос: раскатали ClickHouse в своем Kubernetes (через HELM+StatefulSet) в конфигурации "6 шардов по одной реплике". На всех шардах один и тот-же конфиг, т.е. каждый шард знает все про весь кластер. Запросы соответственно идут через headless Service произвольно на любой шард. Все работает замечательно и быстро. Но есть проблема когда один из контейнеров падает и перезапускается — у него меняется внутренний IP и из кластера он выпадает совсем, потому что все остальные шарды однажды отрезолвили его IP и он для них теряется. Из документации: В случае указания домена, при старте сервера делается DNS запрос, и результат запоминается на всё время работы сервера. Если DNS запрос неуспешен, то сервер не запускается. Если вы изменяете DNS-запись, перезапустите сервер. однако есть и такое: Как видно, движок Distributed требует прописывания кластера в конфигурационный файл; кластера из конфигурационного файла обновляются налету, без перезапуска сервера. Источник: https://clickhouse.yandex/docs/ru/table_engines/distributed/ Вижу пока только дав решения: 1) поднять центральный сервер, хранить на нем одном конфиг с указанием шардов и ходить в кластер строго через него; 2) каким-то хуком после перезапуска контейнера прописывать новый IP на всех шардах в конфиги, которые якобы подхатятся налету. Подскажите, возможно я что-то упускаю или действительно авторезолв DNS имен шардов и реплик из настроек такая проблема?

UPDATE: случайно нагуглил настройку disable_internal_dns_cache (https://github.com/yandex/ClickHouse/blob/master/dbms/src/Server/config.xml#L367) и запрос SYSTEM DROP DNS CACHE. Буду их пробовать. Но вообще, в документации про них ни слова ?

Kirill
24.05.2018
20:29:08
Коллеги, добрый вечер. Такой вопрос: раскатали ClickHouse в своем Kubernetes (через HELM+StatefulSet) в конфигурации "6 шардов по одной реплике". На всех шардах один и тот-же конфиг, т.е. каждый шард знает все про весь кластер. Запросы соответственно идут через headless Service произвольно на любой шард. Все работает замечательно и быстро. Но есть проблема когда один из контейнеров падает и перезапускается — у него меняется внутренний IP и из кластера он выпадает совсем, потому что все остальные шарды однажды отрезолвили его IP и он для них теряется. Из документации: В случае указания домена, при старте сервера делается DNS запрос, и результат запоминается на всё время работы сервера. Если DNS запрос неуспешен, то сервер не запускается. Если вы изменяете DNS-запись, перезапустите сервер. однако есть и такое: Как видно, движок Distributed требует прописывания кластера в конфигурационный файл; кластера из конфигурационного файла обновляются налету, без перезапуска сервера. Источник: https://clickhouse.yandex/docs/ru/table_engines/distributed/ Вижу пока только дав решения: 1) поднять центральный сервер, хранить на нем одном конфиг с указанием шардов и ходить в кластер строго через него; 2) каким-то хуком после перезапуска контейнера прописывать новый IP на всех шардах в конфиги, которые якобы подхатятся налету. Подскажите, возможно я что-то упускаю или действительно авторезолв DNS имен шардов и реплик из настроек такая проблема?
У меня вопрос, скажем так, собираю некую статистику по использованию КХ не на железе: почему Kubernetes, насколько это принципиально? Почему не поднять кластер в LXC/LXD? Если будет КХ с таким же уровнем автоматизации и управления как, скажем, CockroachDB готов ли был ваш проект использовать его при условии что он (бай дизайн) обратно несовместим с ванильным КХ?

Andrew
24.05.2018
20:31:50
Привет Скажите, а есть в планах развитие MATERIALIZED VIEW? Сейчас при инсерте в родительскую таблицу view пересчитывается только за новую пачку. Я бы хотел использовать view для аля-оконных функций, и хорошо бы чтобы view полностью бы пересчитывался (всю таблицу) при любом инсерте? Это вообще частый кейс, кому-то кроме меня это бывало нужно?

Александр
24.05.2018
20:38:58
Andrew
24.05.2018
20:41:32
боюсь что *MergeTree мне не очень подойдут, потому что для одного класса нужны сырые данные (до агрегации), а для другого нужны агрегированные Если точнее, то аппенды ежедневные. Таблицы неогромные, помещаются на 1-2 крупные машины. Для каждого пользователя пишется id'шник очередной наливки. И иногда нужно взять все записи с максимальным айдишником заливки для пользователя: причем заранее неизвестно какой максимальный, и для разных пользователей он разный. А иногда нужны конкретные айдишники (непоследние) Планируем использовать массивы и лямбды, но хотели материализовывать результат

Александр
24.05.2018
20:41:55
ой, а расскажите как изгоняли?
Агрегировали на прикладном уровне

Просто при поступлении новой пачки данных по конкретному юзеру переагрегировали данные и складывали в ReplacingMergeTree

Kirill
24.05.2018
20:42:44
PostgreSQL начал перенимать фичи ClickHouse и теперь в 11-й версии из psql можно выходить не только по \q https://www.postgresql.org/about/news/1855/

Александр
24.05.2018
20:42:47
А задача была такая, нужно было с учетом определенной логики бить поток эвентов на сессии с таймаутом в 30 минут

Andrew
24.05.2018
20:43:52
А, ну да, у нас чуть другой кейс: сессия, которая была раньше, не имеет ценности и может просто удалиться, когда приходит апдейт.

Google
Александр
24.05.2018
20:45:39
А, ну да, у нас чуть другой кейс: сессия, которая была раньше, не имеет ценности и может просто удалиться, когда приходит апдейт.
И такое проходили. Причем была проблема в том, что данные могут дописаться как вначало сессии, так и в конец и сессия должна как бы двигаться и влево, и вправо. Горя мы хапнули ппц. Теперь сложную логику агрегируем аля event sourcing и на выходе имеем кучу фактов по которым дальше уже проводим агрегацию. Например знаем все о сессиях и юзерах и еще много чего.

Сейчас есть некоторые неудобные моменты в виде жирных nested колонок в replacing merge tree таблицах, но есть план как это можно это обойти. Нужен POC для начала ) Есть подозрение, что 900 партиций для КХ прочитать это жирно, учитывая, что в каждой может быть дофига кусков.

Andrew
24.05.2018
20:55:10
ну тем не менее меня не покидает надежда, что это можно сделать внутри CH, а не умным препроцессингом снаружи)

Вячеслав
25.05.2018
05:17:30
Привет. Подскажите пожалуйста на что влияет второй параметр ("имя реплики") при создании таблицы с движком ReplicatedMergeTree?

Victor
25.05.2018
05:27:38
Друзья, смежный вопрос, на clickhouse.yandex, в блоке When NOT to use ClickHouse, написано: Blob or document storage А чтоб такое применить для такой задачи? Документы однотипные XML, сжиматься должны прекраснейшим образом, если "поколоночно".

Kirill
25.05.2018
05:48:53
Привет. Подскажите пожалуйста на что влияет второй параметр ("имя реплики") при создании таблицы с движком ReplicatedMergeTree?
Первое это идентификатор таблицы, второе "имя реплики" - это идентификатор узла на который нужно реплицировать (если упрощенно), обычно имя сервера т.к. копии лежат на разных узлах, но можно сделать копии и на одной машине указав там разные идентификаторы.

Вячеслав
25.05.2018
05:52:03
спасибо

Kirill
25.05.2018
06:28:30
мне бы тоже не помешало это....
Возможно вы что-то делаете не так, есть сырые данные, для остального можно использовать State, например: CREATE TABLE RawData( Date Date , UserID Int64 , Price Int64 , CreatedAt DateTime ) Engine MergeTree PARTITION BY Date ORDER BY Date; CREATE MATERIALIZED VIEW MV ENGINE = AggregatingMergeTree PARTITION BY Date ORDER BY (Date, UserID) AS SELECT Date , UserID , sumState(Price) AS SumPrice , maxState(CreatedAt) AS MaxCreatedAt FROM RawData GROUP BY Date, UserID; INSERT INTO RawData VALUES ('2018-01-01', 1, 42, '2018-01-01 21:00:00') , ('2018-01-01', 1, 42, '2018-01-01 22:00:00') , ('2018-02-01', 1, 42, '2018-02-01 21:00:00') , ('2018-02-01', 1, 42, '2018-02-01 22:00:00'); SELECT Date , UserID , sumMerge(SumPrice) AS Price , maxMerge(MaxCreatedAt) AS LastAction FROM MV GROUP BY Date, UserID; ┌───────Date─┬─UserID─┬─Price─┬──────────LastAction─┐ │ 2018-02-01 │ 1 │ 84 │ 2018-02-01 22:00:00 │ │ 2018-01-01 │ 1 │ 84 │ 2018-01-01 22:00:00 │ └────────────┴────────┴───────┴─────────────────────┘ 2 rows in set. Elapsed: 0.005 sec.

Stas
25.05.2018
06:57:17
Возможно вы что-то делаете не так, есть сырые данные, для остального можно использовать State, например: CREATE TABLE RawData( Date Date , UserID Int64 , Price Int64 , CreatedAt DateTime ) Engine MergeTree PARTITION BY Date ORDER BY Date; CREATE MATERIALIZED VIEW MV ENGINE = AggregatingMergeTree PARTITION BY Date ORDER BY (Date, UserID) AS SELECT Date , UserID , sumState(Price) AS SumPrice , maxState(CreatedAt) AS MaxCreatedAt FROM RawData GROUP BY Date, UserID; INSERT INTO RawData VALUES ('2018-01-01', 1, 42, '2018-01-01 21:00:00') , ('2018-01-01', 1, 42, '2018-01-01 22:00:00') , ('2018-02-01', 1, 42, '2018-02-01 21:00:00') , ('2018-02-01', 1, 42, '2018-02-01 22:00:00'); SELECT Date , UserID , sumMerge(SumPrice) AS Price , maxMerge(MaxCreatedAt) AS LastAction FROM MV GROUP BY Date, UserID; ┌───────Date─┬─UserID─┬─Price─┬──────────LastAction─┐ │ 2018-02-01 │ 1 │ 84 │ 2018-02-01 22:00:00 │ │ 2018-01-01 │ 1 │ 84 │ 2018-01-01 22:00:00 │ └────────────┴────────┴───────┴─────────────────────┘ 2 rows in set. Elapsed: 0.005 sec.
Я транспонирую данные и за один insert мне приходят только кусок данных для транспонирования, я не могу запустить расчеты ранее чем наберутся все данные для транспонирования. Если есть идея как можно это победить то было бы круто :)

Kirill
25.05.2018
06:58:59
Конечно есть - не использовать MV, дождаться пока все данные придут и посчитать их

Stas
25.05.2018
07:00:19
Конечно есть - не использовать MV, дождаться пока все данные придут и посчитать их
Вот мы так и делаем :) а очень бы хотелось использовать MV :)

Гурам
25.05.2018
07:55:43
Коллеги, добрый день! Ситуация следующая: в случае перезапуска Clickhouse и в случае если в кликхаусе находится большое кол-во таблиц, то перезапуск происходит очень долго. При запуске клик "перечитывает" все таблицы http://joxi.ru/LmGJ53DTe4dYGr и соответственно подключится к нему нет возможности ("Code: 210. DB::NetException: Connection refused: (localhost:9000, 127.0.0.1)"). Есть ли варианты более "быстрого запуска"? И второй вопрос, после выполнения нескольких сложных запросов, клик бывает начинает сильно "тормозить", при этом ресурсов сервера хватает, и далее те запросы которые выполнялись за доли секунда начинают выполнятся за 5-10 сек, в чем может быть проблема (в какую сторону копать)? Спасибо!

Wolf
25.05.2018
08:21:46
Первое решается репликами и дистрибьютед таблицей))

Гурам
25.05.2018
08:30:06
Спасибо!

Гурам
25.05.2018
08:34:08
Скажите пожалуйста, а много — это сколько?
Много таблиц я так понимаю? Более 1к

antuan
25.05.2018
08:34:49
Сурово

Простите, не удержался

Google
Alex
25.05.2018
08:35:15
Много таблиц я так понимаю? Более 1к
У нас 5к таблиц, такой беды не наблюдали

Yuran
25.05.2018
08:36:17
У нас 5к таблиц, такой беды не наблюдали
а как часто вы вставляете в каждую из них?

У нас кликхаус не особо радуется, когда на сервер приходится (в разные MergeTree таблицы) вставка чаще 10-20 раз в секунду

Alex
25.05.2018
08:38:04
а как часто вы вставляете в каждую из них?
В наихудшем случае - раз в минуту. Это таблицы ReplicatedMergeTree с агрегационными данными

Yuran
25.05.2018
08:38:31
10-20 раз в каждую или в целом?
В целом. В каждую примерно раз в секунду.

Wolf
25.05.2018
08:39:18
Много таблиц я так понимаю? Более 1к
Второе тоже решается репликой по идее

Yuran
25.05.2018
08:40:41
В наихудшем случае - раз в минуту. Это таблицы ReplicatedMergeTree с агрегационными данными
Т.е. в наихудшем случае у вас вставка будет 5000/60 = 80 раз в секунду? Как себя чувствует сервер при этом? И где вы копите промежуточные данные? В LSD или в своем демоне?

Гурам
25.05.2018
08:42:41
Второе тоже решается репликой по идее
Спасибо! Смотрели в эту сторону, но решил все же уточнить.

Alex
25.05.2018
08:47:57
Т.е. в наихудшем случае у вас вставка будет 5000/60 = 80 раз в секунду? Как себя чувствует сервер при этом? И где вы копите промежуточные данные? В LSD или в своем демоне?
Мы копим эвенты на хостах-агрегаторах, через LSD. Потом пушим события в шарды CH, таблица ReplicatedMergeTree, пачками по 900К. На весь кластер (6 машин) приходится порядка 1 инсерта в секунду. Остальные тысячи таблиц содержат агрегации из таблицы с сырыми эвентами. Т.е. есть отдельный шедулер, который их дропает/создает/заполняет/очищает.

Kirill
25.05.2018
08:49:42
"и эти люди обвиняют меня в фашизме" (c) Если у вас много таблиц, возможно вы что-то делаете не так. Добавлением распределенных таблиц/реплик эту ситуацию не решить

Давайте так: зачем вам столько, какая задача?

Гурам
25.05.2018
08:54:49
Есть такая необходимость

Kirill
25.05.2018
08:59:07
Есть такая необходимость
А зачем, настолько все таблицы разные по структуре?

Kukuzapa
25.05.2018
09:58:44
А дамп бд в кликхаузе есть?

Diomid
25.05.2018
10:02:08
А дамп бд в кликхаузе есть?
Неделю назад не было)) Я лично выбрал путь через select потабличный.

Kukuzapa
25.05.2018
10:11:18
Неделю назад не было)) Я лично выбрал путь через select потабличный.
Опишите в двух словах. У меня есть 2 таблицы. Тестовый сервер и боевой. На боевом установлен кх, но больше никаких действий с ним не было.

Diomid
25.05.2018
10:12:20
Опишите в двух словах. У меня есть 2 таблицы. Тестовый сервер и боевой. На боевом установлен кх, но больше никаких действий с ним не было.
Dump of data: clickhouse-client --query="SELECT * FROM table FORMAT Native" > table.native Native is the most efficient format. CSV, TabSeparated, JSONEachRow are more portable: you may import/export data to another DBMS. Dump of metadata: clickhouse-client --query="SHOW CREATE TABLE table" --format=TabSeparatedRaw > table.sql Restore of metadata: clickhouse-client < table.sql Restore of data: clickhouse-client --query="INSERT INTO table FORMAT Native" < table.native

Страница 538 из 723