
Виктор
23.03.2017
08:24:03
Вообще, при вставке особо много памяти использоваться не должно. Если падает только при вставке, не знаю. Лучше подождать ответ ребят из команды разработки.
Теоретически, max_insert_block_size

Dmitriy
23.03.2017
08:38:38
в config.xml указал такие параметры
<uncompressed_cache_size>858993459</uncompressed_cache_size>
<mark_cache_size>536870912</mark_cache_size>
<max_insert_block_size>1000</max_insert_block_size>
первые два - это дефолтные значение уменьшиные в 10 раз.
последнее просто добавил в конфиг. его не было.
На этом этапе СH все еще падает.

Vladislav
23.03.2017
09:14:43
я правильно понимаю, что для того, чтобы данные синхронизировались между репликами достаточно прописать их в конфиге <remote_servers> внутри шардов?

Google

Igor
23.03.2017
09:30:19
Для удаления дублей я создал новую таблицу, туда вставил данные через insert... select..., но дубликаты строк все равно остались( С чем это может быть связано?
primary key в кликхаусе не является уникальным, ничего не мешает иметь несколько записей с одним и тем же PK; а ReplacingMergeTree осуществляет схлопывание/реплейс не сразу.
если хочется гарантированной дедупликации, можно изначально делать, например, INSERT INTO table_temp ..., где будут возможные дублированные данные, а потом делать INSERT INTO table SELECT * FROM table_temp WHERE id NOT IN (SELECT id FROM table).
т.к. со временем данных в таблице table будет дохрена и SELECT id FROM table будет неистово жрать память, можно будет добавить фильтр, например, по дате, и вставлять кусками
может, есть способ лучше


Sergey
23.03.2017
09:46:54
primary key в кликхаусе не является уникальным, ничего не мешает иметь несколько записей с одним и тем же PK; а ReplacingMergeTree осуществляет схлопывание/реплейс не сразу.
если хочется гарантированной дедупликации, можно изначально делать, например, INSERT INTO table_temp ..., где будут возможные дублированные данные, а потом делать INSERT INTO table SELECT * FROM table_temp WHERE id NOT IN (SELECT id FROM table).
т.к. со временем данных в таблице table будет дохрена и SELECT id FROM table будет неистово жрать память, можно будет добавить фильтр, например, по дате, и вставлять кусками
может, есть способ лучше
Правильно ли я понимаю, что дубликаты также учитываются при выполнении аналитических функций?


Алексей
23.03.2017
09:58:36
Всем привет!
Восстанавливаем кликхаус после падения :)
Может кто подскажет что делать с ошибкой
Detaching broken part /opt/clickhouse//data/dbname/table/20170311_20170313_632164_640373_188 because it covers less than 2 parts. You need to resolve this manually

Pavel
23.03.2017
12:09:57
спамеры пади

Alexey
23.03.2017
15:25:29

Vladimir
23.03.2017
17:22:53
Добрый вечер! Извините, я как-то упустил следить за этим моментом, но насколько в КХ на данный момент поддерживаются NULL-ы и с какой версии? Насколько я помню, их даже обещали и даже что-то делали по ним. И если NULL-ы есть, то поддерживаются ли они в Array и Nested (как я понимаю, это одно и то же)?

Alexey
23.03.2017
17:28:41
Сейчас поддержка NULL всё ещё неполная - некоторые вещи не работают. Для Array наличие поддержки предполагается для внутренностей: Array(Nullable(T)) должно работать, а Nullable(Array(T)) - нет.

Vladimir
23.03.2017
17:29:13
О, спасибо большое!

Mike
23.03.2017
18:08:23
Коллеги, покритикуйте схему хранилища данных по событиям? Хотим несколько тысяч видов событий хранить в одной таблице. У каждого события плюс/минус разные поля свойств, несколько штук. Есть два варианта:
1. Добавить колонки для каждого вида событий. Таким образом, в одной таблице будет создано: 2000 видов событий * 3 колонки = 6000 колонок.
Ид клиента | Дата/время | Название события | Просмотр_статьи_айди_статьи | Просмотр_документа_айди_документа | Просмотр_документа_айди_партнёра | …
Запросы будут вменяемо выглядеть: select * from events where Название_события = 'Просмотр_статьи' and Просмотр_статьи_айди_статьи = 12345
2. Сделать странную схему типа EAV
Ид клиента | Дата/время | Название события | Строка1 | Строка2 | ... | СтрокаN | Число1 | Число2 | ... | ЧислоN | Дата1 | Дата2 |..| ДатаN
и аналитик будет делать странные запросы типа select * from events where Название_События = 'Просмотр_статьи' and Число1 = 12345


Igor
23.03.2017
18:11:16
А фильтр по дате будет ?

Mike
23.03.2017
18:13:27
По всем полям так или иначе будет

