@clickhouse_ru

Страница 489 из 723
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
Кстати, интересно, зачем плагин сам меняет что-то в запросе? Почему не передавать в CH исходный запрос? На гитхабе там последних пара issue по этому поводу есть.
Плагин меняет запрос когда используются макросы или когда пользователь использует format. Чтобы применить изменения запрос преобразовывается в ast и собирается назад. Да, это не всегда работает так как надо. Но пользователь вполне может не использовать макросы и формат и передавать запрос as is

Андрей
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.

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 прикрутить :)

Konstantin
09.04.2018
09:49:43
вот мне был недавно нужен substring от 2-го символа до конца строки, и кроме как композицией из substring + strlen это, судя по документации, не решается
разве это не то поведение которе вам было нужно?: SELECT substring('some text string for example', 3) ┌─substring(\'some text string for example\', 3)─┐ │ me text string for example │ └───────────────────────────

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
предположу, что удаление происходит не сразу, а вы таблицу 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;

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

Александр
09.04.2018
12:42:37
Блин, я его удалил, что бы очистить принудительно, что бы проверить теорию относительно порчи данных

И вот такая строка из буффера превращается вот в такую. https://img.facedsid.ru/jtzrz.jpg

И теория таки подтвердилась. Если в Nested есть Array, числовой по крайней мере, то при сбросе буфера массив "опустошается" чудным образом

Хы...все веселее! При записи в саму таблицу такая же канитель. Просто пустые массивы пишутся

Александр
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
Можно попробовать. Сам еще не сталкивался, так что не знаю, что посоветовать.
Смена типа не помогает. Все ок работает только именно с Array(Array()), но Nested внутри которого Array - не работает ни с числами, ни со строками.

Александр
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 таблицы?

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
50 инсертов уже не мало, лучше бы по реже и большими пачками
к сожалению так не получиться, вот смотрю в сторону Buffer таблиц, но их тоже критикуют

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

Sergei
09.04.2018
14:40:22
кафку поставить?
да вот не перебор ли, мб и так база справиться

Google
Гаврилов
09.04.2018
14:40:31
вешатся будет

наглухо

периодически

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 есть какой-то элегантный способ эту задачу решить?

?
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] │ └────────────────────┘

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