- 01 December 2016 (78 messages)
-
-
zk всё равно на java, мне этот аргумент кажется несколько странным
-
-
-
-
-
делаю селект:
echo "select Time from graphite where Path='haggar1.agent.0.metrics.0' and Time < toUInt32(now()-3*3600) order by Time limit 5" | clickhouse-client
ожидаю увидеть уже пороллапленные значения, а получаю посекундные. Методом тыка смог найти 2-3 интервала где они поролаплены -
Ролап происходит при мерже. Мерж происходит в фоне
-
И вызывается по обычным правилам
-
С optimize final можно вызвать принудительно
-
-
-
ага. FINAL нужен для того, что бы КХ переобрабатывал уже существующие партиции
-
-
Зависит от настроек ролапа
-
-
-
-
-
url unescape нет. Можно добавить в список мелких фич.
extractURLParameter не разбирает %-encoding и плюсики.
Это сделано потому что в Метрике URL-ы записываются в базу частично раскодированными (раскодированы все символы кроме отдельных). А это сделано, в свою очередь, по двум причинам: - чтобы удобнее отображать данные и искать в данных; - потому что из браузеров приходят URL-ы зачастую в неизвестной, в неправильной, в испорченной кодировке, в дважды испорченной кодировке и т. п., и приходится делать много работы, чтобы привести их к человеческому виду. -
-
-
-
-
-
-
-
-
-
> We have not done these optimizations, because we don't use FINAL for production queries in serious load, only for rare queries or for small load.
> Even ReplacingMergeTree was developed by request of another department, who convinced me, that they will use it in small workload. -
( https://groups.google.com/forum/#!topic/clickhouse/jYwoyPblsk8 )
т.е. похоже, что он не используется в, собственно, метрике; и работает медленнее, чем мог бы -
Медленно, если использовать select final (не рекомендуется)
-
Правильно писать все запросы с расчетом на то, что данные могут быть ещё не схлопнуты
-
т.е. например argMax() по версии использовать
-
-
select final, но будет медленее
-
final не работает на GraphiteMergeTree
-
Можно сделать, чтобы работал, но будет действительно медленно.
-
когда я копирую данные из одной таблицы в другую insert from select, какой формат передачи данных? я копирую из таблицы 240гб данных на примерно 60гб. Progress: 183.94 million rows, 267.35 GB. какие накладные расходы на копирование? потому что я ожидал что количество прочитанных данных будет ~60гб, или по крайней мере ~120гб(в два раза больше)
-
-
А как вы сами обходите то что графитные данные нужно выавнивать и пр.
-
Видимо, запрос не использует индекс
-
Что ты имеешь ввиду под выравнивать?
-
графит ожидает данные выравненные по precision
-
-
-
-
-
-
Даже если бы был final, то это не помогло бы. Запрос на большой интервал может покрыть несколько маленьких с разным precision
-
Мы сейчас эту часть допиливаем, расскажу как будет. При формирование запроса мы выбираем один presision и запросом в КХ доагрегируем до него. Presision выбирается наиболее крупный из периода куда попадает запрос. Например если у нас минутная метрика и мы хотим данные за 10 последних дней, а начиная с недели происходит угрубление до 5ти минут мы весь запрос угрубляем до 5ти минут
-
Joined.
-
Округляем время путём intDiv на константу и домножения обратно в SELECT.
-
Т.е. схема все равно у вас хранится и в клиенте тоже? Чтобы он константу мог выбрать
-
Да. Но сейчас есть FR, чтобы можно было смотреть схему в системной таблице в ClickHouse.
-
Вот мне тоже хочется такого - хотябы прямо в виде xml. Только не очень понятно что делать, если клиента натравят на distributed или merge таблицу
-
А в чем проблема?
-
Смержить правила из разных таблиц может оказаться нетривиальным занятием. Они могут оказаться противоречивыми. Но наверно вы это все уже продумали
-
Имхо это вообще не надо делать. Правила должны быть одинаковые
-
Joined.
-
запрос вида "все данные старее этой даты". дата в primary key есть
-
-
вроде разжатые, но я не уверен
-
-
Нет, так не бывает
-
Если фильтр такой есть, должно работать
-
-
-
-
-
-
-
-
-
-
Joined.
-
при большой нагрузке CPU usage 300% максимум.
как заюзать больше ядер? -
В диск упирается наверное
- 02 December 2016 (82 messages)
-
Доброе утро! Я продолжу тему - больше 300% не ест, ио по нулям - файлы на ссд. Во что может упираться? Или ему нагрузки не приходит больше?
-
max_threads можно увеличить
-
Какой движок таблицы?
-
-
io по нулям по данным чего?
-
Ну и что за запрос
-
-
-
Ну это понятно. Какой паттерн запроса
-
И io лучше по iotop, я вообще не припомню чтобы top давал in
-
Io
-
-
Joined.
-
Привет. Подскажите пожалуйста, умеет ли кликхаус делать cumulative sum? То есть допустим есть табличка со строками (1,2,3) а хочется получить (1, 3, 6). На каком-нибудь MS SQL я бы сделал джойн таблички с самой собой по t1.id >= t2.id и просуммировал. Но CH так не умеет.
-
-
Не умеет пока что
-
но оконные функции это не отменяет...
-
Понял. Спасибо. Жаль.
-
Найдите таск на гитхабе и поставьте лайк, например
-
В принципе, в 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.
-
-
-
-
-
-
-
-
-
-
Лучше всё условие в prewere
-
дает +10мс
-
-
а это как именно?
-
-
-
-
-
-
-
а почему в Time прописан Timestamp и для чего тогда date?
-
-
ппц кастыли
-
-
ну в примере запроса да
-
-
-
-
-
Timestamp это версия данных
-
-
-
-
-
-
я все равно не понял
-
по условию вижу, что они равнозначны, только типом данных отличаются...
-
то что дата нужна для индекса - это я понял
-
получается, если гоняешь данные со временем, то извращайся такой схемой, хотя более логично было бы что-то подобие trunc делать
-
Не для индекса. Для партиционирования
-
в данном контексте не суть важно
-
На самом деле есть. Функция runningAccumulate. Подробности потом.
-
Порядок в WHERE ни на что не влияет. AND-ы жадные (не short-curcuit).
-
Joined.
-
-
Сделать еще столбец с датой
-
Высчитать date из date time?
-
-
Сделать свой ETL наверно
-
Либо лепить через временные
-
перечислить колонки в запросе insert которые есть csv , на которые не указаны сработает default
-
а какой в данном случае будет синтаксис? сейчас импортирую просто:
cat tes2.csv | clickhouse-client —query="INSERT INTO test FORMAT CSV"; -
В статье описывал
https://habrahabr.ru/company/smi2/blog/314558/Как запустить ClickHouse своими силами и выиграть джекпотМы решили описать простой и проверенный путь для тех, кто хочет внедрить аналитическую СУБД ClickHouse своими силами или просто испробовать ClickHouse на собстве...
-
-
А для консоли INSERT INTO test (col,col2) FORMAT
-
Так если при импорте запрос, прям в запросе и сделайте колонку
-
INSERT INTO test (col,trunk(col2),col2) FORMAT
-
Или транк в кх не завезли? 😬
-
trunc это функция из oracle, с чего бы ей быть в clickhouse
-
Для этого есть toDate
-
именно то что нужно!
-
Не только оракл...
- 04 December 2016 (14 messages)
-
а имена типов а-ля String, Int (строго с большой буквы) это специально так задумано? или случайно получилось? ;)
-
Так изначально задумано.
Скорее всего, мы сделаем также алиасы для типов из SQL (типа varchar), имена которых будут не регистрозависимыми. Но при этом придётся сохранить некоторые технические отличия в реализации (пример: отсутствие проверки на переполнение для int-ов). -
хорошо не Stroka
-
Трололо :)
-
В коде кликхауса нет Stroka
-
-
./ClickHouse/doc/developers/style_ru.md: ~~Stroka~~
:-[ -
есть запрет на Строку )
-
ребят, привет. Подскажите, в кликхаусе есть возможность делать ограничение на уникальность поля ? можно ли составной индекс (в mergetree) сделать уникальным ?
-
Привет. Нет, уникальный индекс сделать нельзя.
Особенность работы, коротко можно сформулировать так: "при вставке данных, ничего не читаем". -
понял, в планах соответственно такого тоже нет и не будет ?
-
Есть варианты, которые станут возможными после реализации UPDATE.
-
а апдейт в q3, насколько помню планируется ?
-
Да.
- 05 December 2016 (285 messages)
-
Привет, ребят , незнаю в тему ли, но хочу спросить. Есть ли смысл оборачивать Clickhouse чем нибудь вроде Hive/Impala/Drill . Цель сделать минимизировать переделки со стороны SQL
-
Есть ли какой-то опыт или объяснения почему не стоит так делать?
-
а не проще SQL переписать?
-
ну просто Clickhouse это именно что наружу полноценный SQL диалект предоставляет
-
и всякие особенности с Dcit'ами надо учитывать при разработке
-
Не предоставляет он
-
На текущий момент, у кликхаус очень слабый диалект и сильно отличается от стандарта
-
-
и??? вы хотите натянуть ужа на ежа и "привести к стандартному диалекту"? зачем?
IMHO затея достойная лучшего применения энергии... -
Я не хочу... 🙈
-
А в чем слабость диалекта, собственно?
-
Специфика базы: работать в основном с одной таблицей с неадекватными джойнами. Специфика самого SQL: часть вещей не по стандарту, очень много отсутствует моментов.
-
Ну таки имхо как раз в стандарте отсутствует очень много моментов. Тех же CountIf/SumIf мне очень сильно не хватает
-
аналитика - это чаще всего звезда. просто так случилось в мире
-
зато очень много присутсвует других моментов и положительных плюшек =) давайте признаем уже, ClickHouse очень быстрый, но ОЧЕНЬ специфический молоток и надо с помощью него решать именно те задачи под котоорые он заточен и именно теми способами которые он предоставляет из коробки
-
Я в курсе, только чтобы звезду сделать, вам здесь ответят, лейте кх в одну таблицу, а для звезды справочники подключайте на стороне
-
Пока плюс один, халява
-
да, потому что справочники работают эффективнее джойнов у товарищей. мне не сложно.
-
На данных до 1 тб я бы лично рекомендовал вертику бесплатную, шустрости не меньше, но полноценный SQL
-
У меня к справочникам ровно одна претензия - синтаксис довольно монструозный получается
-
ну вот смотрите, в Вертике есть projections
в каком стандарте они описаны? -
до 1 Тб можно и на mysql + 1 сервер посидеть.
-
=)) ага, а потом ценник 70k баксов за второй терабайт и блять нормальных реселлеров в россии тупо нет... плавали знаем
-
Можно и Машку за ляшку
-
спасибо, пойду переслушаю
-
Причем здесь стандарт и проекции?
-
ну я правильно понял что вы как бы говорите "ай ай вот в вертике все по стандарту, полноценный SQL" а я вот говорю что Вертика хороша, бесспорно, но в ней тоже ДОФИГА специфических вещей которыми тоже как в ClickHouse надо учиться пользоваться ;)
-
понимаете =) ClcikHouse сейчас это как nginx для аналитики, nginx вначале тоже умел с гулькин нос, реверс прокси с keep alive и хорошую раздачу статики
а теперь на нем чуть ли не полноценные приложения начали писать =) и заметье, никто не бузил по поводу "ой у них конфиг не Апачевый, а какой то свой" -
-
-
Скорее нужно учить им не пользоваться :(
-
фейсбук сидит на mysql и у них всё хорошо. это всего лишь один из инструментов.
-
угу. 100 миллиардов мух не могут ошибаться...
-
да ладно, в web OLTP нагрузках с кучей мелких транзакций - MySQL себя прекрасно показал для своего времени =) и заставил тот же Pg подтянуться до нормального уровня (хотя и через костыли типа pgbouncer ;)
-
-
-
-
-
да, я думаю ведущие специалисты по СУБД мира конечно могут ошибаться, но не десять лет подряд
-
-
с тех пор уже больше 10 лет прошло.
-
-
-
-
с тех пор - с каких? они с InnoDb на RocksDb мигрировали вот в прошлом году. вместо того, чтобы выкинуть mysql и заюзать что-то более подходящее. Что как бы намекает.
-
Вы путаете стандарт диалекта
-
=)) простите, я не знаю что такое "стандарт диалекта", для меня это ортогональные понятия
-
Это намекает, что за ошибки в выборе базы, приходится расплачиваться пристраиванием костылей.
-
Тогда и спор ни о чем
-
-
-
Да в общем не факт что SQL дает такой значимый overhead
-
-
-
намекает это только на одно - они вынуждены жить с выбранной СУБД на старте проекта, так как затраты на переезд в другую БД и разработку под нее будет огромны. Вопрос чисто финансовый) Дешевле лепить костыли)
-
-
-
Вопрос в том насколько станет быстрее
-
-
Вот это новость 😳
-
А что же удобно? 😬
-
Вобщем оргументов не увидел в этой тераде... Пока со своей стороны вижу плюсы в значительно улучшении качества языка запросов, и минусы в потере каких либо фич связанных с группировками. Собственно минусов никто не назвал
-
Был с месяц назад в одной конторе, которая до сих пор тянет FoxPro...
-
-
-
-
-
-
-
интересно, в чём костыль-то? почему, если мы ошиблись, мы тратим время на написание нового движка для стораджа, а не меняем БД полностью
-
этим и плох.
-
Тем, что он без структуры
-
-
-
-
-
-
-
потому что разработкой занимаются люди.
-
-
-
-
У меня на работе тоже пишут очередной Г биллинг на оракле 9, это не значит,, то все в восторге
-
-
был бы yml - те же яйца, только без кавычек по поводу и без, можно было бы поговорить
-
то в профайлере будет полный запрос.
-
Читаемость спорный момент, разбивать на куски запрос никто не отменял
-
-
-
-
-
-
-
-
Это вообще из серии разработки софта, а не работы с БД
-
-
тут соглашусь. если от пользователя БД спрятана за ГУИ и он никогда не пишет запросы, можно хоть msgpack сделать языком запросов
-
-
-
-
-
-
-
-
-
только разработчики потом будут вынуждены научиться читать мсгпак и всё.
-
-
-
Вопрос изначально был отм что нужен SQL . тк работать будут люди. они набирают пальцами SQL который знают. JSON это способ описания объекта а не запроса
-
-
-
-
того, кто будет прятать от юзера язык запросов. вообще, мне непонятно, почему вы считаете, что надо прятать SQL от аналитиков
-
-
-
-
-
-
ещё раз. был бы yml - было бы дерево
-
-
-
-
-
-
-
-
-
-
-
однофигственно, кмк. ладно, чат не про это - интересно продолжить, го в личку
-
читабельность - штука относительная. непечатный синтаксис далеко не всегда способствует читабельности
-
-
-
-
я там запросы ручками писал. я днище, видимо :)
-
кстати для grafana никто clickhouse адаптера еще не сделал?
-
ClickHouse overview dashboard for Grafana - Grafana.net
ClickHouse Database dashboard based on Prometheus
-
-
-
Адаптер это штука позволяющая брать кликхаус как датасорс
-
-
-
Ну оно четко все преобразуется в select ... Where Path in ... And Time > ...
-
-
-
Ну можно через прослойки к обычному граыиту прикрутить
-
-
-
-
Легаси нельзя раз и заменить
-
-
-
-
-
-
-
-
Можно, я думаю маленький конвертер сделать попробовать даже под наши задачи
-
-
-
-
Я больше думаю про отдельную таблицу с текущими тэгами, без истории
-
https://github.com/lomik/carbon-clickhouse вот тут можно было бы как то парсить метрики в нормальные колонки =)GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage
Graphite metrics receiver with ClickHouse as storage - GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage
-
-
-
-
-
-
-
> @BloodJazMan
https://github.com/lomik/carbon-clickhouse вот тут можно было бы как то парсить метрики в нормальные колонки =)
Есть такое желание. Только пока непонятно как это вписать в протокол графита и поддержать во всей цепочке доставки (carbon-c-relay etc)GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storageGraphite metrics receiver with ClickHouse as storage - GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage
-
О! Роман! и вы тут
-
Огромное вам спасибо за go-carbon
-
вы мне прямо сильно жизнь облегчили в свое время
-
=) Ну собственно я могу issue на github открыть
мне видится это дело как набор параметризованных regexp которые просто экстрактят значение атрибута из названия метрики и все -
т..е. эти данные только в конфиге carbon-clickhouse оставиться и все можно будет пробрасывать стандартным образом
-
Оно по скорости вставки вдарит
-
используйте ORM
-
ну тогда не regexp, а wildcards
что нибудь типа такого
[attributes:diamond-cpu]
data-attibuted-table = graphite_attiributed_diamond_cpu
attibute-wildcards= "servers.{host}.cpu.{cpu_name}.{metric_name}" -
Вот все те, кто говорит, что SQL не удобен, вы кроме как с колокльни разработки кастылей и велосипедов в своем софте вообще расматриваете использование БД?
-
-
-
-
-
вот да
-
-
в этом чатике давайте про кликхаус и все что с ним связано
-
-
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
да все равно довольно дорого, т.к. проверку "парсился ли" нужно делать на каждую метрику )
-
-
-
да, я по это и говорю. если нет необходимости тянуть совместимость, с колонками работать гораздо удобнее
-
ну, почему??? графит как тащил через полную metric_name так и тащит... а кому захочется параметризации нормальной, надо делать адаптер для графаны и смотреть уже в графане
-
-
-
-
-
ну экстрактить заданные колонки
для каждого вида путей...
через конфиг
http://metrics20.org/spec/
вот может быть сразу такой ресивер реализовать? -
Вот прям сейчас начали процесс деплоя связки CH+graphite-clickhouse(и прочее)+grafana
-
у меня возник такой вопрос
-
на сколько graphite-clickhouse дает полный набор функций graphite?
Можно там суммировать разные метрики например? -
Экстрактить колонки на каждую метрику это очень и очень дорого с точки зрения ресурсов. Хочется колонки - нужен другой протокол. Metircs 2.0 конечно прекрасная инициатива, но она тоже со своими минусами - например очень многословна и сложна в парсинге (точно также).
-
не дает вообще никаких, нужно брать graphite-api/graphite-web/carbonapi и использовать их
-
-
-
-
а, ну т.е. если graphite-clickhouse+graphite-web 0.9.15, то все будет красиво и полно?
-
да
-
отлично!
-
а горизонтально это все масштабируется?
-
ну учти что оно в статусе что-то уровня pre-alpha
-
никто не проверял
-
ну вот мы потестируем, дадим фидбэк
-
-
можно несколько экземпляров (graphite-clickhouse+graphite-web) развернуть для распределения нагрузки
-
они stateless?
-
-
-
ну будем посмотреть
-
-
вот это не очень понял
-
про оверхэд, что там не так?
-
Можно пооптимизировать код. Наверно
-
Выборка данных из кх - допустим 100мс. Потом оно еще 100 проведет делая доп работу
-
-
там никакого pushdown агрегаций в CH не делается?
-
выгребаются все данные и обрабатываются в graphite-clickhouse?
-
все сложные агрегации делаются вообще на стороне graphite-web. в graphite-clickhouse выгребаются данные и доделывается rollup (домердживает то, что КХ еще не успел). ну еще логика поиска метрик (ракрытие звездочек)
-
понятно, спасибо за консультации
я с graphite как-то не очень работал -
все же питал надежды решениям в стиле metrics2.0 обойтись
-
но сейчас понадобилась функция в которой пользователи моглибы сами форировать некие производные метрики (KPI) на базе основных/базовых счетчиков
-
а такое, хоть в каком-то виде, поддерживается только в graphite (ну и grafana как UI)
-
-
-
+1 к having
-
-
-
-
-
А есть те, кто все еще для мониторинга использует православный munin?
Если есть, то возможно плагин будет полезен: https://github.com/roistat/clickhouse-muninroistat/clickhouse-muninMunin plugin for ClickHouse. Contribute to roistat/clickhouse-munin development by creating an account on GitHub.
-
ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, port: 8123; Xc ��y u}n � v �QCode: 27, e.displayText() = DB::Exception: Cannot parse input: expected \t before: NULL\t1\tNULL q10.0\t1
-
Почему ругается на jdbc setNull?
-
-
Так в jdbc драувере он есть
-
https://clickhouse.yandex/reference_en.html#Distinctive features of ClickHouseClickHouse Documentation | ClickHouse Documentation
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
Т.е. для каждого типа какие-то дефолтные пустые значения вставлять?
-
Там не имлементированные методы исключения брасают
-
А этот нет
-
Получается нужно какие-то данные додумывать при загрузке
-
-
-
А если длинное целое? 0 ?
-
-
Документация 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
-
> Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также 0000-00-00 для дат и 0000-00-00 00:00:00 для дат с временем. NULL-ы не поддерживаются.
-
-
возможно, мейнтейнер просто сам об этом не знал, либо ожидается сделать поддержку нуллов в будущем. в любом случае иначе никак :\
-
Null уже в этом году
-
На каждый запрос создавать prepatedstatement только с ненулевыми колонками?
-
Анализируем все значения котрые хотим вставить, отбираем те которые не содержат пустых значений и перечисляем в insert только те колонки котрые отбрали....
-
Я правильно понимаю, что сейчас, если все реплики шарда distributed-таблицы недоступны, то запись в таблицу продолжает идти, но та часть данных, которая должна была попасть на этот шард, просто теряется, при этом insert не возвращает ошибку?
-
Может есть какой-то механизм fall-back на этот случай?
-
-
The sampling expression (optional) can be any expression. It must also be present in the primary key. The example uses a hash of user IDs to pseudo-randomly disperse data in the table for each CounterID and EventDate. In other words, when using the SAMPLE clause in a query, you get an evenly pseudo-random sample of data for a subset of users.
-
-
-
-
-
-
-
-
-
-
я в основном отталкиваюсь от этого https://groups.google.com/forum/#!searchin/clickhouse/primary$20key%7Csort:relevance/clickhouse/eUrsP30VtSU/903Smz8pAgAJ
-
-
При вставке в Distributed-таблицу, данные пишутся в файловую систему на локальном сервере, а затем вставляются асинхронно. В случае недоступности реплик, данные будут вставлены позже, когда хотя бы одна реплика станет доступна.
Для большего контроля, следует вставлять данные напрямую в шарды, не в Distributed таблицу. -
Ключ сэмплирования имеет смысл только если до него, для каждого значения префикса первичного ключа, есть достаточно большое количество строк.
Для примера, ставить ключ сэмплирования после ts (timestamp с точностью до секунд) не имеет смысла, так как для каждой одной секунды есть мало данных.
При выборе первичного ключа следует иметь ввиду, что он не обязан быть уникальным. То есть, itemId, eventId на конце, скорее всего, бесполезны.
Да, по ссылке на Google Groups нормальное описание. -
-
В кодовой базе хранение и обработка запросов уже отделены. Например, мы недавно сделали (как обещали) программу clickhouse-local, которая позволяет гонять кликхаусный SQL по обычным файлам.
Есть и другие варианты - например, можно поддержать Parquet в качестве формата данных, или наоборот, сделать, чтобы данные из ClickHouse можно было получить в виде RDD для Spark. Не знаю, кто и зачем будет это делать.
Но как отдельная библиотека, хранение не оформлено. -
Тогда ключ сэмплирование перенесите поближе к началу. Например, между eventType и ts. Сэмплирование с sipHash может не особо хорошо работать, так как этот sipHash надо вычислять для выполнения запроса.
А вообще, SAMPLE 0.1 - это синтаксический сахар для условия, примерно такого:
... AND sample_key < uint_max * 0.1
в WHERE. -
-
Да.
-
Спасибо
- 06 December 2016 (138 messages)
-
-
нет
-
-
ограничения есть у типичных отсылальщиков POST
-
Joined.
-
а ты как импортируешь?
-
cat test.csv | clickhouse-client —query="INSERT INTO test(col1, col2, col...) FORMAT CSV";
-
а там нигде лишнего неэкранированного разделителя нету случайно?
-
-
-
надо смотреть - что в файле в том месте, где была последняя вставленная запись. Для начала
-
-
-
-
-
-
хотя даже если без --stacktrace..
❯ clickhouse-client -q "CREATE TABLE test (s String, i Int64) ENGINE = Memory;"
❯ echo -e '"hello",1\n"invalid csv' | clickhouse-client -q 'INSERT INTO test FORMAT CSV'
Code: 27. DB::Exception: Cannot parse input: expected , at end of stream.:
Could not print diagnostic info because two last rows aren't in buffer (rare case)
: (at row 2) -
-
-
-
-
есть по max query size
-
-
-
Так это не лимит POST-а, а лимит парсера SQL. Что как-бы разные вещи. POST-ом я гигабайты заливал
-
и мне таки интересно - что у клиента за запросы, если ему 64К на SQL не хватило
-
-
-
ну в общем да, просто ошибка неинформативная
-
-
очень большой селект, примерно на 1.6МБ
-
http://filonov.livejournal.com/11140.html типа такого? 😊Да ужжжж
Интересно, что именно в php вызывает повреждения мозга у тех, кто на нем пишет? SELECT .... WHERE (xxx BETWEEN start_ip AND end_ip) OR(yyy BETWEEN start_ip AND end_ip) ... и так примерно 5 тысяч раз.
-
не, нормальный, просто автоматически сгенерированный графаной
-
-
-
😊
-
С лимитом POST-запросов чаще натыкаешься с клиентской стороны. Потому как не только лишь все могу отослать 10G POST, мало кто может это сделать.
-
-
-
-
-
-
На моих запросах разницы вообще не было
-
у меня на легких запросах prewhere - 80ms, where - 200ms
-
-
Мои "легкие" в минутах измеряются :)
-
-
У меня - много миллиардов строк статистики
-
Joined.
-
ну у меня пока графит на пол млн метрик и примерно 50 млрд точек
-
-
зависит от селективности условий и распределения данных по блокам. если про какие-то блоки можно быстро понять, что их читать не надо, то запрос ускоряется, если нет, то данные прочитаюся два раза. почему стало медленней в целых 5 раз - это интересно, но без деталей это вряд ли получится определить.
-
help
"ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/hits', '{replica}', EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID), EventTime), 8192)
Путь к таблице в ZooKeeper должен быть разным для каждой реплицируемой таблицы. В том числе, для таблиц на разных шардах, должны быть разные пути.
Что здесь значит "разным для каждой реплицируемой таблицы"? -
ребят, а удаленно можно загузить csv-ник через курл в кликхаус ?
-
-
-
ага, спасибо!
-
просмотрел
-
:(
-
-
-
-
-
-
-
-
Вы зашли в канал чисто поспамить?
-
-
А похоже.
-
-
ClickHouse DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Убрал этого человека из группы.
-
А есть бот которому скармливаешь чела и если много кто пожаловался то его банят вобще в телеграме ?
-
Не знаю.
-
Это не бот, скорее голосовалка.
Но и какое-то подобие бота было. -
-
а как кх к графане подключали?
-
https://github.com/lomik/graphite-clickhouse + carbonapiGitHub - lomik/graphite-clickhouse: Graphite cluster backend with ClickHouse support
Graphite cluster backend with ClickHouse support. Contribute to lomik/graphite-clickhouse development by creating an account on GitHub.
-
-
-
Через слой совместимости с графитом
-
-
Да
-
-
-
-
-
-
Данные два раза не читаются.
-
Первый параметр должен быть разным для каждого шарда. При этом он один для разных реплик одного шарда.
-
Спасибо
-
А как используется имя реплики? То есть для чего?
-
Для самоидентификации видимо. Чтоб с себя не качать
-
-
-
Меня мучает вопрос. Спать не могу. Почему репликация не используется для ускорения выполнения запросов? Грубо говоря, при двух репликах разбить все данные на два куска, на одной реплике обработать один, на другой - другой, результаты смерджить. Как это работает при шардировании, но только без шардирования.
-
-
ну тут можно понять дошли или не дошли
-
прогромировать надо просто
-
и кост модель делать
-
а какие тут кост модели щас
-
-
нет, ты же можешь спросить запрос про старые уже данные
-
Мне в любом случае не повезет тогда, если запрос целиком выполнится на отставшей реплике. Но вообще да, это наверное можно проверить, распределяя, на какой реплике что обработается.
-
Есть настройка max_parallel_replicas. Делает как раз то, что нужно.
Но для консистентности (чтобы получить разные части одного и того же разбиения), эта опция работает только при заданном ключе сэмплирования. -
можно добавить в синтаксис по-тупому фразу аля "at epoch 5 minutes ago"
-
или как там в вертике сделали
-
-
Ух ты, класс! Чтобы это попало в документацию надо мердж-реквест делать? ) И да - отставание реплик при этом не контролируется?
-
-
-
Это наверно опция distributed и кластера. оно вроде как про отставания ниче не знает. хотя может я и не прав
-
Отставание не контролируется. В документацию не спешили писать в виду ограниченности возможности. Она ускоряет далеко не все запросы. Но если будет pull request, то появится.
-
Это не только в опциях надо описывать, а еще и в описании Distributed, где сказано, что запрос идет на одну реплику шарда.
-
оке, там тоже упомяну
-
Спасибо, я могу спать спокойно )
-
В коде слабое описание:
/** Максимальное количество используемых реплик каждого шарда при выполнении запроса */ -
-
конечно, взять базу которая виндоу умеет
-
-
-
я можно вопрос разработчикам? когда ожидается виндоу?
-
о_О кажется, на днях про нее читал что-то, что «секретная» и все такое, успела вылететь из головы уже
-
-
-
Сейчас вне планов.
-
как же вы ранки считаете
-
-
-
мне больше раннинг штуки нужны
-
но партишонг бай ортогонально важно
-
-
Можно добавлять с предупреждениями. Там всё стабильно, но зависит от разбиения данных на блоки, которые пользователь не контролирует.
-
-
У всех заранее сорри, тема "чуть" оф топ, но писать в личку я не решился ;)
Подскажите, а когда стоит ожидать исправление фичи/бага в LogsApi YAM , когда referer в дампе содержит перенос строк ( %0A ) , и получается что dump не валиден для загрузки в CH.
Как я понимаю это из за того что в Yam хранит уже обработанный Referer в CH.
Просто это задерживает публикацию моей следующей статьи о CH, т.к примеры кода в ней будет не рабочим , а на статью о collapse я "забил" ) -
Joined.
-
Алексей, подскажите, а несколько джойнов в одном запросе не поддерживаются ?
-
Напрямую нет, но можно через вложенные подзапросы.
- 07 December 2016 (112 messages)
-
Joined.
-
-
-
-
-
-
-
-
-
-
Но зачем?
-
-
пока нет, потому что другие задачи.
-
доставлять бинари на сервер удобнее. в плане docker image использовать.
-
Почему, кстати?
-
Базы - stateful, а докер как концепция сделан под stateless
-
потому что к данным привязка. пока у вас контейнер без состояния, всё красиво.
-
а кликхаус становится осмысленен когда данных мнооооого
-
-
на самом деле, сам запускальщик runc, не завязан ни на что. под стейтлесс сделаны оркестраторы вокруг докера
-
-
Ну да, докер это тоже не только запускальщик, это вся экосистема
-
ну, людям это непонятно может быть. поэтому лучше говорить, что оркестраторы точат обычно в стейтлесс. а сам docker engine - более менее. Docker swarm - треш, никто в проде не используйте.
-
-
А сам документ о - непонятно зачем когда у любого дистра есть пакеты
-
пакеты обычно outdated. это верно, например, для ubuntu.
-
-
-
можно. Но зачем?
-
Весь самосбор в /opt
-
-
-
толстая нода. крутится стейдж и прод. в проде БД 2.0, не в проде БД 5.0
-
да, и вот это всё даёт мне docker image.
-
-
-
-
Я без оркестраторов не вижу преимуществ докера перед пакетами
-
на ассемблере тоже не очень сложно писать. я с универа помню. в общем, это вопрос религии. Если у вас все разработчики умеют собирать нужные пакеты под нужные дистрибутивы и так, чтобы они зависимостями не подрались, то замечательно.
-
-
https://www.youtube.com/watch?v=XHvh2z0B3JE&t=0s - собственно, посмотрите. В Яндексе +- тоже самое делают. Только porto вместо runc и свой оркестратор. СУБД пока не умеют эффективно, но работают над этим.
-
-
Проблема в оркестрации. Например, у вас аппа без состояния. Контейнер сдох, сервер сдох - новый контейнер спокойно можно запустить на другом сервере. Надо поскейлить - запустите ещё N инстансов.
С СУБД так нельзя. Поэтому это представляет сложность. -
-
я бы не сказал что проще - во всех случаях ты описываешь что поставить и как собрать.
-
проще. Потому что девелопить можно на любимом макбуке.
-
-
-
а для скорости локальные ссдшки )
-
-
-
-
-
-
-
-
ну и не надо заморачиваться про две версии одного пакета в системе.
-
3 петабайта, ага.
-
-
-
а если это был мастер с асинхронной репликацией?
-
-
-
-
-
-
-
-
если у меня нет нутаникса, то нет, другая.
-
-
-
-
-
нет, про докер точно неверное утверждение.
-
-
да, дело в оркестраторе.
-
-
-
-
ну, если читать всю дискуссию, то есть мнение (не моё), что докер без оркестраторов не нужен. И, в принципе, оно не то, чтобы безосновательное
-
-
Вот что точно не нужно - так это использование докера как пакетного менеджера
-
-
-
-
-
-
-
-
пользователям это раскажите :)
-
-
-
Будущее - за менеджерами пакетов контейнеров
-
-
-
-
а чего? есть в чатеге те кто юзают nutanix активно?
-
ясно, спасибо
-
-
-
Joined.
-
А есть какой-нибудь механизм сделать бекап на уровне бд аналогично alter table freeze partition, но чтобы в одном каталоге в shadow получить бекап всех таблиц сразу, а не по одной на каталог?
-
Для всех таблиц сразу такого нет.
-
-
-
-
-
кто-нибудь юзает кликхауз на google cloud?
я тут делаю бенчмарк и получаю странные результаты:
селекты с сервера, на который не идут инсерты - X queries per second
селекты с сервера, на который идут инсерты пачками по 5к строк (3-4 в секунду) - X + 20% queries per second
с чем это может быть связанно? -
-
-
-
- 08 December 2016 (149 messages)
-
Там есть задержка во времени между сбросом данных на диск и последующей их компрессией - возможно в этом все дело. Если лить гигабайты и следить за объемом базы - это очень хорошо заметно.
-
-
-
А скажите, есть ли в CH возможность делать массивы, например, Array(String) внутри Nested-структур?
-
:) CREATE TABLE arrstr (arrays Nested(s1 Array(String), s2 Array(FixedString(8)))) ENGINE = Memory;
Ok. 0 rows in set. Elapsed: 0.114 sec.
:) INSERT INTO arrstr (arrays.s1, arrays.s2) VALUES ([['s1n11', 's1n12'], ['s1n21', 's1n22']], [['s2n11', 's2n12'], [
's2n21', 's2n22']]);
Ok. 0 rows in set. Elapsed: 0.007 sec.
:) SELECT * FROM arrstr;
┌─arrays.s1─────────────────────────────┬─arrays.s2─────────────────────────────────────────────────────┐
│ [['s1n11','s1n12'],['s1n21','s1n22']] │ [['s2n11\0\0\0','s2n12\0\0\0'],['s2n21\0\0\0','s2n22\0\0\0']] │
└───────────────────────────────────────┴───────────────────────────────────────────────────────────────┘
Ok. 1 row in set. Elapsed: 0.009 sec. -
-
Кажется, что да. Но в моём лично кейсе вставка завершается успешно, и всё дальше хорошо, пока не пытаешься сделать select этого поля со вложенным массивом. Вот тогда сервер падает
-
Я использую CollapsingMergeTree
-
*сделать select этого поля
-
-
ЮХУ!
-
Только у меня он просто подвисает, а потом падает, без таких трейсов
-
-
Короче, инсерт успешный, а селект из этого поля рушит сервер
-
Joined.
-
-
-
А у вас воспроизводится на не-in-memory таблице?
-
-
а можно как-нибудь bar'у скормить максимальное значение через агрегатную функцию max() хотя бы через подзапрос?
SELECT date, type, count() cnt, bar(cnt, 0, max(cnt), 50) FROM event GROUP BY date, type;
думал как-то через массивы сделать, но туплю что-то
а, нет, похоже нельзя, раз оно константное должно быть :( -
-
Ниши кликхауса и эластика практически не пересекаются. Это как сравнивать яблоко и чай
-
-
-
-
Разработчикам КХ на заметку — пора уже использовать в качестве основной характеристики их продукта "цену запроса", имеется в виду цену в $$$ :) Потому что про "scales to petabytes" и про "queries in milliseconds" пишет разработчик любой современной базы и поискового движка. Поэтому выбирать наверное уже нужно не просто по производительности, а по цене которой эта производительность достигается.
-
Кстати, из чистого любопытства — этого зверька кто-нибудь пробовал https://eventql.io/?EventQL - The database for large-scale event analytics
EventQL is a distributed, column-oriented database built for large-scale data collection and analytics. It runs super-fast SQL and MapReduce queries.
-
-
Иллюзий про его надежность особых нет (см скрин), но мб кто интересовался продуктом.
-
-
-
-
-
-
Интересно на ком ребята его обкатывали или обкатывают.
-
А насколько надежен сам КХ и стабилен по сравнению с тем же эвент кью эль?
-
ну кликхаус в продакшене в метрике яндексовой с 2013 года что ли
-
-
О! А это вторая киллер фича, которую нужно максимальным кеглем прибить на лендинг — со слов Виктора Тарнавского, КХ у них уже несколько лет в аптайме с каким-то диким кол-вом девяток.
-
а если вернуться к CH и TSDB. Кто какую схему бы можно было замутить в CH для того, чтоб хранить там метрики в стиле http://metrics20.org/?
-
у вас настолько большой графит?
-
2 с лишним миллиона метрик в секунду и 130ТБ виспер файликов без учета отказоустойчивости
-
что-то вроде Nested в Array обернуть? Как хорошо в этом случае будет фильтрация и поиск осуществляться?
-
а вы их умышленно в секунды перевели или вы правда их раз в секунду шлете?
-
это усредненно конечно
-
-
у вас очень большой графит :)
-
возможно у кого-то есть больше, но они не признаются (есть подозрение что такого же масштаба в mail.ru и у гитхаба)
-
мы пишем 2 миллиона в _минуту_ на ноду, но оно в page cache сыплется, так что это мухлеж
-
а в виспере с какой детализацией храниться? секунда?
-
и на каком кластере у вас такое крутится?
-
разной. Есть посекундные, по 10сек, по 60сек, по 5 минут, по 10, по часу, по дню
-
если виспер подкрутить чтобы оно не читал хидер перед каджой записью - вообще хорошо жить можно
-
но не на 2М в секунду :)
-
м... ну мы написали маленькую софтинку на Го которая файлики читает и отает по протобуфу, еще одну софтинку на Го, которая спрашивает сервера и склеивает метрики со всех серверов в один ответ и еще на Го есть переписанный graphite-api
-
а сколько метрик примерно?
-
когда последний раз считал 56млн уникальных названий
-
солидно
-
секрет в том что это примерно 45 серверов без учета репликаций
-
-
ух...
-
-
чтож такое вы там мониторите...
-
-
на одну графит ноду 8 миллионов?
-
нет конечно, на одну ноду больше 150 тысяч в секунду не бывает
-
-
а вот это все как аркиструется при горизонтальном масштабировании?
-
через задницу
-
крутая у вас задница
-
видать железобетонная
-
-
-
-
в общем я под впечатлением...
-
-
-
-
-
почему? размер блока в фс сделать 512 байт, взвинтить vm.dirty_expire_centisecs на значения в десятки минут и вуаля - по 1кб памяти на метрику расходуется
-
-
потому что у нас до начала этого месяца не работал cache из карбон кэша
-
-
-
-
читать из пейджкэша тоже ж можно
-
-
-
-
go-carbon вот прям сейчас на убогий raid5 пишут 2М/минуту на ноду с тюнингом описаным выше и нагрузки ноль, одно ядро занято чуток
-
у нас го-карбон только в этом месяца заменил carbon-cache :)
-
-
-
-
-
ну заводить КХ под это дело радикальный вариант :)
-
-
это как шаг на будущее. Сейчас подчистили текущий технический долг
-
но интересный, опишите потом опыт :)
-
-
-
-
но предупреждали, что там не все так радужно
-
поидее если писать в память, то не вижу почему оно не может выжимать миллионы в секунду, все упрется в page cache
-
везде свои проблемы, вопрос в том какие и как жить
-
память конечная, сам виспер не очень оптимальный
-
-
-
-
если честно, мне подход к организации метрик в стиле graphite после openTSDB и Ko, как-то не очень приживается
-
нее, я про go-carbon конечно. нет не умрет, у него в памяти ничего висеть не будет
-
на OpenTSDB столкьо писать сложно
-
я вот думаю, что более прогрессивно было бы попробовать на CH что-то более нативное сделать
-
я не про сам openTSDB
-
расход памятьи- 1кб/метрику независимо от количества обновлений
-
у нас поверх графита есть поиск по тэгам :)
-
-
а про то, как логически определены метрики
-
ну вот...
-
-
-
плохо, что тут надо структуру жестко определять и документировать
-
иначе бошку сломаешь догадываться что же хотели сказать этой метрикой
-
или я пока не привык еще...
-
-
-
ну я его там в бранче раскочегаривал до 1.4m/s
-
-
тока смысла в этом мало - все равно go-carbon упирается в виспер
-
-
-
> @rossmohax
поидее если писать в память
В какую память? текущие версии штук под КХ не держат в памяти вообще ничего -
в page cache, оно почти бесплатно получается
-
там даже без кеша все ок - последовательная запись в файлик
-
я КХ не смотрел, но если запись последовательная, значит чтение рандомное :) хотя учитывая что пишут сильно больше чем читают, то может оно и к лучшему
-
чтение близко к рандомному для совсем свежих данных. чем данные становятся старше, тем послевательнее становится их чтение
-
оно как в leveldb их перепаковывает по ключу?
-
Создавать массивы в nested-структурах нельзя. То, что CH позволяет их создавать - бага. https://github.com/yandex/ClickHouse/issues/193 и https://github.com/yandex/ClickHouse/issues/234 (вероятно, что вторая ваша и есть)Segmentation fault in server while executing "select * from test" (array in nested struct) · Issue #193 · yandex/ClickHouse
Can be reproduced in docker and in standalone installation. Steps to reproduce: > docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 yandex/clickhouse-server 7770685e3eb27027...
-
грубо говоря оно оперирует сортированными списками и периодическти мерджит несколько мелких в более крупные
-
А в паблике нет вашего graphite-api на go?
-
есть, но оно на остальной наш стек завязано )
-
go-graphite/carbonapi
carbonapi - API server for github.com/go-graphite/carbonzipper
-
-
-
Решили сделать митап для тех, кто участвует в разработке ClickHouse или открытых проектов, которые с ним работают: https://events.yandex.ru/events/meetings/14-dec-2016/ClickHouse Meetup, 14 декабря 2016, Москва — События Яндекса
События — вся информация о конференциях, школах, семинарах и других мероприятиях Яндекса — как прошедших, так и предстоящих.
-
-
-
-
Небольшой оффтопик не про КХ, но про историю инструментов BI -- научная статья, описывающая подход к анализу данных и прототип софтины, на базе который была разработана Tableau: http://graphics.stanford.edu/papers/polaris/polaris.pdf
- 09 December 2016 (32 messages)
-
-
👍
-
-
-
Is there any way to view a release notes? · Issue #156 · yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
а как-нибудь можно поставить Кликхаус на Убунту 16.04
при выполнении sudo apt-get install clickhouse-server-base
у меня ошибка
clickhouse-server-base : Depends: libc6 (< 2.20) but 2.23-0ubuntu5 is to be installed
E: Unable to correct problems, you have held broken packages. -
?
-
libc6 не заменишь же
-
собери пакет под 16.04 и будет тебе счастье
-
можешь поправить зависимость и рассказать нам что сломалось потом
-
оказывается, в этом гайде https://clickhouse.yandex/#download надо было вместо
deb http://repo.yandex.ru/clickhouse/trusty
прописать deb http://repo.yandex.ru/clickhouse/xenialClickHouse DBMSClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
и все станет хорошо
-
точнее встанет хорошо
-
Joined.
-
а можно в CH как-то разбить значения поля по диапазонам (размеры файлов) и затем посчитать для них статистику(это понятно что можно)? или разбивать надо руками?
-
-
-
-
-
как-то странно что этот чат у меня обновляется только в мобильном telegram-клиенте
-
неа
> JSONEachRow
> При этом, в качестве значений по умолчанию используются нули, пустые строки и не поддерживаются сложные значения по умолчанию, которые могут быть заданы в таблице. -
эквивалент width_bucket изображается легко, произвольную сетку через multiIf тоже можно сделать, хоть и длинновато получится. встроенных функций по-моему нет, для обоих случаев.
-
-
-
или через CASE/multiIf, да
SELECT CASE
WHEN size BETWEEN 0 AND 1024 THEN '0-1 KB'
WHEN size BETWEEN 1024+1 AND 1024*10 THEN '1-10 KB'
WHEN size BETWEEN 1024*10+1 AND 1024*100 THEN '10-100 KB'
WHEN size BETWEEN 1024*100+1 AND 1024*200 THEN '100-200 KB'
ELSE 'too large'
END AS size_,
count(),
sum(size)
FROM files
GROUP BY size_ -
count(case when f1=1 then 1 end)
-
-
Вопрос к тем, кто использует кликхаус в докере, как вы решаете проблему с логами? По дефолту сервер в контейнере запускается без --daemon, которая переключает stdout на логфайлы из конфига, получается достать логи можно только через docker logs, и как организовать их ротацию и хранение непонятно. А если добавить --daemon в строчку запуска сервера, то контейнер не взлетает без каких-либо сообщений.
-
-
Спасибо, изучу вопрос)
-
Configure logging drivers
Configure logging driver.
-
Joined.
- 11 December 2016 (24 messages)
-
Joined.
-
Благодаря сообществу, guiclickhouse.smi2.ru стал поддерживать английский язык, спасибо a5i за pull request )
-
-
thx, поправил )
-
Привет
-
-
А уже есть слой совместимости кликхауса с графаной?
-
Насколько я понимаю - агрегация в бэкграунде есть
-
https://github.com/lomik/graphite-clickhouse + carbonapiGitHub - lomik/graphite-clickhouse: Graphite cluster backend with ClickHouse support
Graphite cluster backend with ClickHouse support. Contribute to lomik/graphite-clickhouse development by creating an account on GitHub.
-
-
-
-
-
-
Угу, все ясно, спасибо
-
Без гоулэнга не обошлось :(
-
а ты его внезапно разлюбил?
-
Угу
-
Не то чтобы совсем внезапно, но да
-
чего так?
-
Я на нем довольно долго писал за деньги
-
so, what is clickhouse bad at, in which cases it's is definitely a very bad choice?
-
Да там весь код простой довольно
-
- 12 December 2016 (15 messages)
-
1. OLTP workload.
2. key-value workload: high amount of very simple queries.
3. Using as document/BLOB store for unstructured data. -
Митап по ClickHouse уже послезавтра.
На этот раз будем говорить про перспективы развития продукта.
Записывайтесь, если вы уже контрибъютор или если вы хотите им стать.
https://events.yandex.ru/events/meetings/14-dec-2016/ClickHouse Meetup, 14 декабря 2016, Москва — События ЯндексаСобытия — вся информация о конференциях, школах, семинарах и других мероприятиях Яндекса — как прошедших, так и предстоящих.
-
Видео будет с митапа?
-
-
-
Hello, clickhouse join is a hash join or sort merge join? And why so?
-
спасибо, большое. сделал ту выборку, что хотел :)
-
аа, спасибо!
-
а можно еще глупый вопрос по поводу работы с partition'ами?
понадобилось исправить данные в таблице mergetree за декабрь.
я могу сделать так, без DROP или ATTACH'а?
ALTER TABLE corrupted_table DETACH PARTITION 201612;
INSERT INTO corrupted_table SELECT * FROM correct_table;
(в correct_table данные только за декабрь, конечно) -
Вроде да
-
Наверное забыли добавить. Значит можно улучшить.
-
-
Для агрегатных функций, кстати, уже сделали.
-
Ещё вспомнил, что функции преобразования UUID, а также hex/unhex (но только для строк) являются монотонными. Это используется для анализа индекса. Если x в первичном ключе и функция f монотонна на каком-то диапазоне, то индекс может работать, даже если написать условие на f(x). См. IFunction::getMonotonicityForRange и примеры в коде... Вот простейший пример, как обозначить, что функция везде монотонна:
Monotonicity getMonotonicityForRange(const IDataType & type, const Field & left, const Field & right) const override
{
return { true };
} -
It is hash join. Right part of join should be less than memory. Hash join is faster but require enough memory.
- 13 December 2016 (46 messages)
-
Thanks
-
-
-
-
-
кстати, для форматов тоже алиасы было бы удобно :-[
"TSV" вместо "TabSeparated", например -
-
-
-
Пробовал собрать clickhouse на OSX по инструкции. Наткнулся на то что на стадии cmake требуется libiconv.a, пофиксил это (пока только у себя). Но оно всё равно сломалось при сборке на iconv. Ковыряю дальше. Сейчас если не соберется, скину ошибку, ок?
-
(libiconv.a не собирается в рекомендованной brew кеге, так что пришлось её пропатчить)
-
-
-
-
Build fails on OS X 10.11.5 (commit 64380109) · Issue #232 · yandex/ClickHouse
I followed the latest build_osx.md guide. ❯ brew list --versions | egrep '(cmake|gcc|boost|icu4c|mysql|openssl|unixodbc|glib|libtool|gettext|libiconv|zlib|readline)' | sort boost 1.62.0 cmake 3.7.1...
-
-
-
если чо, стабильная версия 1.1.54074 у меня в макоси вообще без проблем скомпилилась
есть скомпиленные бинарники для нескольких версий:
https://github.com/excitoon/ClickHouse/releases/download/1.1.54059/clickhouse-client-1.1.54059.tar.gz
https://github.com/hatarist/homebrew-clickhouse/releases/download/1.1.54074/clickhouse-1.1.54074.tar.gz
но если excitoon еще (вроде бы) сотрудник яндекса, то я уже нет :) -
-
ага, валится всё равно. я могу так-то и в докере запустить. спасибо за ссылки на сборки, хотя бы клиента возьму
-
-
так там еще и brew!
-
поставил себе нативного клиента, спасибо
-
range() как-то странно себя ведет иногда.
я ему подаю аргументом toUInt32(max_value - min_value), а получаю ошибку
> A call to function range would produce 413329556 array elements, which is greater than the allowed maximum of 100000000
отследить, какое именно число заставляет его так себя вести, еще не получилось
это можно как-нибудь исправить? (версия сервера 1.1.54083) -
-
-
-
из яндекса кто-то есть в эфире?
-
-
Есть, да.
-
Тут есть сам Алексей :)
-
У яндекса же есть какая - то поддержка стартапов? https://vc.ru/n/ya-local эти говорят, что есть. Или это ложь и промоакция?
вопрос оффтоповый (и я прошу прощения за это), но ваш pr отдел видимо слишком сильно загружен. хз.«Яндекс» начал тестировать гиперлокальные приложения о районных событиях Москвы«Яндекс» запустил пилотный проект гиперлокальных приложений для жителей конкретных районов Москвы, пишет The Village. Первым экспериментальным сервисом стало приложение для iPhone «В Хамовниках». Аналогичный проект сейчас развивает правительство Москвы.
-
кто "эти"? в твоей статье ни слова об этом
-
Во-первых, действительно совсем не по теме
-
Во-вторых, в статье ничего нет про поддержку стартапов
-
Я ничего не знаю про поддержку стартапов Яндексом и ни разу такого не встречал, кроме Startup Camp
-
который закопали
-
А кто-нибудь знает когда будет готов issue с решардингом? 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...
-
Можешь добавить уже сейчас, см. FormatFactory.cpp.
Только напиши в коментариях, что это синоним, чтобы потом никто не запутался. -
Если клиент/сервер собирали сами, то может быть проблема с номером версии. Можно обновить клиент до последней версии и посмотреть, что всё будет Ок.
-
супер, спасибо!
"BlockTabSeparated" -> "BlockTSV" или "TSVBlock"?
мне кажется, второе логичнее -
-
Давай для Block - ничего не добавлять.
-
Дело в том, что этот формат сделан давно в тестовых целях (проверить, как отличается коэффициент сжатия) и вообще всерьёз не используется.
-
ребят, а у кого слайды под рукой есть с предыдущего митапа ? -) на роадмап хочется еще разок глянуть
-
В настройках чата - Photos and Videos
- 14 December 2016 (217 messages)
-
/stat@combot
-
=(
-
Добавьте @combot. Он статистику по сообщениям показывает)
-
Подскажите пожалуйста насчет toStringCutToZero. в доке написано, что она "возвращает String, удаляя нулевые байты с конца строки."
Но toStringCutToZero('\0test\0') возвращает в итоге пустую строку, удаляя, судя по всему, всё после первого же встретившегося NUL-байта.
я надеялся получить '\0test' на выходе, с честным отрезанием подряд идущих \0 только с правой части строки. -
-
-
Описание корректное но неполное. Концом z-строки очевидно считается первый встретившийся \0
-
-
У бинарных данных обычно не требуется преобразовывать Z-string в string
-
-
И если вы с бинарными данными работаете как с z-string - кто-то сам себе злобный буратино
-
-
а CutToZero не смутила? :)
-
-
Joined.
-
/stat@combot
-
-
-
Кстати об аналитике. Тут проскакивало про поддержку clickhouse в redash. Кто-нить пробовал? Я попробовал кучу разных ревизий (после той, в которой вмерджили КХ). Везде все разломано (ошибки js, неработающий функционал и тд.). Может только у меня такие проблемы?
-
-
ну там всего два дня назад последник комит по кликсахус в redash был =)
там автор пуллреквеста парень из Sports.ru
попробуй у него спросить что и как? -
-
-
запустил таки redash. взял последнюю стабильную версию (v0.12.0.b2449) и натянул на нее кликхаус. так работает вроде
-
-
redash это вроде aribnb superset или вроде metabase
-
-
-
-
он научился SQL делать а не только druid
-
-
Joined.
-
-
Joined.
-
друзья, привет!
-
намучались с ELK для логов и ивентов всяких. стоит пробовать кликхаус?
-
ага.
а с чем намучались-то? -
у нас пока немного данных и ивентов, но уже сейчас тяжело это всё мейнтейнить
-
ну, эластик плох как база
-
+ в него не вмещается много данных, приходится удалять старые индексы, либо переносить их на другие ноды, либо просто закрывать
-
хз, может мы его готовим просто плохо, но пока что от него столько боли. И так понятно, что у больших ребят для наших целей (логи + бизнес-ивенты, которые плохо кладутся в rdbms) kafka + че-нить с хадупом или кассандрой какой
-
на хайлоаде был на докладе про кликхаус, вот думаю попробовать
-
(у меня сейчас кластер yellow просто, сил нет больше)
-
а какие объемы в терабайтах и записях?
-
немного совсем, мы далеко не всё собиарем, что можем. у нас нет терабайтов)
-
записей немного, 300-400 документов в секунду
-
но нам бы хотелось больше
-
А что такое "документ" в вашем случае?
-
json документик с информацией: логом, ивентом
-
но мы быстро растем, примерно в 3 раза за год
-
ну как быстро, скорее, прогнозируемо :)
-
так же у нас в пейлоаде могут быть стектрейсы, например
-
-
-
ну кстати парсить может даже необязательно, благо JSONEachRow есть
-
мы и в ELK так льём пока.
-
-
а кстати к logstash никто плагин для кликхауса не пишет?
-
да, у нас есть часть строк типизированных, согласен
-
но если эксепшен, то там лютый стектрейс может быть
-
а если их много, то ухх
-
-
я вот думаю, может велосипед не изобретать, а просто все ивенты аккуратно класть в mysql какой-нибудь, мы пока по нагрузке точно влезем в одну машину
-
а потом в эластик забирать и там уже копать логи
-
тут вопрос в том, использовать ли mysql или сразу тяжелой артиллерией - кассандрой какой или кликхаусом
-
А если отделить мух от котлет? логи отдельно, трейсы отдельно?
-
это надо всю систему переписать тогда. в принципе, норм идея тоже
-
еще у меня плохо сделано то, что данные льются прямо в эластик, а он крайне плох в этом плане
-
щас обновимся на es 5.1, сделаю две ingest ноды
-
селектов много или в основном инсерты?
-
инсерты; селекты тока от людей, их немного
-
и мониторинга
-
мускуль как промежуточная стораж?
-
да. просто в эластике данные хранить очень больно
-
мы сейчас переходим со связки mysql + elasticsearch на clickhouse
идея была такая-же - первичку пишем в mysql (к elasticsearch нет доверия в качетсве первичного хранилища), там селектов не делаем, только перекладываем в elastic батчами.
а вот elastic используем только для аналитических выборок
но даже для этого с ним возникают регулярные проблемы (сейчас статус кластера - red). причем у нас тоже не очень большие объемы (50gb данных, причем оно живет на машинке с 64 гб оперативки). возможно мы его не умеем нормально готовить, но по ощущениям - очень капризный продукт -
о, обнимемся, друг!!
-
а 64гб как распределены? хип у эластика 31гб?
-
у вас дефолт или вы настраивали? для одной машины можно убрать реплика шарды
-
но вообще зависит от количества шардов на эти 50гб
-
-
на одной машине держать его это антипаттерн, кстати. а на трёх это БОЛЬ
-
-
хип нельзя ставить больше 31, иначе оно переходит на неправильные поинтеры : D
-
-
так, отлично, вот хорошо, что я к вам пришел
-
он у вас будет yellow всегда, пока реплика шарды не будут заассайнены на другие ноды
-
на 64гб памяти можно три ноды запустить по 7гб хипа каждая
-
-
да
-
двух же достаточно, зачем три
-
ну да, на одной тачке сплит брейна не будет
-
тоже верно
-
так-то и одной хватит на 64гб.
-
рекомендуется запускать несколько нод на машинах там с 64гб+ памяти, например, 128 - две ноды по 31гб хипа
-
просто надо перенастроить под кластер без реплик, заодно и шардов больше влезет, кстати
-
-
абсолютно согласен
-
короче эластик классный поиск, но как база он ужасающ. ок, попробуем кликхаус тогда
-
-
как будете переливать из мускуля в кликхаус?
-
хранить там вечно? или подчищать перенесенные данные клх?
-
а кликхаус же хорош для хранения?
-
-
а как кхе-кхе ETL из кликхауса в s3?
-
есть че-то готовое или тулзу писать?
-
у эластика круто сделаны снапшоты, кстати. вот этого не хватает в старых базах
-
кнопку нажал, индексы улетели на s3
-
-
запрос написал, из s3 индекс вернул
-
но там фишка в том, что в эластике нельзя данные держать, там объем ограничен
-
Добрый вечер, мы подготовили вторую статью про ClickHouse для публикации на Хабре, мы еще прогоним статью через наших “орфограторов и пунктуаторов”, и попросим нашего филолога поправить русский язык, но техническую часть оформили:
https://github.com/smi2/phpClickHouse/blob/master/doc/02_article_cluster.md
Будем рады предварительной критике )smi2/phpClickHousephpClickHouse - php ClickHouse wrapper
-
блин, в кликхаусе зукипер, вот это подстава
-
-
😃
-
А вам непременно кластер нужен?
-
не, думаю, одной машины хватит
-
Тогда зукипер нинужын
-
-
-
-
^
-
вот-вот, мы для сервисов консул собираемся
-
-
-
ну понятно почему зк, я так понял, внутри яндекса везде zk
-
так что это если только мы с вами запилим альтернативы
-
-
но мы ведь ставим кликхаус чтобы не надо было
-
Для твоей одиночной машины оно и не надо
-
а как мониторить кликхаус? есть для prometheus чо?
-
о, неплохо
-
А в качестве хранения clickhouse - вполне себе ок. Я пробовал заливать суточный срез netflow - результаты более чем устроили.
-
-
-
-
поидее без zk не будет работать дедупликация вставляемых данных. когда послал пачку данных, упал в процессе, послал снова
-
-
-
-
Вообще, в Яндексе не только zk. Есть и решения по-лучше но они не в оупесорсе пока.
А для своих целей zk в кликхаусе вполне норм. У вас с ним какие-то проблемы? -
-
консенсус в кластере же.
-
-
решения получше в смысле распределенные менеджеры конфигураций?
-
у нас еластик, щас правда еще разработка, но с имитацией реальной нагрузки. база с кликами, каждый клик - какие-то распарсенные данные + неиндексируемые хедеры, в сумме примерно 1 клик = 1кб, судя по объемам на винте. щас база весит 2 тб, реальная нагрузка будет 50-100\с, но для тестов делали и 2к рпс. 3 сервака под это дело, с репликацией и шардингом, пока никакой боли не видно особой
-
-
за 32 гб JVM начинает декомпрессить указатели, если вы этим специально не занимались, то это может наоборот ухудшить вам производительность. Точных данных, конечно, ни у кого нет, но rule of thumb за 32 не выходить
-
-
я там спутал(сейчас проверил). 57гб - это сколько сейчас elastic жрет памяти
cat /proc/11211/status | grep VmSize
VmSize: 56113512 kB
хип там другой: -Xmx12Gb
я повторюсь - скорее всего мы его плохо готовим. на селектах он проблем не вызывает, проблемы иногда возникают в обслуживании (бывало такое что он не поднимался после рестарта, или поднимался минут 20). я уверен что подкрутив параметры или как-то разнеся на ноды это может решиться. просто по впечатлениям которые получили - работать с ним сложно -
-
-
-
-
давай
-
Если вам просто собирать логи - попробуйте graylog, это обертка над elastic, которая сделает бОльшую часть за вас и позволит тупо скидывать логи в AMQP, особо не беспокоясь за время доставки. Я могу какие-то еще советы дать в личной беседе позже, но я на самом деле только теоретический сварщик; т.к. тут еще пара человек отписалась, возможно, имеет смысл действительно создать конфу.
-
ElasticSearch memory problems caused by mapping issues.
Heap usage issues with ElasticSearch caused by mapping issues caused a cluster to crash, and how we managed to fix it.
-
-
Никто с таким не сталкивался?
-
График Cpu utilization
-
-
В CLH 6 таблиц
-
в две из них идет запись примерно 1600 запросов/сек (пиковые значения)
-
все таблицы - движок MergeTree
-
где непонятно? поясню
-
ваще вроде бы рекомендовали поменьше запросов в секунду
-
-
-
-
попробуем, спасибо!
-
-
· GitHub
vavrusa has 60 repositories available. Follow their code on GitHub.
-
-
кто знает я еще успею поговорить ?
-
на таких объемах явно делаете что-то не так. сколько всего документов в индексе и размер базы?
-
у нас очень много индексов по некоторым причинам
-
возможно, проблема в этом
-
"active_primary_shards" : 6051,
"active_shards" : 12042, -
-
заставили?
-
-
Joined.
-
-
Joined.
-
Joined.
-
-
Найс, спасибо
-
Joined.
-
Joined.
-
-
И как у Александра дела — закончил он миграцию с Вертики на КХ?
-
Analytic Database, OLAP, ColumnStore | MariaDB
MariaDB ColumnStore enables real-time business intelligence and analytics. Scalable performance and costs reduction with single user interface for OLAP and OLTP.
-
http://greenplum.org/ еще есть на основе постгреса
-
Мужчина из крупной мебельной компании задаёт жёсткие вопросы )
-
А что случилось с DELETE? Его сломали?
-
-
-
так на highload же рассказывал, вот только там много НО было
-
роадмап скромный, были же еще апдейты заявлены, оконные функции )
-
вообще, до сих пор вроде видео нет, а очень бы хотелось посмотреть
-
Joined.
-
Видео с предыдущего митапа технически готово. Должны скоро выложить наружу.
-
спасибо вам за все! :3
-
-
Пока нет, по не зависящим от Кликхауса причинам.
-
Эти "но" для неофитов. Они усложняют работу с КХ для людей, привыкших к полноценным RDBMS. Приходится изобретать. Но непреодолимых "но" как не было, так и нет
-
Чем можно объяснить, что фулскан селект (в запросе нет where) по полям, которых нет в ключе, выполняется дольше на более жирном ключе, чем на коротком, хотя по данным из гугл.групс длина ключа тут вообще никак не должна влиять?
Есть две одинаковые по данным таблицы, разница только в ключе - в первой он (advertiser_id, date, sample_id), во второй - (advertiser_id, sample_id). Запрос выглядит так: select argMax(pad_id, u), max(u) from (select pad_id, uniq(user_id) as u from events group by pad_id). На первой таблице он выполняется за 29 сек, на второй - за 20. Кэш прогрет, беру времена самого быстрого из трех запросов, после первого запроса чтения с диска уже не производится. Аналогичные результаты и в случае, если pad_id заменить здесь на advertiser_id, т.е. использовать поле из ключа, но только первое. -
Данные занимают одинаковый размер на диске?
Возможно (хотя и маловероятно), что после сортировки по одному из вариантов ключа, данные сжались лучше.
Таблицы на одном сервере? Насколько отличается разбиение на "куски": SELECT * FROM system.parts WHERE active AND table = '...' -
Данные занимают разный размер. Таблица с более жирным ключом занимает 161 Гб, с коротким - 81 Гб. OPTIMIZE TABLE делал обеим таблицам. Разница выглядит слишком большой, а полей в таблице много. Загляну-ка, что там внутри.
Таблицы на одном сервере.
В каждой упомянутый селект выдает по одной записи (по одной партиции), данных там неделя, лежат в пределах одного месяца. -
В данных странное - колонки advertiser_id одинакового размера, а вот все остальные колонки в первой жирной таблице раза в два больше, чем во второй.
-
Особенно sample_id.bin отличается - 27450М против 4777M.
-
А date.bin - единственное поле, которое в первой таблице на порядок меньше, чем во второй - видимо, как раз за счет отсортированности в ключе.
-
Данные в таблицах реально одинаковые или разные?
Количество строк, хотя бы. -
Данные одинаковые. Обе таблицы наливались через INSERT into SELECT * FROM - из третьей таблицы. Количество строк одинаково, все запросы выдают одинаковые результаты.
-
Еще интересный, с моей точки зрения, момент, что изначально у меня была таблица на 1 день, и занимала она 20 Гб. Я ее размножил в 7 раз, делая 7 раз в другую таблицу с идентичным описанием запросом insert from (select ...) из исходной, где при селекте к timestamp прибавлял N * 86400, и полученная таблица стала занимать 192 Гб (сама, после всех мерджей, и такой же размер остался после OPTIMIZE TABLE), т.е. она выросла более, чем в 7 раз.
-
В первом случае, если sample_id - довольно тяжёлый столбец, то он лучше сожмётся в случае ключа
(advertiser_id, sample_id)
чем
(advertiser_id, date, sample_id)
из-за более локального расположения. -
Здесь возможно, если данные почему-то оказались больше перемешаны для каждого фиксированного значения первичного ключа. То есть, сжатие всё объясняет. Но на реальных кейсах такое поведение встречается редко.
-
Вероятно, это может все объяснить. Спасибо.
- 15 December 2016 (62 messages)
-
Чем вам zk не нравится то всем?
-
Всерьёз спрашиваю
-
ZK в кликхаусе много для чего. Leader election, распределённый транзакционный kv, всякие listeners
-
У нас в Метрике огромные zk и особл проблем с ними нет
-
Немного неудобно, это правда, свои проблемы есть
-
Но надежность как у гаечного ключа хорошего
-
-
Устанавливается тяжело. И неудобно, да. И религиозные соображения - из исходников его трудно собрать (на грани невозможного).
-
Витя, насколько я понял zk сложнее настроить у некоторых с этим проблемы. Просили даже показать как вы в метрике его используете, с какими опциями.
-
У нас тоже никаких проблем с ZK. Тонкости есть, скажем, cross-dc, но сам ZK работает замечательно
-
ну наверное проблема в том, что он не модный не молодежный
-
вот если бы на GO
-
ну крайняк на Rust, то может быть
-
у меня связка ZK+Kafka+Flink+ES молотит > 15000 документов в секунду
-
на 3-ех узлах невыдающихся
-
Flink сам консьюмит с кафки? У него нормально с ребалансингом и коммитами?
-
Александр, вы, оказывается, уже в этом чатике! А какой tool используют ваши аналитики для собственного ad hoc анализа данных в КХ? Они освоили его SQL?
-
Кстати о птичках — на zk работает кластеризация вполне коммерческого софта — Tableau Server. Но zk там хорошо скрыт под капотом, практически не требует администрирования. Так что наверное дело не в молодежности, а в необходимости разбираться в дополнительной софтине с собственной логикой и скелетами в шкафу. https://onlinehelp.tableau.com/current/server/en-us/server_process_coordination.htm #tableau
-
Да сам. Пока проблем не замечали в этой части.
-
> @roman_kolchin
Александр, вы, оказывается, уже в этом чатике! А какой tool используют ваши аналитики для собственного ad hoc анализа данных в КХ? Они освоили его SQL?
У нас собственный middleware (на Scala), который генерирует SQL запросы. Его пришлось полностью переписать под КХ, чтобы заменить обычные SQL-джойны на вложенные и словари. -
Спасибо. Он у вас чисто графический? График -> SQL -> КХ?
-
Нет, больше как раз таблицы. middleware выдает клиенту json или csv (несколько форматов), который дальше используется UIем или напрямую другими системами
-
Графики тоже, конечно, можно построить, но это уже мелочи
-
А каким образом клиенты запросы формируют? У вас есть какой-то птичий язык для этих целей?
-
Или вручную заранее настроенные sql запросы, которые зашиты в middleware?
-
Ну можно скзать, что птичий язык. Есть API, через который передаются набор измерений, метрик, фильтров и проч
-
Если Scala/JVM, то olap4j случайно не используете?
-
Нет, все самописное
-
Молодцы вы. А я все мечтаю, что MDX когда-нибудь над КХ появится :) Через Mondrian хотя бы, но с блэкджеком, словарями и использованием массивов в запросах чтоб все очень быстро :)
-
Вчера на митапе звучало предложение об MDX. Но это после нормальных джойнов
-
Очень интересно! Кто-то уже пытается сделать? Или это был запрос к разработчикам КХ?
-
Я изучал этот вопрос _теоретически_ — на первый взгляд сейчас уже всего хватает (словари + словарные функции + массивы), чтобы сделать эффективную трансляцию. Эффективную — в смысле трансляции развезистой клюквы большого mdx-запроса в единственный однопроходный запрос к базе, без лишних union'ов. Но транслятор нужен именно под синтаксис КХ.
-
Join'ы не помогут сами по себе. Синтаксически мб и заработает, но лагать будет дико из-за большого количества вложенных запросов и кучи union'ов.
-
Это был вопрос к Яндексу. Странслировать MDX в CH-SQL (назовем это так) не должно быть слишком сложно
-
Вопрос бюджета времени :) У меня его нет, к сожалению.
-
Это тоже один из вопросов, которые обсуждали :) Все просят Яндекс, сделайте то, сделайте это, но мало кто контрибьютит сам
-
Посмотрите, вот интересный продукт: https://github.com/Wondersoft/olaper
Автор говорит, что есть желание сделать интеграцию с ClickHouse.Wondersoft/olaperXML/A engine for real-time OLAP analytics. Contribute to Wondersoft/olaper development by creating an account on GitHub.
-
С++ сложно. Чтобы контрибьютить кто-то должен на нем писать и одновременно решать задачи анализа в рамках своей работы или долгоиграющего хобби :)
-
Я общался с ним на прошлом митапе. В тои числе уговаривал сделать трансляцию :)
-
Насколько я его понимаю, ему нужен клиент, под которого это можно изначально сделать, а потом отдать всем. Так как проект не самый простой, а ресурсов работать забесплатно у его компании нет.
-
Кстати, если к КХ появится интерфейс XMLA (то, что дает olaper), то после этого с помощью http://www.arquery.com/ArqueryXMLAConnector можно будет работать с КХ из сводных таблиц Excel.Arquery ~ XMLA Connector
An open-source implementation of the ODBO standard for XMLA data sources.
-
Это всегда ключевое условие — вопрос и финансирования ну и отладки на реальной задаче. Разработчик olaper'а использует его в своей компании в качестве middleware под Saiku или чем-то подобным. Но с его же слов там реализован минимальный набор лексики MDX. Поэтому olaper нужно будет сильно допиливать не только для поддержки КХ, но и для увеличения возможностей MDX.
-
А в вашей конторе не нужен такой olaper? Как я понимаю, Алексей (разработчик olaper'а) — ваш бывший коллега :) Договоритесь :)
-
Нет, нам не нужен, мы не используем MDX
-
-
Пока там все кривовато и в каждой ревизии что-то может не работать. Я себе оставил коммит после мержа поддержки clickhouse на время фиксов. Полностью туда мы перейдем после появления функционала склейки запросов из разных источников. )
-
-
Есть незадокументировнный способ :) Но раскрытие незадокументированных возможностей -- это почетная обязанность Алексея
-
мы для uuid-ов воткнули две строчки, которые превращают uuid в FixedString(16) и обратно
-
но вот для primary key — эт нет
-
Можно использовать complex_key-словари. Они поддерживают произвольные типы ключей.
Словари по составному ключу:
Конфиг словаря с составным ключом отличается двумя вещами:
В качестве layout указывается complex_key_hashed или complex_key_cache.
Указывается несколько атрибутов в structure/key.
Пример:
<layout>
<complex_key_hashed />
</layout>
<structure>
<key>
<attribute>
<name>uid</name>
<type>UInt64</type>
</attribute>
<attribute>
<name>order_id</name>
<type>UInt32</type>
</attribute>
</key>
<attribute>
<name>has_access</name>
<type>UInt8</type>
<null_value>0</null_value>
</attribute>
</structure>
Для использования словаря с составным ключём, в функции для работы со словарями, в качестве аргумента-ключа передаётся кортеж.
Пример: dictGetString('dict', 'attr', (k1, k2)).
В качестве элементов ключа, поддерживаются произвольные типы данных (в том числе, строки).
Не смотря на название, complex_key_-словарь может иметь и один компонент в качестве ключа. То есть, не составной ключ.
При этом, в отличие от обычных словарей, этот ключ может иметь любой тип.
В этом случае, в функции для работы со словарями, нужно передавать кортеж из одного элемента.
Пример: dictGetString('dict', 'attr', tuple(k)).
- как видно, для описания кортежа из одного элемента, используется функция tuple.
Для типов UInt32 и подобных, я не рекомендую использовать complex_-словари, так как это будет менее эффективно, чем обычные.
А вот для типа String или составного - вполне. -
Подскажите, а как можно посчитать median() в CollapsingMergeTree без использования модификатора FINAL ?
-
Спасибо! Но все-таки guid является не строкой, а отдельным типом данных (да и места меньше занимает). Планируется ли их полноценная поддержка?
-
Как отдельного типа данных - нет. Но недавно добавили возможность удобного преобразования из бинарного вида FixedString(16) в текст и обратно.
-
У нас в докере работает
-
Если есть желание, можно здесь нажать на upvote:
https://news.ycombinator.com/item?id=13183758
Мелочь, а может быть человеку будет приятно. -
-
-
Наверное, никак.
-
спасибо, тоже так думал- искал пути решения, но вдруг есть скрытый "ход")
еще вопрос, про ЯМ, у нас хранится значение, допустим сколько пользователь провел времени на странице - аналогичное ЯМ, и каждые 15 секунд это значение схлопывается и увеличивается в рамках сессии, получается если в ЯМ тоже каллапс движек - вы считаете через "avg" т.е sum(sign).... ? -
Да, через sum(x * sign) / sum(sign).
-
спасибо!
- 16 December 2016 (14 messages)
-
Вот это отличный вопрос кстати
-
Подскажите, а как можно посчитать median() в CollapsingMergeTree без использования модификатора FINAL ?
-
Выглядит так что действительно никак, но можно попробовать придумать
-
В продолжение темы UUID. Подскажите, как можно при INSERT'е преобразовать строковое представление UUID в FixedString(16)?
Пока единственный вариант, который удалось найти - это вставка строкового представления UUID во временную таблицу, а затем INSERT с SELECT'ом (где уже можно использовать UUIDStringToNum) из временной таблицы в основную. -
-
-
Большое спасибо!
Наверное строка в документации не совсем актуальна уже:
"Ни один из форматов данных не позволяет использовать в качестве значений выражения.
То есть, вы не можете написать INSERT INTO t VALUES (now(), 1 + 1, DEFAULT)." -
Хм, не знаю, лучше пусть кто-нибудь из Я подтвердит)
Я где-то видел, что просили что-то подобное, но нашел только такие тикеты:
https://github.com/yandex/ClickHouse/issues/67
https://github.com/yandex/ClickHouse/issues/75
а они вроде немного не про тоInitial column values are not used during DEFAULT expression evaluation. · Issue #67 · yandex/ClickHouseI've created a table in the following way: CREATE TABLE IF NOT EXISTS gusev.`vf_vg-desktop_8582E5B16CE53B87` ( id UInt32, track UInt8, codec String, content String, rdate Date DEFAULT tod...
-
Кстати, вот было бы клёво иметь возможность написать что-то вроде такого:
CREATE TABLE ... (
uuid FixedString(16) DEFAULT UUIDStringToNum(uuid)
)
Чтобы это выражение отрабатывало только один раз, при INSERT'е, и не ругалось на cyclic aliases. Но это неочевидно было бы, наверное, и/или труднореализуемо нормально. -
Да интересная задачка, что правильнее в нашем контексте 2*2=5 или 2*2=4.7 )
На наших данных ближе всего к final такое :
round(medianIf(value,sign>0)) AS val_sign_median
Интересно что если делается GROUP BY toStartOfFiveMinute(event_time), то без FINAL,
т/е данные группируются "расхлопнутыми", среднее лучше/ближе через avgIf(value,sign>0) чем sum(value * sign)/ sum(sign) -
Или мы где-то "закривили" руки себе ))
-
Это почти актуально. Поддержка вычисляемых выражения была добавлена в VALUES, но при их использовании, всё становится очень неэффективно.
-
Была идея сделать INSERT SELECT expr ... FROM input()
- то есть, произвольные вычисления от вставляемых в INSERT-е данных. -
- 17 December 2016 (70 messages)
-
Товарищ пердлагает 50К рублей за ODBC драйвер для КХ http://www.sql.ru/forum/1243052/perepisat-drayver-odbc-na-windows-50-000rПереписать драйвер odbc на windows 50.000р / Работа / Sql.ru
Переписать драйвер odbc на windows 50.000р / Работа / Добрый вечер!Есть odbc драйвер, который лучше не использоватьhttps://groups.google.com/forum/#!searchin/clickhouse/odbc$20|sort:relevance/clickhouse/VmdmhH_S9B8/U60Z2LZWBgAJКак я понял, сырец лежит здесьhttps://github.com/yandex/ClickHouse/tree/32057c...
-
Если это тот, о ком я думаю, то драйвером дело не ограничится )
-
-
Это тот кто спрашивал на митапе "хочу продавать clickhouse за деньги"? =)
-
-
А, наоборот, он покупает
-
Виктор, а планируется опубликовать рейтинг фич реквестов?
-
Вспомнил, вы говорили про открытие вашего внутреннего багтрекера по КХ наружу, я правильно помню?
-
Да, планируется
-
И то и то
-
Пока не успеваем
-
Круто. Будет виден интерес сообщества к разным фичам и на всякие побочные штуки (которые не в "ядре") можно будет кикстартер устраивать :) Типа как "50К за ODBC" :)
-
Как с таким бороться? Только перезагрузка?
Вылетает после селекта неоч красивых данных из базы -
-
-
Fix terminal after displaying a binary file
I'd tried command cat with an executable file: cat /bin/ls Now I can't read any word in this terminal (Linux console). How can I fix it?
-
-
-
-
КХ умеет аггрегировать вычисляемые значения по дате?
типа
GROUP BY toYear(event_date) -
Я так понимаю бинарные данные лучше в стринг не засовывать?
-
да, без проблем
-
вроде без разницы, можно в String, можно в FixedString
-
Пытаюсь сделать так
select
toYear(event_date) as y,
toMonth(event_date) as m,
count() as total
from tbl
where
user_id=29
group by toMonth(event_date)
получаю
Code: 215, e.displayText() = DB::Exception: Column event_date is not under aggregate function and not in GROUP BY., e.what() = DB::Exception -
-
-
точно. спасибо)
-
Есть ли какая то встроенная функция для экранирования бинарных данных?
-
данные экранируются на уровне форматов, насколько я помню
есть еще hex и ipv6/uuid-функции (которые превращают бинарно хранящиеся айпишники и уиды в человекочитабельные) -
-
-
-
-
-
-
-
-
-
-
-
-
простите за невнимательность, но вот свежеобновил кликхаус, а UUIDNumToString вроде как ещё нет. Или не там смотрел?
-
SELECT UUIDNumToString(server_id),count() FROM retroview_production.sessions group by server_id FORMAT Pretty
-
Code: 46, e.displayText() = DB::Exception: Unknown function UUIDNumToString, e.what() = DB::Exception
-
-
-
-
-
1.1.54112
-
буду обновлять
-
а, но это последняя версия в репозитории. Видимо вы из исходников ставили?
-
-
-
ага
-
завел тикет на всякий случай, https://github.com/yandex/ClickHouse/issues/270Use `stable` branch for the reference pages at clickhouse.yandex · Issue #270 · yandex/ClickHouse
It'd be awesome to show the stable version of the docs at the http://clickhouse.yandex/ site. I suppose, most of the users will use the stable/packaged version and not the bleeding-edge one.
-
Наверное лучше на клиенте делать hex() и писать в базу чистую строку
-
-
-
ну хз, смотрите сами, что важнее, читабельность или экономия ресурсов
я для сравнения загрузил пару месяцев данных в разные таблицы - с fixedstring(16) и string (в которой были 36-символьные уиды)
uuidы использовались в основном в качестве ключа для джойнов между разными таблицами
fixedstring(16) оказался в среднем в два раза шустрее, чем обычная строка.
и отображать ее (в моем случае), в принципе, редко надо, только если при разборе полетов -
сейчас это так:
-
replaceRegexpOne(lower(hex(server_id)),'(.{8})(.{4})(.{4})(.{4})(.{12})','\\\\1-\\\\2-\\\\3-\\\\4-\\\\5') as server_id
-
и toFixedString(unhex(replaceAll(" ++ ServerId ++ ",'-','')),16) AS server_id
-
-
-
больше добивает обожаемое мультиэкранирование
-
-
-
ага
-
-
- 18 December 2016 (7 messages)
-
-
-
-
В последней stable ещё нет.
-
Можно легко, но чуть-чуть сомневаюсь. Всё-таки часто правим в документации какие-нибудь ошибки и удобно, что они сразу выкладываются. А отдельно в stable ничего нельзя коммитить (обновляется скриптом при релизе, с помощью git reset).
-
Привет. Можно.
Обязательно добавить в инструкцию по сборке.
Если получается нетривиально - надо сделать флаг, чтобы отключалось. -
- 19 December 2016 (95 messages)
-
А как правильно подключать внешний источник с помощью ODBC?
Я указал
<source>
<odbc>
<connection_string>DSN=ClickhouseDict</connection_string>
<table>os</table>
</odbc>
</source>
при вызове dictGet* дёргается ODBCDictionarySource, но ничего не происходит:
[ 4 ] <Debug> executeQuery: (from [::ffff:127.0.0.1]:59280) select dictGetString('os', 'name', 1)
[ 4 ] <Trace> InterpreterSelectQuery: FetchColumns -> Complete
[ 4 ] <Trace> ODBCDictionarySource: SELECT id, name FROM os;
но iusql -v ClickhouseDict подключается успешно.
Пробовал connection_string вплоть до
<connection_string>DSN=ClickhouseDict;UID=igor;PWD=;HOST=127.0.0.1;PORT=5432;DATABASE=clickhouse_dict</connection_string>
DSN определен в ~/.odbc.ini, кликхаус запускается под тем же юзером. -
-
Попробуйте lazy load у словарей отключить, тогда он при старте будет пытаться загрузить словари и в лог ошибки сыпать.
Подключал ODBC справочник. Конфиги похожи на ваши. -
В DSN указывал только драйвер. Остальные параметры в connection_string. Но это из-за особенностей драйвера, скорее всего.
-
-
Как я делал с постгресным драйвером:
sudo apt-get install -y unixodbc
sudo apt-get install -y odbcinst
sudo apt-get install -y odbc-postgresql
В /etc/odbc.ini:
[DEFAULT]
Driver = myconnection
[myconnection]
Description = PostgreSQL connection to norma
Driver = PostgreSQL Unicode
Database = norma
Servername = 10.... (твой хост)
UserName = uname
Password = pwd
Port = 5432
Protocol = 9.3
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ConnSettings =
<dictionary>
<name>table_name</name>
<source>
<odbc>
<table>postgresql_table</table>
<connection_string>DSN=myconnection</connection_string> <!— может потребоваться UID=norma;PWD=norma;, но по идее не должно —->
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<flat/>
</layout>
<structure>
<id>
<name>id</name>
</id>
<attribute>
<name>some_column</name>
<type>Int32</type>
<null_value>-1</null_value>
</attribute>
...
</structure>
</dictionary> -
Так все взлетало без проблем
-
Коллеги, может быть уже обсуждалось, а можно ли через jdbcTemplate.update некоторый параметр поставить null, чтобы это заинсертить в КХ
-
или функция нужна какая-то обязательная, а то пишет Code: 48, e.displayText() = DB::Exception: NULL literals are not implemented yet: (at row 1), e.what() = DB::Exception
-
хотя сделать, что если float32 равно 0, то ничего не добавляется, чтобы место сэкономить
-
-
-
-
ок
-
Место с помощью NULL не сэкономится.
-
а ну тогда все проще)
-
спасибо
-
и париться не буду
-
Joined.
-
-
а чем вы мониторите кликхаус?
-
Всем привет! У нас на одном из серверов в логах ошибка:
-
DistributedSessions.Distributed.DirectoryMonitor: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof, e.what() = DB::Exception, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0xe) [0xfd8d0e]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1e) [0xf9c69e]
2. clickhouse-server(DB::throwReadAfterEOF()+0x3a) [0xf9c86a]
3. clickhouse-server(DB::StorageDistributed::DirectoryMonitor::processFile(std::string const&)+0x7c9) [0x23f4759]
4. clickhouse-server(DB::StorageDistributed::DirectoryMonitor::run()+0x15d) [0x23f501d]
5. clickhouse-server(execute_native_thread_routine+0x20) [0x32a3300]
6. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7ff7579c6184]
7. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7ff756fe137d] -
На остальных все норм. Как нам побороть эту ошибку?
-
Заканчивалось место на диске?
-
Есть встроенная поддержка Graphite для отправки метрик, а также экспортеры в Prometheus, munin и куда-то ещё.
-
Зайти в директорию этой Distributed-таблицы: /opt/clickhouse/database/table/. Найти там первый (обрезанный) файл и перенести его куда-нибудь оттуда.
-
а для жаглера нет?:)
-
Для Жаглера спроси у наших, например, у velom@.
-
Alexey Как определить обрезанный файл?
-
Это первый по номеру. Все файлы отправляются по порядку.
-
А не подскажете, насколько много данных за раз можно слать POST-запросом по HTTP API ClickHouse?
-
сколько угодно
-
Раздел руководства "Производительность при вставке данных."
» Данные рекомендуется вставлять пачками не менее 1000 строк или не более одного запроса в секунду.
Подскажите, эти рекомендации относятся к таблице или целиком ко всему инстанцу clh? -
Такой вопрос: хочется и чтобы данные реплицировались, и чтобы при вставке одинаковых строк данные не дублировались и оставался один экземпляр. Нет ли какого-нибудь незадокументированного ReplicatedReplacingMergeTree-движка?) И можно ли такого как-нибудь достичь в принципе?
-
-
-
Рили лол))
Сейчас посмотрю, работает ли :D -
-
-
-
Работает корректно)
-
Вот ребята скромные, делают всякие крутости, но не рассказывают об этом на каждом углу)
Следующий вопрос: насколько это стабильно и как скажется на производительности? -
К сожалению, совсем не прод вариант, хотелось бы вот как ReplicatedReplacingMergeTree)
-
-
-
-
а зачем нужен FINAL? Вроде как и без него работает корректно
-
-
-
-
Спасибо!
Мержи происходят по крону на постоянной основе, поэтому в случае, если вставка нерегулярная, нельзя просто подождать и затем делать обычные запросы, да? -
-
-
Не не, в принципе же так устроено, нет?
-
Да, я про них и говорю
-
Если они происходят только при вставке, а потом никаких склеек нет, то вариант с "подождать" в принципе должен работать нормально
-
А этот ReplacingMergeTree не мержится автоматически? Только по FINAL или OPTIMIZE?
-
-
А разве нельзя, как и с CollapsingMergeTree _сразу_ после вставки делать запросы, используя sign?
-
Просто не очень понятно, в чём Replacing хуже Collapsing в итоге
-
Или collapsing всегда мержится перед запросом?
-
Просто Replacing было бы очень соблазнительно использовать, если я правильно понимаю как он работает. Поскольку для Collapsing желательно использовать отдельный внешний KV storage, а в Replacing получается, что старые строки просто заменяются на новые
-
-
Кстати, а при any inner join выбирается последняя версия или произвольная?
-
Рекомендации относятся к таблице.
Но при этом на весь инстанс тоже желательно не сильно частые INSERT-ы делать. Может быть, в районе десятков пачек в секунду... -
Нет, потому что слияния разных кусков делаются с разной частотой. Так, мелкие куски сливаются вместе часто, большие редко (до времён порядка месяца). Очень большие куски (по-умолчанию, 100 GB) вообще не сливаются. Строки с одним ключом могут оказаться в двух больших кусках.
-
-
Выбирается первая попавшаяся. Какая будет первой попавшейся - трудно сказать, так как это зависит от распределения работы по потокам.
-
Блин, жалко, ненадежный вариант, конечно, да... Алексей, я так понимаю, никаких производительных путей обхода кроме варианта, предложенного Игорем, с временной таблицей нет?
-
у меня 20 гб логов с объектами json парсятся питончиком и заливаются в КХ где-то за час-полтора (шесть потоков, mbpr 15")
не инфлюкс, конечно, но мало ли -
инфлюкс сильно втыкает при массовых выборках..... :(
-
Нет. Стоит иметь ввиду, что вариант Игоря работает так: при каждой вставке делается full scan таблицы. Часто это неприемлимо. Может подойти только для маленьких объёмов.
-
ну кстати я избежал full scan'а (если я правильно понял), делая
SELECT min(timestamp), max(timestamp) FROM temp_table
а потом делая
INSERT INTO table SELECT .. FROM temp_table WHERE id NOT IN (SELECT id FROM table WHERE date BETWEEN toDate(<min_timestamp>) AND toDate(<max_timestamp>)) -
-
-
Хорошо, а если мы закладываемся, что дубли могут быть, но хочется хотя бы уменьшить занимаемое место на диске, т.е. чтобы хотя бы часть (я так понимаю это большая) схлопывалась и у нас есть 1 час на мерж (выгрузка происходит ночью), является ли такой вариант боевым или все таки не стоит?
-
-
Таблица большая, 60 млрд. и каждую неделю выгружается по 150-160 млн.
-
-
-
Алексей, спасибо!
-
-
После нескольких быстрых мержей, дублей уже будет мало.
-
Мои 5 коп. Если данные грузятся пакетами, а обычно так и бывает, то назначайте идентификатор пакета и проверяйте, что он уже загружен (не id отдельной записи, а id всего пакета). Накладные расходы невелики. Дополнительно можно ограничить по дате. Это подходит для больших таблиц (условно -- фактов). Для небольших, проверка уникальности id недорога, и можно на всякий случай делать иногда optimize, если загрузка может происходить с разных серверов.
-
Отлично, т.е. при фильтровать я планирую это дело все равно DISTINCT-ом для полного устранения дублей (если из-за этого не будет сильно просидать производительность), а это будет чисто в качестве очистки места.
Алексей, а репликация будет происходит корректно? Я так понимаю, будет все равно некоторое расхождение -
Спасибо, поиграюсь с разными вариантами
-
Посмотрю, как это отразится на времени выгрузки на нормальных объемах
-
Не понял насчёт расхождений. Репликация асинхронная и в заданный момент времени на реплике может не быть некоторых только что вставленных на другую реплику данных. При этом, через некоторое время после вставки, на всех репликах будут одинаковые данные.
-
Что-то меня переклинило, решил, что на оригинале и реплике слияния будут происходить независимо..
Ок, всем спасибо! -
Слияния координируются и происходят одинаковым образом. Данные на репликах будут одинаковы побайтово.
-
планирую писать в кластер CH около 20к значений в секунду на 6 серверах (3 шарда 2 реплики в 2 датацентрах)
собственно вопрос - потянет ли http интерфейс такую нагрузку, если писатся будет пачками раз в секунду(константа) на всех нодах?
и потянет ли рост нагрузки в 10х? -
если пачками, то и 20к и 200к - не очень много.
-
-
- 20 December 2016 (35 messages)
-
Масштабирование ClickHouse, управление миграциями и отправка запросов из PHP в кластер
В предыдущей статье мы поделились своим опытом внедрения и использования СУБД ClickHouse в компании СМИ2. В текущей статье мы затронем вопросы масштабирования, к...
-
-
будет не верно считать? чтобы народ отдыхал в НГ? 😁
-
-
Ответьте пожалуйста на опрос) мне важно мнение сообщества
-
я пока не готов отвечать, т.к. под мои критерии кликхаус пока не подходит, но я очень надеюсь, что когда-нибудь я смогу им пользоваться в полной мере
-
Игорь, спасибо за статью!
-
Не читал, но одобряю :)
-
Ещё не читал, позже
-
Игорь, статья хорошая и полезная, хотя тема не полностью раскрыта. В частности, по нашему опыту репликация между датацентрами требует более аккуратного подхода, особенно если пинг между датацентрами не очень хороший. Насчет PHP ничего сказать не могу кроме того, что удивляюсь его долгожительству )
-
Вообще, я бы эту статью разбил на две, но это уже поздно, наверное. Первая -- про масштабирование и конфигурация, а вторая -- про PHP утилиты
-
РНР большими буквами вроде как Ремотно Наладочные Работы ?
-
personal home page
-
да тоже думали над этим, разбить или вообще не писать про php оставить только sql - create table. что бы "не отвечать" а почему вы используете .х.. и не сделали на Asm или просто на C))) но хотелось поделится идеей и тулом с сообществом и статья больше была написана с "конца"
-
Да я без наезда, полно сайтов на PHP и людей, которые им пользуются, поэтому утилиты, наверняка, полезные.
-
а это нам только предстоит , и я как раз помня о вашем опыте буду "пытать" )
-
это я не лично к вам) это я про сообщество хабра
-
О, супер! Новая статья :)
-
мне и в нашей команде тяжело объяснить почему php , а не c, java,python
-
используем все)
-
Проголосуй - хоть за велосепедостроение) буду рад любой инфе
-
На самом деле, это может быть примером того, что пользоваться СlickHouse -- это совсем не rocket science. Так что оно даже, может, и хорошо, что на php, а не на чем-нибудь более сложном
-
Хотя статья типа "ML-инфраструктура на Хаскеле и ClickHouse" смотрелась бы более внушительно :)
-
> Alexander
На самом деле, это может быть примером того, что пользоваться СlickHouse -- это совсем не rocket science. Так что оно даже, может, и хорошо, что на php, а не на чем-нибудь более сложном
Как и обсуждали на митапе - нужно просто и с "комиксами" -> чтобы технология пошла в массы
А как оказалось писать простым языком - это ооооочень тяжелый труд )
Знаю что детские учебники пишут академики.... я им не завидую ) -
« Если вы не можете объяснить это простыми словами, вы не до конца это понимаете »
Альберт Эйнштейн -
Я как-то делал доклад на тему "BigData для чайников". Очень помогает искать простые слова и аналогии :)
-
> The quote "An alleged scientific discovery has no merit unless it can be explained to a barmaid." is popularly attributed to Lord Rutherford of Nelson in as stated in Einstein, the Man and His Achievement By G. J. Whitrow, Dover Press 1973. Einstein is unlikely to have said it since his theory of relativity was very abstract and based on sophisticated mathematics.
-
интересно
-
С тех пор, как математики взялись за Теорию относительности, я сам перестал ее понимать. (А. Эйнштейн)
P. S. чтобы не разводить холивар, пишу публикации по теории графов, всегда стараюсь объяснить на пальцах все, без заумных слов -
даже если это читают только люди в ВА
-
ВАК
-
-
Подскажите, а что нибудь появилось новое для построения дашбордов с графиками помимо reDash, pentaho под CH, у меня сейчас задача проверить много гипотез на данных - самый простой вариант это корреляции на графиках искать, а с jupyter я не очень дружу )
-
Может это? https://groups.google.com/forum/#!topic/clickhouse/9T9sQAJiPEM
Сам не проверял. -
👍Спасибо! попробую
- 21 December 2016 (24 messages)
-
Joined.
-
а можно как-нибудь посчитать соотношение/процентики от общего количества сгруппированных данных?
типа того:
SELECT date, count() AS cnt, ??? AS percentage FROM table GROUP BY date
date count percentage
2016-12-18 153 18%
2016-12-19 241 28%
2016-12-20 295 34%
2016-12-21 169 20%
---
total: 858 100% -
получилось как-то так
SELECT
a_date,
a_cnt,
round(a_cnt / total, 2) AS percentage
FROM
(
SELECT
groupArray(date) AS a_date,
groupArray(cnt) AS a_cnt,
sum(cnt) AS total
FROM
(
SELECT
date,
count() AS cnt
FROM table
WHERE date >= '2016-12-18'
GROUP BY date
)
)
ARRAY JOIN a_date, a_cnt -
Ребяты, привет!
Такой очень очень простой кейс: 8 тачек с таблицей в 22 млрд.
Длинный первичный ключ, т.к. ReplacingMergeTree используется для схлопывания дублей.
Запрос формата:
select col1, col2, ..., colN from table where id='214352512532';
где id - первое поле первичного ключа.
Запросы идут в распределенную таблицу, в которую заливались записи с ключом шардирования cityHash64(id).
Гранулярность индекса 8192
Вот лог на тачке без мержа (читай вспомогательной):
########################
...WHERE bar_code = '61226094020347' FORMAT JSON
2016.12.21 09:27:27.902808 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Key condition: (column 0 in ['61226094020347', '61226094020347'])
2016.12.21 09:27:27.902827 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Date condition: unknown
2016.12.21 09:27:27.903474 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Selected 24 parts by date, 24 parts by key, 24 marks to read from 24 ranges
2016.12.21 09:27:27.905881 [ 28 ] <Trace> merge.matreshka_merge_half_year (SelectExecutor): Reading approx. 196608 rows
2016.12.21 09:27:27.905954 [ 28 ] <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState
2016.12.21 09:27:27.907098 [ 28 ] <Debug> executeQuery: Query pipeline:
Union
Expression × 20
Filter
MergeTreeThread
2016.12.21 09:27:30.091786 [ 2227 ] <Debug> MergeTreeReadPool: Slow read, event №1: read 52003 bytes in 2.065 sec., 0.025 MB/s.
2016.12.21 09:27:31.284043 [ 2228 ] <Debug> MergeTreeReadPool: Slow read, event №2: read 23942 bytes in 1.013 sec., 0.024 MB/s.
2016.12.21 09:27:31.284077 [ 2228 ] <Debug> MergeTreeReadPool: Will lower number of threads to 19
2016.12.21 09:27:31.852538 [ 28 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:31.852754 [ 28 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:31.852869 [ 28 ] <Information> executeQuery: Read 196608 rows, 41.72 MiB in 3.951 sec., 49756 rows/sec., 10.56 MiB/sec.
2016.12.21 09:27:31.852900 [ 28 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:31.852909 [ 28 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:31.853147 [ 28 ] <Debug> MemoryTracker: Peak memory usage (for query): 197.51 MiB.
2016.12.21 09:27:31.853166 [ 28 ] <Debug> MemoryTracker: Peak memory usage (for user): 197.51 MiB.
2016.12.21 09:27:31.853174 [ 28 ] <Debug> MemoryTracker: Peak memory usage (total): 197.51 MiB.
2016.12.21 09:27:31.853281 [ 28 ] <Information> TCPHandler: Processed in 3.953 sec.
########################
Вот лог на тачке с распредделенной табличкой, где мерж происходит:
########################
WHERE bar_code = '61226094020347' FORMAT JSON
2016.12.21 09:27:27.895044 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Key condition: (column 0 in ['61226094020347', '61226094020347'])
2016.12.21 09:27:27.895103 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Date condition: unknown
2016.12.21 09:27:27.895825 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Selected 19 parts by date, 19 parts by key, 20 marks to read from 19 ranges
2016.12.21 09:27:27.897585 [ 4876 ] <Trace> merge.matreshka_merge_half_year (SelectExecutor): Reading approx. 163840 rows
2016.12.21 09:27:27.897640 [ 4876 ] <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState
2016.12.21 09:27:27.898588 [ 4876 ] <Trace> InterpreterSelectQuery: WithMergeableState -> Complete
2016.12.21 09:27:27.899785 [ 4876 ] <Debug> executeQuery: Query pipeline:
Union
Expression
Materializing
Union
Expression × 19
Filter
MergeTreeThread
Expression × 7
Remote -
2016.12.21 09:27:31.422427 [ 28 ] <Trace> ODBCDictionarySource: SELECT code, value FROM operand_type;
2016.12.21 09:27:35.270417 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270492 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270500 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270663 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270721 [ 4876 ] <Information> executeQuery: Read 1624972 rows, 343.17 MiB in 7.377 sec., 220271 rows/sec., 46.52 MiB/sec.
2016.12.21 09:27:35.270742 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270748 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270757 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270763 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270928 [ 4876 ] <Debug> MemoryTracker: Peak memory usage (for query): 118.77 MiB.
2016.12.21 09:27:35.270940 [ 4876 ] <Debug> MemoryTracker: Peak memory usage (for user): 118.77 MiB.
2016.12.21 09:27:35.270944 [ 4876 ] <Debug> MemoryTracker: Peak memory usage (total): 118.77 MiB.
########################
По времени выполнени то в жар, то в холод. Иногда прям очень резво, а иногда 15 сек. переваривает.
Основной вопрос: что за: Slow read, event №1: read 52003 bytes in 2.065 sec., 0.025 MB/s. и как этого избежать? Что можно/нужно подкрутить? -
Добрый день, после не предвиденного отключения питания в логах clickHouse мы видим много ошибок: Considering to remove broken part "путь до партиции" because it's impossible to repair.
Можем ли мы восстановить битые патриции.
Спасибо, жду ответа. -
Joined.
-
отцепить и перезалить ?
-
Битые партиции скачаются сами с реплики.
Если сервер не стартует (говорит, что кусков слишком много), то пропишите флаг force_restore_data, как в
https://clickhouse.yandex/reference_ru.html#%D0%92%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%81%D0%B1%D0%BE%D1%8FДокументация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Взять для рассмотрения один сервер, на котором можно проверять производительность запроса локально. Выполнять запрос и смотреть в iostat -d -m -x 1. Для коротких запросов можно попробовать уменьшить число потоков.
-
-
не надо на серванте, возьмите лучше платяной шкаф
-
-
-
Оно на каких то действиях просто начнет падать с sigill
-
-
Только если пересобирать.
-
У вас полноценный сервер без sse4_2 или виртуалка?
-
полноценный
-
Model name: AMD Opteron(tm) Processor 4170 HE
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save pausefilter -
Нетривиально, так как нужно редактировать код. В коде всего несколько (примерно три штуки) мест, где SSE 4.2 используется явно. Везде предоставлена альтернатива под дефайнами, но условия для неё просто смотрят на x86_64 или ARM, а не на версию SSE.
-
-
Амдшный ссе4а может иметь нужные инструкции
-
Только чуть-чуть.
- 22 December 2016 (25 messages)
-
-
У rawbinary формата (для записи) есть колонко-ориентированный вариант?
-
Типа записал 5000 значений для первого столбца, потом 5000 для второго, и так далее
-
Коллеги, всем привет. Скажите, а надо какими-то специальными параметрами настраивать ClickHouseProperties или ClickHouseDataSource чтобы можно было делать из джава кода INSERT в 50000 - 200000 строк через jdbsTemplate?
У меня приложение берет данных из одного хранилища, обрабатывает их и статистику планируется складывать в КХ. Для этого используется jdbsTemplate спринговый, в который в качества парамерта конструктора передается clickHouseDataSource, то есть jdbcTemplate = new JdbcTemplate(clickHouseDataSource)
Но когда я делаю INSERT в котором достаточно много VALUES, а именно больше 4000, то у меня вываливается ошибка
; nested exception is ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Caused by: java.lang.Throwable: Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception -
ну если сокращают размер инсерта меньше 3000, то инсерт проходит
-
выводил в файл данные. при возникновении exception, такое ощущение, что если там инсертиться 5000 строк, то из них выводится 4700 строк примерно, а остальных 300 просто нет
-
при приобразование toDate похоже туда null передается и вот такой exception вылетает
-
хочется ускорить приложение, чтобы делать жирные инсерты, тем более в доке рекомендуется инсертить от 50000 до 200000 строк
-
кто как хранит "онлайн" данные? нужно получать колличество событий за последние 5 минут с разными разрезами.
Есть мысль создавать на каждую минуту по одной таблице и делать к ним запросы используя движок Merge(). Старые таблицы удалять спустя 5 минут.
Это норм или есть варианты лучше? -
А зачем удалять? Храните все, удалить всегда успеете
-
Дык место
-
-
> А зачем удалять?
эти же данные есть в другой таблице, этот функционал хотелось бы вынести на отдельный сервер/кластер. Не хочется излишне юзать диск.
интуитивно думается, что если данные не удалять, то это будет сложнее для кликхауса с запросами вида datetime > now() - 60*5. Возможно это не так. -
попробую использоват batchUpdate, может получится
-
Вас не смущает текст ошибки? Там не в размере батча дело.
-
просто когда размер меньше 3000, такой ошибки не возникает, а когда больше 4000, то он делает toDate от null
-
но мне подсказали, что я просто генерю здоровый SQL запрос делая sqlQuery.append("(?, ?, ?, toDate(?), toDateTime(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
-
а потом делая jdbcTemplate.update(sqlQuery.toString(), objects);
-
а есть batchUpdate в jdbsTemplate для этих целей
-
я просто про эту функция не знал
-
сча попробую через нее сделать, во всяком случае на том проекте, где так пишут, все нормально работает
-
и вообше писать такие большие SQL очень плохая практика
-
Кстати, а сколько времени КликХаус создавали? Или это конфеленциальная информация?)
-
-
Пробовал две схемы, обе на SummingMergeTree - нам нужно хранить данные о показах статей - ahash; на сайтах - site_id, по разным разрезам group_name - но разрезов конечное число и не большое до 15. Т/е нам нужны только факты показа, без детальной информации типа user_agent,ip... Главное realtime чтение нужных элементов c небольшой задержкой от текущего момента времени.
1) Вариант когда колонки были минутами
PK(event_date,event_time, site_id, ahash, group_name) и колоники view_00,views_01,.... views_59
event_time - пишется время события с округлением в час
2) Вариант когда колонки группы
PK(event_date,event_time, site_id, ahash) и колоники group_1....group_14,group_15
event_time - пишется время события без секунд
Оба варианта были хороши по записе, но используем второй вариант - т/к оказался самым удобным для чтения.
Попробуйте сперва представить чтение данных, а потом уже сделаете запись)
Таким методом мы обсчитываем показ всех статей практически всех СМИ в РФ за последние 2 минуты/час/сутки. - 23 December 2016 (31 messages)
-
Привет. Подскажите как лечить такую ошибку при вставке:
DB::Exception: Not found column lastcount in block. There are only columns: Date, TimeStamp, NormalizedUrl, NormalizedParameters, HttpStatus, ReceivedBytes, SentBytes, UpstreamTime, AuthSid, PortalUserId, TraceId, group10, group50, group100, group500, group1000, group2000, groupGt2000, stattime. -
-
INSERT INTO ??? FORMAT VALUES
-
-
INSERT INTO db.Table_2016_12_23 (Date, TimeStamp, NormalizedUrl, NormalizedParameters, HttpStatus, ReceivedBytes, SentBytes, UpstreamTime, AuthSid, PortalUserId, TraceId) FORMAT Values ('2016-12-23', '2016-12-23 05:03:08', 'someurl', '=-', 302, 1029, 566, 0.33, '', '', 'someid')
-
-
а то очень похоже на вот этот баг https://github.com/yandex/ClickHouse/issues/127Problem with INSERT if having a VIEW with subqueries & AS keyword #127
That's a really strange one! When you create a view (let's call it test_stats) that has a subquery with multiple tables (test1 and test2) combined using UNION ALL clause, and the first tabl...
-
Есть Merge-табличка над кучей таблиц. В том числе и над этой.
-
Хотя и вьюха есть с таким столбцом. Видимо тот же баг. Спасибо.
-
Коллеги, всем привет.
А есть в КХ конструкция
WITH q AS (SELECT dummy FROM DUAL)
SELECT dummy FROM q;
как в Оракле или аналог? -
судя по доке WITH нет
-
-
Нет еще, но вроде обещали
-
Таблица с одним значением одного столбца
-
Используется в основном как заглушка синтаксиса, при селекте константы
-
-
-
-
-
-
-
-
-
По возможности использовать внешние словари
-
-
судя по этому слайду, можно ждать через год
-
-
есть массивы
-
common table expressions в списке нет, печаль.
-
Опубликовано видео 21 ноября: https://events.yandex.ru/lib/talks/4351/
-
Крутяк
- 24 December 2016 (1 messages)
-
- 26 December 2016 (7 messages)
-
Добрый день,
Скажите как ClickHouse использует директорию /opt/cores. Хотим разместить данные ClickHouse в другой директории, не в /opt.
Можно ли изменить расположение cores из конфига, или это лучше сделать ссылкой? -
-
в конфиге core_path
-
Joined.
-
-
-
- 27 December 2016 (37 messages)
-
-
-
Всем привет, а в КХ есть функция row_number()
-
?
-
ну или аналог какой-нибудь
-
А какую задачу хочется решить?
-
вообще есть таблица, у строках которой есть id и date_time (дата_добавления) ну и другие параметры
для каждого ID надо вывести последнюю версию строки -
-
-
воистину работает, спасибо
-
-
да я открыл Доку, посмотрел эту функцию и запилил запрос, все сошлось
-
спасибо большое)
-
классно на самом деле, а я сидел голову ломал
-
КликХаус - сила
-
Joined.
-
-
-
В корке?
-
-
сегодня запросы на проде начали проседать по таймауту(60 сек). посмотрел query_log - все отрабатывает быстро, есть подозрение что клиент не успевает забирать результаты, надо бы действительно стримить их. насколько я понимаю Accept-Encoding: gzip же не будет работать?
-
-
-
-
ClickHouse/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
-
-
-
-
-
-
-
-
-
-
- 28 December 2016 (159 messages)
-
gzip всё-таки медленно жмёт (~30 МБ/сек/ядро при уровне сжатия 3, для типичного Intel ~2 GHz, если я правильно помню). Когда добавляли его поддержку, то у нас было много программ, которые уже ходили на сервер с заголовком Accept-Encoding: gzip. И если бы сделали, чтобы он сжимал по-умолчанию, то это привело бы к увеличению потребления CPU при релизе. Поэтому сделали флаг, чтобы в момент релиза ничего резко не поменялось.
На самом деле зависит от сети. Для 1 GBit как раз под вопросом, стоит ли использовать gzip или нет (зависит от коэффициента сжатия). На 10 GBit точно не gzip.
Если Accept-Encoding: gzip, deflate, то сервер использует gzip.
На будущее, можно добавить Accept-Encoding: br (для Brotli). Также коллега сейчас делает, чтобы использовалась библиотека zlib-ng вместо zlib - станет лучше, но только чуть-чуть. -
а разве бротли быстро жмет на лету? я думал он как зопфли, чтоб заранее пожатые файлики класть
-
Более-менее быстро. Почти как zstd.
Для хороших уровней сжатия (как gzip 3..6) получается в районе 200..600 МБ/сек. -
brotli жмет быстрее всего, что мы пробовали. Включая zstd
-
(впрочем, zstd мы пробовали год назад, а brotli -- совсем недавно)
-
а снаппи там всякие не?
-
которыми монги по дефолту жмутся
-
https://quixdb.github.io/squash-benchmark/
- только сразу при загрузке переключите на Xeon, а dataset на enwik8 или urls.10K. -
снаппи жмет быстро, но плохо
-
Правда там страница наполовину устарела :(
Нет уровней для zstd. Зато есть уровни для lz4, которые сбивают с толку. Значит лучше туда не смотреть. -
По поводу видео митапа 14 декабря. Видео готово, я его посмотрел - там всё Ок. Но мне тут коллеги советуют, что исходя из формата этой встречи (встреча была ограниченной, не для всех желающих), видео выкладывать не нужно - чтобы сохранить смысл такого формата встреч. (При этом видео с первой встречи 21 ноября уже выложили.)
Что думаете? Есть какие-нибудь аргументы по этому поводу? -
Я его как раз начал смотреть вчера, поэтому думаю, что его стоит оставить )
-
А, сорри, это от 21-го ноября смотрю.
-
Его точно оставим :) Речь только про второй митап.
-
-
В ДС2, надеюсь, приедем и ещё вживую что-нибудь интересное расскажем. И в ДС3 (правда не знаю, в какой).
-
-
-
> @milovidov_an
видео выкладывать не нужно - чтобы сохранить смысл такого формата встреч.
Есть смысл - не выкладывать чтобы простимулировать стать "избранным" ) С другой стороны там много "мебели" и "интеграторов" ))) -
В следующий раз мы надеемся сделать встречу более интересной и надеюсь участников (контрибьютеров) будет больше :)
-
-
-
-
вот!
-
Что за дичь?
Т.е. есть желание организации закрытого комьюнити по CH или всё же открытого?
Для популиризации платформы наверное всё же чем больше публичной информации с рассказами, обсуждениями - тем лучше, ИМХО.
Но это как уж авторы задумали.
Или тут комьюнити только на Мск рассчитано, кто всегда сможет заглянуть на встречу? Тогда хоть вебинары организуйте -
Да ладно вам. Все более менее крупные встречи будут с видео. Небольшие могут быть и без (это проще организовать). Видел с большого митапа тут было, с того что был в декабре - нет, мы как раз смотрим и думаем выкладывать ли.
-
Материалы митапов контрибьюторов имеет смысл закрывать от публичного доступа чтобы не вводить публику в заблуждение о фичах и роадмэпе продукта. На публичных митапах в презентациях и выступления стараются ничего лишнего не обещать и недостоверной информацией не делиться. А на встречах контрибьюторов "кишки" могут обсуждаться без купюр.
-
Ну то есть тут играют роль маркетинговые и PR сообраджения.
-
На публичных встречах тоже отвечают на все вопросы, включая "кишки", но там это обычно идет в кулуарах и не попадает в видео или презентационные материалы — то есть кому надо задает вопрос и получает ответ, а на публику идет ровно то, что разработчики хотели сообщить. И это нормально — правильный маркетинг и для открытого продукта имеет значение.
-
тогда надо действительно как-то делить встречи и доступ разделить.
Через ту же Г+ группу для разработчиков иметь возможность видеть больше материалов с техническими обсуждениями, что будет недоступно просто в паблике.
Это конечно решается в первую очередь через агенду при организации встреч - кто ЦА и кому будут доступны материялы. Для каких-то материялов строго "ватермарк", что это не публичная оферта, а лишь идеи внутри комьюнити разработки и деплоя -
согласен
-
Я не думаю, что ограниченность приглашения надо связывать с ограниченностью доступа к видео. На Олимпиаду мало кого приглашают, но все смотрят. Ограничивать следует только в том случае, если была информация "не для всех". Насколько я помню, ничего секретного на митапе не было. Хотя не уверен насчет выступления товарища из Люксофта, имеет смысл у них спросить.
-
-
Как-то сразу захотелось посмотреть запись выступления товарища из Люксофта.... 😆
-
Если серьезно, то как-то геморно всех опрашивать или отсматривать материал постфактум, что решить выкладывать или нет. Имхо.
-
там не для разглашения может быть только название клиента
-
Но мне кажется, что сам факт видео съемки подразумевает, что видео не для служебного пользования.
-
Но решать Яндексу
-
Подскажите а может существует другая документация по функциям в CH ? Не в таком формате ?
Для чего: в gui хочу сделать подсказки по ф-циям пример https://monosnap.com/file/YCgjbBwBhxMBOhi3VbNbdSWUAdyRnR
но в лоб регулярку не получилось написать чтобы распарсить текущую документацию.
Идеал : "functionName"=>"desc" , но xml/yml/json тоже пойдет )Screenshot "СМИ2 clickhouse 🔊 2016-12-28 14-14-01.jpg"Monosnap — the best tool to take & share your screenshots..
-
-
-
на примере FunctionsArray.h есть
/** Функции по работе с массивами:
*
* array(с1, с2, ...) - создать массив из констант.
* arrayElement(arr, i) - получить элемент массива по индексу.
* Индекс начинается с 1. Также индекс может быть отрицательным - тогда он считается с конца массива.
* has(arr, x) - есть ли в массиве элемент x.
* indexOf(arr, x) - возвращает индекс элемента x (начиная с 1), если он есть в массиве, или 0, если его нет.
* arrayEnumerate(arr) - возаращает массив [1,2,3,..., length(arr)] -
-
-
угу, это я руками пример скопипастил из доки) остальные 1000 функции решил регуляркой ...
-
-
)))
-
-
select * from system.functions ?
-
я так подгружаю в gui список - чтобы всегда был актуальный список исходя из сборки
-
-
-
-
-
> Однострочные комментарии начинаются с трёх слешей: ///, многострочные - с /**. Такие комментарии считаются "документрующими". Замечание: такие комментарии могут использоваться для генерации документации с помощью Doxygen. Но, фактически, Doxygen не используется, так как для навигации по коду гораздо удобне использовать возможности IDE.
-
-
Ну там markdown + чуть чуть html
-
-
Или не марк - но формат прослеживается ==functionName==\nDescription...
-
-
-
Да, было бы очень хорошо. И из этого можно генерировать документацию. Есть пара технических сложностей - чтобы более удобным образом (декларативно) задавать в коде сигнатуру функций. Если это сделать, то дальше будет проще.
-
-
В планах нет. Я об этом думал.
Хотелось бы избавиться от библиотеки readline, так как она слишком тормозит при вставке больших запросов (вставить мегабайт из буфера обмена - сплошное мучение). В readline также очень трудно сделать подсветку синтаксиса по мере набора.
Есть библиотека linenoise, но она даже не поддерживает UTF-8 - невозможно пользоваться. Есть патчи с поддержкой, но они тоже ужасно тормозят.
Великолепно сделана подсветка синтаксиса и автодополнение в fish shell. Права вставка тоже тормозит.
Есть нормальная библиотека вместо readline для Python. Использовать не получится.
Задача не серьёзная, поэтому без сроков. Может быть можно сделать из чувтства прекрасного. -
-
Да, вроде так называется.
-
-
-
-
-
-
-
-
-
GitHub - hatarist/clickhouse-cli: A third-party client for the Clickhouse DBMS server.
A third-party client for the Clickhouse DBMS server. - GitHub - hatarist/clickhouse-cli: A third-party client for the Clickhouse DBMS server.
-
-
Я в нём запускал запрос SELECT 1 и меня всё устроило :)
-
это еще чего, есть, например, superset - веб-морда, которая подключается к базе и позволяет с удобным интерфейсом гонять визуализации/агрегации данных.
что-то вроде tableau или redash'а. причем кто-то написал драйвер для sqlalchemy -
спасибо на добром слове, но если бы SELECT 1'ом единым!
-
SuperSet прикрутили к CH ?
-
-
-
-
ну он полгода назад был очень очень глючным... но если его завести с druid он круто работал
-
Оффтопик: Подскажите, плиз, суперсет - это чисто смотрелка? там можно писать какие-то вычисления над данными, которые он бы транслировал на источник?
-
Просто в Tableau помимо визуализации свой мощный почти многомерный язык для математики, который абстрагирован от SQL
-
еще бы стоил не как самолет :)
-
-
-
А кто юзал, подскажите, там динамические обновляемые диаграммы как в kibana/grafana делать можно?
-
Динамика, да есть
-
Для druid , а как оно будет с CH - не знаю
-
Динамика — то есть подгрузка и обновление диаграммы без необходимости перерисоывания всего дашборда, да?
-
-
-
ну да, похоже, оно
-
спасибо
-
-
tableau + CH только в весии Professional можно запустить или в Public тоже можно подружить их ?
-
у паблика сходу не нашел список коннекторов
-
у паблика вообще почти нет коннекторов, кроме веба и локальных файлов
-
только если прослойку делать
-
А прослойку через вот эту штуку http://tableau.github.io/webdataconnector/ ?Web Data Connector Home
Connect to your web data from Tableau.
-
есть пруф, что он поддерживает "Web Data Connector" (https://github.com/tableau/webdataconnector)?GitHub - tableau/webdataconnector: Bring the data you care about into Tableau
Bring the data you care about into Tableau. Contribute to tableau/webdataconnector development by creating an account on GitHub.
-
ага :)
-
:))
-
Блин, черти в Tableau сделали Personal edition платной за 1К или она уже была платной?
-
я написал про веб
-
Была. Более того, она со второго года просит по 400 кажется зеленых
-
Personal была, и из Personal никуда не приконектишься. бесплатная это Public
-
веб - это же "Web Data Connector" (https://github.com/tableau/webdataconnector)?GitHub - tableau/webdataconnector: Bring the data you care about into Tableau
Bring the data you care about into Tableau. Contribute to tableau/webdataconnector development by creating an account on GitHub.
-
Из Personal можно к "Web Data Connector" приконнектиться. Если на нем сделать прокси к КХ, то c КХ будет работать и Personal.
-
web data connector разве умеет запросы какие-то проксировать? он же вроде тупо данные отдает
-
ну типа как csv, а все остальнео уже сама tableau делает. мне всегда казалось, что так
-
Это API. С одной стороны он отдает данные в Tableau, а с другой запрашивает их по SQL у КХ. Это пока еще не сущестующий прокси, но архитектура должна быть именно такой.
-
Вот спека на интерфейс http://tableau.github.io/webdataconnector/docs/api_refWDC API Reference
Connect to your web data from Tableau.
-
WDC Tutorial
Connect to your web data from Tableau.
-
из этого примера я и сделал вывод, что все данные должны отдаться в tableau и он уже будет делать аггрегацию. я посмотрел elasticsearch-tableau-connector по скриншотам там такая же петрушка. т.е. сам запрос tablue в wdc прокинуть не может
-
Вот в этом весь вопрос ценности этого коннектора — можно ли через него запрашивать сразу агрегаты или нет.
-
Кто использует активно Tableu с мощными реализционками типа Vertica, скажите, оно умеет агрегаты запрашивать у источника, не пытаясь агрегировать самой?
-
-
Вот с кубами MSSSAS/Essbase оно именно так и работает — транслирует в MDX свои запросы и получает в ответ готовые агрегаты.
-
-
Это понятно :)
-
-
Какие это ограничения накладывает? Например, продолжая тему кубов — при работе с кубами через MDX отключается 2/3 собственного языка Tableau. Но это не особо страшно, расчетные меры и новые мемберы измерений можно прямо в Tableau писать на MDX.
-
А как в случае с реляционками, которые умеют оттдавать агрегаты быстро, Tableau понимает, нужно ли просить агрегат или агрегировать самой?
-
-
-
Joined.
-
думал тут про tableau еще.. подумалось, что можно же еще написать fdw для постгреса, через какой-нибудь multicorn. правда как я понял multicorn пока не поддерживает aggregation pushdown, но это можно обойти с помощью созданием разных таблиц под разные запросы. зато условия в where будут работать честно и в tableau будут приезжать не все данные, а только нужные
-
mutlicorn это что бы fdw пистаь на питоне. ну по простому же
-
"Перезжаем на Yandex.ClickHouse" https://www.youtube.com/watch?v=tf38TPvwjJ4 / Если кто еще не видел, презентация Alexander Zaitsev с HighLoad'2016 про замену Вертики на КХ в компании LifeStreet Media, в которой работает Александр. #video #Y2016Александр Зайцев — Переезжаем на Yandex ClickHouse
Подробнее о докладе: http://www.highload.ru/2016/abstracts/2297.html Подписаться на канал: https://goo.gl/EjIehg Сайт: https://habrahabr.ru Социальные сети: - FB: https://www.facebook.com/habrahabr.ru - VK: https://vk.com/habr - Twitter: https://twitter.com/habrahabr
-
Что это за технология? Вообще, как я понимаю, ключевая часть кун-фу КХ — это массивы и словари. Можно будет как-то их использование реализовать?
-
в постгресе ты можешь создать табличку, к который запросы будут идти через экстеншн (ну совсем по простому), multicorn это экстеншн на си, который позволяет писать экстеншены на питоне. ты описываешь какую-то табличку со всеми полями которые должны быть в результате, делаешь select field from tbl, тебе в питон обработчик приходит запрос, мол дай такие-то колонки с таким-то условием (ну после where), на основании этого ты идешь в CH, делаешь там какой угодно запрос и возвращаешь нужные колонки. group by как я понимаю в multicorn нет, но на разные колонки можно создать разные таблицы
-
Лексер и парсер чьи в этом случае? PG разбирает запрос, но реализацию каждой команды и функции SQL нужно самому писать?
-
я не настоящий сварщик, multicorn никогда не использовал. но у меня в голове я вижу это так, тебе в питон придет название таблицы, колонки которые спрашиваешь, и как сортировать. в зависимости от названия таблицы ты поставляешь нужны запрос с нужными колонками и нужным order by.
-
Эх, ну там же кроме селекта и ордера есть еще джойны и разные интересные групбаи.
-
да. но сам запрос который уходит в CH уже геенрится на основании названия таблицы
-
Кто делает join'ы и groupby'и? PG?
-
т.е. это как вьюха получается
-
Или экстеншен это должен делать?
-
тебе придется описать каждый вариант group by разной таблицей :)
-
Понятно.
-
Скучно :)
-
ну лучше чем csv :) по-моему или 10, или 9.6 постгрес умеют и join push down и всякое такое. но писать экстеншн уже надо будет на сях
-
mongodb, простите меня, делаала что-то подобное в своем коннектере для bi
-
ну это же только для платной версии prof сработает ?
-
да, personal версия там какая-то совсем не о чем если честно
-
я думаю потенциал CH только руками раскрыть можно) bi только примитивные вещи сможет
как я понимаю это Аналитик Яндекса писал
https://nbviewer.jupyter.org/github/miptgirl/attribution_modelling/blob/master/220volt_case.ipynb#Модели-аттрибуции
Вопрос: такие "вещи" sql сразу в питоне пишутся внутри яндекса? т.е есть ли тулл для автокомплитов и подсказок ?Notebook on nbviewerCheck out this Jupyter notebook!
-
какая-то крутая ссылка. откуда она? :)
-
С конференции Imetrics
-
Это мы показывали в рамках мастер-класса по использованию нового Logs API и ClickHouse
-
-
👏👍 а еще такие запросы в паблике есть?
это очень хороший промо для CH, сразу видеть что он умеет. Когда поначалу читал документацию не сразу понимал как применить массивы/кортежи и все эти ф-ции . а тут увидел сложный запрос - как прозрел) -
А ссылка умерла 😕
-
Notebook on nbviewer
Check out this Jupyter notebook!
-
А вот эта работает
-
Можно я тоже влезу, и дополню Машу @miptgirl? Мы в отделе в основном используем CH двумя сценариями:
1) Некоторая "тяжелая выгрузка", занимающая минуты-часы. У нас есть самописные обертки, упощающие итерирование по периодам рассчета (всё вместе в квоту не лезет). Запросы пишем вручную, вроде не слышал, вроде несильно страдаем: это потому что мало джойнов и жести, как у Маши 😊. Далее сразу в питоне в пандасе вертим-крутим как нужно.
2) А вот сценарии вида "посчитать за один день/период простую метрику", "оценить воообще кол-во событий в группе", "грепнуть и посмотреть" мы активно пользуемся CH GUI вашей (СМИ2). Очень радуемся, очень удобно)
Раньше (у меня до сих пор) для этих целей использовали clickhouse-client в tmux'е, но с гуи намного визуально понятнее, опять же вкладки, возможность глянуть в табличку.
В общем ещё раз спасибо за это! - 30 December 2016 (52 messages)
-
Joined.
-
-
Ребят, а подскажите, если в Clickhouse нет NULL
то как их все таки лучше вставлять?
например через TabSeparated???
просто писать пустую строку?
и делать \t\t ?
а оно будет в 0 приводить для численных типов?
или все таки надо заранее знать тип и приводить к нему ? -
-
-
-
а можно вставлять Nested структуры в TapSeparated ?
как массивы в квадратных скобках? -
:) CREATE TABLE nested_test (s String, nest Nested(x UInt8, y UInt32)) ENGINE = Memory
❯ gecho -e 'string\t[1,2,3]\t[4,5,6]' | clickhouse-client -h stats-ch1 -q "INSERT INTO nested_test FORMAT TabSeparated"
:) SELECT * FROM nested_test;
┌─s──────┬─nest.x──┬─nest.y──┐
│ string │ [1,2,3] │ [4,5,6] │
└────────┴─────────┴─────────┘ -
-
-
ну и там вроде как должна быть одинаковая длинна? так?
-
Да
-
В смысле количества элементов
-
погодите, как нет null
-
-
уже вроде пару недель работают
-
я не из сырцов ставлю
и я думаю что старое поведение никто ломать не будет =) -
я тоже не из сырцов
-
обновился через apt
-
и заработало
-
ну у меня golang ;)
там NULL нет нормального
там только nil ;) -
-
ну сочетание golang и TabSeparated, не дает мне шанса вставить NULL в том виде как оно обычно в SQL используется
-
-
\tNULL\t
это ж строка будет для String в таком случае для TabSeparated
в общем я таки попробую пустые строки посмотрю что получится -
-
-
ну дак это отдельно экранировать придется =)
-
-
-
еще раз
если \t разделитель
и я для типа String
поставлю NULL
Null или еще как то
то это не должно интерпрититорваться как NULL
это должна быть строка
если нет, то это значит сломали все =) -
-
-
МНЕ НЕ НАДО ВСТАВИТЬ \t как строку =)
-
-
-
-
-
-
ок \N, понял
может быть можно будет попровать ... -
проверил, всё верно
:) CREATE TABLE test (x UInt64, s Nullable(String), y UInt64) ENGINE = Memory;
❯ gecho -e '1\t\N\t2' | docker exec -i clickhouse clickhouse-client -q 'INSERT INTO test FORMAT TabSeparated'
❯ gecho -e '2\tNULL\t3' | docker exec -i clickhouse clickhouse-client -q 'INSERT INTO test FORMAT TabSeparated'
:) INSERT INTO test VALUES (3, NULL, 4);
:) SELECT * FROM test ORDER BY x;
┌─x─┬─s────┬─y─┐
│ 1 │ \N │ 2 │
│ 2 │ NULL │ 3 │
│ 3 │ \N │ 4 │
└───┴──────┴───┘ -
-
Коллеги, а если у нас внещний словарь , это таблица на сервере postgre
то как она оформляется?
<!— или источник - таблица на сервере postgre
<postgre> -
или не так?
-
в доке, про MySQL сказано только
-
<!— или источник - таблица на сервере MySQL.
<mysql> -
или <postgresql>
-
-
Как я делал с постгресным драйвером:
sudo apt-get install -y unixodbc
sudo apt-get install -y odbcinst
sudo apt-get install -y odbc-postgresql
В /etc/odbc.ini:
[DEFAULT]
Driver = myconnection
[myconnection]
Description = PostgreSQL connection to norma
Driver = PostgreSQL Unicode
Database = norma
Servername = 10.... (твой хост)
UserName = uname
Password = pwd
Port = 5432
Protocol = 9.3
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ConnSettings =
<dictionary>
<name>table_name</name>
<source>
<odbc>
<table>postgresql_table</table>
<connection_string>DSN=myconnection</connection_string> <!— может потребоваться UID=norma;PWD=norma;, но по идее не должно —->
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<flat/>
</layout>
<structure>
<id>
<name>id</name>
</id>
<attribute>
<name>some_column</name>
<type>Int32</type>
<null_value>-1</null_value>
</attribute>
...
</structure>
</dictionary> -
о спасибо
-
видимо то, что нужно
-
NULL-ы в TabSeparated указываются как \N.
Сейчас NULL-ы уже есть в последней версии сервера, но функциональность ещё не production-ready. Из-за некоторых обстоятельств её пришлось вмержить до того, как были исправлены все замечания ревью.
Из-за этого там есть ужасные, позорные недоработки. Например, вчера исправил - при парсинге не поддерживались не-NULL-строки, начинающиеся на бэкслеш. - 31 December 2016 (32 messages)
-
C наступающим всех =)
пусть в новом году ClickHouse обгонит и перегонит все Collumn Oriented databases и станет номер 1 =) по популярности -
-
=) а кто живой? а если я хочу String вставить в TabSeparated и Nested, мне надо [Строка1, Строка2, Скрока3] делать? или надо еще внутри массива строки кавычками экранировать?
-
-
-
у меня массив из строк
к сожалению =) -
-
-
-
-
-
-
-
-
https://clickhouse.yandex/reference_ru.html#Nested(Name1 Type1, Name2 Type2, ...)
вот тут я чтото не вижу примервов на вставку и на кавычки =(Документация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
ну я так и собираюсь сделать
-
но просто хочу уточнить вдруг кто уже прошел этот путь
-
-
неа =) надо экспериментировать сейчас будет
-
-
может поможет моя php версия https://github.com/smi2/phpClickHouse/blob/master/src/Quote/StrictQuoteLine.php
пример работы
https://github.com/smi2/phpClickHouse/blob/master/example/exam12_array.phpsmi2/phpClickHousephp ClickHouse wrapper. Contribute to smi2/phpClickHouse development by creating an account on GitHub.
-
ну вроде разобрался
http://take.ms/pbeOLScreenshot "C__Windows_system32_cmd.exe 2016-12-31 14.51.49.png"Monosnap — the best tool to take & share your screenshots..
-
/stat@combot
-
-
Спасибо!
-
-
Всех с наступающим Новым Годом!
-
Всех c наступающим|наступившим НГ!
Желаю закрыть планы по CH - Q2+Q3+Q4 в Q1 ;)))
От себя, микро подарок пользователям CHGui - анонс новой ветки с автоматическими графиками, с графическим pivot + resolve ~40 фичь из roadmap - в public конце января -
> Желаю закрыть планы по CH - Q2+Q3+Q4 в Q1 ;)))
Вот это отличное пожелание. Спасибо :)
С наступающим! -
-
audi или blackberry?
-