prll
23.03.2017
18:14:31
/*
Создаем таблицу
*/
CREATE TABLE events
(
user_id Int64,
event_id Int64,
event_date Date
)
ENGINE = MergeTree(event_date, (user_id), 8192);
/*
Создаем MATERIALIZED VIEW следящее за таблицей events
*/
CREATE MATERIALIZED VIEW events_agg
ENGINE = AggregatingMergeTree(event_date, (event_id, user_id), 8192)
AS SELECT
event_date,
event_id,
user_id,
countState(event_id) AS count_of_events
FROM events
GROUP BY event_id, user_id, event_date;
оказалось не бага а внимательность -
event_date должен присутствовать в первичном ключе -
AggregatingMergeTree(event_date, (event_date, event_id, user_id), 8192)
- так всё работает.

Igor
23.03.2017
18:19:40
По всем полям так или иначе будет
CH хорошо работает если идёт выбор по PK, дате - т/е всегда ограничивать выборку по дате, если будет запрос вида только "Название_События = 'Просмотр_статьи'" - то будет печаль...
Из своего не большого опыта - лучше сделать много таблиц и в каждой использовать нужные данные по 50-500 колонок.

Google

Igor
23.03.2017
18:20:27
2000 видов событий - имхо очень большое число вариантов событий, может их лучше сгруппировать ?

Mike
23.03.2017
18:23:24
В каком смысле "сгруппировать"?

papa
23.03.2017
18:32:36

Igor
23.03.2017
18:33:34
У нас клики отдельно по разным обьекта / показы отдельно / скролы отдельно и т/д в отдельных таблицах - в сводных только основные свойства

Mike
23.03.2017
18:34:09
То есть на каждый тип события вы заводите таблицу, верно?

Igor
23.03.2017
18:34:39
Ну у нас всего их 10 ))

Павел
23.03.2017
18:34:46
А какое максимальное количество колонок для события ?

Mike
23.03.2017
18:35:34

Igor
23.03.2017
18:35:57
мы рекламная сетка/ аггрегатор новостей - очень интересно это из какого направления 2000 видов событий ?

Mike
23.03.2017
18:38:57
Омниканальный маркетинг (куча каналов коммуникации с пользователями, и на каждом канале свои события)
Плюс корелляционный анализ и прочий ML, для которого чем больше данных тем лучше

Павел
23.03.2017
18:39:37
Можно 2 таблицы использовать. Первая таблица id_события название и 10 колонок или чуть больше с описанием параметров. А 2 таблица id события плюс n колонок типа data1 .. dataN которые описаны в 1 таблице.

Mike
23.03.2017
18:40:18
Один голос за EAV %)

papa
23.03.2017
18:41:46
6к колонок для вставки может оказаться не очень удобно.

Igor
23.03.2017
18:42:19
Может поможет вариант с массивами - если "редко" ходить в них
К примеру у нас происходит показ рекламного места в котором показывается Х банеров -> мы пишем все данные по пользователю, а информацию о показанных банерах мы храним в массиве. И отдельно пишем в суммирующие таблицы - для быстрого анализа - по срезу банер/пользователи которым было показано
банер/площадки где показано и т/д

Mike
23.03.2017
18:49:54
Вариант с таблицей на событие в целом хорош, пугает лишь тем, что будет кейс "показать все события по конкретному клиенту", что черевато джойном 2к таблиц :)
А про массивы надо подумать.

Igor
23.03.2017
20:04:39
Прошу сообщество о помощи в вопросе который тесно связан с CH, я выкладываю сильно обновленную версию интерфейса GUI вместо Сlickhouse-frontend в opensource, но один вопрос я решить не могу.
Посоветуйте или скажите какую лицензию поставить на проект, и есть ли вообще подходящее под мои ожидания:
- Использовать как угодно и в любых компаниях ( коммерческих )
- Не позволять другим компаниям взимать плату за использование GUI, т/е чтобы пользователи не платили за мои разработки которые я выложил в открытый доступ без согласия.
- И чтобы лицензия эта не мешала сообществу
Перечитал, все что было на хабре на эту тему - но так и не определился. Конечно, я понимаю что я живу в России )))
Но все-же может есть идеи, что лучше поставить GPL3 / Apache 2 / MIT ?

Pavel
23.03.2017
20:05:49
сложный вопрос :)
сейчас апаче / мит в тренде)

Google

Pavel
23.03.2017
20:06:16
я свой проект под GPLv2 держку
но это мало кому мешает его сувать в коммерцию)
пойди конем, начни продавать сам :)

Alexey
23.03.2017
20:10:01
> GPL3 / Apache 2 / MIT?
Все три лицензии не запрещают продавать продукт.
GPL3 требует предоставлять доступ к исходникам при любом распространении (не важно, распространение бесплатно или нет), остальные не требуют.

