
Antoine
08.04.2018
15:25:06
когда-нибудь схопнутся))
Обратите внимание, что дедупликация данных производится лишь во время слияний. Слияние происходят в фоне в неизвестный момент времени, на который вы не можете ориентироваться. Некоторая часть данных может так и остаться необработанной. Хотя вы можете вызвать внеочередное слияние с помощью запроса OPTIMIZE, на это не стоит рассчитывать, так как запрос OPTIMIZE приводит к чтению и записи большого объёма данных.
Таким образом, ReplacingMergeTree подходит для фоновой чистки дублирующихся данных в целях экономии места, но не даёт гарантий отсутствия дубликатов.

Alexey
08.04.2018
15:27:54
у меня принудительно запросом optimize table всегда удачно хлопаются

Slach
08.04.2018
16:22:34
Вопрос про мониторинг Clickhouse
если clickhouse по умолчанию умеет слать свои метрики в graphite ??
тогда где можно найти grafana dashboards для этих graphite метрик? никто случайно не делал?

Aleksey
08.04.2018
17:32:28
мне кажется не совсем корректная подставновка в Tabix - http://joxi.ru/vAWKbKhkwyaxAW
должно быть UInt64, иначе ошибка синтаксиса

Google

Roman
08.04.2018
18:27:34

Андрей
08.04.2018
18:34:40
А макросы нельзя просто в строку подставить, реплейсом?


Roman
08.04.2018
18:36:05
Добрый день! Кто графаной пользуется с плагином для КХ, подскажите, пожалуйста, как побороть проблему автоподстановки "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
Проверьте, пожалуйста, исходящий запрос во вкладке Network или нажав в Графане кнопку Generated SQL под запросом на предмет подстановки default.


Андрей
08.04.2018
18:37:41
А макросы - это в том числе $from, $to и т.д.? Без них - неубодно строить графики :)

Roman
08.04.2018
18:38:25
макросы $rate, $columns - парсером

Андрей
08.04.2018
18:40:40
Тогда это не для всех запросов выполняется. Вот здесь в запросе этих макросов не было, а запрос пересобирался
https://github.com/Vertamedia/clickhouse-grafana/issues/42
Разве что $table там ещё есть.

Roman
08.04.2018
18:54:15
Да, Вы правы. Я забыл, что поменял поведение при добавлении adhoc фильтров, т.к. для их работы модифицируется именно ast, который потом снова собирается в запрос но с изменениями после преобразования. Я отключу такое поведение, если не используются adhoc фильтры. Спасибо, что обратили внимание

Андрей
08.04.2018
18:58:39
Здорово, спасибо!

Vsevolod
09.04.2018
07:41:07
кстати, господа, я тут недавно занимался сборкой сабжа под CentOS и перепилил несколько сборочные скрипты и спеки, чтобы оно работало с произвольным git тегом/хешем и не собирало gcc с бустом за каким-то лешим
https://github.com/vstakhov/clickhouse-rpm - если кому интересно

Eugene
09.04.2018
07:41:50
??

Google

Stanislav
09.04.2018
07:44:37
Господа, в логах есть следующее:
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.

Андрей
09.04.2018
08:46:02

Mike
09.04.2018
08:51:50

Vsevolod
09.04.2018
08:54:17
у меня он тоже все из пакетов ставит
я хотел собирать специфический тег, потому что stable сломан в центоси
ну и есть некая пляска с трижды проклятыми сабмодулями и придурошному git archive, да

Ivan
09.04.2018
08:58:01
читаю по привычке доку на английком, нашел такой перл:
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.
шимпанзе то за что

Vsevolod
09.04.2018
08:59:48
это для внимательных читателей

Ivan
09.04.2018
09:01:48
только я не понял есть такая функция positionCaseInsensitive() или это шутка?
есть, проверил)

?
09.04.2018
09:28:02
правило нужных функций в кх – если какая-то функция нужна, то она там есть

Vsevolod
09.04.2018
09:35:20
вот мне был недавно нужен substring от 2-го символа до конца строки, и кроме как композицией из substring + strlen это, судя по документации, не решается
вот если бы туда для обработки данных какой luajit прикрутить :)

Sergey
09.04.2018
09:35:56

sha-bang
09.04.2018
09:38:58
было бы здорово

Konstantin
09.04.2018
09:49:43

Google

Stanislav
09.04.2018
09:52:11
https://github.com/yandex/ClickHouse/blob/master/CONTRIBUTING.md - ссылка на Developer guide ведёт на 404

Александр
09.04.2018
12:24:43
@ztlpn @milovidov_an
Ребят, добрый день! Надыбал кейс когда Buffer таблица не очищает данные почему то.
1. Создаем ReplacingMergeTree таблицу
2. Для нее создаем Buffer таблицу
3. Пишем данные в Buffer таблицу
4. Делаем DROP Buffer таблицы
5. Делаем SELECT в ReplacingMergeTree таблицу - записей из буффера нет.
6. Повторно создаем Buffer таблицу
7. Делаем SELECT в только что созданную Buffer таблицу и видим там строки, которые были ранее вставленны
В логах ошибок нет.
Версия 1.1.54370