Pavel
23.03.2017
20:10:30
GPLv2 тоже самое - требование открыть изменения очень жесткое.
Плюс запрет на использование в проектах на более свободных лицензиях.

Andrey
23.03.2017
20:10:51

Pavel
23.03.2017
20:11:10
Суть в том, что кто-то может создать огромный продукт на базе софта.
И разница между тем, что он взял в оснвоу и результатом - обязана быть выложена. ё
Условно, если ты взял камень и построил пирамиду - будь добр всю пирамиду в опенсорс)
это оч прикольно, но никакой магии в этом нет, люди не начинают остервенело контрубтить потому что такая лицензия :)

Andrey
23.03.2017
20:12:34

Pavel
23.03.2017
20:12:49
Зависит от способа линковки.
например, с GPLv2 софтом коммерческий софт линковать нельзя - весь проект станет GPLv2.
если же dhcpd использован как отдельный сервис - так можно
даже можно через system( ) дергать
а вот если динаимечиски либо статически линковался - будь добр открой все, твой проект заражен GPL'ем)
в случае скрпитовых языков не знаю как это работает, честно говоря. Понятия линковки ни статической, ни дианмической тупо нету.

Andrey
23.03.2017
20:14:25
строго говоря только static и dynamic это линковка
если вызываешь как сторонний процесс - это уже не линковка

Google

Andrey
23.03.2017
20:15:09
ааа, вот оно что
спасибо что разьяснили)

Pavel
23.03.2017
20:16:09
отсюда растут всякие lgpl которые позволяют линковку с коммерческим кодом
ибо либа на gpl нахрен никому не нужна)

Igor
23.03.2017
20:22:06
C либами все понятно - я свой phpClickHouse выложил не задумываясь в MIT т/к сам по себе он ни какой ценности не предстваляет, а кодга решение не является компонентом - а как бы конечным продуктом, тут хара не сильно помогает

Pavel
23.03.2017
20:22:26
хара?

Igor
23.03.2017
20:22:39
хабра

Pavel
23.03.2017
20:23:01
ну я тут адвокат дьявола :)

Igor
23.03.2017
20:25:14
Советуете не заморачиваться - просто поставить GPL3 и не думать что с когото берут денюжку ?)

Pavel
23.03.2017
20:25:43
GPLv2 / GPLv3 в вашем случае смысла не имеет
GPLv3 разрешает какое-то странное использование в прошивках и прочем
http://www.ifross.org/en/what-difference-between-gplv2-and-gplv3
хороший статей
оказывается отличий несколько больше

Igor
23.03.2017
20:28:25
Я исходил из https://choosealicense.com/

Pavel
23.03.2017
20:29:04
ты как автор можешь потом перелицензироваться, если захочешь :)
пока нет кучи контрибуторов
твой код, чо хочешь то и делаешь :)

Igor
23.03.2017
20:29:26
)))) ну это как то не правильно )))

Pavel
23.03.2017
20:29:30
почему?

Google

Aleks
23.03.2017
20:31:22
На первом митапе в Яндексе был неофициальный анонс про сервис, который будет класть логи в clickhouse, и что его хотят выложить на всеобщее обозрение.
Есть новости по этой теме?

Pavel
23.03.2017
20:32:45
не надо класть логи в кликхаус!
не для этого он :)

Alexey
23.03.2017
20:33:27

Igor
23.03.2017
20:33:35
> @pavel_odintsov
почему?
Ну юзеры обидятся - что лицензию сменил, просто сотка звезд на github обязывает подойти как то серьезно к этому (((
Посмотрел еще раз про Apache License 2.0 - там Limitations:Trademark use
Ну и пусть будет Apache 2 - такая-же как у CH )) Думаю юристы у YA - ого го ))

Alexey
23.03.2017
20:33:45
И не говорите так, а то люди неправильно поймут.

Andrey
23.03.2017
20:34:03
вообще кликхаус на столько быстр что так и провоцирует писать кривые запросы и использовать не по назначению :))

Pavel
23.03.2017
20:34:27
"не кладите текстовые неструкктурированные логи в кликхаус" :)
@milovidov_an так можно?)

Alexey
23.03.2017
20:34:42
Да, совершенно верно.

Vladimir
23.03.2017
20:35:16
Люди все взрослые и я думаю все понимают именно так))

Роман
23.03.2017
20:35:44
а если я честно каждому типу данных по столбцу выделю и т.п. - норм использование?:)

Pavel
23.03.2017
20:36:03
если там много текста - это мало толку даст

Alexey
23.03.2017
20:36:06
А то я постоянно говорю, что основное применение ClickHouse - для логов, но если это - хорошо структурированные, обработанные логи. Для примера, логи веб аналитики, логи рекламных систем, логи RTB, логи онлайн игр и т. п.

Pavel
23.03.2017
20:36:24
я бы назвал это телеметрией :)

Aleks
23.03.2017
20:36:34
Вопрос как раз про time- series