Jen
09.04.2018
12:26:51
предположу, что удаление происходит не сразу, а вы таблицу Buffer с тем же именем создаете

Александр
09.04.2018
12:27:20
А по факту этого не произошло в моем случае
Так же в документации написано
Данные сбрасываются из буфера и записываются в таблицу назначения, если выполнены все 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;


RUNET
09.04.2018
12:40:59
а зачем вообще удалять буфер ?
он для того и сделан, чтобы писать в него, он когда надо перекинет данные.
и читать надо из буфера.
тогда будут подтягиваться все данные

Александр
09.04.2018
12:42:37
Блин, я его удалил, что бы очистить принудительно, что бы проверить теорию относительно порчи данных
И вот такая строка из буффера превращается вот в такую.
https://img.facedsid.ru/jtzrz.jpg
И теория таки подтвердилась. Если в Nested есть Array, числовой по крайней мере, то при сбросе буфера массив "опустошается" чудным образом
Хы...все веселее! При записи в саму таблицу такая же канитель. Просто пустые массивы пишутся

Slach
09.04.2018
12:44:16

Александр
09.04.2018
12:44:41
Я хочу узнать вкурсе ли ребята или нет и потом уже заводить issue ) Может быть у них есть задача во внутреннем трекере
например, многомерные массивы нельзя сохранить в таблицы с движком семейства MergeTree
И в это же время в changelog 1.1.54337
Добавлена поддержка хранения многомерных массивов и кортежей (тип данных Tuple) в таблицах.

Nikolai
09.04.2018
12:52:29
Заводите issue. Поддержка была добавлена, но такие проблемы могут случаться.

Google

Александр
09.04.2018
12:53:19
Ок. А как от них можно избавиться? ) Например тип на String можно сменить?
issue сейчас заведу

Nikolai
09.04.2018
12:55:11
Можно попробовать. Сам еще не сталкивался, так что не знаю, что посоветовать.

Александр
09.04.2018
13:06:51

papa
09.04.2018
13:08:36


Александр
09.04.2018
13:08:44
Но при этом в движке Buffer это срабатывает, скорее всего из-за того, что есть AS table... и вот show create table показывает, что там не Nested, а именно Array(Array(String)) например и в Buffer таблице все ок работает.
но ведь nested, внутри которого array, это и есть array(array())
Да, но факт остается фактом. Если в 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;
и все работает


Nikolai
09.04.2018
13:22:12
Спасибо!

Alexsey
09.04.2018
14:18:34
Кто нибудь запускал Dynamic Bayesian Network напрямую в кликхаусе?

Deze
09.04.2018
14:24:30
Здравствуйте! Возможно как-то узнать sharding key уже созданной distributed таблицы?

Sergei
09.04.2018
14:24:59

Deze
09.04.2018
14:27:20
Хм. Спасибо. А в системных табличках без чтения DDL?

Sergei
09.04.2018
14:31:36
Подскажите, есть ли туториал как настроить ZooKeeper для работы с ReplicatedMergeTree таблицами ?
Или для относительно небольших обьемов(50 инсертов в секунду) лучше использовать репликацию посредством Distributed таблиц ?

Wolf
09.04.2018
14:37:18
всегда лучше использовать зукипер
50 инсертов уже не мало, лучше бы по реже и большими пачками

Sergei
09.04.2018
14:38:58

Гаврилов
09.04.2018
14:39:28
кафку поставить?

Sergei
09.04.2018
14:40:22

Google

Гаврилов
09.04.2018
14:40:31
вешатся будет
наглухо
периодически

Yuran
09.04.2018
14:43:52

Sergei
09.04.2018
14:45:03
А как критикуют буферные таблицы?
Если таблица назначения является реплицируемой, то при записи в таблицу Buffer будут потеряны некоторые ожидаемые свойства реплицируемых таблиц. Из-за произвольного изменения порядка строк и размеров блоков данных, перестаёт работать дедупликация данных, в результате чего исчезает возможность надёжной exactly once записи в реплицируемые таблицы.
В связи с этими недостатками, таблицы типа Buffer можно рекомендовать к применению лишь в очень редких случаях.
это из офф документации
вешатся будет
не ужели все так плохо? Вешаться на вставку ? Или и чтении в том числе ? Я пока столькнлся только с тем что место на диске выжирается, но это при нескольких тысячах инсертов в секунду


?
09.04.2018
16:47:40
а подскажите такую штуку, у меня есть небольшой набор пар "ключ-значение", типа
MyId | Description
1111 | Petya
2222 | Vasya
и выборка из другой большой таблицы, которую я группирую по MyId, в виде
1111 | 49
2222 | 1023
я бы хотел вместо кодов видеть поля из Description из первой таблицы
то есть это должно быть
Petya | 49
Vasya | 1023
есть какой-то элегантный способ эту задачу решить?

Sergei
09.04.2018
16:50:43

Kirill
09.04.2018
17:32:22

?
09.04.2018
17:41:44
спасибо

Alexsey
09.04.2018
19:09:33
есть ли способ отсортировать массив функцией ?

papa
09.04.2018
19:19:25
arraySort?

Alexey
09.04.2018
19:21:50
есть ли способ отсортировать массив функцией ?
:) 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] │
└────────────────────┘