- 01 November 2017 (144 messages)
-
Joined.
-
-
-
А есть еще какие-нибудь полезные доклады с точки зрения построения оптимальных запросов и в целом каких-то best practices по работе с кликхаусом? Что-нибудь в духе https://events.yandex.ru/lib/talks/4556/Link
Приглашаем всех, кто анализирует большие объёмы данных, на встречу, посвящённую СУБД ClickHouse. СУБД ClickHouse, разработанная в Яндексе для нужд Яндекс.Метрики, почти сразу стала использоваться для решения самых разных аналитических задач. ClickHouse работает быстрее всех известных нам СУБД и легко обрабатывает петабайты данных. Это делает СУБД незаменимым инструментом в руках аналитика. Сейчас ClickHouse стала открытым программным обеспечением, так что её могут свободно использовать все. На встрече будет два доклада. Аналитик Яндекса Мария Рыжова покажет типичные задачи, которые легко решаются с помощью этой СУБД, а технический директор проекта СМИ2 Игорь Стрыхарь расскажет о созданном командой СМИ2 Tabix — графическом интерфейсе для работы с ClickHouse. После докладов пройдёт сессия вопросов и ответов. С собравшимися пообщаются аналитики Яндекса, использующие ClickHouse в самых разных сферах. Их можно будет расспросить, как эффективнее всего применять эту СУБД к конкретным задачам. Участие бесплатно…
-
Joined.
-
-
Docker может ограничивать память
-
-
-
-
-
-
-
-
-
-
-
Там вот это внутри: https://github.com/mist64/xhyve . А оно уже основано на hypervisor framework.machyve/xhyve
xhyve, a lightweight OS X virtualization solution. Contribute to machyve/xhyve development by creating an account on GitHub.
-
-
-
Подскажите, пожалуйста, как взять определенный уровеннь урла без начального куска?
У примеру есть example.com/a/b/c , вот я хочу вытащить /b/ -
Я пробовла комбинацию URLHierarchy и replaceOne, но реплейсу необходимы константы..
-
а какое условие для /b/? вторая часть?
-
Блин, на примере сработало..
-
может проще рабивать строку в массив по "/" и вытаскивать нужный элемент?
-
А вот так не рабоатет..
-
!!! точно! спасибо!
-
вот SELECT splitByChar('/', path('http://example.com/a/b/c'))[3]
-
Спасибо большое! это прямо на много лучше, потому что у меня ещё и урлы лежат без http:// и пареметров)
-
-
мм... тогда вам надо будет без path разбивать, кажется path без http/https не понимает строку
-
Добрый день, есть какие нибудь решения для обработки User-Agent на стороне Clickhouse? Я видел тикет https://github.com/yandex/ClickHouse/issues/157 , но вдруг есть какая то альтернатива? Или все процессят на стороне ETL перед загрузкой в CH ?Any plans for User-Agent header parsing? · Issue #157 · yandex/ClickHouse
Hello! I want to parse vast amount of access logs loaded ClickHouse and extract operating system, browser and device type (mobile/desktop/search crawler bot) on-the-fly. Do you have any plans to ma...
-
-
Да, не работает, и это очень не удобно. Но ничего, просто надо будет к индексу массива еденичку добавить и брать от всего урла, а не от пути
-
Joined.
-
Может быть ещё какой-то удобный способ заменять пустую строку на какое-то значение без if-ов? по аналогии с coalesce
-
а какая цель преследуется?
-
-
Оптимизация. Чтобы не пересчитывать функцию даважды вот в таком кейсе:
-
Т.е. я хочу сгруппировать по a и b из примера example.com/a/b/c
И если b пустая - то ставить туда что-то не пустое.. -
глупый вопрос, а зачем?)
-
Joined.
-
Есть раздел сайта, в котором несколько инструкций. В каждой урл имеет формат example.com/instr_a
В каждой инструкции нужно пройти несколько шагов с урлами example.com/instr_a/1, example.com/instr_a/2 итд.
Задача посмотреть сколько пользователей пришли на example.com/instr_a и сколько прошли до какого шага.
Хочу в итоге получить сводную, где будет в строках название инструкций, а в столбцах номер шага, при этом сам заход на инструкцию назвать шагом 0 -
Кто-нибудь сталкивался с длинными запросами? в табиксе норм, по http их не могу повторить
414 Request-URI Too Large -
Из докуентации: Размер URL ограничен 16KB, это следует учитывать при отправке больших запросов.
Попробуйте создать view и сделать select * form view -
я пока не пойму чем вам пустая строка мешает)))
-
хорошо, спасибо
-
Чтобы везде были цифры, которые можно отсортировать по значению
-
Через POST передавать нужно
-
select splitByChar('/','example.com/a/b/c')[2] as a, replaceOne(toString(length(splitByChar('/','example.com/a/b/c')[5])),'0','some pattern') as b group by a,b
вот какое-то извращение накидал)) -
А это не сработает, потому что если там какое-то значение, то вернётся длинна, а не значение
-
Так что надо решать через if видимо, что не красиво, ну да ладно
-
replaceRegexpOne(splitByChar('/','example.com/a/b/c')[5],'^$','0')
-
Не сработало :(
-
Насколько я помню, в кликхаусе все одинаковые выражения внутри одного запроса вычисляются единожды.
-
-
А не знает ли кто-нибудь, как работает алгоритм псевдонимов? вот если у меня есть колонки A и B. Если я напишу select A и B то получу разные данные, а если select A as B, B - то одинковые. А если select A as B, B as A - то значения будут из какого столбца?
-
-
-
-
т.е лучше не называть алиасы именами колонок, даже если это одна и та же колонка? Аля SELECT url AS url?
-
-
-
Прекрасный универсальный ответ :) А вот так писать нормально или лучше в подзапрос убирать?
-
если запрос по одному счетчику (из многих) или если по конкретным датам (не по всем), и наверное если семплирование не 1, то лучше два подзапроса. и зведочку лучше не писать , т.к. во-первых это все колонки, во-вторых в данном случае это все колонки левой таблицы.
-
Звёздочка для примера джоина. Кстати по поводу дат, если мне нужны все хиты визитов определенной даты, то, на сколько я понимаю, диапазон дат хитов лучше расширить, правильно? И если да - то на сколько?
-
-
Joined.
-
-
Всем привет! Вопрос такой: пытаюсь использовать из питона sqlalchemy, но не могу прочитать nullable переменные. Кто-нибудь знает, как это обойти?
-
-
тем временем правильный ответ такой, нашла. через ifNull
-
-
Парни подскажите настройку в конфиге, чтобы изменить путь в данным?
-
-
оно. спасибо
-
Привет!
Обновились с 1.1.54197 до 1.1.54292
Теперь раз в пару дней возникает проблема с нагруженной таблицей: в какой-то момент перестают запускаться мерджи, куски начинают накапливаться и мы достигаем лимита "Too much parts".
Помогает только рестарт одной из двух реплик -
Вроде бы мы не релизили версию 54197... Попробуйте, когда такое начинается, снять диагностику с помощью скрипта https://github.com/yandex/ClickHouse/blob/master/utils/report/clickhouse_report.sh и прислать в личку или на clickhouse-feedback@yandex-team.ruyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
что значит скользить? что-то типа курсора?
-
может получится что-то на https://clickhouse.yandex/docs/en/functions/other_functions.html#runningdifference-x сделать. Но надо подумать как)
-
-
ClickHouse нужен когда у вас очень много данных, для журнала входов это чуть более чем перебор, попробуйте посмотреть в сторону PostgreSQL и оконных функций (https://www.postgresql.org/docs/current/static/tutorial-window.html , http://www.postgresqltutorial.com/postgresql-window-function/)
-
pgsql – PostgreSQL
Чат русскоязычного сообщества PostgreSQL, здесь мы обсуждаем технические вопросы, для поиска работы и предложения вакансий есть группа https://t.me/pgsqljobs For English discussion visit https://t.me/pg_sql
-
Оконных функций нет. Простой возможности вычислять что-то в скользящем окне тоже нет. Можно рассмотреть вариант - сделать агрегацию по 5-минутным интервалам в ClickHouse; после этого данных станет немного, и их можно обработать скриптом.
-
Может меня сейчас закидают помидорами, но есть greenplum c развесистой поддержкой SQL (http://gpdb.docs.pivotal.io/510/ref_guide/sql_commands/sql_ref.html), он, конечно, не такой шустрый как ClickHouse, но способен "прожевать" достаточно большое количество данных )
-
мда . взяли сервак на хецнере, дешевле, чем ec2 на амазоне, и резльтат порадовал))
-
скорость обработки с 1.98GB/s вырос до 12.87 GB/s
-
афигеть просто
-
-
-
любой хостинг виртуалок их оверселит по какому-нибудь ресурсу, даже дорогой типа амазона
-
это факт
-
-
-
-
-
-
-
-
-
-
-
Xeon E5v4 могут кэши и bandwidth памяти алокейтить на виртуалки, кстати)
-
-
-
-
-
и это ве 1 физ сервер
-
а если шардировать
-
ваще огонь будет
-
-
-
-
-
-
а еще дали наверно nvme диски
-
если взять такой датасет для примера
SELECT
number AS time,
((time * 31) + 7) % 17 AS cc
FROM system.numbers
LIMIT 20
┌─time─┬─cc─┐
│ 0 │ 7 │
│ 1 │ 4 │
│ 2 │ 1 │
│ 3 │ 15 │
│ 4 │ 12 │
│ 5 │ 9 │
│ 6 │ 6 │
│ 7 │ 3 │
│ 8 │ 0 │
│ 9 │ 14 │
│ 10 │ 11 │
│ 11 │ 8 │
│ 12 │ 5 │
│ 13 │ 2 │
│ 14 │ 16 │
│ 15 │ 13 │
│ 16 │ 10 │
│ 17 │ 7 │
│ 18 │ 4 │
│ 19 │ 1 │
└──────┴────┘то с ним можно делать вот такие вещи
SELECT
w,
arrayReduce('avg', groupArray(cc) AS vs) AS avg,
vs[-1] AS v,
vs
FROM
(
SELECT
cc,
arrayMap(x -> (time + x), range(4)) AS window
FROM
(
SELECT
number AS time,
((time * 31) + 7) % 17 AS cc
FROM system.numbers
LIMIT 20
)
)
ARRAY JOIN window AS w
GROUP BY w
ORDER BY w ASC
┌──w─┬───avg─┬──v─┬─vs───────────┐
│ 0 │ 7 │ 7 │ [7] │
│ 1 │ 5.5 │ 4 │ [7,4] │
│ 2 │ 4 │ 1 │ [7,4,1] │
│ 3 │ 6.75 │ 15 │ [7,4,1,15] │
│ 4 │ 8 │ 12 │ [4,1,15,12] │
│ 5 │ 9.25 │ 9 │ [1,15,12,9] │
│ 6 │ 10.5 │ 6 │ [15,12,9,6] │
│ 7 │ 7.5 │ 3 │ [12,9,6,3] │
│ 8 │ 4.5 │ 0 │ [9,6,3,0] │
│ 9 │ 5.75 │ 14 │ [6,3,0,14] │
│ 10 │ 7 │ 11 │ [3,0,14,11] │
│ 11 │ 8.25 │ 8 │ [0,14,11,8] │
│ 12 │ 9.5 │ 5 │ [14,11,8,5] │
│ 13 │ 6.5 │ 2 │ [11,8,5,2] │
│ 14 │ 7.75 │ 16 │ [8,5,2,16] │
│ 15 │ 9 │ 13 │ [5,2,16,13] │
│ 16 │ 10.25 │ 10 │ [2,16,13,10] │
│ 17 │ 11.5 │ 7 │ [16,13,10,7] │
│ 18 │ 8.5 │ 4 │ [13,10,7,4] │
│ 19 │ 5.5 │ 1 │ [10,7,4,1] │
│ 20 │ 4 │ 1 │ [7,4,1] │
│ 21 │ 2.5 │ 1 │ [4,1] │
│ 22 │ 1 │ 1 │ [1] │
└────┴───────┴────┴──────────────┘но если у вас много данных, то может это работать и не будет. -
toStringCutToZero как оказывается сильно просаживает производительность
-
без этой функции 20GB/s с ней 30GB/s
-
точней наборот
-
с ней 20, без нее 30
-
-
Пробовал использовать huge pages два года назад. Сначала попробовал on demand huge pages при аллокации больших кусков памяти (для столбцов, для хэш-таблиц...).
https://github.com/yandex/ClickHouse/commit/60054d177c8bc190e8187c7c5f5e8495a1957a04
Результат такой: почти во всех случаях разницы нет, но в одном редком случае прирост производительности более чем в 3 раза.
После этого обрадовался и поставил версию в продакшен. Но за несколько дней производительность сильно деградировала и стала хуже, чем раньше.
Причина, скорее всего в том, что для обычных страниц делается memory compaction в ядре, а для huge - не делается. В результате физическая память фрагментируется и аллокации тормозят.
В результате пришлось откатить. Но можно было бы обойти проблему, если использовать static huge pages и свой аллокатор из них. Это не пробовал в виду того, что сложнее делать.dbms: removed madvise because it is bad [#MTRSADMIN-1703]. · yandex/ClickHouse@60054d1ClickHouse is a free analytic DBMS for big data.
-
-
-
-
-
-
-
Пока не пробовал. Надо посмотреть.
-
Наибольший положительный эффект проявляется при случайных доступах в память, в диапазоне около десятков мегабайт. Такие случайные доступы - агрегация, DISTINCT, IN, JOIN.
-
-
-
Это то, что система постоянно делает для дефрагментации памяти - переносит физические страницы на новые места, без изменения виртуальных адресов.
-
-
-
-
Я даже не знаю точно, почему всё стало плохо через два дня. И это самая простая гипотеза - наверное больше фрагментация памяти. Да, как будто недоработка.
-
-
-
-
-
Есть идея - совместить аллокатор (для более-менее крупных аллокаций) с кэшом для всяких промежуточных данных (данных, прочитанных с диска; промежуточных результатов вычислений). Для него получится более естественным образом использовать huge pages.
- 02 November 2017 (274 messages)
-
-
-
-
С ними надо аккуратнее. Запросто можно попасть на Skylake c багнутым микрокодом.
Подробнее тут https://lists.debian.org/debian-devel/2017/06/msg00308.html
Ловил проблемы на E3-1275 v5 (PX61nvme).
Думаю имеет смысл пополнить раздел https://clickhouse.yandex/docs/ru/operations/tips.html#hyper-threading -
Идентифицировать проблему сложно, но лечится легко
-
Мы взяли px91 + 2 nvme
-
@khamin_vs а как лечится?
-
перешивкой микрокода )
-
Охренеть))) это делается удаленно? Vitaliy
-
да. PX91 и выше этим вроде не болеют, но проверить стоит
-
так это от проца или от диска?
-
@khamin_vs я не очень знаю что это)
-
skyLake
-
почитаю обязательно
-
от проца и партии. в статье все описано
-
На самом деле если у вас достаточно свежая ОС то вам не следует заморачиваться с этим, ОС каждый раз при загрузке вкатывает микрокод (соответственно ОС получает обновления микрокода вместе с остальными обновлениями пакетов), это все сделанно для того, чтоб когда в очередной раз найдут какую-то проблему в процессоре не выпускать новые и не бегать по всем пользователям и менять, а просто накатить некий патч который данную проблему исправляет/прикрывает
-
ubuntu 16.04 xenial
-
-
вроде свежачок
-
точней стабильный)
-
16.04 из коробки проблемы не решила
-
свежачок щас 17.04)
-
это пугает
-
пришлось руками накатывать intel-microcode из офф репозитория
-
17.04 на сколько мне известно тоже
-
-
именно
-
а какой пакет парни? я конечно еще почитаю, но может есть быстрый ответ. а то уже сегодня стартуем продакшн
-
@khamin_vs @kshvakov
-
Ubuntu – Details of package intel-microcode in xenial-updates
Processor microcode firmware for Intel CPUs
-
-
)))
-
утро)
-
не забудь только подключить updates репозиторий
-
спасибо
-
может глупый вопрос, но: в рекомендациях есть упоминание фс ext4 и xfs. а на cephfs кто-нибудь размещал? каковы будут возможные грабли и будут ли?
-
-
Не прошивкой, а апдейтом в момент загрузки оси. Там простая процедура - делается initrd специальной тулзой и ставиться как первый, раньше стандартного
-
а есть какая-нибудь возможность посмотреть на пропущенные при импорте строки с включенной опцией input_format_allow_errors_?
-
"один большой массив" дисков. не реорганизовывать структуру
-
Распределённый и сетевой. Для бд которая сама умеет в распределенность, это не имеет смысла
-
-
согласен, спасиб
-
Joined.
-
приветствую. подскажите: существует ли connection pool для Java?
-
Нет.
-
Мы используем через хикари, вроде без проблем
-
да. я и имел ввиду хикари. я его для мускуля сейчас использую. то есть хикари на 100% поддерживает clickhouse?
-
тогда еще вопрос: умеет ли clickhouse дропать данные из таблиц по истечению времени. хотим применить для логов. чтобы они там хранились нное время и сами дропались из таблиц без нашего участия. такое возможно?
-
-
блокировок при этом никаких не будет на вставку новых данных?
-
-
пока дропаются старые?
-
спс!
-
-
Joined.
-
Никто не скрещивал https://www.rstudio.com/ с ClickHouse под macOS, я этой штукой не пользуюсь, а вот наш аналитик да, поэтому если кто знает что и как там, расскажите как их скрестить ?RStudio | Open source & professional software for data science teams
RStudio provides free and open source tools for R and enterprise-ready professional software for data science teams to develop and share their work at scale.
-
Подскажите. А есть какой-нибудь способ загружать данные из mysql помимо выгрузки в CSV?
-
какое скрещивание подразумевается? там датасеты вполне классическим образом импортируются..
-
-
посмотрите на https://github.com/hannesmuehleisen/clickhouse-r может получится на этой основе сделать шаблон R, в который ваш аналитик будет дописывать просто поведение по полученной выборкеGitHub - hannesmuehleisen/clickhouse-r: Rstats client for ClickHouse (https://clickhouse.yandex)
Rstats client for ClickHouse (https://clickhouse.yandex) - GitHub - hannesmuehleisen/clickhouse-r: Rstats client for ClickHouse (https://clickhouse.yandex)
-
-
тут в одном соседнем новостном канальчике чуваки показали https://github.com/flant/loghouse вот такую штуку
-
Вроде мускул как внешний словарь можно подключить
-
Всем драсьте. Столкнулся со странной проблемой чтения данных из CH. Использую https://github.com/kshvakov/clickhouse
Делаю банальный Query и получаю 0 записей хотя если в консольке повторить тот же запрос там будет много записей. В дебаге информации нет ни какой. Пусто, ошибок тоже нет. Прям как то неожиданно и даде не знаю куда копать. Может кто сталкивался с пододобнымю Буду признателен за подсказкли куда посмотреть что проверить.GitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouseGolang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
-
Нет база одна - что называется под ногами
-
Код покажите
-
@kshvakov
Да вроде все просто
—---------------
db, e := sql.Open("clickhouse", fmt.Sprintf("tcp://%v?debug=%v&compress=true&username=%v&password=%v&read_timeout=60&write_timeout=60", server, debug, user, password))
if e != nil {
return nil, e
}
rows, err := db.Query(query)
if err != nil {
return 0, fmt.Errorf("Query error:\n%v\n", err)
}
cols, _ := rows.Columns()
count := 0
for rows.Next() {
count++
...
}
—--------------- -
-
@kshvakov
—---------------—
clickhouse][connect=1][prepare] SELECT sum(effective_price * (100/(100 - if(isNull(payload__fee_percent), 0, payload__fee_percent))))/1000 as fee, sum(if(agg__events_weight >= 25, 1, 0)) as event_25, sum(if(agg__events_weight >= 50, 1, 0)) as event_50, sum(if(agg__events_weight >= 75, 1, 0)) as event_75, sum(if(agg__events_weight >= 100, 1, 0)) as event_100, sum(bidfloor) as sum_bidfloor, sum(raw_price) as sum_raw_price, sum(click) as sum_click, sum(payload__payment) as sum_payment, sum(effective_price) as sum_effective_price, sum(imp) as sum_imp, country as country FROM agg WHERE if(isNull(install), 0, install) = 0 AND toDate(bid_timestamp) <= '2017-11-01' GROUP BY country
[clickhouse][connect=1][send query] SELECT sum(effective_price * (100/(100 - if(isNull(payload__fee_percent), 0, payload__fee_percent))))/1000 as fee, sum(if(agg__events_weight >= 25, 1, 0)) as event_25, sum(if(agg__events_weight >= 50, 1, 0)) as event_50, sum(if(agg__events_weight >= 75, 1, 0)) as event_75, sum(if(agg__events_weight >= 100, 1, 0)) as event_100, sum(bidfloor) as sum_bidfloor, sum(raw_price) as sum_raw_price, sum(click) as sum_click, sum(payload__payment) as sum_payment, sum(effective_price) as sum_effective_price, sum(imp) as sum_imp, country as country FROM agg WHERE if(isNull(install), 0, install) = 0 AND toDate(bid_timestamp) <= '2017-11-01' GROUP BY country
[clickhouse][connect=1][read meta] <- data: packet=1, columns=12, rows=0
[clickhouse][connect=1][rows] <- progress: rows=290515, bytes=17560768, total rows=3112960
[clickhouse][connect=1][rows] <- progress: rows=622592, bytes=39845888, total rows=0
[clickhouse][connect=1][rows] <- progress: rows=434900, bytes=26801408, total rows=0
[clickhouse][connect=1][rows] <- progress: rows=612958, bytes=40261504, total rows=0
[clickhouse][connect=1][rows] <- progress: rows=716697, bytes=45868608, total rows=0
[clickhouse][connect=1][rows] close
[clickhouse][connect=1][stmt] close
—----------------- -
@kshvakov Тот же самый SQL в консоле
—----------------
SELECT
sum(effective_price * (100 / (100 - if(isNull(payload__fee_percent), 0, payload__fee_percent)))) / 1000 AS fee,
sum(if(agg__events_weight >= 25, 1, 0)) AS event_25,
sum(if(agg__events_weight >= 50, 1, 0)) AS event_50,
sum(if(agg__events_weight >= 75, 1, 0)) AS event_75,
sum(if(agg__events_weight >= 100, 1, 0)) AS event_100,
sum(bidfloor) AS sum_bidfloor,
sum(raw_price) AS sum_raw_price,
sum(click) AS sum_click,
sum(payload__payment) AS sum_payment,
sum(effective_price) AS sum_effective_price,
sum(imp) AS sum_imp,
country AS country
FROM agg
WHERE (if(isNull(install), 0, install) = 0) AND (toDate(bid_timestamp) <= '2017-11-01')
GROUP BY country
—---------------
выдает
...
20 rows in set. Elapsed: 0.435 sec. Processed 3.04 million rows, 194.56 MB (6.98 million rows/s., 446.94 MB/s.) -
-
-
-
@Civiloid Понял спасибо буду смотреть по логу КХ
-
-
-
-
Если можете создать кейс (структуру таблицы + данные + код) для воспроизведения можно сюда написать https://github.com/kshvakov/clickhouse/issues
-
@kshvakov
Обработал но ошибки нет даже распечатал колонки
—------------------—
Columns: [[sum_effective_price sum_imp sum_click sum_payment event_75 sum_bidfloor sum_raw_price fee event_25 event_50 event_100 country]]
—------------------— -
Ок понял попробую в лог KХ еще заглянуть может там что интересное будет.
-
-
@kshvakov я еще иногда вижу что проскакивает ошибка
https://github.com/kshvakov/clickhouse/blob/58c555f03a371215afe7e1db07232826fe17aaa6/clickhouse.go#L266kshvakov/clickhouseclickhouse - This is a Golang driver for ClickHouse column-oriented database management system
-
Но она как то рандомно срабатывает
-
Я попробую кейс составить спасибо
-
-
@kshvakov Немного дезориентировал возможно это другая ошибка вот текст
—-------------
Query error:\n[rows] unexpected packet [16] from server\n"
—------------- -
-
Она возникает рандомно и похоже связана с конкурентным использованием одного инстанса db который я постороил через sql.Open("clickhouse", "tcp://...")
-
-
При конкурентом он сам вам несколько соединений создаст
-
@kshvakov
Да да я вижу в дебаге несколько коннектов эт верно но она возникает когда именно конкурентно использую. если 1 запрос то ошибок не вижу подобных
Версия КХ 1.1.54292 -
-
Хорошо попробую сделать проектик с этим кейсом.
-
@artemalemasov @kshvakov еще полезно попробовать другую ОС, я помню вот этот баг воспроизводился легко на MacOS но не воспроизводился на linux : https://github.com/kshvakov/clickhouse/issues/34 , обычно связано с фрагментацией пакетовtoColumn type fails on high-batch load · Issue #34 · kshvakov/clickhouse
Observed behaviour: on high batch load toColumn types randomly fails Expected behaviour: no failure while database is up Environment: go version go1.8.1 darwin/amd64 Golang SQLDriver 1.1.54213 Clic...
-
@kenota Понятно. Я использую Ubuntu. И клиент и сервер оба на Ubuntu.
-
Там проблема не в макоси была, а в криворукости автора библиотеки )))
-
-
если помнишь кстати, мой баг который воспроизводился когда сервер и клиент за 5-6 мс друг от друга были, а запросы были жирными
-
-
-
-
а ченжлога нет пока?
-
-
Я не дождался кафки - пришлось написать свою реализацию )
-
-
-
Сегодня в течение дня.
-
Joined.
-
А есть пример, как это чудо работает?
-
https://clickhouse.yandex/docs/en/table_engines/kafka.html есть документация
-
-
схема простая, создается таблица с engine kafka, там указывается адрес брокера, топик, группа и формат (из тех что умеет CH) Сама по себе эта таблица ничего не делает, к ней цепляется Materialized View, после этого начинается постоянный забор данных из кафки пачками (настраивается)
-
-
-
-
-
А CH может по HTTP протоколу плюнуть 400 ошибку? Просто в логах CH вообще тишина.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
вот не всегда, иногда кому-то ещё нужен "мусор" именно в таком виде /=
-
-
-
но wire-size ощутимо больше
-
-
-
-
-
-
-
-
-
Доброго времени суток.
Подскажите как синхронизировать реплики между собой?
Ситуация получилась след-щая : одна реплика в кластере отстала от своего соседа(второй реплики) на ~600M
и по этому когда делаешь запрос на подсчет инсертов в распределенную таблицу кол постоянно скажет на эту величену.
Проверил все отсальные реплики и получается только один шард имеет разброс по репликам.
Что я делал что бы оно синхронизировалось - сменил лидера в шарде, на ту которая имеет полное количество данных, простым перезапуском одной реплики. Ну и та которая отстает была лидером. -
А как вы решаете вопрос, что функция выполняется параллельно, для разных кусков данных (пусть и сортированных)?
-
-
-
-
-
-
-
-
-
Ребят, проблема. Есть большой SQL запрос, который нельзя передать как query параметр. Запрос передается постом, но с файлами которые отдаются через multipart. Как в таком случае пропихнуть сам query в запрос?
-
Кто-то сталкивался с таким?
-
Не знаю, подойдет ли вам такой вариант, но можно создать view и таки впихнуть запрос в ?query
-
У меня динамически генерируется запрос (
-
Вьюха не подходит. В запросе участвуют данные, которые передаются файлом как временная таблица
-
Если query затолкать в multipart, то падает с empty query
-
в очереди на обоих репликах по "1"
-
@garikanet а у вас нет такой проблемы с отправкой файлов и жирным запросом? я имею ввиду ваш клиент, который на php
-
По "1" это как?
-
Как запустить сервер кликхауса на 0.0.0.0, а то он по дефолту на локалхосте работает?
-
Только в конфиге /etc/clickhouse-server/config.xml править?
-
-
-
да, поменять на ::
-
Значит всё хорошо, репликация идёт. Может, какая-то ошибка в конфигурации? Проверьте в system.replicas, что обе реплики смотрят в один путь в ZK.
-
-
-
-
Нет не сталкивался
-
аттач отдельно файла через \CURLFile + POST query + "Content-Type", "multipart/form-data"
-
Синхронизировать можно, выполнив DETACH PARTITION и потом ATTACH PARTITION на "правильной" реплике (будет временное окно, когда данных в партиции не будет). Только сначала сделайте бэкап ;) Интересно понять, как так получилось. В .err логе нет ничего интересного?
-
-
-
-
вот такое в err log сыпится на обоих нодах
2017.11.02 15:23:10.129048 [ 29 ] <Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too much parts. Merges are processing significantly slower than inserts., e.what() = DB::Exception (from 192.168.1.145:10049) (in query: INSERT *********) VALUES), Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x30d6226]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x137053f]
2. clickhouse-server(DB::MergeTreeData::delayInsertIfNeeded(Poco::Event*)+0x39b) [0x3247aeb]
3. clickhouse-server(DB::ReplicatedMergeTreeBlockOutputStream::write(DB::Block const&)+0x48) [0x3244ce8]
4. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x419) [0x3057589]
5. clickhouse-server(DB::MaterializingBlockOutputStream::write(DB::Block const&)+0x37) [0x3055847]
6. clickhouse-server(DB::AddingDefaultBlockOutputStream::write(DB::Block const&)+0x281) [0x33cb951]
7. clickhouse-server(DB::ProhibitColumnsBlockOutputStream::write(DB::Block const&)+0x5c) [0x33c6d7c]
8. clickhouse-server(DB::SquashingBlockOutputStream::finalize()+0x3f5) [0x3404425]
9. clickhouse-server(DB::SquashingBlockOutputStream::writeSuffix()+0x11) [0x3404591]
10. clickhouse-server(DB::DistributedBlockOutputStream::writeToLocal(DB::Block const&, unsigned long)+0x95) [0x3230515]
11. clickhouse-server(DB::DistributedBlockOutputStream::writeAsyncImpl(DB::Block const&, unsigned long)+0x245) [0x3236d15]
12. clickhouse-server(DB::DistributedBlockOutputStream::writeSplitAsync(DB::Block const&)+0x99) [0x3237009]
13. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x419) [0x3057589]
14. clickhouse-server(DB::MaterializingBlockOutputStream::write(DB::Block const&)+0x37) [0x3055847]
15. clickhouse-server(DB::AddingDefaultBlockOutputStream::write(DB::Block const&)+0x281) [0x33cb951]
16. clickhouse-server(DB::ProhibitColumnsBlockOutputStream::write(DB::Block const&)+0x5c) [0x33c6d7c]
17. clickhouse-server(DB::SquashingBlockOutputStream::finalize()+0x3f5) [0x3404425]
18. clickhouse-server(DB::SquashingBlockOutputStream::writeSuffix()+0x11) [0x3404591]
19. clickhouse-server(DB::TCPHandler::processInsertQuery(DB::Settings const&)+0x31e) [0x137d98e]
20. clickhouse-server(DB::TCPHandler::runImpl()+0x6ab) [0x137e11b]
21. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x137ebfb]
22. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x3aa8a7f]
23. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x13b) [0x3aaeebb]
24. clickhouse-server(Poco::PooledThread::run()+0xb7) [0x3d19d87]
25. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x3ce5dc5]
26. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f44665ac6ba]
27. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f4465bcd3dd] -
-
Joined.
-
Нет - при пропуске битых строк ничего не выводится.
-
Есть TabSeparated. Примерно то же самое... Для получения, можно выполнить mysqldump —tab ...
-
Да, может - если HTTP запрос некорректный или слишком большой. Если слишком большой - то отправляйте POST-ом.
-
Да, сталкивались - при передаче внешних файлов, запрос нельзя передать POST-ом. Это недоработка.
-
Да, это гарантируется.
-
Да, это нормально - агрегатные функции вызываются только для аргументов, где нет NULL. Пока другой специальной обработки NULL в агрегатных функциях не требовалось.
-
-
Результат подзапроса с сортировкой, будет обработан одним потоком.
-
-
-
Если версия достаточно старая, то не помешает обновить. Например, проблема вида "отстающая реплика может быть лидером" была давно решена.
-
Стоит заменить на ноль (toDateTime(0)).
-
-
-
-
>>> Возможность загружать модели CatBoost и применять их к данным, хранящимся в ClickHouse.
А есть примеры ? дока / тесты - на посмотреть ?) -
Changelog неполный. Пиши дальше :)
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Спасибо!
-
Нужны подсказки :)
-
YandexTeam - большой поклон за PARTITION BY )
-
-
Хотя эта версия не очень старая (менее двух месяцев), обновить не помешает.
-
обновимся.
Подскажите пожалуйста а что могут значит вот такого рода папки в локальной таблице
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 17:47 tmp_fetch_20170901_20170902_4360783_4360783_0/
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 16:18 tmp_fetch_20170901_20170904_4360784_4360784_0/
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 17:48 tmp_fetch_20170901_20170905_4360785_4360785_0/
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 17:24 tmp_fetch_20170901_20170906_4360786_4360786_0/ -
Данные, которые скачивались с реплики, но их скачивание было прервано. Временные директории будут удалены через некоторое время.
-
-
Если данные успешно передаются по сети (в replication_queue нет ошибок), то всё должно быть Ок.
-
-
А планируется что-то сделать с этим? ) у меня там куча джоинов и оберток с подзапросами из-за чего запрос большой (
-
Подзапросы все ещё нельзя в VIEW?
> Запрос CREATE MATERIALIZED VIEW x TO y (позволяет указать существующую таблицу для хранения данных материализованного представления). -
-
systemd-юниты легко пишутся, в принципе
-
можно и самому намалевать
-
У нас такое случается достаточно регулярно, когда ноды КХ теряют связь с ZooKeeper.
Некоторые таблицы перестают накатывать изменения.
Это видно в system.replicas, разница между log_max_index и log_pointer становится большой.
Я в таких случаях делаю detach/attach таблице с проблемой, она перечитывает очередь и накатывается -
-
-
-
Но я не понял причину проблемы - почему реплика отставала. Чтобы разобраться, надо было бы изучить подробнее. И это сильно зависит от вашей инфраструктуры...
-
Есть задача во внутреннем трекере, которая пока не запланирована. Она небольшая - примерно на пол дня, но я пока не уверен, когда сделаем.
-
Пока нет.
-
Супер! Спасибо! У нас такие запросы редко бывают, но бывают )
-
Переход нет - ведь systemd есть не везде, а init скрипты везде работают. Один из разработчиков говорит, что неплохо бы сделать сразу все варианты - init, upstart, systemd. Но я не понимаю, зачем - выглядит как пустая трата времени. В общем, пока отговорили.
-
-
Это выглядит, как одна из старых проблем - существовала ситуация, когда длинные мержи мешали переинициализации реплики после восстановления сессии с ZK. Но мы это исправили и уже давно не наблюдали таких проблем.
-
-
> У нас 1.1.54284
Это релиз от 30 августа. -
-
вам подкинуть юнит на системд? он простой с виду
-
я думаю, ничего страшного в пулл-реквесте нет
-
по крайней мере лично я буду благодарен, может, даже от себя добавлю
-
Да. Заранее спасибо!
-
-
Обновил Tabix ( master )
доп. дока: https://tabix.io/doc/tips_ru/
Log: https://tabix.io/doc/Changelog/Tips ru - TabixTabix DB Gui
-
Спасибо!
-
Нзч)
-
Идея с detach partition была не удачна.
между репликами пошел обмен данными, в каталоге локальной таблици создались вот такие вот папки
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 20:59 tmp_fetch_20170901_20170911_4360828_4360828_0/
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 21:03 tmp_fetch_20170901_20170912_4360829_4360829_0/
drwxr-x--- 2 clickhouse clickhouse 4096 Nov 2 20:59
в них льются данные, место оказалось меньше надо.
Остановтиь этот процесс просто перезапускам реплик шарда не получилось
Теперь получается так что та реплика которая отставала имеет намного больше данных чем "нормальная" , плюс "отстающая" реплика теперь при любых раскладах становить лидером. т.е если работают две реплики то если перезапустить "отстающую" на некторое время лидером становится нормальная и потом лидерство снова переходит к " отстающей"
Подскажите пожалуйста как остановаить это движение?
Попробовал на отстающей сделать detach partition(для той же партиции где были расхождение) и он отпал по таймауту( -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
я прямо в зукипер сходил, думаю это должно быть одно и тоже
[zk: zookeeper-01(CONNECTED) 8] ls /clickhouse/tables/shard01/db.events_local_tv20/replicas/clickhouse-hw-02/queue [queue-0012852250, queue-0012852251, queue-0012852252, queue-0012852257, queue-0012852258, queue-0012852259, queue-0012852253, queue-0012852254, queue-0012852255, queue-0012852256, queue-0012850996, queue-0012850997, queue-0012850998, queue-0012850999, queue-0012852239, queue-0012852240, queue-0012852241, queue-0012852248, queue-0012852249, queue-0012851501, queue-0012852246, queue-0012851500, queue-0012852247, queue-0012852244, queue-0012852245, queue-0012852242, queue-0012852243, queue-0012851504, queue-0012852229, queue-0012851505, queue-0012852228, queue-0012851502, queue-0012851503, queue-0012851508, queue-0012851509, -
-
-
сделать типа rm всех этих записей и запускать ноду?
но у меня из-за моих манипуляций пошло расхождение по количеству данных в партиции по репликам.
может тогда очистить очередь руками, потом руками "удалить" данные по партиции на проблемной ноде и запустить ее - и реплики сами разберутся что у кого есть у что надо реплецировать? -
-
-
-
- 03 November 2017 (154 messages)
-
При DETACH PARTITION, партиция переносится в директорию detached на всех репликах.
При ATTACH PARTITION, берётся партиция из директории detached на том сервере, где выполняется запрос, и добавляется в рабочий набор. На остальных репликах данные для этой партиции скачиваются.
При этом, на остальных репликах, старые данные в директории detached остаются лежать. Они больше не нужны, но занимают место. Их можно удалить вручную. -
-
-
-
-
-
-
-
-
-
Столбцы нужно явно указывать при работе с джоинами
-
А есть реквест на данную фичу?) или создать.
-
я понимаю, если столбцов сотни и тысячи)
-
Известные грабли, давно хотим исправить.
-
Я думаю нечто подобное имеется у ребят в трекере по доработке джоинов, но я думаю можно спросить у них
-
Спасибо. Было б неплохо.
-
Еще бы вот такую штуку поправили
SELECT
action_date,
action_at
FROM
(
SELECT
action_date,
action_at,
action_code
FROM distributed.events
WHERE (action_date = today()) AND (action_at > (now() - 3600))
ORDER BY action_at ASC
LIMIT 1 BY action_code
LIMIT 2
)
→ Progress: 229.80 million rows, 2.46 GB (104.05 million rows/s., 1.11 GB/s.) 98%Received exception from server:
Code: 10. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Not found column action_code in block. There are only columns: action_date, action_at. -
-
-
В новой версии так:
t + INTERVAL 1 MONTH
или проще:
addMonths(t, 1) -
О, замечательно! Документация ведь обновляется под новые функции или лучше следить за чейнджлогом и коммитами?
-
t — это DateTime?
а что тогда получится, если t=2017-01-31 00:00:00?
31 февраля, т.е. 3 марта, или 28 февраля? -
ну, или даже если просто Date, то вопрос остаётся
-
Круто, спасибо, часто им пользуюсь. Где теперь находятся сохраненные запросы?
-
-
Привет. Подскажите по сжатию.
Проанализировали столбцы, выяснили, что на наших данных львиную долю занимают interger колонки (сотни гигабайт), в то время как строковые жмутся просто прекрасно. Есть ли смысл как-то играться с движками сжатия, чтобы получить бОльшую компрессию именно интовых колонок? Уменьшение производительности в данном случае менее критично, чем место на диске. -
Респект!
-
Хороший вопрос ))) Востановлю этот ф-ционал - сегодня / завтра поправлю)
-
спасибо, а то у меня там нужные запросы лежат
-
они восстановятся?
-
Должны
-
Если сейчас нужен -> Открываем консоль разработчика -> Application -> Storage -> Local Storage -> Find by key : sqlHistory2
https://monosnap.com/file/4hC783eJ2kLJNnYgLvtG8XOFkkDSBfFile "screencast 2017-11-03 12-42-22.mp4"Monosnap — the best tool to take & share your screenshots.
-
Всем привет, что-то tabix не может подключится к БД, пару дней назад все работало - что-то поменялось?
-
БД работает, приложение с ним работает
-
Такая же проблема
-
http://joxi.ru/82QQ0Qs1RYPy2d - на сервере ничего не менялось1509704048398 (166 kb) uploaded November 3, 2017 Joxi
made using Joxi.net
-
А там в ip или ip:8123 ?
-
ip:8123
-
1509704274848 (71 kb) uploaded November 3, 2017 Joxi
made using Joxi.net
-
А версию сервера не помните ?
-
у нас server version 1.1.54236.
-
Спасибо - видимо из за этого, т/к в последних версиях появилось output_format_json_quote_denormals
Поправлю скоро -
Спасибо, и огромное спасибо за сам инструмент, очень удобно работать)
-
Обновил Tabix
- Галка "Server < 1.1.54276" в настройках подключения
- Вернул - сохраненные запросы -
есть контакт) спасибо большое, инструмент огонь!)
-
Joined.
-
-
-
😊 не срослось)
-
Привет всех. Ктото пробывал запускать клик в kubernetes? Есть ли у когото опыт?
-
-
если хотите потерять данные то да )
-
Почему потерять?
-
погуглите "docker aufs problem"
-
лучше смотреть в сторону kubernetes + cri-o
-
-
google cloud это совсем другое
-
там от докера только название
-
-
я не потерю данных, а кто работал и имеет опыт клика и куба?
-
думаю поднмать сначало zookeeper а потом в него запускать клик, вот думаю как лучше сделать
-
-
у нас клик в кубе, ничего необычного
-
нашел вариант (https://github.com/count0ru/k8s-clickhouse) думаю попробывать чтото такоеcount0ru/k8s-clickhouse
Deployments of Yandex Clickhouse for Kubernetes. Contribute to count0ru/k8s-clickhouse development by creating an account on GitHub.
-
интересно, но у нас свои деплойменты
-
zook возьму https://github.com/kubernetes/contrib/tree/master/statefulsets/zookeeper. А образ клика вы сами собираете или используете официальный @mvikharevkubernetes-retired/contrib
[EOL] This is a place for various components in the Kubernetes ecosystem that aren't part of the Kubernetes core. - kubernetes-retired/contrib
-
Свой, но основанный на базовом яндексовском
-
добавляем туда пару пакетов, конфиги словарей и подобное
-
Привет всем. У кого-то есть опыт работы с https://github.com/killwort/ClickHouse-Net ?GitHub - killwort/ClickHouse-Net: Yandex ClickHouse fully managed .NET client
Yandex ClickHouse fully managed .NET client. Contribute to killwort/ClickHouse-Net development by creating an account on GitHub.
-
-
Парни, есть какой либо воркараунд для сохранения значения null?
-
В числовую колонку
-
не работает форматирование столбца
-
Nullable(int) тип?
-
Просто int. Спасибо за наводку
-
Спасибо, работает!
-
Пока нет решения, т.к числа x64 - передаются в виде строк, чтобы поддерживать числа уровня "18017313154537368237" (((
Может позже придумаю что то -
хорошо
-
не критично
-
Есть, работает (причем с .net core 1). Там один момент, датаридер нада читать как multiple resultsets
-
Могу в личку обратиться?
-
Без проблем)
-
В новом релизе есть способ партиционировать таблицу по дням. Есть ли / будет ли механизм альтера таблицы и смены партиционирования? Или по старинке - создаем новую таблицу рядом -> перегоняем все данные -> переключаемся -> удаляем первую?
-
-
Эх :(
-
Подскажите плз, в чем принципиальное отличие при выполнении SELECTа в этих вариантов:
1) куча MergeTree таблиц нарезанных по дням и доп критерию. Все OPTIMIZED FINAL и каждая из одного куска. Собраны вместе в одну Merge таблицу.
2) одна таблица с новой фишкой "PARTITION BY", суммарно с таким же количеством кусков как в первом варианте.
Ведь наверно CH сохраняет крайние значения колонок, по которому делается нарезка партиций и не обращается к лишним кускам?
А что мешает это делать в таблицах в целом и с аналогичной скоростью выполнять запрос с Merge?
По тестам выходит что с "PARTITION BY" в разы быстрее чем с нарезкой на отдельные таблицы. -
Думаю что при использовании условия на _table будет так же быстро как и partition by
-
> Ведь наверно CH сохраняет крайние значения колонок, по которому делается нарезка партиций и не обращается к лишним кускам?
Верно.
> А что мешает это делать в таблицах в целом и с аналогичной скоростью выполнять запрос с Merge?
Для обычных MergeTree с помесячным партиционированием условие на дату тоже используется для выбора кусков. Конечно, если вы партиционируете не только по дате, но и по чему-либо ещё, то второе условие будет использоваться только в таблице нового стиля.
Скорее всего проблема с производительностью для Merge-таблицы связана со статическим распределением потоков выполнения. Предположим у вас max_threads=16 и для ровного счёта Merge-таблица над 16 MergeTree. Вы задаёте запрос с условием, под которое подпадают только данные одной таблицы. Получается они будут вычитываться в 1 поток. А для таблицы с PARTITION BY в 16 потоков. -
У нас случилось интересное.
Я делала detach partition, а в это время (как выяснилось) шел мерж. Они не поделили system.columns, и в результате во всех трех столбцах с размерами были цифры типа 18446744073709331264.
1.1.54292
Потом во время каждого мержа были ошибки типа
<Error> <table_name> (Data): Possibly incorrect subtraction: 7621 - 170117 = 18446744073709389120, variable <column_name>.bin.file_size -
Всем привет!
вопрос прямой и простой. Можно ли как-то сделать так чтобы формат Pretty выводил не 10 000 строк, а большее количество? -
-
-
-
Да кстати, я посылаю запрос в котором участвуют все таблицы, т.е. не ограничиваю его по дате или тому доп.критерию. Например запрос с like на одну из ~100 колонк. Поэтому и ожидаю, что такой запрос должен разойтись параллельно на все таблицы и выполниться за приблизительно одинаковое кол-во времени и там и там. А сладывается ощущение, что с Merge они действительно вычитываются в конце последовательно.
—----------
### clickhouse-partition_by (1498 кусков)
select count() from test_partition_by where column1 like '%test';
1 rows in set. Elapsed: 0.914 sec. Processed 291.04 million rows, 6.97 GB (318.44 million rows/s., 7.63 GB/s.)
select * from test_partition_by where column1 like '%test';
88 rows in set. Elapsed: 15.183 sec. Processed 291.04 million rows, 7.76 GB (19.17 million rows/s., 511.41 MB/s.)
—----------
### clickhouse-merge+mergeTree (1020 таблиц, состоящих из 1183 кусков) т.е. в основном все из одного куска.
select count() from test_merge where column1 like '%test';
1 rows in set. Elapsed: 1.031 sec. Processed 291.04 million rows, 6.97 GB (282.21 million rows/s., 6.76 GB/s.)
select * from test_merge where column1 like '%test';
61 rows in set. Elapsed: 120.695 sec. Processed 193.00 million rows, 252.44 GB (1.60 million rows/s., 2.09 GB/s.)
(ps. в последнем результатов меньше так как в конфиге ограничили время до 120сек.) -
Алекс, Татьяна, спасибо - очень помогли
-
Joined.
-
Когда запрос читает из MergeTree в несколько потоков, используется work stealing - если один из потоков раньше закончил, он может выполнить часть работы за других потоков. Для Merge-таблицы этого нет.
Ещё, для Merge отключается оптимизация "перенос условий в PREWHERE". Можно попробовать попереносить условия вручную. -
Интересно... Заведёте issue?
-
-
Спасибо, попробую. А для Merge планируется такой механизм добавлять или такой случай слишком частный?
-
-
> А для Merge планируется такой механизм добавлять или такой случай слишком частный?
Вообще, динамическое распределение работы чаще всего сильно оптимальнее статического :) Так что случай не частный, но добавить не так просто. Ну и мы рассчитываем, что с появлением PARTITION BY кейсов для Merge-таблиц станет меньше. -
Это работает в точности так как задумано и совпадает по поведению с другими СУБД - прибавление месяца/года идёт "с насыщением". То есть, 31 октября + 1 месяц = 30 ноября.
-
Выглядит как дурацкий баг. К счастью, некорректная статистика по размеру столбцов не приводит к плохим последствиям. Если перезапустить сервер, то исправится само. Баг будем искать.
-
Привет, коллеги. Делаю бекап с помозью FREEZE PARTITION. Получиться ли нормальное сжатие, Если упаковать это в gzip ,
-
?
-
или может посомветуете как лучше всего делать бекап базу?
-
базы*
-
Так как данные уже сжаты, то дополнительно сжатие с помощью gzip либо не даст результата, либо даст небольшой результат.
-
Вариант нормальный. FREEZE PARTITION, затем копирование получившегося бэкапа на удалённый сервер.
-
Стоит иметь ввиду, что это только бэкап данных. Определения таблиц из metadata директории тоже не помешает на всякий случай скопировать.
-
спасибо
-
вот думаю как сделать, чтобы сделать фриз партишн сразу всех таблиц в одну shadow/папку
-
Если я правильно помню, можно указать префикс. FREEZE PARTITION 2017
-
префикс я указал, но я говорю про разные таблицы
-
по сути щас я делаю 5 таблиц 5 запросов - получается 5 папок shadow/*
-
Да, для разных таблиц нет.
-
я решил это скриптиком уже вприципе. после выполнения запроса делаю перемещение и по итогу после всех запросов делается норм папка.
-
Алексей, а сжатие, что в конфиге влияет на скорость работы селектов?
-
На всякий случай ещё рекомендую - если версия меньше 54304, то надо обновить - в предыдущих версиях была проблема с тем, что бэкап мог быть неатомарным.
-
хм.
-
ClickHouse 1.1.54304
-
стоит
-
интересно, кликхаус указывает операционке, чтобы она не засоряла файловый кэш данными из смерживаемых кусков? В принципе, итоговый кусок тоже желательно не помещать в файловый кэш, т.к. он может не понадобиться в ближайших запросах. Это могло бы увеличить объем полезно закэшированных данных.
-
Да. Если данные сжаты сильнее (что значит - используется zstd вместо lz4), то SELECT-ы, которые не упираются в IO и используют не слишком сложные вычисления (то есть, для которых разжатие занимает существенную долю времени), будут работать медленнее.
В целом разница до нескольких раз в худшем случае.
Оценить можно так - запустить sudo perf top, если в топе LZ4_decompress_fast, то после перехода на zstd возможно заметное замедление. -
Всё Ок.
-
спасибо большое
-
Поэтому в конфиге можно включить сильное сжатие только для старых данных. Там не очень удобные критерии для понимания - доля куска от всех данных и минимальный размер куска. Сжатие будет делаться при мерже в достаточно большой кусок.
-
Был план такое сделать. Специально добавили для этого поддержку O_DIRECT, причём, с AIO. Для мержей пока не осмелился попробовать включить - надо аккуратно пробовать. Действительно есть соображение, что они вымывают page cache. Но для мелких мержей включать нельзя, потому что есть большое преимущество в том, что они не сразу пишут на диск, а сразу только в dirty pages. Хотели включать по какому-то порогу.
-
можно для начала добавить настройку с минимальным размером куска, для которого использовать O_DIRECT, и выставить ее в 100500Тб по умолчанию, чтобы все работало как раньше. Тогда желающие могли бы потестить эту настройку в продакшн и подобрать оптимальное значение :)
-
-
Да. И там уже аккуратно всё реализовали для этого.
-
-
Это добавлялось и для чтений и для записей.
По той причине, что для чтений, в случае не AIO, работает prefetch, что позволяет перекрывать работу с диском и вычисления. В случае O_DIRECT такого нет - это выглядит так, что например, твоя программа 30% времени использует CPU, а 70% времени - диск. Для записей аналогично - запись идёт в кэш, а физически записывается на диск когда-нибудь позже, и вычисления тоже перекрываются с IO. -
Для мержа существенно менее полезно, чем для SELECT-ов. А сначала предполагалось использовать в основном для SELECT-ов - чтобы один класс запросов не портил работу других запросов.
-
Joined.
-
В итоге эту настройку не включили ни для каких SELECT-ов. Проблема оказалась в том, что в случае обычных чтений, всё работает магически, тогда как в случае с O_DIRECT, нужно тщательно подбирать размеры буферов, чтобы получить хотя бы такую же производительность. Для RAID-массивов приходится указывать очень большие буферы... (например, обычный размер буфера для чтения - 1 MB, но в случае O_DIRECT на RAID-массиве из 8 дисков с чанком 1 MB получается что оптимальный размер - что-то типа 30 МБ). Тем не менее, в случае холодных данных, при тщательном выборе настроек, удаётся сделать, чтобы O_DIRECT работал несколько быстрее, чем обычные чтения.
-
-
Да, надо попробовать включить на части серверов...
-
короче, оказалось, что магия O_DIRECT слишком хрупкая?
-
Да. Если использовать по серьёзному, то надо писать userspace page cache.
-
-
Могут вымывать, но возможно, что в Linux всё-таки чуть более умный алгоритм вытеснения из кэша, который учитывает одноразовый sequential доступ?
-
-
Можно изучить закэшированность файлов с помощью программы vmtouch.
-
-
блин, vmtouch не входит в стандартную поставку убунты. Придется устанавливать из исходников (
а пока есть мысли по поводу минимального размера куска для O_DIRECT по умолчанию:
min_part_size_for_direct_merge = ram_size * (vm.dirty_ratio / 100)
В убунте vm.dirty_ratio = 20, получается что на сервере со 100Гб оперативы O_DIRECT мерж включится для кусков больше 20Гб -
> блин, vmtouch не входит в стандартную поставку убунты. Придется устанавливать из исходников (
К счастью, это очень простая утилита.
> а пока есть мысли по поводу минимального размера куска для O_DIRECT по умолчанию
Разумно, спасибо! -
прямо сейчас мержится вот такой кусок:
:) select source_part_names, result_part_name, total_size_bytes_compressed from system.merges\G
SELECT
source_part_names,
result_part_name,
total_size_bytes_compressed
FROM system.merges
Row 1:
──────
source_part_names: ['20171102_20171103_38116342_38119529_5','20171103_20171103_38119530_38122811_5','20171103_20171103_38122812_38126119_5','20171103_20171103_38126120_38129163_5','20171103_20171103_38129164_38132266_5']
result_part_name: 20171102_20171103_38116342_38132266_6
total_size_bytes_compressed: 162198802986
vmtouch показывает, что этот кусок полностью закэширован:
$ sudo vmtouch /opt/clickhouse/data/default/events/tmp_merge_20171102_20171103_38116342_38132266_6
Files: 12
Directories: 1
Resident Pages: 2752594/2752594 10G/10G 100%
Elapsed: 0.35555 seconds -
-
-
Хорошо, значит легко получить пользу.
-
-
Минутка рекламы - вышла новая версия chproxy, где добавлена поддержка кэширования ответов - https://github.com/Vertamedia/chproxy/releases/tag/1.6.0
В кэше есть защита от dogpile effect, предотвращающая одновременную отправку одинаковых запросов в кликхаус. Один запрос уйдет в кликхаус, а остальные будут ждать закэшированного ответа от первого запроса.
Кэширование ответов может быть полезно при построении отчетов, когда пользователь перезагружает одни и те же отчеты много раз, как это часто происходит в системах аналитики. Например, почасовые отчеты "за сегодня" или отчеты "за текущую неделю/месяц" с разбивкой по дням.Vertamedia/chproxychproxy - ClickHouse http proxy
- 04 November 2017 (22 messages)
-
Скорее всего все операции записи имеет смысл делать только o-direct через буфер размером 100*X Мб.
-
-
Звучит отлично, нужно будет попробовать на запросах от Графаны, там мы как раз видим проблему с одинаковыми запросами, но пока решение было: Nginx + возможность выставить round в плагине
-
@garikanet транспонирование таблицы огонь
-
-
Да очень удобная ф-ция)
-
А транспонирование где сейчас доступно?
-
Tips ru - Tabix
Tabix DB Gui
-
Круто но я уже подумал что это в ch появилось :(
-
-
Если вы про tabix, то мне это очень облегчает проводить анализ данных в широких таблицах
-
хороший инструмент, но что с огнелисом?
-
Лиса не поддерживается, только хрониум : Chrome,opera,yabrowser
Точнее так, а постараюсь поправить чтобы он запускался хотя бы, но будет большое красное предупреждение) -
я в общем то поэтому и спрашиваю ) каков её фатальный недостаток?
-
-
Недостатка нет в самой лисе, недостаток и ошибка tabix изначально был выбран плохой framework - angular 1 (
Получилось что в лисе очень медленно происходит обновление и рендеринг, т.е после нажатия на кнопку хром тратит 10мс, в лисе 100мс и это все очень заметно... просто "лагает" в ней)))
В мечтах уйти на другой фреймфорк в табиксе)))
А пока Requirements:
Google Chrome version up 55 ) -
Спасибо за развёрнутый ответ :)
-
Кстати, а Firefox 57 пробовали? Там розовые пони какают бабочками так быстро, что даже на глаз заметно.
-
Да читал про него, что они все переписали в рендрере. Пока не пробовал, но попробую самому интересно - как этот старый и "весёлый" фремворк там себя проявит)))
Кросбраузерность это вообще печаль и ресурсов просто "не ма" поддерживать что то кроме хрома в macos, баги и ошибки в других браузерах я правлю после жалоб юзеров : так заработало в Opera и YaBrowser. Скоро заведу FF -
Обновил tabix
Быстро потестил, теперь работает в FF 56, Safari, вроде и не лагает)
Но хром онли)) -
@milovidov_an на Highload планируете отдельный meetup по CH, как год назад?
-
Да.
Но я не стал ничего бронировать (аудитории маленькие и непонятно было с временем, чтобы не пересекалось с докладом).
Поэтому надежда снова на то, чтобы в какой-то комнате вписать в расписание маркером. - 05 November 2017 (9 messages)
-
-
Joined.
-
Кто вкурсе, какой порядок аргументов в функции argMaxIf док-ии пока нет по ней
-
-
Я говорю:
CREATE MATERIALIZED VIEW if not exists mybase.zuzuzu ...
А мне говорят:
DB::Exception: Table mybase..inner.zuzuzu already exists..
А дропнуть mybase.zuzuzu нельзя, её нет:
DB::Exception: Table mybase.zuzuzu doesn't exist..
Чё происходит-то? ) А этот иннер-то как дропать?
Перед этим возможно админы жесточайше ребутнули сервак посреди выполнявшегося первого указанного в этом посте запроса. -
"Если где-то нет кого-то, значит кто-то где-то есть! Только где он, этот кто-то, и куда он мог залезть?"
Поищите в SELECT * FROM system.tables, вдруг поможет -
Ну найду я там этот иннер. Но сделать-то с ним я ничего не могу.
-
-
Почему? Если заквотировать обратными кавычками, то всё можно.
- 06 November 2017 (79 messages)
-
-
-
Нормальная документация скоро будет. Если есть вопросы, задавайте тут, отвечу 🙂
-
-
-
Понял, спасибо! Просто увидел, что при создании таблицы с partition by нет дополнительных параметров в движке таблицы (индекс, ключ сэмплирования, размер блока). Не понятно куда их передавать...
-
Выражение индекса задаётся с помощью ORDER BY, ключ сэмплирования с помощью SAMPLE BY а размер блока вот так: SETTINGS index_granularity = 8192 (не обязательно). Ещё в SETTINGS теперь можно потаблично задавать разные тонкие настройки из https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/MergeTree/MergeTreeSettings.h
-
-
-
вопрос для любителей поиграться с логами: никого не интересует плагин для fluentd к кликхаусу?
-
-
я намалевал плагин для отправки данных из fluentd в кликхаус по HTTP, и думаю, где его держать — в корпоративном репозитории или на гитхабе
-
-
-
очень!
-
я сейчас его тестирую на флюентовском @type http, но, как я понял, внутри самого флюента все логи становятся JSON'ами
-
-
-
-
ты знаешь флюент? он полученные данные может сам парсить
-
я ещё не задумывался этим вопросом, для начала хочу складывать все логи с боевых серверов в одно место =)
-
а ELK не хочу брать по религиозным соображениям
-
это я в курсе, мне было интересно все стандартно или все же какие-то ограничения есть
-
по идее, ограничений никаких
-
через час закину на гитхаб со своими конфигами, там уже посмотрим
-
-
-
😍
-
-
там messagepack используется как стандартный способ сериализации, а на выходе уже то угодно
-
как я выяснил опытным путём, при попадании единицы лога вызывается функция плагина format(tag, time, record), внутри которой я сделал TSV плюс пара приколов
-
могу подробнее описать свои изыскания, но это уже оффтопик =)
-
ну и на вот это можно посмотреть https://github.com/flant/loghouseGitHub - flant/loghouse: Ready to use log management solution for Kubernetes storing data in ClickHouse and providing web UI.
Ready to use log management solution for Kubernetes storing data in ClickHouse and providing web UI. - GitHub - flant/loghouse: Ready to use log management solution for Kubernetes storing data in C...
-
я смотрел на него, это было буквально в тот день, когда я сам загорелся идеей fluentd-clickhouse. но у них там целая система со всеми плюшками, а у меня только один плагин
-
а не def emit(tag, es, chain) ?
-
при этом там упор на кубернетис, я не смог разобраться, можно ли его перестроить под себя
-
https://docs.fluentd.org/v0.12/articles/plugin-development
# This method is called when an event reaches to Fluentd.
# Convert the event to a raw string.
def format(tag, time, record)
[tag, time, record].to_json + "\n"
## Alternatively, use msgpack to serialize the object.
# [tag, time, record].to_msgpack
endWriting plugins | FluentdTo install a plugin, please put the ruby script in the /etc/fluent/plugin directory.
-
может то что нужно? https://github.com/ento/fluent-plugin-out-httpfluent-plugins-nursery/fluent-plugin-out-http
A generic fluentd output plugin for sending logs to an HTTP endpoint. - fluent-plugins-nursery/fluent-plugin-out-http
-
-
не знал про него! и я бы, наверное, сам перешёл на него, если б не тот момент, что он не поддерживает буфферизацию.
-
Ну splitByChar возвращает массив, а IN ожидает String :)
-
-
)) повышаю вас до капитана)
-
так а какой ответ вы ожидали?)
-
для буферизации есть плагин ) в конце на странице указано на него https://github.com/kazegusuri/fluent-plugin-bufferizekazegusuri/fluent-plugin-bufferize
fluent-plugin-bufferize - A fluentd plugin that enhances existing non-buffered output plugin as buffered plugin.
-
-
has(splitByChar(',', 'a1,a2'), user)
-
Круто!
-
а, я сразу полез в код =)
тогда остаётся понять, как его сконфигурировать (выставить TSV или другой кликхаусный формат в body, как задать нужный URI etc), и можно пускать -
но я для начала свой напишу
-
SELECT has(splitByChar(',', 'a1,a2'), user)
Received exception from server:
Code: 47. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Unknown identifier: user. -
-
-
-
-
-
Документация тут отстаёт - это уже давно не так :)
-
-
Кхм. Как я понял - has проверка наличия элемента. То есть во первых будет тип операции булевский, во вторых если брать конкретно эту строчку - то для таблицы будет осуществляться поиск всех user и сравниваться с полученным при сплите результатом. И первое и второе не подходит. Например
-
-
-
-
-
-
-
На самом деле ваш способ скорее всего лучше :) Если в :users много разных юзеров, IN будет эффективнее - так как поиск будет по хэш-таблице. Индекс для IN тоже может использоваться (если он есть) - но только в случае константных выражений, а не подзапросов. Так что если строка :users константная, имеет смысл её рассплитить на клиенте и уже так посылать в IN.
-
если кто-нибудь ещё интересуется плагином для fluentd, то вот https://github.com/kam1sh/fluent-plugin-clickhousekam1sh/fluent-plugin-clickhouse
Fluentd output plugin to Yandex ClickHouse. Contribute to kam1sh/fluent-plugin-clickhouse development by creating an account on GitHub.
-
👍
-
-
-
openbsod/nginx2clickhouse
Parsing and sending nginx logs to clickhouse db real-time - openbsod/nginx2clickhouse
-
там был какой-то баг с парсингом, как я помню, и вроде как он уже исправлен
-
это не так страшно, я сам всё мечтаю о возможности указать другую таймзону в HTTP-запросе
-
-
Коллеги, а можно как-то узнать количество строк в запросе КХ?
-
ну то, Что внизу в результате запроса показывается вывести в отдельный столбец например
-
Вроде как везде, SELECT COUNT(*) …
-
Если я правильно понял, в чем не уверен, то вывести те данные которые clickhouse-client пишет. Есть вот такой формат https://clickhouse.yandex/docs/en/formats/json.html в котором эти данные есть
-
видимо да, сам только что нашел, спасибо
- 07 November 2017 (101 messages)
-
-
-
Joined.
-
-
Перлы Лёши Миловидова с публичных выступлений в развлекательных целях :)
-
-
В CH пока нет Update'ов. Но вы держитесь.
В CH Update'ы будут! -
-
-
-
команда работает над этим
-
Лёша говорит, что такого не говорил 😞
-
Однако в документик высказывание попало
-
-
Это не Миловидов, и я, каюсь, забыл имя и фамилию, но по-моему вполне достойно того канала
-
SELECT dictGetFloat64OrDefault('normalization', 'B', (toDate('2017-09-01'), 'fsdfds'), CAST(10. AS Float64))
Received exception from server:
Code: 368. DB::Exception: Received from server:9000, ip. DB::Exception: Bad cast from type N2DB11ColumnConstI13StrongTypedefISt6vectorINS_5FieldESaIS3_EENS_8TupleTagEEEE to N2DB11ColumnTupleE. -
это баг или фича? :)
-
Это Юра, замечательный разработчик из Метрики.
-
Всем привет, используем для изменяемых данных движок таблицы ReplacingMergeTree для автоматической дедупликации. Столбец с версией updateAt (dateTime)
Заметил, что если делаем запрос LIMIT 1 то вытаскивается последняя именно запись, то есть нужная. Этому можно верить, или там вероятностная выборка и не гарантирует сортировку по колонки с версией? -
-
А ещё интересна судьба вот этих проблем:
https://github.com/yandex/ClickHouse/issues/859
https://github.com/yandex/ClickHouse/issues/971
https://github.com/yandex/ClickHouse/issues/1087
https://github.com/yandex/ClickHouse/issues/1164
)Wrong query optimisation throws out required columns from subqueries. #859Query below works fine. SELECT * FROM ( SELECT learnerHash, passed - eventTime AS diff FROM statements GLOBAL ANY INNER JOIN ( SELECT learnerHash...
-
Ни то, ни другое. В случае словарей со сложным ключом, надо обернуть ключ в кортеж - например, написать tuple(10.0).
-
Кто на Highload++ хочет встречаться сегодня? Мы можем захватить какую-нибудь переговорку. Предлагайте, какое удобное время?
-
попробую с другой стороны зайти - что должно быть четвертым аргументом? ключ? значение?
если значение
> SELECT dictGetFloat64OrDefault('normalization', 'B', (toDate('2017-09-01'), 'fsdfds'), tuple(CAST(10. AS Float64)))
> Received exception from server:
> Code: 43. DB::Exception: Received from server:9000, ip. DB::Exception: Illegal type Tuple(Float64) of fourth argument of function dictGetFloat64OrDefault, must be Float64..
если ключ:
> SELECT dictGetFloat64OrDefault('normalization', 'B', (toDate('2017-09-01'), 'fsdfds'), (toDate('2017-09-01'), ''))
> Received exception from server:
> Code: 43. DB::Exception: Received from server:9000, ip. DB::Exception: Illegal type Tuple(Date, String) of fourth argument of function dictGetFloat64OrDefault, must be Float64.. -
-
словарь ComplexKeyHashed, ключ (Date, String) три атрибута Float64
-
А когда обеды заканчиваются? Я как будто ничего не выбрал.
-
Третий аргумент (ключ) - кортеж. Четвёртый (default) - Float64.
-
Если так не работает - значит баг и надо смотреть подробнее.
-
Кажется 15:30-16:30 последние. Талончик на ресепшене надо было взять
-
ну в первом варианте я в третий аргумент передавал кортеж, в четвертый - Float64 как раз, и получал инвалид каст, причем по названиям судя, ощущение, что из плюсовых потрохов эксепшен
-
Могу в любое время
-
Joined.
-
Привет, можно как то сделать регистронезависимый поиск?
-
Joined.
-
Joined.
-
Сделать lowerUTF8 на колонку?
-
Алексей, как вас найти на хайлоад?
-
Колонка с именами, так что перевести ее в нижний регистр не получается. Или lowerUTF8 во время выборки сделать можно?
-
Ну да, почему нет? SELECT * FROM myTable WHERE lowerUTF8(name) = 'вася'
-
Спасибо
-
-
-
Прямо сейчас - на обеде в кафетерре (там где с подносами).
-
-
-
В 16 часов в одной из переговорок рдом с залом Москва. Там есть свободные... Надеюсь, сможем оккупировать.
-
-
Кто-нибудь под Sierra побеждал эту ошибку?
ClickHouse/contrib/libpoco/Foundation/include/Poco/AtomicCounter.h:196:9: error: 'OSAtomicIncrement32' is deprecated:
first deprecated in macOS 10.12 - Use std::atomic_fetch_add_explicit(std::memory_order_relaxed) from <atomic> instead
[-Werror,-Wdeprecated-declarations]
return OSAtomicIncrement32(&_counter);
^ -
Не знаю. Будет много - выйдем в холл.
-
В новом stable обновили poco и проблема ушла. Или можно вставить pragma и отключить warning.
-
Встреча на втором этаже.
-
-
Можно же использовать такую конструкцию? select col as col.with.many.dots ?
-
Соответсвенно экранированные символами ``
-
Просто у меня почему то КХ ругается на них...54282 версия.
-
-
Блиииииин (
-
Очень очень печально (
-
подскажите, пожалуйста, как ведёт себя SUM() по полю, где может быть NULL: в результате получаем NULL, или же NULL-значения при суммировании пропускаются?
-
-
спс
-
-
Aliaksandr Подскажите, пожалуйста, в clickhouse-grafana, когда работаешь с шаблонами графаны (Templating) в query не поддерживаются "Global Built-in Variables" (http://docs.grafana.org/reference/templating/)? Насколько вижу, запросы улетают в кликхаус без интерполяции.Variables
Templates and variables A variable is a placeholder for a value. You can use variables in metric queries and in panel titles. So when you change the value, …
-
Здравствуйте! Это не свзано с https://github.com/grafana/grafana/issues/1909 ? Опишите, плз, на примере что вам нужно получить. Так же вы можете создать issue на гитхабе.Time range from & to as template variables #1909
Provide from & to time range as template variables. Useful when generating links in text panels.
-
Joined.
-
Возможно и оно, но странно, что в документации написано, что поддерживается.
Из документации
"The $timeFilter variable returns the currently selected time range as an expression."
А хочу я следующее: в графане есть шаблоны (Templating). При следующем запросе я получаю ошибку. Запрос в кликхаус улетает без интерполяции переменной $timeFilter -
-
-
Был похожий issue https://github.com/Vertamedia/clickhouse-grafana/issues/10Use time range filter in a template query #10
Is it possible to use time range filter (i.e. $from, $to or $timeFilter) in template query? In Grafana documentation I see "Set this only to On Time Range Change if your variable options query contains a time range filter or is dependent...
-
-
Возможно, ситуация успела поменятся - я не проверял это поведение с тех пор. Если Вы используете графану с другими датасорсами - там поддерживается такое поведение?
-
И тут есть небольшая неувязка. При использовании КХ-датасорса на странице может быть несколько панелей. У каждой панели будут свои настройки $table, $database и т.д. Когда мы говорим о темлейте, то там нет конфигуратора - соотв. как понимать, во что должен раскрыться $timeFilter?
-
Если Вам необходимо иметь актуальные данные в переменной, то можно использовать такой воркараунд:
SELECT DISTINCT operator FROM gate.dir WHERE DateColumn >= today()-7
т.е. за последние 7 дней -
-
Так и делаю, но могут быть небольшие неувязки, если данные меняются (месяц назад были, а сейчас нет, при этом график строится по "месяц назад"). Но это относительно допустимо.
-
еще можно добавить новую переменную, в которую нужно вводить/выбирать из списка кол-во дней:
$period
SELECT DISTINCT operator FROM gate.dir WHERE DateColumn >= today()-$period -
как обычно поступают с $interval
-
-
Joined.
-
Привет
-
Чем кх лучше постгре?
-
-
Они предназначены для разных задач. Какую решаете вы?
-
Колоночные СУБД — принцип действия, преимущества и область применения
Середина 2000-х годов ознаменовалась бурным ростом числа колоночных СУБД. Vertica, ParAccel, Kognito, Infobright, SAND и другие пополнили клуб колоночных СУБД и...
-
-
-
-
-
Есть для этого State
-
У меня на 6 ярдах строк мердж проходит примерно 2-3 мтнуты на replacing движке
-
У вас, наверное, ssd или очень много памяти. У нас мерж ограничен скоростью записи ~100мб/с на persistent disk storage в google cloud, а максимальный размер куска - 400Гб. Поэтому его мерж не может быть меньше 4000 секунд, а это больше часа
-
Ну да ) 96 гиг и 20 ядер ) и да, ссд
-
-
В процессор упирается?
-
ALTER прерывает выполняющиеся сейчас мержи. То есть, блокировка ALTER-а мержами вряд ли возможна - скорее дело в долго выполняющихся SELECT. Посмотрите SHOW PROCESSLIST, может быть надо убить какие-нибудь SELECT-ы.
-
Да, существует возможность хранить в столбце состояние агрегатной функции и потом мержить их. Обычно для этого используется AggregatingMergeTree, и агрегатные функции uniqState, uniqMerge.
-
Заытра переедем на емкие hdd ипосмотрим как просядем, но если честно, ио я сомневаюсь, что просядем по скорости селектов
-
отличный вопрос - сейчас изучаем это
-
может быть мой пример гипертрофирован конечно, тк у меня идет чтение 1/30 партиции (день) далее идет транспонирование (типа pivot) и далее 4 - 6 подзапросов...
-
Уже поздно смотреть, т.к. уже добавили новую колонку на все шарды. У нас селекты обычно выполняются не дольше пары минут, а alter'ы подвисали до получаса, причем только на шардах с большими мержами в момент алерта. И как только мержи заканчивались, alter'ы моментально завершались. В следующий раз посмотрю, выполняются ли в это время длинные запросы.
- 08 November 2017 (160 messages)
-
Joined.
-
Joined.
-
Парни привет. не подскажете кто-то настраивал datagrip+clickhouse?
-
-
-
Возможно, что эта проблема была актуальна раньше.
-
Работает с JDBC-драйвером, c такой-то матерью, не особенно юзабельно было, когда в последний раз смотрел.
-
спасибо. значит можно попробовать еще)
-
Чат а подскажите:
Задача: сделать словари в ClickHouse. Источник данных - проприаритарна система которая хранит только моментальное состояние (без истории) а надо что бы была история.
Я придумал следующую схему
Система —> MYSQL (?) —> ClickHouse table —> ClickHouse dict
В MySQL я планирую раз в день писать данные из «системы» и делать две даты:
1) начало действия
2) конец действия
Конец по умолчанию NULL, а если же в новой выгрузке данных по объекту нет или данны изменились (адрес например)- писать дату окончания и далее уже грузить этот слепок раз в день в CH.
Может есть лучше метод? -
Clickhouse ведь вроде умеет напрямую за словарями в MySQL ходить? Сделать композитный ключ по id + диапазон дат, должно вроде сработать?
-
Joined.
-
Подскажите, должна ли быть разница между like '%needle' и like '%needle%'? Думал, что '%needle' будет быстрее, но по моим тестам они оказалось равны
Задача по оптимизации поиска по доменам -
-
-
домен отдельное поле и в индексе
-
-
да, так и думали делать, но сначала хотели оптимизировать сам поиск
-
в некоторых случаях можно отсекать % в конце, вопрос только есть ли смысл это делать
-
-
есть вариант добавить ещё поле, где хранить обращённый домен (т.е. для домена abc.ru хранить в этом поле ru.abc), тогда, имея индекс по обращённому домену можно делать like 'needle%' — а оно с индексом работает гораздо шустрее, чем like '%needle'
-
ясно, спасибо
-
-
Joined.
-
кто-нибудь заморачивался связкой fluentd - КХ?
-
Могу ошибаться, но тут за последние 2 дня было два проекта для этого
-
Вчера в этом канале кто то выкладывал плагин и как раз обсуждали, поищите поиском)
-
-
спасибо, поищу)
-
только что проверил на выборке из 12 миллиардов строк - разница в скорости между '%needle%', 'needle%' и '%needle' составляет менее 10%, да и то это скорее всего погрешность.
Если же сравнивать Domain like '%needle%' с Domain = 'foobar.needle.com', то второй вариант быстрее первого на процентов 20. Если что, то домен у нас не входит в ключ, т.е. по всем запросам идет full scan -
Народ, а кто HighLoad? Можете плиз поискидывать, например, мне, классные высказывания Лёши для https://t.me/milovidov_perls ?Не тормозит
Перлы Лёши
-
-
у меня на 15 млрд вообще разницы нет, все 4 варианта 35-36 сек :)
-
-
Про кликхауз и зону комфорта например :)
-
Вот сейчас что-то вроде: "'это оцтой, мы могли бы сделать нормально, но не сделали" )
-
https://www.youtube.com/watch?v=Ygfwwd490mk там как раз сейчас (-4 минуты) началась трансляция выступления Алексея про КХГлавный зал HighLoad++ 2017. 8 ноября
Друзья, бесплатная трансляция главного зала конференции HighLoad++ 2017 (в расписании указан как Конгресс-холл) 8 ноября 10:00 / Как выбирать тимлидов на разных этапах роста компании / Евгений Потапов (ITSumma) 11:00 / Как я был тимлидом, а теперь – руководитель направления / Виталий Шароватов (Badoo) 12:00 / Контроль качества высоконагруженных систем / Андрей Дроздов (Avito) 13:00 / Почему ivi перешел со Sphinx на Elasticsearch / Евгений Россинский (Ivi) 14:00 / Жизнь после шардинга / Михаил Курмаев (Badoo) 15:00 / Эффективное использование ClickHouse / Алексей Миловидов (Яндекс) 16:00 / Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo) 17:00 / ElasticSearch и Heka: как мы учились просеивать слона через сито / Адель Сачков (Яндекс.Деньги) 18:00 / Почему оно не находится! / Андрей Аксенов (Sphinx) Расписание конференции: http://www.highload.ru/2017/schedule.html Трансляция остальных залов платная: http://www.highload.ru/2017/online Доставку и ускорение трансляции осуществляет…
-
-
-
-
-
-
@Civiloid А что там Прометеус второй умеет теперь в кликхаус писать?
-
есть remote storage api :) можно написать конвертер
-
есть проект - https://github.com/Percona-Lab/PromHouse но в начале он был страннымGitHub - Percona-Lab/PromHouse: PromHouse is a long-term remote storage with built-in clustering and downsampling for Prometheus 2.x on top of ClickHouse.
PromHouse is a long-term remote storage with built-in clustering and downsampling for Prometheus 2.x on top of ClickHouse. - GitHub - Percona-Lab/PromHouse: PromHouse is a long-term remote storage ...
-
А у перконы что за тула? Как я понял это для архивов, а не как замена стораджу?
-
-
-
промхаус стал адекватнее сейчас. они по крайней мере теги больше не в массиве хранят)
-
Вы у себя не думаете на Прометес переходить?
-
у нас системные метрики (под которые пром хорошо подходит) это 10% нагрузки
-
-
не понимаю, почему пром плохо подходит для метрик приложения?
-
давай в церковь лучше, тут оффтоп это
-
-
Кто ж послал этого человека на хайлоад? Всё очень плохо. Да и врёт при этом.
-
-
Я думаю, можно пополнять 😬
-
о как. Это ж Миловидов.
-
Понятно, с кем, будем считать что разобрались, а наврал-то он что ?
-
ну, он так вскользь упомянул геоданные. Но мы в этом же чате выяснили, что там их нет.
-
-
Может он так сказал. Но тогда это уже не геоданные.
-
-
-
чары, стринги, инты, в случае численного представления. Но точно не геоданные.
-
-
-
-
-
Joined.
-
-
-
-
Joined.
-
-
Joined.
-
-
-
Joined.
-
-
-
очередная компания добавилась ))
-
кажется, его только что послали прямо в зале
-
гыг
-
с хайлоад
-
Joined.
-
-
-
"Засуньте длинные строки куда-нибудь ещё"
-
Joined.
-
Joined.
-
-
на ютубе главный зал
-
другие за денежку 🙁
-
https://www.youtube.com/watch?v=Ygfwwd490mk - основной зал, доклад по КХ - примерно 4 часа от начала (или -1 час от текущего)
-
-
Joined.
-
Joined.
-
-
Тупой вопрос. Делается запрос CREATE MATERIALIZED VIEW if not exists xx.bubu ENGINE = SummingMergeTree(date, (date, col1, col2), 8192, (cnt1, cnt2, cnt3)) POPULATE AS SELECT FROM xx.zuzu.
Размер xx.zuzu — 18 млрд строк. В xx.zuzu постоянно втыкается ~500K строк раз в минуту. Где-то к 50-60% исполнения запроса, сервак начинает подыхать по диску. Все прочие запросы скапливаются в очередь и она достигает предела. Индикатор прогресса сабжевого запроса показывает постоянное снижение rows/s и MB/s. Далее всё доходит до того, что сервак перестаёт отвечать на пинги и его ребутают.
Какими явлениями под капотом это обусловлено? Точнее, какими параметрами клиента что можно изменить, чтобы дело шло может быть и медленнее, но стабильнее? -
/stat@combot
-
-
Можно не делать POPULATE, остановите запись и сделайте MATERIALIZED VIEW без POPULATE после чего пропробуйте залить в нее данные кусками через INSERT INTO xx.bubu SELECT * FROM xx.zuzu WHERE blabla= 'X' и запустите запись в xx.zuzu
-
Запись хочется вести только в одну таблицу, из которой делалось populate. В этой таблице данных больше, а в этом создаваемом MV данные более саггрегированы.
-
populate нужен только для того, чтоб влить старые данные которые есть в таблице, причем в этом случае вы не сможете использовать в запросе WHERE (это бага), а также в MW не будут записанны данные которые ппадут в таблицу пока создается MW на нее. Вы можете создать MW без POPULATE и удобным для вас способом вогнать старые данные в MW
-
Нет, у меня ключи составные + range словарь
-
-
В каком именно запросе нельзя будет использовать WHERE? В SELECT в готовую MV ? Или в запросе который POPULATE AS SELECT?
-
-
Ну это ладно, мне тупо нужно перелить всё. А вот то, что во время создания MV туда не поступают свежие данные - это жесточайше!
-
Всем привет, используем для изменяемых данных движок таблицы ReplacingMergeTree для автоматической дедупликации. Столбец с версией updateAt (dateTime)
Заметил, что если делаем запрос LIMIT 1 то вытаскивается последняя именно запись, то есть нужная. Этому можно верить, или там вероятностная выборка и не гарантирует сортировку по колонки с версией? -
-
Если селектить с FINAL, то по идее вообще проблем не будет, не?
-
Joined.
-
Добрый вечер.
Сегодня обновили сервера с полугодичной версии 23x на последнюю 310 и получили такую картину... -
-
Несколько проектов, несколько кластеров кликхаус.
Те, что кушали 2гига памяти, стали по 8 в течение нескольких часов кушать.
Те, что 6 - стали 32. И так далее. -
А может и больше. Просто уперлись в память и ООМ выпилил.
-
-
-
Система - Убунта. Так же обновили ядро с 4.4 до 4.11.
Сейчас откачу на паре машин ядро и посмотрю что из этого выйдет. -
мержи больших кусков не должны кушать память - https://github.com/yandex/ClickHouse/issues/931Reduce memory usage during vertical merge · Issue #931 · yandex/ClickHouse
Preface We tried increasing max_bytes_to_merge_at_max_space_in_pool from default 100Gb to 500Gb in order to reduce the number of parts for a huge table according to the suggestion from @alexey-milo...
-
-
Около 20 машин разной конфигурации для 4 проектов - везде одно и то же.
-
в репах яндекса только последние версии. если какой-нить вариант откатиться на ранние?
-
и как поведет себя кх, если я с данными 310 откачусь на 213?
-
Joined.
-
Как себя поведет чёрт его знает (хотя мы реплицируем со свежих версий в старые), но если есть свободная машина то можно попробовать на ней, возможно у вас старые версии остались в /var/cache/apt/archives/, мы просто подняли собственный репозиторий (чего и всем желаем) с https://www.aptly.info/ это достаточно удобно
-
Предыдущие собранные пакеты не хранятся. Можно собрать заново.
> и как поведет себя кх, если я с данными 310 откачусь на 213?
Если не использовались новые фичи, то откатится нормально. -
На всякий случай ещё посмотрите на другие метрики - количество одновременных запросов (Metrics.Query), мержей (Metrics.Merge), количество кусков (AsynchronousMetrics.MaxPartCountForPartition).
Исходя из этого поймём, является ли проблема регрессией в одном из релизов (кстати, между 54213 и 54310 больше пол года разницы, что несколько усложняет поиск) или следствием изменения поведения системы при релизе, или следствием изменением каких-то настроек по-умолчанию.
Также можно изучить зависимость потребления памяти от характера нагрузки. Временно отключить один из серверов от одного класса нагрузки и посмотреть, как это влияет на потребление оперативки. -
у меня вопрос по поводу форматов вставки. Есть таблица exapmle ( Date Date DEFAULT toDate(DateTime), DateTime DateTime, tag String, Num Int32) ENGINE = MergeTree(Date, Date, DateTime, 8192), и я думал, что если вставлять в неё данные через CSVWithNames, опустив поле Date, то всё прокатит и поле подхватится из DateTime. но не прокатило =(
так и должно быть или у меня какая-то корявая табличка или csv-шка? -
-
-
спасибо!
-
Отдельные поля можно пропускать, если указать нужные поля явно в запросе INSERT:
INSERT INTO table (c1, c2...) FORMAT CSVWithNames -
запомню про оба способа. ещё раз спасибо
-
Всё-таки на 54213 откатываться не рекомендую, так как менялся формат записей в логе репликации. Возьмите хотя бы следующий stable. Сервер будет ругаться на новый формат при репликации.
Если вы хотите, чтобы мы могли посмотреть на вашу проблему в живую, пишите в личку. -
Joined.
-
-
Joined.
-
-
нет ни у кого ссылки на полный доклад Алексея на HL++?
-
Так их еще не выложили. Недели через 3
-
за вчера просто все есть, а за сегодня половина только
-
-
Жаль, что вам не понравился доклад. Мне приходится использовать некоторый стиль подачи информации, который нравится не всем.
Могу сказать точно, что никаких обманов в докладе не было. Про регионы, что имеется ввиду:
- есть справочник вида id, parent_id, type, name,
например
213 225 6 Москва
225 0 4 Россия
и есть встроенные в ClickHouse функции:
regionIn, regionToCity, regionToCountry, regionToContinent, regionHierarchy, regionToName...
Подробнее смотрите в документации:
https://clickhouse.yandex/docs/ru/dicts/internal_dicts.html
https://clickhouse.yandex/docs/ru/functions/ym_dict_functions.html
В докладе эта функциональность упоминается в качестве одного из примеров, когда нужно хранить вместо строк идентификаторы.
Может быть, вы имели ввиду другие гипотетические возможности, такие как справочники ip range -> region или coordinates -> region; и таких справочников действительно нет. -
Там видео трансляции обрезалось на последние 4 часа. Должно исправиться через некоторое время.
-
-
спасибо за лекцию, одна из немногих причин не жалеть что потратил 2 дня на ЭТО
-
Писать пачками. Например, одна пачка в секунду - нормально.
-
-
Посмотрите на мержи. Скорее всего от большого количества вставок приходится мержить часто и много кусков. Это может создавать нагрузку на диск.
-
Доброй ночи, Алексей. Появилась странная проблема при вставке из выборки:
После выполнения INSERT INTO table2 SELECT toDate('2017-01-01'), field2, field3, ... FROM table1 WHERE date = '2016-12-10'. Выполняю запрос SELECT count() from table2 (таблица изначально пуста) и получаю число около 15М записей, но это сильно меньше того, что должно получиться, проверяю запросом SELECT count() FROM (SELECT toDate('2017-01-01'), field2, field3, ... FROM table1 WHERE date = '2016-12-10') и получаю 395M, что и ожидаю. При этом при вставке прогресс показывает, что обработал как раз около 395M записей. Версия ClickHouse 1.1.54292. -
А table2 - это что?
-
И table1 и table2 просто локальные таблицы, содержащие шардированные данные, структуры таблиц одинаковы, движки разные: ReplicatedReplacingMergeTree для table1 и ReplacingMergeTree для table2
-
Можно посмотреть с двух сторон:
Проверить, влияет ли Replacing, создав рядом обычную MergeTree и вставляя в неё.
Посмотреть, какие именно данные вставились, а какие - нет, выбрав некоторое небольшое подмножество данных с помощью WHERE.
Я пока не сталкивался с проблемой, чтобы с INSERT SELECT из каких-либо MergeTree в какие-либо MergeTree что-то было не так. -
Спасибо, сейчас попробую. Я раньше тоже не сталкивался, регулярно выбираю подмножества таким образом для тестов, сегодня в первый раз наткнулся.
-
-
Алексей, либо знающие люди, подскажите в каком направлении смотреть. На докладе слышал про возможность вычленить из строки домен - в каком модуле код искать?
-
Функции:
domain(str)
domainWithoutWWW(str) - 09 November 2017 (203 messages)
-
-
спасибо
-
буду завтра исходники грепать
-
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Functions/FunctionsURL.h
Кстати, оно всё-таки оптимизировано не на 100%. Чтобы сделать лучше, надо добавить использование:
https://github.com/yandex/ClickHouse/blob/master/libs/libcommon/include/common/find_first_symbols.hyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
мне прям стыдно, что Вы за меня в 3 часа ночи по исходникам ходите, спасибо
-
В данный момент
metrics.Query: 11
metrics.Merge: 3
asynchronous_metrics.MaxPartCountForPartition: 26 -
Я так понял, что MaxPartCountForPartition вычисляемое. Часто меняется в диапазоне 26~32.
-
generic.heap_size и generic.current_allocated_bytes неуклонно растут.
-
Кажется, у вас проблема с железом. 2-3 мб/с - даже на microsd не тормозит
-
-
Можно так https://youtu.be/Ygfwwd490mk?t=5h2m14s посмотретьГлавный зал HighLoad++ 2017. 8 ноября
Друзья, бесплатная трансляция главного зала конференции HighLoad++ 2017 (в расписании указан как Конгресс-холл) 8 ноября 10:00 / Как выбирать тимлидов на раз...
-
Joined.
-
-
-
@clickhouse_en English speaking channel :)
https://clickhouse.yandex/docs/en/single/#replication
TLDR; like in other databse, shard - one of the servers that have some portion of data. You can use distributed table to query all those servers in parallel and this table engine will combine results for you. -
it's about tables
-
-
CREATE TABLE plexts_betaspike
(
guid FixedString(34),
ts UInt64,
dt Date,
plextType String,
categories UInt8,
team Enum8('ALIENS' = 0, 'RESISTANCE' = 1),
text String,
markup_player String,
markup_player_team Enum8('ALIENS' = 0, 'RESISTANCE' = 1),
markup_player_guid FixedString(34),
markup_text String,
markup_portal_addr String,
markup_portal_guid FixedString(34),
markup_portal_latE6 Int32,
markup_portal_lngE6 Int32,
markup_portal2_addr String,
markup_portal2_guid FixedString(34),
markup_portal2_latE6 Int32,
markup_portal2_lngE6 Int32
)
ENGINE = MergeTree(dt, (guid, dt), 8192) -
-
-
Уже читал, не раз.. всётаки непонимаю параметров при созданиё
-
Зачем там шард указать? Как мне указать если нехочу шардов?
-
-
-
-
-
-
-
btw
https://youtu.be/Ygfwwd490mk?t=18123 - с привязкой ко времени на начало выступления Леши про кликхаусГлавный зал HighLoad++ 2017. 8 ноябряДрузья, бесплатная трансляция главного зала конференции HighLoad++ 2017 (в расписании указан как Конгресс-холл) 8 ноября 10:00 / Как выбирать тимлидов на раз...
-
Joined.
-
Joined.
-
Мне казалось, что Алексей вчера упоминал про возможнсть кастомного партиционирования. Где можно почитать об этом?
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
Я подобное решаю с помощью default materialized, но приходится хранить обе копии
-
Подскажите, пожалуйста, есть ли легкий способ установить clickhouse на linux alpine без компиляции?
-
контейнер?
-
спасибо!
-
Не, именно на alpine, не докер-образ clickhouse ) или быть может есть репозиторий apk где он есть собранный
-
Привет
Весь лог завален ошибками вида "Unexpected file minmax_date.idx in data part" - это с чем связано? -
-
Если есть docker alpine образ clickhouse, то можно посмотреть как он собирается
-
Официальный на ubuntu
-
-
Попробую, спасибо ) тогда проще в deb-пакете подсмотреть что куда ставится
-
-
-
Еще вопрос по индексу. Какой вариант организации колонки с битовой маской будет выгоднее, если по ней надо фильтровать и она является частью индекса в mergetree таблице. Сделать ее с типом Array, заливать фцией bitmaskToArray, а искать при помощи has?
Или оставить ее просто int-ом и искать битовыми функциями? -
-
-
-
Joined.
-
Нет так подробно, как исходниках тестов, но основая суть и примеры синтаксиса:
https://www.altinity.com/blog/2017/11/8/custom-partitioning-in-clickhouse-1154310Custom partitioning in ClickHouse 1.1.54310 — AltinityNov 8, 2017 ClickHouse introduced a new major feature in version 1.1.54310 - it is a custom partitioning for tables with MergeTree engine. Before it enforced to use Date field for partitioning and the only choice to partition by month. The new version allows much more flexibil
-
Спасибо!
-
-
Можно упомянуть в статье, что старый синтаксис эквивалентен партиционированию по toYYYYMM(FlightDate). Также важно иметь ввиду, что разница в размере таблиц получается за счёт хранения временных данных в течение нескольких минут после вставки.
-
Про эквивалентность старого синтаксиса я добавил. Насчет компрессии -- надо посмотреть
-
Там все же маленькие кусочки по дням получаются, обязаны хуже сжиматься.
-
-
-
-
-
-
-
Подскажите, пожалуйста, почему optimize table patition final отрабатывает и не схлопывает данные?
-
Я где-то не так понял документацию?
-
Если я правильно понимаю, то после optimize, count() == uniqExact(primary key) должно быть
-
-
Вот у меня тоже самое, но не схлопывается
-
Правда у меня просто ReplacingMergeTree
-
-
-
У меня 1 машина с 1 КХ
-
@milovidov_an Алексей, помогите, пожалуйста
-
-
-
С вашими объемами не о чем беспокоиться
-
Добрый день! Возможно многие из вас в курсе, про сегодняшнюю проблему в OVH, так вот, наш кластер КХ как раз там, не смотря на то, что все ноды были разнесены по разным ДЦ - сегодня накрыло все 😕 пока мы в ожидании поднятия серверов, хотел бы понять, чем это обернется для кластера? Что будет если ноды войдут в строй в разное время? Из плюсов данный момент - мы остановили скрипты, которые выгружали в данные в КХ.
-
Joined.
-
Joined.
-
-
А селект с FINAL что покажет?
-
А что такое селект с final?
-
Нашёл. отработал хорошо, корректно
-
-
-
-
Но это какие-то костыли и несоответствие документации..
-
Но спасибо за подсказку!
-
-
-
Он так и делает
-
Мне кажется, вы ключ для сэмплирования указали не в соответствии с докой :) там про него ничего нет для движка ReplacingMergeTree
-
Не очевидно, если честно. Т.е. да, в разделе про ReplacingMergeTree нет ни слова про сэмплирование, но 1) оно есть в описание семейства движков 2) оно же создалось!
-
"Движок таблиц отличается от MergeTree тем, что выполняет удаление дублирующихся записей с одинаковым значением первичного ключа." И нету "и отсутсвием возможности сэмплирования"
-
-
Наверное да, но 1) не понятно как это получилось, раз записи должны были схлопуться, и 2) не понятно что теперь с этим делать (
-
Товарищи, как сделать rename колонки в таблице?
Не нашёл такой alter в доке. -
-
-
-
FINAL медленно, GROUP BY лучше
-
-
-
Можно просто сделать SET в сессии, которая создаёт таблицу. В users.xml тоже можно.
-
А, т.е. оно только для создания? для работы сервера не нужно?
-
-
-
:) CREATE TABLE graphite_xui (
:-] Path String,
:-] Value Float64,
:-] Time UInt32,
:-] Date Date,
:-] Timestamp UInt32
:-] ) ENGINE = GraphiteMergeTree PARTITION BY Date ORDER BY (Path, Time);
CREATE TABLE graphite_xui
(
Path String,
Value Float64,
Time UInt32,
Date Date,
Timestamp UInt32
)
ENGINE = GraphiteMergeTree
PARTITION BY Date
ORDER BY (Path, Time)
Received exception from server:
Code: 42. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: With extended storage definition syntax storage GraphiteMergeTree requires 1 parameters:
'config_element_for_graphite_schema' -
-
-
-
-
-
-
-
-
-
Joined.
-
Всем привет! А можно ли сделать второй раз один и тот же запрос, и при этом игнорировать кеш кликхауса? Для сверки производительности.
-
думается, у самого CH нет кэша и он пологается на файловый OS
-
или я путаю что-то )
-
-
наверно думается) второй один и тот же запрос срабатывает в разы быстрее. Если первый 20 секунд - то второй за 10мс
-
дык файловый кэш
-
прогрелся
-
первый запрос читал с дисков, второй уже из памяти
-
Ребят, подскажите пожалуйста кто работал с CH из Tableau: при любой попытке поработать с интовой колонкой в Tableau в сторону CH через ODBC кидается SQL вида: "SELECT SUM({fn CONVERT(test_tableau.i, SQL_BIGINT)}) AS sum_i_ok FROM test_tableau HAVING (COUNT(1) > 0)". И естественно получаю syntax error. Может кто сталкивался?
-
Да, сталкивались. Вы используете последнюю версию драйвера? Она должна преобразовывать CONVERT.
-
-
Releases · ClickHouse/clickhouse-odbc
ODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
-
-
-
-
Жаль, значит недоделали escape последовательности.
-
54304 версия, если быть точным
-
-
От сервера не зависит. Это недостающая функциональность в драйвере.
-
Митап в Нижнем Новгороде 24 ноября: https://events.yandex.ru/events/meetings/24-nov-2017/
-
None
-
Трансляция планируется?
-
-
Нет - в Нижнем Новгороде без трансляции.
Потом будет митап в Москве, скорее всего с трансляцией. -
В драйвере чего?
-
Это недоработка в ODBC драйвере.
-
-
если в кастомизации подключения табло к КХ прописать <customization name='SQL_CONVERT_FUNCTIONS' value='2' />, то он будет вместо CONVERT использовать CAST
-
Joined.
-
В запросе фрагмент {fn CONVERT(test_tableau.i, SQL_BIGINT)} - это некая escape последовательность, предназначенная для ODBC драйвера. Драйвер должен заменить её на что-нибудь понятное перед отправкой в сервер.
-
Это не мой случай. У меня 1360 на гитхабе
-
-
Действительно, перепутал ваш вопрос с другим. Buffer таблицы будем смотреть. Далее можно в почте (clickhouse-feedback@yandex-team.com), если будет удобнее.
-
т.е если я из Москвы то мне стоит подождать события в Москве? я уже формул даже заполнил на регистрации в Ни-Но но почту еще не подтвердил
-
-
-
В Москве и Н.Н. разные программы мероприятия. Если есть возможность и не жалко денег на поезд, то лучше и туда, и туда.
Разумеется, в Н.Н. масштаб несколько меньше. -
-
Спасибо, подтвердил адрес, только вопросы не отправил к сожалению (VDI меня печалит), буду надеятся что попаду на встречу =)
-
> на митап в мск где записываться?
Пока нигде, формочку ещё не открыли. Чуть позже. -
-
В начале декабря, примерно 10 +-3 дня.
-
@milovidov_an Алексей, а можете по optimize partition final для ReplacingMergeTree подсказать? Почему-то не схлопывается..
-
Посмотрите вывод SELECT * FROM system.parts WHERE active AND table = '...' AND partition = 'интересующая партиция'
а также SELECT * FROM system.merges
Насколько я понял, вы запускаете OPTIMIZE TABLE ... PARTITION ... FINAL, но мерж не производится.
Это возможно в следующих ситуациях:
- в партиции уже только один кусок;
- куски уже мержатся в данный момент;
- куски нельзя мержить сейчас (для них уже назначен мерж в очереди репликации; между кусками зарезервирован номер для вставки другой репликой...) -
А в Москве про CatBoost будет?
-
Будет, но не на нашем митапе, а на другой встрече. Встреча ещё не анонсирована, наверное на днях будет анонс.
-
Спасибо!
-
SELECT * FROM system.merges пустой. В партиции 6 кусков, не понимаю, мержатся ли они прямо сейчас.
Обидно, что optimize final вроде срабатывает и пишет Ok. , но на самом деле данные остаются задублированные( -
Также мерж не назначается, если на диске нет места для мержа с некоторым запасом.
-
Добрый вечер! Сегодня я уже писал, про OVH, b xnj e vtyznfv rkfcnth
-
у меня там кластер
-
4 ноды
-
2 шарда
-
по 2 реплики
-
забудь до завтра про ovh. там до сих пор трясёт всё. консистентность разъехалась, dns упали
-
у нас паблик клауд
-
он уже поднялся
-
-
у нас поднялось по 1-й реплике на каждом шарде
-
2 остальные сыпят ошибками
-
2017.11.09 22:14:43.502643 [ 1 ] <Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/default//%2Einner%2Eoverall_grouped2.sql, error: DB::Exception: The local set of parts of table .inner.overall_grouped2 doesn't look like the set of parts in ZooKeeper. There are 88 unexpected parts (44 of them is not just-written), 0 unexpectedly merged parts, 0 missing obsolete parts, 23 missing parts, stack trace:
-
По инструкции, ставьте флаг force_restore_data и запускайте.
-
Алексей, спасибо! буду пробовать
-
Вопроснемного глуповат
-
Для запуска восстановления, создайте в ZooKeeper узел /path_to_table/replica_name/flags/force_restore_data с любым содержимым
-
но как это делается?
-
Костя привет 🙂
-
О Саш
-
привет :)
-
Вас ОВХ тоже потряс сегодня?
-
не, все стабильно
-
Не обязательно в ZooKeeper
можно sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data -
Спасибо! Вроде все прошло удачно, данные сходятся на всех 4-х нодах
-
-
где-то в системных табличках должна быть инфа, если вы не про du -sh /var/lib/clickhouse/db
-
-
-
прям на лендинге https://clickhouse.yandex/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://habrahabr.ru/company/yandex/blog/273305/
То же самое на английском:
http://highscalability.com/blog/2017/9/18/evolution-of-data-structures-in-yandexmetrica.html
Зачем решили открыть в open-source:
https://habrahabr.ru/company/yandex/blog/303282/Эволюция структур данных в Яндекс.МетрикеЯндекс.Метрика сегодня это не только система веб-аналитики, но и AppMetrica — система аналитики для приложений. На входе в Метрику мы имеем поток данных — событи...
-
любопытно, а как выглядел момент, когда решили написать CH?
"задолбали все эти левые базы, дорогое и медленное, давайте свое запилим"? -
а есть запись вопросов/ответов после доклада?
-
- 10 November 2017 (68 messages)
-
В общем, по нашей проблеме...
На одном из серверов версию понизил до 1.1.54282 и память перестала утекать. -
-
Сейчас еще один сервак попилю для верности, но пока похоже, что есть регрессия между 1.1.54282 и 1.1.54310
-
-
-
Всем доброе утро и хорошего дня!
Подскажите, пожалуйста, как посмотреть запрос, который вызывает ошибку записи в базу?
] <Error> executeQuery: Code: 26, e.displayText() = DB::Exception: Cannot parse JSON string: expected opening quote: (at row 14)
куда-то пишется лог? -
system.queries табличка или какое-то похожее название :)
-
посмотрел - system.processes, но там просто написано JSONEachRow - мне бы сам этот запрос кривой поймать как-то..
-
-
-
временно лучше наверное через какой-то мессанджер, возможно. я сейчас собираю с дебагом. как нормально собрать с бандлееными либами я пока не знаю, но не думаю что проблема в них (хотя буст конечно может гадить)
-
-
Joined.
-
Joined.
-
около москвы
-
-
У CH есть какая-то возможность узнать общее число строк до LIMIT?
Пример запроса:
SELECT
S_DEVICE_TYPE,
count()
FROM pr_106.views
GROUP BY S_DEVICE_TYPE
WITH TOTALS
LIMIT 2
Он вернет две строки. А сколько всего строк? -
-
-
-
Коллеги, благодарю. В документации то это было описано (rows_before_limit_at_least) :)
-
-
-
-
Ребят, на конфе услышал о наличие движа spritelog. но нигде его описание найти не могу. я что то не так записал?
-
-
похоже на то, спасибо
-
more exactly, we are using StripeLog tables. They are not documented right now. They differs from TinyLog in one way: all columns are stored in one file in "striped" form, so there are less files when working with many small tables.
-
может пригодится кому
-
Не первый раз сталкиваюсь с ошибкой Sizes of nested arrays do not match. У меня в таблице несколько nested колонок и непонятно в какой проблема ( Есть возможность как то уточнять в какой колонке несовпадение? )
-
-
Говорят что пока идёт запрос CREATE MATERIALIZED VIEW foo AS SELECT ... FROM bar;, то вставляющиеся в bar данные не попадают в foo пока данный CREATE выполняется. Но после завершения CREATE что будет, данные попадут? А какая именно часть вставляющихся в bar данных не попадёт в foo? При начале работы CREATE фиксируется некий "конец" bar, до которого проработает POPULATE SELECT или нет этогй "фиксации конца" и SELECT выгребет данные вплоть до тех данных, которые были вставлены когда сабжевый CREATE запрос уже работал? Хочется развёрнутый ответ, спасибо!
-
(2) Есть большая таблица на N терабайт, которую надо перетащить на новый физический сервер (диск кончился). Копировать её настолько долго, что собираемые за такое время данные не хочется потерять. Поднять мгновенно реплику к этой таблице и получить на новом серваке живую копию нельзя - таблицу даже через перезапуск сервера вроде как нельзя преобразовать в replicated. Что же делать? Прокатит ли такой фокус: переименовываем старую жирную таблицу, потом на том же сервере создаём новую replicated со старым именем старой и делаем некий аттач старой в хвост этой новой, чтобы ВСЕ наши данные стали принадлежать этой replicated таблице и могли быть среплицированы вживую на тот новый сервер?
-
Хотя бы название родительской колонки, например nested goals
-
Да. прокатит, по структуре и движку должны полностью совпадать
-
-
Без POPULATE вью создается сразу и начинает писать во вью попадают только новые данные, если делаете POPULATE то выполняется указаный запрос на уже имеющихся данных и пишет во вью, пока идет запрос новые данные идут "мимо"
-
Коллеги, а как в КХ можно массив [90530,90531,90532,90533,90534,90535,14382443,14947448] типо такого, преобразовать к tuple?
-
Можно и без replicated, наверное. Переименовать большую таблицу в OLD, создать пустую такую же с тем же именем. Потом сделать detach для OLD, скопировать detached файлы на новый сервер и там приаттачить. Потом на новом сервере вкачать свежие данные , например, через INSERT SELECT * FROM remote(...)
-
А что если сделать без POPULATE, получив "живой" materialized view, а потом запустить POPULATE на него? Т.е. получим что он "с хвоста" заполняется старыми данными и с "головы" новыми, а посередине будет постепенно уменьшающийся пробел в данных. Это реальность?
-
Да, создаете MATERIALIZED VIEW без POPULATE, засекаете до какого момента лить старые данные и делаете INSERT INTO MV SELECT ... FROM T WHERE , в общем инсертите с тем же запросом что и вью создавали, но навешиваете на него условия чтоб данные сильно не задублировать
-
Т.е. данные в "mv1" (MATERIALIZED VIEW), созданный без POPULATE могут поступать свежие (из связанной с ней другой таблицы, в которую кто-то вставляет) и одновременно в этот "mv1" может выполняться большой INSERT INTO mv1 SELECT ... из OLD таблицы?
-
-
Спасибо. SummingMergeTree vs MergeTree на уровне хранения (на диске) - это одно и то же, разница только в том что SMT при мердже блоков суммирует столбцы и аггрегирует ключу, а MT этого не делает? Можно ли сказать что если вставляются только уникальные ключи, то в производительности вставлялки разницы нет?
-
Не должно быть разницы при вставке
-
Ещё вопрос. Допустим есть MergeTree и SummingMergeTree. Мы хотим туда вставить данные из другой таблицы (INSERT SELECT), проаггрегировав по одним столбцам и просуммировав по другим. В случае с MergeTree мы пишем INSERT SELECT col1, col2, sum(col3), sum(col4) GROUP BY, т.е. используем явный GROUP BY и явные sum... Для SMT такого можно не делать, оно само умеет агрегировать и суммировать. Но наш запрос для MergeTree всё время падал по памяти на 98% даже со всякими памяте-ограничивающими параметрами в консоли (может они быле не те, ага). В случае с SMT всё хорошо, но мы дохли на IO, диск как-то конски жрался непонятно пока кем, видимо процессами суммирования блоков. Но если потерпеть, до запрос выполнялся.
Хочется где-то прочитать в чём разница между этими двумя "пайплайнами" и что лучше юзать при подобных махинациях с терабайтными таблицами. -
-
Ну, про то что одна задача в фоне, а другая нет уже написали. Про то что запросы падали надо смотреть конкретные запросы, терабайты КХ обрабатывает неплохо
SELECT *
FROM
(
SELECT
publisher_id,
count() AS c
FROM events
GROUP BY publisher_id
)
ORDER BY c ASC
LIMIT 5
┌─publisher_id─┬──c─┐
│ 4014 │ 1 │
│ 3851 │ 2 │
│ 5213 │ 7 │
│ 3785 │ 12 │
│ 3827 │ 14 │
└──────────────┴────┘
5 rows in set. Elapsed: 15.958 sec. Processed 51.40 billion rows, 205.61 GB (3.22 billion rows/s., 12.88 GB/s.) -
-
Подскажите, насколько валидно - удалить партицию а потом вставлять туда данные заново?
-
-
-
Joined.
-
У нас после удаления, партиция не создается при вставке старых данных, с чем это может быть связано?
-
-
Нашел баг, он уже на гитхабе
Что при drop partition не чистятся /blocks/ в zookeeper -
Видимо это мой случай
-
Подскажите, можно ли каким хитрым запросом сделать разрежение time series метрик, как делает GrafiteTreeMerge?
То есть есть метрики (таблица с колонками Metric, Value, TImestamp) с поминутными значениями, а хочется выборку с часовым разрешением? -
Коллеги, а есть ли существенная разница в производительности между SELECT FINAL и SELECT?
-
Да, на порядок, бывает больше
-
-
Это делается с помощью обычного GROUP BY по округлённому времени. Например, SELECT toStartOfHour(t) AS rounded_time, avg(metric) FROM metrics WHERE ... GROUP BY rounded_time...
-
SELECT FINAL работает очень медленно.
-
Выложена презентация с HighLoad++:
https://clickhouse.yandex/presentations/highload2017/
(нажимаете на первый слайд, дальше стрелками вправо/влево) -
оу, точно, у меня была такая хрень, после дропа партиций не вставлялись данные, отбрасываясь как дубли
-
-
-
Нет, проблема ещё актуальна.
Для дедупликации запоминается по-умолчанию последние 100 блоков данных. Если были новые вставки, то старые блоки перестанут быть запомненными и данные перестанут дедуплицироваться. Поэтому со второго раза, в вашем случае, всё Ок.
Алексей @ztlpn сейчас решает эту проблему. - 11 November 2017 (25 messages)
-
-
-
Всем привет. С чем может быть связана ошибка Code: 252. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Too much parts. Merges are processing significantly slower than inserts..
Вставляем записи раз в секунду, пачки небольшие порядка нескольких десятков тысяч. Впервые вылетела такая ошибка за год использования. Нормальных ответов не нашел в интернете. -
Поиск по чату, были советы
-
-
@milovidov_an Привет, сегодня случилось странное на ClickHouse 1.1.54284
Началось все с https://gist.github.com/kshvakov/062efe6d1328b987f23d0bde256bd6e2 и в часть таблиц на шарде, по ощущениям, данные как-то рандомно задублировались, в 3 утра по UTC все спали и руками шард не трогали, примерно в 5 по UTC должна была выполниться задача на пересчет статистики, она выполнилась и сделала атач партиций с данными в таблицы и вот часть этих данных, слегка, странная -
-
-
Добрый вечер! Перестали записываться данные в КХ. Начали смотреть логи, а там: Failed: HttpCode:500 ; ;Code: 999, e.displayText() = zkutil::KeeperException: connection loss, path: /clickhouse/tables/01/overall_grouped2/temp/abandonable_lock-, e.what() = zkutil::KeeperException
-
обнаружил, что на зукипере - disk full
-
как это лечится? надо что-то подчистить или это чревато потерей данных?
-
Народ, есть кто?
-
почистили логи с помощью zkCleanup
-
и очень большая проблема
-
начали бешено дуплицироваться данные
-
хотя, я понял в чем проблема....
-
скрипт который выгружает данные в КХ - хранит их в редисе и в случае ошибок на стороне КХ - он не удаляет их из редиса для их же сохранности
-
так вот, скрипт постоянно выгружал одни и те же данные в КХ, тот возвращал ошибку, НО видимо сохранял где-то у себя в памяти
-
и когда заработал зукипер, он это все засинкал...
-
еще вопрос
-
на нодах в кластере стоят небольшие диски - по 400 Гб, вопрос можно ли как-то в КХ добавить еще дискового пространства при добавлении? Допустим как в постгресе - можно добавить новый tablespace, который будет располагаться на новом диске.
-
Если диски под lvm, то это плевое дело. Иначе можно сгородить костылей с софт-линками: сделал детач, перенёс партишн, сделал на него линк, сделал аттач
-
-
-
- 12 November 2017 (75 messages)
-
В случае разрыва соединения с ZK возможно неатомарное добавление кусков в рабочий набор в оперативке и в ZK. Ситуация такая - мы ещё не знаем, добавлен ли кусок в ZK, клиент, выполняющий запрос ATTACH, получил сообщение об ошибке, но кусок уже добавлен в рабочий набор и доступен для чтения. Если фактически кусок не был добавлен в ZK, то он удалится после перезапуска.
Эту проблему исправили в версии 1.1.54310. -
Да, для серверов ZK надо обязательно настроить периодическую очистку логов. По-умолчанию её нет и это "бомба".
-
Есть возможность указать любой формат для данных.
<http>
<!-- Host. -->
<url>http://[::1]/os.tsv</url>
<!-- Which format to use for reading answer and making POST. -->
<format>TabSeparated</format>
</http>
Вот тут прописываете JSONEachRow вместо TabSeparated и можете выгружать данные в JSON-ах на каждой строке. -
JSON - где все записи в одном объекте + метаданные - не подходит для приёма данных. Вместо этого передавайте в JSONEachRow.
-
Вчера перезапуск сервера помог только для избавления от ошибок zkutil::KeeperException: invalid zhandle state, эти ошибки были только на 1-м сервере из 3-х в шарде, при ATTACH партиции, насколько я помню, ошибок не было (по крайней мере пишущий воркер их не зафиксировал), завтра ещё раз проверю. Данные пришлось восстанавливать, т.к. на всех серверах шарда данные были невалидны, но одинаковы, репликация отработала как надо )
-
-
-
-
-
Потому что в Яндексе Ubuntu )
-
Понятно, но деб не так далёк. Все остальные свои репы держат?
-
если лень компилировать, то напоминаю про образы докера
-
cache - это именно layout - никакой ошибки.
-
Сейчас наши .deb пакеты сделаны так, что их можно установить на Debian (должно работать на любой версии; можно взять, например, пакет от Xenial).
-
Возможно, повторный ATTACH одних и тех же данных.
-
Я так и пользуюсь, но это без гарантий, так?
-
C нашей стороны ATTACH был один
-
-
Странно, так как в layot ругается.
-
layout
(проверьте на опечатки) -
Joined.
-
-
-
думаю как то так isNaN(column) ? NULL : column
-
Поправил опечатку, последняя тоже большая
-
-
-
-
Ну если нужно NaN заменить на NULL, то варианта лучше я не вижу в рамках КХ
-
Хм...result != result работает
-
-
isNaN почему-то медленнее работает чем x != x, и это нехорошо.
-
-
-
-
-
-
-
-
-
это значит, что NULL графана интерпритирует как 0, а вот 'null' - как действительно пустоту и можно задать, что бы она игнорировала эти данные
-
-
-
а такой же конструкций логический NULL на строку содержащую "null" заменить не получится?
-
К сожалению на строку скорее всего не получится, если только результат не преобразовать к toString, т.к. в случае с null будет String, а в случае с корректным числом будет Int или UInt и пр., в таком случае и слева и справа в условии должен быть один тип
-
-
я похоже освоил кунг-фу - вот так у меня работает и для NULL и для числа на входе
-
-
-
не всем подходит, у меня NULL - отсутствие данных, и это надо визуализировать
-
-
-
-
-
-
-
-
-
-
-
Он не гарантирует, что все данные схлопнутся
-
-
-
Придумал тут как можно было бы безболезнено решить вопрос транспонирования таблицы в стиле ClickHouse Way: Это должен быть движок таблицы, который (дополнение к MergeTree) На вход он должен принимать доп параметр - стобец по которому нужно делать транспонирование.
При поступлении данных - движок должен искать есть ли уже нужные колонки куда записать данные (из указанной колонки при создании) если же нет - происходит Alter таблицы для создания нужных колонок и уже последующий insert.
Эх, жалко я не на c++ пишу, но вдруг кому-то тоже будет интересен ClickHouse way функции Pivot из Oracle и кто-то решит это реализовать =) -
Дело не в движке, тут можно кастомный output сделать, это решаемо, но есть одно "но", ClickHouse отдает данные блоками и, если взглянуть на clickhouse-client, возможна ситуация когда он нарисует несколько таблиц, но это можно будет пофиксить дополнительной сортировкой
-
-
Кстати, нет желающих потестировать ещё один иструмент для миграций https://github.com/pressly/goose/pull/81 ? )
-
Ммм, можно поковрять)
-
Если есть задача единорозово почистить все дубликаты, то можно попробовать OPTIMIZE PARTITION. Она всегда все куски партиции смерживает в один (и соотвественно дедуплицирует)
-
-
сегодня тоже задался этим вопросом :)
Храню логи сообщений и в какой то момент обнаружил, что возникает дубликат пары (chat_id, msg_id) в момент записи. Попробовал сделать ReplacingMergeTree с кортежем (chat_id, msg_id), но он вообще все схлопывал и не писал :)
Поэтому присоединяюсь к вопросу: как схлопывать одинаковые записи, где "одинаковые" - если сходятся два столбца? -
Хм, спасибо. пробую
-
ну у меня тоже по кортежу ключей, но схлопывает корректно, просто не всегда схлопывает
-
хм, спасибо. это уже лучше
-
надо завтра ещё раз попробовать :)
- 13 November 2017 (161 messages)
-
-
Если бы Алексей увидел для чего я использую это движок, мне кажется он бы был в шоке )
-
-
Replacing Merge Tree
-
Скажем так, в таблице не больше 50 000 строк, и порядка 40 колонок из которых с десяток Nested
-
Делаю много селектов, длинных запросов, но работают они молниеносно
-
А еще я использовал движок чисто что бы залить порядка 100 миллиардов строк и схлопнуть дубликаты до 6 миллиардов ) ничего быстрее я еще не видел
-
-
-
-
-
-
кликхаус на одной ноде? не кластер?
движок таблицы ReplicatedMergeTree? -
У нас ровно такая же нагрузка. Фронт сервер умеет аккумулировать данные и если кликхаус не справился, то запишет позже
-
а что такое "фронт-сервер"? мне кажется у топикстартера такого объекта нет в системе =)
-
-
-
В кликхаус кто пишет то?
-
Не браузеры клиентов ведь :)
-
Err http://repo.yandex.ru/clickhouse/trusty/ stable/main clickhouse-server-common amd64 1.1.54245
404 Not Found [IP: 2a02:6b8::183 80] -
-
там и браузеры, и гео, клики, конверсии и тд
-
запиню еще разочек
сори -
май бэд... сорри.
-
-
через http льёте? https://clickhouse.yandex/docs/ru/single/#keep-alive-timeout
-
нет, cli
-
Добрый. Да, на прошлой неделе то же было с миграцией данных в кх. По непонятным причинам сервер кх терялся (в одной локале сервер-клиент). писал балком по 100 строк через драйвер .net. Увеличивал таймауты - не помогло, грешил на сеть (так как нагрузки на сервере кх не было). Затем переписал код и все заработало. Идея - может проблема в клиенте?
-
вот тоже на одной локела
переписали код чего?
возможно проблема в клиенте -
Приложение брало данные из Монги и ложило в кх в нужной модели
-
-
тестовая виртуалка кх на одной ноде, не кластер / MergeTree
-
но проблема в том что до какого-то момента все работало а потом перестало
-
>Timeout exceeded while receiving data from client
а архитектура какая? что за клиент? -
clickhouse-client в консоли
-
Блин, очень мешает отсутствие возможности толстый запрос толкнуть через POST при наличии передаваемых файлов (
-
-
А RAM на кх сервере не забивается?
-
неа(
-
может тут https://groups.google.com/forum/#!topic/clickhouse/SLlMNwIOtmY или тут https://groups.google.com/forum/#!topic/clickhouse/zqn-GjuOT_Y
что то дельное для решения найдете? -
Коллеги, а про "Применение моделей CatBoost внутри ClickHouse" не планируется в Мск рассказывать, в ближайшее время?
-
Тема интересная, кажется
-
да это все смотрели
спасибо за помощь -
-
-
большинство операторов из синтаксиса запросов выполняются в виде вызовов некоторых функций, caseWithoutExpr это одна из них.
-
-
-
Подтверждение придёт на днях, можете уже покупать билеты :)
-
Joined.
-
У нас сообщения хранятся в файликах. К каждому сообщению доклеивается имя файла, и номер строки в нём. Файл может быть безлимитного размера, но вставляем из него max 1M строк. При рестарте приложения смотрим max(position) where filename = $file, и скипаем всё, что меньше.
Вариант не очень быстрый, поэтому есть дополнительная оптимизация. Есть материализованная вьюха, в которой хранится select maxState(position) from events group by filename. При рестарте вычитываем из неё, а для файлов, которые не нашлись - из исходной таблицы с эвентами.
Имхо, такой подход работал бы даже при чтении, например, из Kafka. Вместо filename - имя топика, вместо position - Kafka offset. -
всем привет! подскажите плиз, а как правильно переезжать на новый зукипер в существующей инсталляции КХ?
-
Joined.
-
@prll добрый день, я по поводу сборки CH для CentOS
-
поделитесь потом пакетом)
-
@PsyDebug вот тут https://packagecloud.io/altinity/clickhouse есть предыдущие версии
-
54310 пока не осилил
-
-
@PsyDebug потом srpm тоже выложу
-
-
https://packagecloud.io/altinity/clickhouse тут есть 310 под центос
-
-
-
-
-
-
Функции для работы с датой и временем поддерживают часовые пояса, так что можно хранить все в UTC, а если нужна еще и timezone, добавить колонку UInt8. Лучше хранить UInt8, чем UIn32
-
-
-
Всем привет, меня тут попросили добавить поддержку Nested структур в гошный драйвер, но т.к. я достаточно ленив чтоб сразу ползти в код или пытаться разобраться спрошу тут. Что они из себя представляют в нативном протоколе ? Может ли быть массив nested-структур, а Nullable они могут быть ? Заранее спасибо )
-
-
Array(Nested(...)) структур не бывает, Nullable(Nested(...)) тоже. Только наоборот.
-
-
Передаются как отдельные массивы с именами через точку.
-
Вроде там даже длины массивов передаются много раз (что не оптимально).
-
-
-
CREATE TABLE (
F Uint8
Nested (
ID Int8
Name String
)
)
передаем как блок
F,Nested.ID,Nested.Name <- названия
Uint8,Int8,String <- Типы
Количество колонок
Количество строк
данные Uint8 для F
Массив Int8 для Nested.ID
Массив String для Nested.Name
Как-то понедельник туго идет ) -
типы, наверное, UInt8, Array(Int8), Array(String)
-
-
Доброго времени суток
подскажите по какой причине может обрыватся соединение. Скажем вот такой кейс - select с одной ноды, а в другую insert, все в одной консольке. Через какоето время получаю вот такое
Code: 210. DB::NetException: Connection reset by peer while writing to socket (192.168.1.143:9000)
Раза четыре уже повтарял селек-инсерт и каждый раз оно падало. Неприятно( после каждого не успешного селект-инсерта приходилось чистить партицию на принимающей стороне и перезапускать.
В конечно счете переделал запросы с рабивкой по дню, и оно както начло справилятся с задачей. Но потом все равно отпало.
В логах вот такое часто встречается
2017.11.13 14:34:45.983461 [ 300523 ] <Error> ServerErrorHandler: Code: 210, e.displayText() = DB::NetException: Connection reset by peer: while reading from socket (192.168.1.149:37037), e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x3419e66]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x343e81f]
2. clickhouse-server(DB::ReadBufferFromPocoSocket::nextImpl()+0x239) [0x343e449]
3. clickhouse-server(DB::TCPHandler::runImpl()+0x84d) [0x14ffc1d]
4. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x150055b]
5. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x3ae7c5f]
6. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0xad) [0x3aecead]
7. clickhouse-server(Poco::PooledThread::run()+0x86) [0x3a1bad6]
8. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x39facf8]
9. clickhouse-server() [0x4290b0f]
10. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f9bbc7f26ba]
11. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f9bbbe133dd]
версия КХ на всех серверах
"Revision 54310" -
Возможно много причин, смотрите на системные метрики - CPU, диск, сеть; проверьте аптайм clickhouse-server: SELECT uptime() на всякий случай.
-
-
Только если удастся получить подробности. Ведь по одному симптому "во время вставки рвётся соединение" трудно что-то диагностировать.
-
Joined.
-
Мужики, всем привет, пытаюсь побороть этого зверя :)
-
Вопрос в чем - можно ли импортить данные в tar.gz иили только в csv?
-
У меня есть таблички 2 одна 7ггб вторая 2 ггб хз как их загнать в кликхаус
-
-
ГиГаБайт
-
просто гб
-
-
отвечая на вопрос
1) вместо tar.gz используй просто gz
2) да можно через HTTP интерфейс в clickhouse грузануть твой CSV
curl -H "Content-encoding:gzip" -XPOST "http://hostname:8123/?query=INSERT INTO table(field1,field2, ... field N) FORMAT CSV" --data-binary= @your_file.gz -
спасибо! я, в своё время, не нашёл в документации, как отправлять кликхаусу данные в HTTP gzip, буду знать
-
clickhouse post gzip
гуглится на раздва =) -
-
для построения ответа кликхаус выполняет запрос, когда вы от него это просите, и только по тем колонкам, которые скажете, которые он форматирует как скажете
-
> для построения ответа ему иногда нужно собирать набор > из N колонок (полученных из tcp) в tsv ?
а откуда такая мысль в голове?
данные по внутреннему протоколу между нодами... -
tsv это не протокол, а просто формат вывода =)
-
-
-
сейчас смотрю на select * from test limit 1000000 из таблицы с String
гошная нативная реализация отрабатывает за 600 мс, питонячья вообще за вечность, а вот java-jdbc-http за 200 мс
гошная реализация читает по 1 стрингу из инпута, а jdbc — "построчно" из tsv ответа (насколько это применимо к tsc формату)
чтение дататайпа с фиксированной длиной (Int32) проходит намного быстрее, что обьяснимо буферизацией
из чего делаю вывод, что для хттп ответа набор колонок как-то особо шустро превращается в tsv, и интересует пункт "особо шустро", как это сделано — возможно, я не прав (например, из-за того, что колонки читаются из памяти и тут же транспонируются; тестирую на одном сервере)
(код КХ не читал, почти не знаю плюсы, но, похоже, придется) -
в смысле, вам интересно, какой формат лучше всех по соотношению удобство-скорость?
-
в чём вопрос?
-
как сделано форматирование в TSV?
-
как именно происходит формирование tsv из набора колонок на стороне КХ
-
Все преобразования делаются потоково. Получаем поток результата, выводим поток tsv... Форматирование tsv внутри ClickHouse весьма оптимизировано, но не полностью - есть способ сделать быстрее. Например, сейчас для всех строчных форматов есть виртуальный вызов на каждое значение.
-
если ещё любопытно, то я нашёл исходник https://github.com/yandex/ClickHouse/blob/v1.1.54310-stable/dbms/src/DataStreams/TabSeparatedRowOutputStream.cppyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
а как создается "поток результата" ?
проблема в том, что, читая N колонок из tcp, невозможно отдать первую строку, пока не прочитается первое значение из последней колонки
это справедливо для формирования "потока результата" в КХ ? -
покурю, спасибо!
-
Данные в конвейере обработки запроса идут блоками - такие кусочки таблицы на не очень большое и не очень маленькое количество строк.
Как потом блоки выводятся по строкам:
https://github.com/yandex/ClickHouse/blob/v1.1.54310-stable/dbms/src/DataStreams/BlockOutputStreamFromRowOutputStream.h
https://github.com/yandex/ClickHouse/blob/v1.1.54310-stable/dbms/src/DataStreams/BlockOutputStreamFromRowOutputStream.cppClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
Добрый день, у меня в логах наблюдаются такие вещи:
{"log":"2017.11.13 17:09:16.474280 [ 38 ] \u003cTrace\u003e bfg.Grade (StorageReplicatedMergeTree): Executing log entry to merge parts 20170824_20170824_19021_19041_5, 20170824_20170824_19042_19042_0, 20170824_20170824_19043_19043_0, 20170824_20170824_19044_19044_0, 20170824_20170824_19045_19045_0, 20170824_20170824_19046_19046_0 to 20170824_20170824_19021_19046_6\n","stream":"stderr","time":"2017-11-13T17:09:16.474374042Z"}
{"log":"2017.11.13 17:09:16.474293 [ 38 ] \u003cWarning\u003e bfg.Grade (StorageReplicatedMergeTree): Part 20170824_20170824_19021_19041_5 is covered by 20170824_20170824_19021_19045_6 but should be merged into 20170824_20170824_19021_19046_6. This shouldn't happen often.\n","stream":"stderr","time":"2017-11-13T17:09:16.474401249Z"}
{"log":"2017.11.13 17:09:16.474300 [ 38 ] \u003cDebug\u003e bfg.Grade (StorageReplicatedMergeTree): Don't have all parts for merge 20170824_20170824_19021_19046_6; will try to fetch it instead\n","stream":"stderr","time":"2017-11-13T17:09:16.474408801Z"}
{"log":"2017.11.13 17:09:16.475846 [ 102 ] \u003cWarning\u003e bfg.Grade (StorageReplicatedMergeTree, PartCheckThread): Checking part 20170824_20170824_19021_19046_6\n","stream":"stderr","time":"2017-11-13T17:09:16.475945161Z"}
{"log":"2017.11.13 17:09:16.475861 [ 38 ] \u003cInformation\u003e bfg.Grade (StorageReplicatedMergeTree): DB::Exception: No active replica has part 20170824_20170824_19021_19046_6 or covering part\n","stream":"stderr","time":"2017-11-13T17:09:16.475958639Z"}
{"log":"2017.11.13 17:09:16.476468 [ 102 ] \u003cWarning\u003e bfg.Grade (StorageReplicatedMergeTree, PartCheckThread): Checking if anyone has part covering 20170824_20170824_19021_19046_6.\n","stream":"stderr","time":"2017-11-13T17:09:16.476567544Z"}
{"log":"2017.11.13 17:09:16.477967 [ 102 ] \u003cWarning\u003e bfg.Grade (StorageReplicatedMergeTree, PartCheckThread): Found all blocks for missing part 20170824_20170824_19021_19046_6. Will wait for them to be merged.\n","stream":"stderr","time":"2017-11-13T17:09:16.478095014Z"}
с чем это может быть связано и чем опасно? -
Не опасно. Тем не менее, это сообщение является следствием старого бага при назначении мержей и будет повторяться в логах, если не предпринять некоторых действий вручную.
-
Спасибо! После обновления, я так понимаю, должно пройти?
-
Сообщения в логах останутся, зато исчезнет причина возникновения таких ошибок.
-
Подскажите, пожалуйста. Поменял конфиг, пытаюсь запустить сервис сервера и получаю Job for clickhouse-server.service failed because the control process exited with error code. See "systemctl status clickhouse-server.service" and "journalctl -xe" for details. Куда копать?
-
Пишете
sudo service clickhouse-server start
что выводит? -
Вот это и выводит(
-
-
Нам буквально только что в репозиторий добавили скрипт для systemd. Наверное зря. @Civiloid поможешь?
-
Также можете написать так:
sudo /etc/init.d/clickhouse-server start -
-
-
-
Я написал вот так и проблема локализовалась!
-
Это был лишний, случайно поставленный символ в конфиге
-
-
А вот где можно почитать про эти самые ручные действия?
-
Ну это по прежнему жалоба на конфиг
-
Посмотреть в лог реплики в ZooKeeper и аккуратно удалить оттуда соответствующую запись на мерж.
-
-
Да, это после того, как я выполнил sudo /etc/init.d/clickhouse-server start увидел жалобу, поправил конфиг и запустил
-
Если просто sudo service clickhouse-server start - то не гооврит, что ошибка в конфиге
-
А это кстати бага, да
-
-
-
-
-
-
Сейчас попробую воспроизвести
-
привет, в документации написано:
Пользователь, который используется для обмена информацией между серверами, объединенными в кластер, не должен иметь существенных ограничений или квот - иначе распределённые запросы сломаются.
я могу разрешить этому пользователю только чтение? ничего не случится (писать я буду, конечно же, из-под запароленного пользователя)? -
Можете.
-
Да, есть, но, конечно, было бы удобнее сразу его получать, но это уже придирки
-
-
Это системд так решил
-
-
-
-
-
Joined.
-
Joined.
-
Для тех, кто интересовался RPM-ками
ClickHouse 54310 RPM packages для CentOS 7 и Fedora 26 есть вот тут
https://packagecloud.io/altinity/clickhouse -
Более того, они рекомендованы официально: https://groups.google.com/forum/m/#!topic/clickhouse/DdaTsjjEneA
-
Гошная нативная на чтение работает достаточно долго, отчасти это из за database/sql, но можно немножко попинать https://github.com/golang/go/issues/22544 и тогда, в 1.10 оно может стать значительно шустрее. Про то что ответы приходят блоками ниже уже написали, если делать просто SELECT * FROM table то, обычно, размер блока 65к строк, при группировках/сортировках он может быть больше (возможно хотелось бы иметь "ручку" на стороне сервера чтоб можно было управлять размером отсылаемого блока), с учетом буферизации как соединения, так и небольшой очереди из уже разобранных блоков можно расчитывать на то, что данные будут доступны для обработки (rows.Scan уже вернет значения) до того как от сервера придут все данные.proposal: database/sql: value converter interface for rows.Scan · Issue #22544 · golang/go
Starting with Go 1.8 database/sql have an interface driver.ColumnConverter for convert value. I think it will be better to provide the interface for Scan too. Currently, row.Scan using convertAssig...
-
а откуда число 65к ?
в моих экспериментах, обычно куда больше (в разы, ну и да, зависит от разных group by)
ручку на стороне КХ искал, не нашел, может, плохо смотрел
угу, основная задержка в чтении из сети, сейчас экспериментирую с вычитыванием ответа "наперед", огромными чанками (типа java.io.BufferedInputStream, но с константным размером буфера) -
/stat@combot
-
-
-
Видел обзорную статью
https://habrahabr.ru/company/itsumma/blog/341598/Кибер-оракул: поиск аномалий в данных мониторинга с помощью нейросетиКоличество данных, которые получает наш мониторинг выросло настолько, что для их обработки мощности только человеческого разума уже не хватает. Поэтому мы надрес...
-
не умеет распределенные таблицы, понадобилось допилить
- 14 November 2017 (159 messages)
-
ощущения неплохие, код написан понятно
автор активно отвечает на вопросы и принимает обоснованные пул реквесты -
65к вот отсюда https://clickhouse.yandex/docs/en/single/#max-block-size
-
Joined.
-
-
доброго времени суток.
подскажите пожалуйста, может ли слияние кусков так долго происходить?
Row 3:
──────
database: test1
table: schema_left_tag_local
elapsed: 4350.583019391
progress: 0.4058780428273565
num_parts: 9
source_part_names: ['20170916_20170916_16164_16828_4','20170916_20170916_16830_16974_3','20170916_20170916_16976_17132_3','20170916_20170916_17134_17936_4','20170916_20170916_17938_18082_3','2017
0916_20170916_18084_18216_3','20170916_20170916_18218_18930_4','20170916_20170916_18932_19534_3','20170916_20170916_19536_20206_4']
result_part_name: 20170916_20170916_16164_20206_5
total_size_bytes_compressed: 47525423484
total_size_marks: 36632
bytes_read_uncompressed: 136245375663
rows_read: 300037112
bytes_written_uncompressed: 104693161393
rows_written: 300037112
columns_written: 37
memory_usage: 63842304
thread_number: 12
Row 2:
──────
database: test1
table: schema_left_tag_local
elapsed: 4352.126732025
progress: 0.7101679007289964
num_parts: 15
source_part_names: ['20170916_20170916_25182_25242_2','20170916_20170916_25244_25254_1','20170916_20170916_25256_25266_1','20170916_20170916_25268_25414_3','20170916_20170916_25416_25642_3','2017
0916_20170916_25644_25782_3','20170916_20170916_25784_25962_3','20170916_20170916_25964_26002_2','20170916_20170916_26004_26036_2','20170916_20170916_26038_26154_2','20170916_20170916_26156_26354_3','20170
916_20170916_26356_26430_2','20170916_20170916_26432_26452_2','20170916_20170916_26454_26516_2','20170916_20170916_26518_26548_2']
result_part_name: 20170916_20170916_25182_26548_4
total_size_bytes_compressed: 15525738131
total_size_marks: 12360
bytes_read_uncompressed: 67101743329
rows_read: 101188467
bytes_written_uncompressed: 66298108129
rows_written: 101188467
columns_written: 60
memory_usage: 56924160
thread_number: 9
а есть вот такое -
Row 1:
──────
database: test1
table: schema_left_tag_local
elapsed: 4695.688001124
progress: 0.041131550989239984
num_parts: 7
source_part_names: ['20170915_20170915_0_2026_4','20170915_20170915_2028_4082_4','20170915_20170915_4083_6146_4','20170915_20170915_6148_8232_4','20170915_20170915_8234_10316_4','20170915_2017091
5_10318_12282_4','20170915_20170915_12284_12492_3']
result_part_name: 20170915_20170915_0_12492_5
total_size_bytes_compressed: 146001164772
total_size_marks: 113231
bytes_read_uncompressed: 110227357621
rows_read: 927553442
bytes_written_uncompressed: 77931888565
rows_written: 927553442
columns_written: 5
memory_usage: 35907584
thread_number: 5
Всего на этой ноде три слияния проходит.
Они указаны выше двумя кусочками.
Это размеры этих кусков
27G tmp_merge_20170915_20170915_0_12492_5
29G tmp_merge_20170916_20170916_16164_20206_5
12G tmp_merge_20170916_20170916_25182_26548_4 -
@milovidov_an Доброе утро, тут уже кто-то жаловался на увеличение расхода памяти в 1.1.54310, у нас есть сервер с метриками, он тоже после обновления стал отъедать память , по идее он не особо нагружен идут insert запросы ~15к строк в секудну, есть пара материализованых вью и реплика
┌─metric────────────────────────────────────┬─value─────┐
│ tcmalloc.transfer_cache_free_bytes │ 5.34 MiB │
│ tcmalloc.central_cache_free_bytes │ 30.61 MiB │
│ tcmalloc.current_total_thread_cache_bytes │ 29.35 MiB │
│ generic.heap_size │ 45.18 GiB │
│ generic.current_allocated_bytes │ 41.27 GiB │
│ ReplicasMaxRelativeDelay │ 0 │
│ tcmalloc.pageheap_unmapped_bytes │ 1.90 GiB │
│ ReplicasMaxAbsoluteDelay │ 0 │
│ ReplicasSumMergesInQueue │ 0 │
│ MarkCacheFiles │ 567465 │
│ tcmalloc.thread_cache_free_bytes │ 29.35 MiB │
│ MaxPartCountForPartition │ 15 │
│ UncompressedCacheBytes │ 0 │
│ ReplicasMaxQueueSize │ 0 │
│ tcmalloc.pageheap_free_bytes │ 1.94 GiB │
│ UncompressedCacheCells │ 0 │
│ ReplicasMaxInsertsInQueue │ 0 │
│ ReplicasMaxMergesInQueue │ 0 │
│ Uptime │ 1034808 │
│ MarkCacheBytes │ 333743584 │
│ ReplicasSumInsertsInQueue │ 0 │
│ ReplicasSumQueueSize │ 0 │
└───────────────────────────────────────────┴───────────┘ -
-
-
-
-
-
-
-
А не проводили сравнение с голым железом? Большая просадка?
-
-
-
Также - держим в докере, вроде все ок
-
Добрый день, может кто подскажет: вылетает ошибка
Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.40 GiB (attempt to allocate chunk of 268435456 bytes), maximum: 9.31 GiB
Настройка для использования внешней памяти стоит
distributed_aggregation_memory_efficient 1
max_bytes_before_external_group_by 4500000000
max_bytes_before_external_sort 4500000000
max_memory_usage 10000000000
версия ClickHouse 1.1.54304. Выполняется на одной машине. -
Я удалил ноду из зк
ROOT / clickhouse / tables / 1 / Grade / replicas / srv011 / queue / queue-0000027768
но ошибки продолжают сыпатся, я что то упустил? -
Стоит, но не применилась. Может не туда вписали, может не для того юзера вписали, что говорит select * from system.settings where name = 'max_bytes_before_external_group_by';
-
-
-
-
-
-
-
день добрый!
отчего запрос
SELECT
splitByChar('|', ifNull(stringField, '|||')) AS a,
arrayStringConcat([a[1], a[3], a[4]], ',') AS subString,
count() AS count
FROM Table
GROUP BY subString
даёт ошибку
Code: 215. DB::Exception: Received from xxx.xxx.xxx.xxx:9000. DB::Exception: Column stringField is not under aggregate function and not in GROUP BY..
?
как лечить?
добавление в селект any(stringField) не помогает -
если завернуть в ANY(splitByChar('|', ifNull(stringField, '|||')) AS a) — то ли это будет по смыслу?
-
Вам нужно группинг по stringField добавить в запрос
-
нет, мне не нужно группинг по stringField :О)
мне нужна группировка по части этой строки -
Тогда вам нужно сделать подзапрос с разбивкой stringField в массив, а уже во внешнем взять части и сгруппировать только по ним
-
ясно. спасибо.
-
еще должно помочь вынести group by во внешний подзапрос
-
SELECT subString, count() from
(
SELECT
splitByChar('|', ifNull(stringField, '|||')) AS a,
arrayStringConcat([a[1], a[3], a[4]], ',') AS subString
FROM Table
)
GROUP BY subString -
-
-
А что за баг с последними 100 блоками если не секрет?
-
-
-
-
-
-
не, это действительно баг
-
Парни помогите беда какая-то.... не логиниться к кх серверу. не в консоли не табикс. ошибка Code: 210. DB::NetException: Connection refused: (localhost:9000, ::1)
но везде стоит ::/0 и в users.xml и config.xml -
-
WITH splitByChar('|', ifNull(stringField, '|||')) AS a
SELECT
arrayStringConcat([a[1], a[3], a[4]], ',') AS subString,
count() AS count
FROM Table
GROUP BY subString -
Joined.
-
Т.е. чтобы удалить допустим по крону какую-то партицию, нужно сделать 200 инцертов? Ну это ж фейковые данные будут, нет?
-
я уже и перезапускал сервис... че я тока не делал
-
Святая корова! Спасибо за просветление в плане синтаксиса "WITH ..."
-
(
-
Нет, удалить её можно. Проблемы могут быть когда вы решили "пересчитать" партицию, соответственно вы её удаляете и заливаете снова, и вот то что вы льете может быть засчитано как дубли и не записаться
-
ох е, сложновато)
-
в sudo netstat -plnt | grep click что ?
-
пусто
-
-
root 1437 0.0 0.0 14164 1016 pts/1 R+ 10:05 0:00 grep —color=auto click
-
-
как так и стартует и рестартует и стопает без ошибок...
-
root@reactor-reach-prod:/etc/clickhouse-server# ps aux | grep "clickhouse-server"
root 1484 0.0 0.0 14164 1028 pts/1 R+ 10:08 0:00 grep —color=auto clickhouse-server -
root@reactor-reach-prod:/etc/clickhouse-server# ps aux | grep click
root 1486 0.0 0.0 14164 1008 pts/1 S+ 10:08 0:00 grep —color=auto click -
судя по всему он запустился, но всеравно ошибка таже
-
Code: 210. DB::NetException: Connection refused: (localhost:9000, ::1)
почему он смотрит ::1 если у меня стоит ::/0 в users.xml и :: в config.xml -
-
спасибо
-
помогло)
-
Joined.
-
Joined.
-
Всем привет. Возникла сложность со словарем range_hashed. Подключаю его через ODBC из postgres, но запрос dictGetFloat64 всегда возвращает одно и то же значение (последнее вставленное в таблицу по данному id)
При этом я также подключил локально такой же словарь, подложил csv файлик и значение по диапазону возвращается верное. Может кто в курсе в чем может быть проблема?
Структура словаря такая:
<structure>
<id>
<name>access_id</name>
</id>
<range_min>
<name>date_from</name>
</range_min>
<range_max>
<name>date_to</name>
</range_max>
<attribute>
<name>value</name>
<type>Float64</type>
<null_value>0.0</null_value>
</attribute>
</structure>
есть 2 записи в таблице. Вот вывод psql
test_db=# select * from multiplier;
id | access_id | value | date_from | date_to
----+-----------+------------+------------+------------
3 | 1 | 6.0000000 | 2017-11-01 | 2017-12-01
5 | 1 | 11.0000000 | 2017-10-01 | 2017-10-31
clickhouse возвращает каждый раз 11:
"dictGetFloat64('multipliers', 'value', toUInt64(1), toDate('2017-10-02'))"
11
"dictGetFloat64('multipliers', 'value', toUInt64(1), toDate('2017-11-02'))"
11
а из локального файлика все норм:
"dictGetFloat64('multipliers_local', 'value', toUInt64(5), toDate('2017-10-02'))"
11
"dictGetFloat64('multipliers_local', 'value', toUInt64(5), toDate('2017-11-02'))"
6 -
Коллеги, всем привет! Может кто-то подскажет разгадку. Пробовал разные схемы кластера и движки (MergeTree с 4 шардам или ReplicatedMergeTree c 2 шардам, в каждом из котором 2 реплики). Разворачивал все в докер контейнерах (версия 1.1.54310). В чем принципиальное отличие использования схемы с zookeeper от фичи <internal_replication>false</internal_replication> (которая by default). К своему удивлению обнаружил, что при остановленной одной реплики в шарде (движок MergeTree) на нее прилетели новые данные после включения. Данные заливались в таблицу с движком Distributed
-
Если включена опция internal_replication, то данные будут записаны только на 1 реплику шарда, иначе на все. При использовании ReplicatedMergeTree опцию нужно включить, так как оно само занимается репликацией, а при использовании обычного MergeTree - выключить.
-
При этом, если реплика была отключена, то данные для данной реплики будут складываться в Distributed таблице и отправятся позже, когда реплика станет доступной.
-
спасибо!
-
Syntax error: failed at position 1 (line 1, col 1): WITH splitByChar('|', ifNull(stringField, '|||')) AS a
-
ЧЯДНТ?
-
это добавили только в 1.1.54276 - может, у вас версия ниже?
-
1.1.54236
видимо, да -
-
а есть функции для сортировки массива? или только через подзапрос?
-
Могут
-
и можно ли в массив добавить элемент "на ходу"? или тоже через подзапросы/игру со строками?
-
-
Всем доброго времени суток) Нужно сравнить массивы, которые получаются после groupUniqArray. Но в них может быть разный порядок: [1,2,3] и [2,1,3], например, и такие массивы должны считаться одинаковыми. Как это лучше сделать? Есть какая-нибудь функция сортировки массива?)
-
-
-
да уж :О)
спасибо! -
SELECT arrayPushFront([2, 3], 1)
-
видимо, тоже где-то в более свежих версиях...
но спасибо -
Попробуйте создать базу со словарями:
create database dict engine = Dictionary
и посмотреть на данные в словаре. возможно, поможет понять проблему -
а куда можно посмотреть, чтобы выяснить, почему distributed ddl-запросы слишком долго выполняются? кластер 2 шарда по 2 реплики:
2017.11.14 14:33:12.647280 [ 26970 ] <Error> executeQuery: Code: 159, e.displayText() = DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000144261
is executing too long (120 sec.), e.what() = DB::Exception (from [2a02:6b8:b000:624:922b:34ff:fecf:4036]:20048) (in query: /*TABIX_QUERY_ID_AQ1KTlLL*/ CREATE
DATABASE IF NOT EXISTS `sandbox1` ON CLUSTER `sandbox`), Stack trace: -
-
-
-
-
Можете зайти на машинку, где ожидается выполнение запроса, и выполнить grep DDLWorker /var/log/clickhouse-server/clickhouse-server.log там должна быть интерсеная информация, скорее всего там будет написана причина почему запрос 0000144261 не стал выполняться
-
-
спасибо, попробую
-
Привет. Подскажите, пожалуйста, с проблемой.
2017.11.14 12:41:15.868537 [ 18 ] <Error> user_subscribes.Distributed.DirectoryMonitor: Code: 53, e.displayText() = DB::Exception: Received from %IP%:9000. DB::Exception: Type mismatch for column post_id. Column has type UInt32, got type Int64.
во всех таблицах (distributed и локальных) тип UInt32. Данные записываются в локальную таблицу только той ноды, где есть распределенная таблица. -
-
у этой колонки значение типа такого: 21823
-
-
-
Обычный between
-
спасибо! лучше было уточнить!
-
Что-то ничего не могу найти про сжатие хранящихся данных на диске.
Как понять включено ли сжатие вообще? Как точно понять что оно совсем выключено?
Какие они бывают, Какое дефолтное, как понять что включено дефолтное или выключено вообще всякое? -
Доброго времени суток.
А кто-нибудь может подсказать как удалить партицию из материализованного представления и возможно ли это вообще. -
-
Уже попробовал:
:) ALTER table db.inner.mytable_sharded drop partition '201707';
Syntax error: failed at position 23:
ALTER table db.inner.mytable_sharded drop partition '201707';
Expected one of: ADD COLUMN, DROP COLUMN, CLEAR COLUMN, MODIFY COLUMN, MODIFY PRIMARY KEY, ATTACH PARTITION, DETACH PARTITION, DROP PARTITION, ATTACH PART, FETCH PARTITION, FREEZE PARTITION, RESHARD, ON -
Есть способ более-менее точно понять сколько байт на диске занимает такая-то таблица за такой-то период времени?
-
В кавычках надо ALTER table db.".inner.mytable_sharded" drop partition '201707';
-
Писать ее размер раз в n секунд в какие-либо метрики
-
-
SELECT
partition,
count() as number_of_parts,
formatReadableSize(sum(bytes)) as sum_size
FROM system.parts
WHERE
active
AND database = 'merge'
AND table = 'hits'
GROUP BY partition
ORDER BY partition; -
Большое спасибо, Кирилл, так работает.
-
коллеги подскажите такой вопрос: ЗАметили утром, что удалена часть партишнов с начала месяц до вчера. Остановили сервер, закинули из бекапа нехватающих партишнов и запустили. данные подхватились, вроде все ок. Сейчас спустя пару часов наблюдаем, что все, что было подкинуто снова стерто. Что это может быть? Как посмотреть кто удалил и почему могли не приняться файлы.
-
-
-
да, range_hashed поддержан только для id
-
@kshvakov Можете пояснить что именно искать. я посмотрел crontab -e и там пусто
-
-
Спасибо Кирилл, за отзывчивость, разобрались джависты по крону тесты гоняют, что дропают партишны, и направили не на ту базу
-
@kshvakov
-
умудрились натравить на прод базу
-
Всем привет! Я тут написал небольшую инструкцию для аналитиков без глубоких технический знаний о том, как развернуть Clickhouse и залить туда логов Метрики. Возможно, кому-то здесь это будет полезно. Конструктивную критику тоже рад буду услышать.
https://www.etlforeveryone.ru/single-post/clickhouseeasystart -
сразу + в карму
-
-
-
Joined.
-
anyone know if there is something like this for clickhouse ? https://plot.ly/free-sql-client-download/Setup Falcon SQL Client on a Personal Computer
Chart Studio is the easiest way to graph and share your data.
-
Tabix support plotly
https://tabix.io/doc/draw/Draw_Plotly/Draw Plotly - TabixTabix DB Gui
-
thanks igor
-
Joined.
-
Joined.
-
Не присоветуете как лучше подступиться к такой задачке:
Есть большая (неск. млрд записей) таблица BIGTABLE с данными (d Date, ip UInt32, bytes UInt64) и таблица RANGES с диапазонами адресов (ipStart UInt32, ipEnd UInt32) c порядка 200К записей.
Нужна sum(bytes) из BIGTABLE по всем ip, попадающим в один из диапазонов в RANGES.
Словари тут вроде не помогут, а с map-reduce и т.п. функционалом в кликхаусе пока не разобрался - насколько он тут применим. -
-
-
может вам при вставке префиксы писать?
-
Да ip в BIGTABLE и есть в реале префиксы уже. А задача разовая возникла, ради неё менять структуру и код записи нет смысла.
-
Joined.
-
решения так и не нашел, может у кого-нибудь есть предположения?
-
Надо обновить очередь репликации в КХ для таблицы. Detach/attach таблицы или перезапустить сервер
-
Joined.
-
-
-
можно использовать groupArray
-
Да, спасибо. Уже нашёл.
-
А в какой версии это исправлено? Сегодня нашли такое в кластере с 1.1.54292
-
А можно такое как-то побороть:
SELECT ip
FROM test
WHERE (d = today()) AND (dt = '2017-11-14 15:00:00') AND arrayExists(x -> ((ip >= x.s) AND (ip <= x.e)),
(
SELECT groupArray(a) AS r
FROM
(
SELECT (s, e) AS a
FROM ruip
LIMIT 5
)
))
LIMIT 10
Received exception from server:
Code: 43. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Type inference of array of tuples is not supported. -
-
-
Ну да. Из subselect через groupArray получаю массив туплов. пробовал s и e менять на x.1 x.2 - погоды не делает.
Пока выкрутился заменив subselect на примерно такой:(
SELECT groupArray(r) AS R
FROM
(
SELECT bitOr(bitShiftLeft(toUInt64(s), 32), e) AS r
FROM ruip
)
)
ну и, соответственно, в arrayExists тело лямбды
arrayExists(x -> ip between bitShiftRight(x,32) and bitAnd(x,pow(2,32)-1), <здесь массив UInt64 из subselect>)
Так завелось, хотя и изврат... -
Joined.
-
Joined.
-
Joined.
-
/stat@combot
-
/stat@combot
-
-
Вопрос по ODBC драйверу. Tableau очень медленно тянет данные из КХ. Изменение таблошных CAP_ODBC_FETCH_BUFFERS_* на скорость и размер чанков никак не влияют, что наталкивает на мысль что где-то в драйвере стоит маленький размер буфера.
- 15 November 2017 (257 messages)
-
Привет, где можно посмотреть зависимость clickhouse от оперативки и проца?
-
больше оперативки — или можно делать больше жирных запросов, или больше файлового кэша, и запросы будут быстрее выполняться
-
круче проц — можно делать больше запросов и, если частота выше, то запросы быстрее выполняются
всё довольно прозаично -
Это есть в документации https://clickhouse.yandex/docs/ru/operations/tips.html , если я вас правильно понял
-
Всем привет! Словил ошибку Table is in readonly mode. Это вроде как баг в предыдущих версиях, там что-то с мерджами связано. Кластер 4х2 версии 1.1.54246. Как это можно побороть без обновления?
-
Рестарт реплик не помогает
-
-
-
Жив, вроде бы...сейчас проверю статус на всех трех нодах ЗК
-
Так, ЗК жив. Есть подозрение, что сначала поднялся КХ, а потом ЗК.
-
Т.е. по хорошему нужно рестартнуть все сервера КХ, что бы все стало ок
-
-
В документации написано: If ZooKeeper is unavailable when a server starts, replicated tables switch to read-only mode. The system periodically attempts to connect to ZooKeeper.
Но как то странно, что КХ до сих пор не достучался до ЗК -
Вроде нет. у меня весь лог усыпан тем, что таблица ридонли
-
2017.11.14 16:41:12.399957 [ 3 ] <Warning> ZooKeeper: Error on attempt 0: connection loss. Retry
2017.11.14 16:41:25.399939 [ 3 ] <Warning> ZooKeeper: Error on attempt 1: connection loss. Retry
2017.11.14 16:41:39.269291 [ 3 ] <Warning> ZooKeeper: Error on attempt 2: connection loss. Retry
3. clickhouse-server(zkutil::ZooKeeper::exists(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Stat*, std::shared_ptr<Poco::Event> const&)+0x184) [0x29dbe74]
2017.11.14 16:41:39.921551 [ 3 ] <Error> cursometr.r_answers (StorageReplicatedMergeTree): No ZooKeeper: table will be in readonly mode.
2017.11.14 16:42:01.602924 [ 3 ] <Warning> ZooKeeper: Error on attempt 0: connection loss. Retry -
Но это было вчера
-
-
У нас селектел вообще угробил весь кластер виртуализации...т.е. был не рестарт, а просто хард ресет я бы сказал
-
Сейчас попробую все реплики всех шардов рестартнуть
-
Имеем проблему, при которой не получается вытащить значение из range_hashed словаря с помощью dictGetFloat64.
Словарь смотрит на таблицу в PG через ODBC. Таблица в постгресе имеет поля
access_id | integer
date_from | date
date_to | date
value | numeric(13,7)
Структура словаря
<structure>
<id>
<name>access_id</name>
</id>
<range_min>
<name>date_from</name>
</range_min>
<range_max>
<name>date_to</name>
</range_max>
<attribute>
<name>value</name>
<type>Float64</type>
<null_value>0.0</null_value>
</attribute>
</structure>
По совету @kochetovnicolai создали таблицу поверх range_hashed словаря:
(
access_id UInt64,
date_from Date,
date_to Date,
value Float64
)ENGINE = Dictionary(multipliers)
При создании получаем ошибку
Not found column date_from Date in dictionary multipliers. There are only columns access_id UInt64, date_from UInt16, date_to UInt16, value Float64.
Получается, что кликхаус мапит range_min/range_max в Timestamp. При этом метод dictGetFloat64 ожидает date, а не timestamp:
SELECT dictGetFloat64('multipliers', 'value', toUInt64(1), toTime(toDateTime('2017-10-15 00:00:00')))
DB::Exception: Illegal type DateTime of fourth argument of function dictGetFloat64, must be Date..
Как в итоге получить value? -
-
Ну пока рестарт одной не помог )
-
может помогут такие вопросы:
а у вас зукипер поднялся? он кворум собрал?
Имена тачек не менялись? может где-то какое не соотсвествие -
Поднялся, да, собрал
Нет, имена не менялись.
Сейчас рестартнул все реплики всех шардов, вроде ошибка не появляется. Сейчас проверю запись в таблицу. -
Ура! Рестарт всех реплик помог ) Всем спасибо за помощь!
-
Коллеги, всем привет. Не подскадите один момент?
вот есть такая функция
dictIsIn
dictIsIn('dict_name', child_id, ancestor_id) - для иерархического словаря dict_name - узнать, находится ли ключ child_id внутри ancestor_id (или совпадает с ancestor_id). Возвращает UInt8.
а есть ли аналог для случая, когда ancestor_id является множеством, то есть надо проверить, что находится ли ключ child_id внутри одного из элементов ancestor_ids -
или только через функции работы с массивами это разруливать?
-
Я как то пользовался функциями для работы с иерархией, но ничего подобного не встречал. Возможно появились какие то фукнции недокументированные, но я не могу ничего на этот счет сказать, поэтому думаю, что второй вариант все таки рабочий
-
А что конкретно было? Я как пользователь интересуюсь
-
Не знаю точно, но в личном кабинете была ошибка загрузки конфигурации сервера. Причем практически всех серверов. Это было вчера и руководство выясняет причины. На самом деле не первый раз какие то грабли с селектелом. То сеть угробят, то их ддосят так, что все лежит, то "розетку задели" (дважды), то еще чего.
-
-
падала сеть в дц на Берзарина http://status.selectel.info/pages/incident/5980813dd537a2a7050004bd/5a0ad67247b56764de6c66edSelectel Status Panel
Current system status. View active incidents or upcoming maintenances. Subscribe to receive status notifications.
-
У нас железки в аренде
-
Спасибо за информацию!
-
Мы на https://advancedhosters.com сидим, особых проблем с ними нет, это так, вдруг если что )Hosting - 99.99% Uptime For Last 18 Years | AdvancedHosting
We provide reliable dedicated hosting, cloud services, and CDN to online high-loaded projects. Try our unlimited customization and expert support today!
-
Спасибо :) У нас большой зоопарк скопился, поэтому мигрировать не так просто (
-
кто то еще пользуется услугами хостинга в РФ? Зачем...
-
Еще по цена/качество сейчас у XBT есть https://www.servers.com/Dedicated servers in a cloud-like solution
We offer a full suite of hosting solutions, including dedicated servers using our innovative bare-metal in a cloud-like way.
-
Мы обслуживаем банковский сектор, поэтому условие обязательное, к сожалению
-
Некоторые заказчики требуют РФ
-
Да, такая же ерунда)
-
а, сочувствую, тогда лучше имхо коллокейшен брать или как минимум не облако
-
если это не ограничение по законодательству (как в случае с примером выше банковского сектора) то я предпочитаю объяснять 9,5 правил видения бизнеса
-
Так ребята и арендуют железо
-
Колокейшен дороже выходит
-
-
колокейшен это когда ты свою железку им отдаешь
-
-
-
Даже распбери с ним справляется :)
-
У них сеть легла. Я тоже сначала на облако подумал. Стало страшно, да
-
там gcc практически неюзабельный, недавно snmp собирал, snmp-set`ом дверь в офис открывать)
(простите оффтоп) -
-
SSE4.2 требование уже убрали?
-
-
-
tableau
-
-
При этом словарь через локальный CSV файл работает правильно, возможно баг в парсинге дат через ODBC
-
Она из коробки умеет или надо как-то по-особенному к ней подходить ?
-
-
Честно не знаю,не пользуюсь, мне привычнее tabix )
На митапе говорили что работает -
-
range_min и range_max хранятся в типе Date, который представляет из себя UInt16. Можно создать таблицу, скопировав структуру из сообщения с ошибкой. То, что требуется UInt16 вместо Date, похоже на ошибку.
toTime возвращает DateTime. Вместо него должно быть toDate, наверное. -
-
Всем привет. Я вопрос задал в группе, заодно здесь продублирую, может кто подскажет с чего начать копать - https://groups.google.com/forum/#!topic/clickhouse/HrPzu2b-6OA
-
-
-
-
-
-
-
-
@dimcha если Вам интересно моё мнение: в звезду кликхаус. я с ним неделю трахался. поставьте нормальную БД.
-
Вертику)
-
-
-
Ищите по чату force
Типа параметр force restart -
-
/var/lib/clickhouse/flags/force_restore_data
оно? -
Да попробуйте
-
-
Лет пять назад у меня жаббикс переваривал 120-140. На современном железе 250 не должно быть проблемой
-
-
-
-
-
-
2017.11.15 08:56:55.562779 [ 32 ] <Error> InterserverIOHTTPHandler: Code: 232, e.displayText() = DB::Exception: No part 20171115_20171115_1368737_1368737_0 in table, e.what() = DB::Exception, Stack trace:
-
-
-
Уточните что вы считаете нормальной БД?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
хмм.. сорри за назойливость, но в чем суть этой магии:
Удаляет из сервера информацию о таблице name. Сервер перестаёт знать о существовании таблицы, но ни данные, ни метаданные таблицы не удаляются. При следующем запуске сервера, сервер прочитает метаданные и снова узнает о таблице. -
-
-
Хочется сделать INSERT INTO foo (c1, c2, c3, c4) SELECT FROM bar
Но в bar есть только c2, c3, c4, а c1 константа и её знает только код, формирующий запрос.
Как? )
P.S. так взлетит SELECT "constant", c2, c3, c4 FROM bar? -
-
-
Гуд. Спасибо. Я дебила кусок кускующийся кускованский кускофентрально-кускизирующийся.
-
До прихода вас в чатик не было мата, и хоть я и люблю мат, но тут так было хорошо без него, давайте и дальше без него продолжим.
-
42 - смысл жизни, и всё такое?)
-
-
+1
-
-
Мне кажется проблема не в бобине :) Я с КХ разобрался за пару дней, собрав стенд из кластера 4х2, который уже полгода работает стабильно. Не понимаю что там сложного. Какие проблемы у вас возникли?
-
Joined.
-
Всем привет.
Я тут столкнулся с интересным кейсом. У меня есть одна табличка словарь моделей, в котором около 17 млн записей. Там есть ID модели, название, ID категории и дата создания модели. Категории представляеют собой иерархический словарь. Например у Категории "Авто" могут быть подкатегории "Шины, диски", "Тормоза", "Моторные масла" и так далее, не суть. Категории хранятся во внещнем словаре dict.category. У каждой тоже свой ID и ссылка на родителя
У меня задача выбрать все модели в заданном списке категорий, включая дочерние подкатегории, с ДАТА С по ДАТА ПО. На вход подаются две даты и массив категорий.
Если я в условии прописываю через функции работы с массивами и словарями, вот так (arrayExists(x -> dictIsIn('category', toUInt64(categoryId), toUInt64(x)), [90478, 90435, 90455, 90461, 90477, 90497, 90506, 10613523, 10613544, 10613554]) = 1)
то запрос у меня выполняется за 10 сек (!), что довольно долго для словарика моделей из 17 млн записей(
https://pastebin.com/Yr46XT4a
Если же я тупо сначала выбираю все идентификаторы категорий дочерних, вот так
https://pastebin.com/5TvT1ftP
потом засовываю их в оператор IN руками
то у меня запрос отрабатывает меньше секунды, пруф вот
https://pastebin.com/fiSjWgqF
Вопрос. А в одном запросе это как-то можно написать, чтобы работало за 1 сек? -
-
-
-
-
-
-
-
вроде не прокатит, сча проверю еще раз. Кажется уже пробовал
-
а если написать where category_id in (select .. from dict.category ..) ?
-
-
премного благодарен
-
какая-то магия, но так быстрее да
-
а если написать where category_id in (select .. from dict.category ..) ?
-
но все равно не так быстро, если руками прописать
-
IN списко
-
так порядка 2 сек, а не 10
-
но и не 1
-
-
-
-
-
-
Спасибо большое!
-
Спасибо, то что нужно
-
Joined.
-
Можно как-то заставить таблицу принудительно скомпактиться в один блок?
-
OPTIMIZE TABLE [db.]name [PARTITION partition] [FINAL]
-
Но это не всегда сработает, осторожно!
-
-
Прошу прощения за оффтоп. Интернет — место свободного волеизъявления, всё понимаю.
Но вот такие вещи в моём уютном телеграме уже немного за гранью приличия. Мнение личное, но вряд ли единственное. -
-
Joined.
-
Всем привет!)
-
"Ускорена параллельная сборка с помощью ccache+distcc" заметил в чейнджесах.
-
А есть немного больше информации о эффекте от распределенной сборки?
-
-
-
а как с Кликхаусом вышло? какие-то изменения в системе сборки делали, чтобы использовать максималньо эффективно?
-
основные изменения в cmake - использовать ccache когда он есть,
https://github.com/yandex/ClickHouse/blob/master/CMakeLists.txt#L30 https://github.com/yandex/ClickHouse/blob/master/cmake/find_ccache.cmake
потом у каждого кому это нужно - export CCACHE_PREFIX=distcc (можно в ~/.bashrc)
и настройка хостов distcc или zeroconf если в одной сетиyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
можно так - http://paste.org.ru/?hixlra
- запускать вместо make -
-
Свободу выбора никто не отменял. Телеграм позволяет на выбор либо забанить, либо переименовать собеседника.
-
-
еще были .cpp с шаблонами которые могли компилироваться по 20 минут и жрать 4G памяти. они почти все попилены на кусочки и теперь все вместе параллельно компилируются за десяток секунд ( dbms/src/Functions/GatherUtils_* ) и немного магии в dbms/src/Functions/CMakeLists.txt (generate_function_register)
-
Joined.
-
Доклад про кликхаус на митапе #dot_nuts в Рязани
-
-
-
@proller спасибо!! А как отлаживали сколько времени тратится на компиляцию какого файла? Для большого проекта это сложно =(
-
-
спасибо, попробую! 🙂 Очень ценная информация!
-
а еще вспомнил, нужно уменьшать количество include в .h, везде где можно forward declaration, все либы стараться только из .cpp инклюдить.
вот микро дулза специально для .h: https://github.com/yandex/ClickHouse/blob/master/utils/check_include.shyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
всем привет! а никто не знает, можно ли приаттачить партиции в цикле или на уровне запросов (аля alter table table_name attach partition in (select partition from system.parts))?
-
интересуюсь для смены движка MergeTree -> ReplicatedMergeTree
-
@proller в смысле их число или просто убирать те, которые по факту не испольовались?
-
-
хы
-
имя партии указывается в одинарных кавычках- соответственно запросы с циклом из баша не сработают
-
Респект! За Angular особенно!)
-
😂
-
и число и ненужные убирать, например у нас были (а может быть и есть) .h которые сами отдельно могли компилироваться секунд 5, соответственно когда их инклюдили другие .h - общее время росло на десятки секунд.
ну и код выносить из .h , особенно из тех что много где используются -
В С++ это задница =(
-
кстати, а в сторону модулей еще не смотрели? в clang вроде добавили, поидее должно как раз помочь от этого ада с инклудами избавится
-
-
>Прошу прощения за оффтоп. Интернет — место свободного волеизъявления, всё понимаю.
Но вот такие вещи в моём уютном телеграме уже немного за гранью приличия. Мнение личное, но вряд ли единственное.
ну так Вы свободны отписаться от этой группы, дабы ни дай бог не покалечить свой хрупкий внутренний мир. и вообще от интернета тоже. -
-
ну что, поставил уже вертику вместо этого куска говна нерабочего и портящего данные?
-
Интересный файкт - mos.ru тоже использует ClickHouse o_O https://hh.ru/vacancy/23006741?query=clickhouseВакансия Программист Python в Москве, работа в MOS.RU (вакансия в архиве)
Вакансия Программист Python. Зарплата: не указана. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 01.11.2017.
-
-
-
все используют CH =)
-
-
ну на данный момент все почти терпимо, а использовать фичи которые поддерживаются только в каком-нибудь clang-devel который нигде кроме freebsd еще не появился - вредновато
-
-
это да, это боль =( я для своего проекта до сих пор C++ 98 поддерживаю из-за центос 6 =(
-
никто и не умеет (кроме компиляции в с++/си из другого языка машиной как промежуточного кода. хотя и там говна много). они до сих пор потоки толком не стандартизировали (потоками из 11-го стандарта никто не пользуется, все юзают кучу разных внешних либ). на го пишут люди, которые либо не осилили qt studio и qtlibs, либо яву, либо pypy, либо мозг.
-
-
обычно всё сразу
-
-
у вас он для пре-компиляции запросов?
-
-
круто 🙂 А как загрузка? Генерите а-ля so в /tmp и потом dyload?
-
Мы (ClickHouse) пользуемся потоками из 11 стандарта :)
-
да
-
тогда понятно, почему всё так охрененно работает
-
в чем отличие потоков из 11 от того же буста?
-
один фиг внутри pthreads.
-
-
-
-
Добрый вечер
У меня была проблема с тем что отпадает селект инсерт
нашел ошибку, если так можно сказать
2017.11.15 19:17:12.288685 [ 700805 ] <Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower t
han inserts., e.what() = DB::Exception (from 192.168.0.71:56614) (in query: insert into test1.schema_right_tag format Native), Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x3419e66]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x14f2a9f]
2. clickhouse-server(DB::MergeTreeData::delayInsertIfNeeded(Poco::Event*)+0x3bc) [0x358bbfc]
3. clickhouse-server(DB::ReplicatedMergeTreeBlockOutputStream::write(DB::Block const&)+0x4f) [0x358633f]
4. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x42) [0x375dea2]
5. clickhouse-server(DB::MaterializingBlockOutputStream::write(DB::Block const&)+0x37) [0x339c9b7]
6. clickhouse-server(DB::AddingDefaultBlockOutputStream::write(DB::Block const&)+0x281) [0x371b171]
7. clickhouse-server(DB::ProhibitColumnsBlockOutputStream::write(DB::Block const&)+0x5c) [0x371659c]
8. clickhouse-server(DB::SquashingBlockOutputStream::finalize()+0x3f5) [0x3753ae5]
9. clickhouse-server(DB::SquashingBlockOutputStream::writeSuffix()+0x11) [0x3753c51]
10. clickhouse-server(DB::DistributedBlockOutputStream::writeToLocal(DB::Block const&, unsigned long)+0x95) [0x3572045]
11. clickhouse-server(DB::DistributedBlockOutputStream::writeAsyncImpl(DB::Block const&, unsigned long)+0x245) [0x35785d5]
12. clickhouse-server(DB::DistributedBlockOutputStream::writeSplitAsync(DB::Block const&)+0x99) [0x35788c9]
13. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x42) [0x375dea2]
14. clickhouse-server(DB::MaterializingBlockOutputStream::write(DB::Block const&)+0x37) [0x339c9b7]
15. clickhouse-server(DB::AddingDefaultBlockOutputStream::write(DB::Block const&)+0x281) [0x371b171]
16. clickhouse-server(DB::ProhibitColumnsBlockOutputStream::write(DB::Block const&)+0x5c) [0x371659c]
17. clickhouse-server(DB::SquashingBlockOutputStream::write(DB::Block const&)+0x3c9) [0x3754039]
18. clickhouse-server(DB::CountingBlockOutputStream::write(DB::Block const&)+0x2b) [0x36f975b]
19. clickhouse-server(DB::TCPHandler::receiveData()+0xa4) [0x14fdb44]
20. clickhouse-server(DB::TCPHandler::receivePacket()+0x1e1) [0x14fe1e1]
21. clickhouse-server(DB::TCPHandler::readData(DB::Settings const&)+0x16a) [0x14fe52a]
22. clickhouse-server(DB::TCPHandler::processInsertQuery(DB::Settings const&)+0x274) [0x14ff244]
23. clickhouse-server(DB::TCPHandler::runImpl()+0x6ab) [0x14ffa7b]
24. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x150055b] -
25. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x3ae7c5f]
26. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0xad) [0x3aecead]
27. clickhouse-server(Poco::PooledThread::run()+0x86) [0x3a1bad6]
28. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x39facf8]
29. clickhouse-server() [0x4290b0f]
30. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7fe3d882d6ba]
31. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7fe3d7e4e3dd]
такой инсерт селект сложил всю дисковую подсистему всех нод кластера(
Подскажите как быть?
на прошлом релизе, 289 что ли, я делал все тоже самое и не было такой проблемы.
похоже это на баг? есть все таки смылс писать в гитхаб? -
-
-
-
блин, страшный баг в логе :/
-
2017.11.15 09:42:19.507023 [ 2 ] <Warning> ConfigProcessor: Include not found: clickhouse_compression
2017.11.15 09:42:23.400907 [ 4 ] <Error> BaseDaemon: ########################################
2017.11.15 09:42:23.400942 [ 4 ] <Error> BaseDaemon: (from thread 3) Received signal Illegal instruction (4).
2017.11.15 09:42:23.427634 [ 4 ] <Error> BaseDaemon: 0. clickhouse-server() [0x341de90]
2017.11.15 09:42:23.427694 [ 4 ] <Error> BaseDaemon: 1. clickhouse-server(DB::ITableDeclaration::check(std::vector<std::string, std::allocator<std::string> > const&) const+0x47) [0x341f2f7]
2017.11.15 09:42:23.427740 [ 4 ] <Error> BaseDaemon: 2. clickhouse-server(DB::StorageSystemTables::read(std::vector<std::string, std::allocator<std::string> > const&, DB::SelectQueryInfo const&, DB::Context const&, DB::QueryProcessingStage::Enum&, unsigned long, unsigned int)+0x42) [0x2c3a672]
2017.11.15 09:42:23.427757 [ 4 ] <Error> BaseDaemon: 3. clickhouse-server(DB::InterpreterSelectQuery::executeFetchColumns()+0xe81) [0x3610481]
2017.11.15 09:42:23.427772 [ 4 ] <Error> BaseDaemon: 4. clickhouse-server(DB::InterpreterSelectQuery::executeSingleQuery()+0x23) [0x360c953]
2017.11.15 09:42:23.427786 [ 4 ] <Error> BaseDaemon: 5. clickhouse-server(DB::InterpreterSelectQuery::executeWithoutUnion()+0x16d) [0x360ee4d]
2017.11.15 09:42:23.427800 [ 4 ] <Error> BaseDaemon: 6. clickhouse-server(DB::InterpreterSelectQuery::execute()+0x31) [0x360eea1]
2017.11.15 09:42:23.427811 [ 4 ] <Error> BaseDaemon: 7. clickhouse-server() [0x329045b]
2017.11.15 09:42:23.427828 [ 4 ] <Error> BaseDaemon: 8. clickhouse-server(DB::executeQuery(std::string const&, DB::Context&, bool, DB::QueryProcessingStage::Enum)+0x135) [0x3291575]
2017.11.15 09:42:23.427842 [ 4 ] <Error> BaseDaemon: 9. clickhouse-server(DB::InterpreterShowTablesQuery::execute()+0x35) [0x3600465]
2017.11.15 09:42:23.427854 [ 4 ] <Error> BaseDaemon: 10. clickhouse-server() [0x329045b]
2017.11.15 09:42:23.427869 [ 4 ] <Error> BaseDaemon: 11. clickhouse-server(DB::executeQuery(std::string const&, DB::Context&, bool, DB::QueryProcessingStage::Enum)+0x135) [0x3291575]
2017.11.15 09:42:23.427884 [ 4 ] <Error> BaseDaemon: 12. clickhouse-server(DB::TCPHandler::runImpl()+0x58c) [0x147aa6c]
2017.11.15 09:42:23.427898 [ 4 ] <Error> BaseDaemon: 13. clickhouse-server(DB::TCPHandler::run()+0x1c) [0x147b71c]
2017.11.15 09:42:23.427912 [ 4 ] <Error> BaseDaemon: 14. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x39ab75f]
2017.11.15 09:42:23.427925 [ 4 ] <Error> BaseDaemon: 15. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0xad) [0x39c9b5d]
2017.11.15 09:42:23.427938 [ 4 ] <Error> BaseDaemon: 16. clickhouse-server(Poco::PooledThread::run()+0x86) [0x38ed396]
2017.11.15 09:42:23.427952 [ 4 ] <Error> BaseDaemon: 17. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x38c0aa8]
2017.11.15 09:42:23.427976 [ 4 ] <Error> BaseDaemon: 18. clickhouse-server() [0x40f595f]
2017.11.15 09:42:23.427989 [ 4 ] <Error> BaseDaemon: 19. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7f21ffb78184] -
Кратко: "BaseDaemon: (from thread 3) Received signal Illegal instruction (4)."
-
это известная проблема?
-
-
вот да, не понятно что это
-
такое ощущение, что на машине без SSE запустили или чего-то подобного. Сейчас посмотрю cpuinfo
-
А что за конфиг?
-
-
конфиг стандартный, ничего не меняли, версия: 1.1.54310.
-
конфиг запросил, жду
-
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
stepping : 6
microcode : 0x60f
cpu MHz : 2659.923
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs :
bogomips : 5319.84
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
stepping : 6
microcode : 0x60f
cpu MHz : 2659.923
cache size : 6144 KB
physical id : 1
siblings : 4
core id : 0
cpu cores : 4
apicid : 4
initial apicid : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs :
bogomips : 5320.07
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management: -
-
-
Как-то сурово это что ли...
-
угу, вижу требования :( слона не заметил, спасибо!
-
но все равно странно, взял тест машину тоже без sse 4.2
-
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 not supported -
ps aux|grep clickhouse
clickho+ 9911 0.0 0.6 273352 27696 ? Ssl 22:19 0:00 clickhouse-server —daemon —pid-file=/var/run/clickhouse-server/clickhouse-server.pid —config-file=/etc/clickhouse-server/config.xml -
поставился и запустился сходу
-
-
-
odintsov@fastlab1:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz
stepping : 10
microcode : 0xa07
cpu MHz : 2003.000
cache size : 2048 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
bugs :
bogomips : 4666.12
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management: -
-
-
все равно это как-то странно... хочется сообщение в логе что ли - нет поддрежки, извините
-
SIGILL вещь редкая и от нее пугаешься :)
-
-
и не зря, неплохая идея
-
-
-
-
-
да, коллега красивую фигню отковырял :(
-
"фича" с AVX вообще кошмар
-
там фич больше
-
-
-
-
говорят еще косяков в них немеряно в этих голдах и силверах
-
сугубо даже с сборочной стороны
-
каждый errata на цпу состоит из 100+ пунктов
- 16 November 2017 (225 messages)
-
Всем привет!
Ребят, не проконсультируете по поводу Kafka-движка https://github.com/yandex/ClickHouse/blob/master/docs/en/table_engines/kafka.rst ?
Выглядит очень интересно, основной вопрос, можно ли читать Avro-сообщения, указав в schema путь к Авро-схеме?yandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
Коллеги, после добавления в запрос SETTINGS max_threads=2 получил ошибку Cannot execute SET query in readonly mode
пошел в конфиг и добавил юзеру <readonly>0</readonly> перезапустил сервис. не помогло. Может кто подскажет почему оно не пашет с SETTNGS -
стучиться через 8123 стандартный порт http
-
вижу, что при запросе через http GET выставляется автоматом ридонли 1.... надо пост делать...
-
-
-
-
Joined.
-
@milovidov_an проясни пожалуйста по сжатию. В своём докладе ты говорил, что шардинг скорее зло, чем добро, но у нас что-то не стыкуется. Мы провели эксперимент:
Есть несколько таблиц со строковым полем N. Значение в поле N пересекается между 7 таблицами с очень большой вероятностью (~80%).
Мы слили все таблицы в одну, добавив enum поле. На выходе получили вариант, в котором слитые в одну таблицу данные занимают в 1.4 раза больше места в сжатом виде, чем по шардам. Мы полагали, что получим экономию места за счет лучшего сжатия колонки N, но это не так. Почему так происходит? -
о, новые грани "ssl не просаживает производительность"
-
Может в шардах данные более однородные? Или. Остались неактивные партиции?
-
Данные одни и те же.
-
Но на диске расположены по разному же
-
Joined.
-
Не очень понимаю. Данные довольно равномерно размазаны по времени. Пересечение по колонке N происходит на разных шардах в одно и то же время, в том же самом порядке.
-
Всем привет!
Хотелось узнать, как кликхаус будет себя вести с большим количеством джойнов?
Есть идея хранить данные в куче таблиц и делать джоин по какому-то идентификатору.
Предположим таблиц будет 5-6 и генерироваться будет в среднем 150кк эвентов в сутки, которые будут записываться в эти таблицы. -
-
Плохо, поскольку:
- будет много уровней вложености - неудобно
- сначала будет вся строиться "правая" часть в памяти и только потом идти джоин и фильтрация - с фильтрами будет аццки медлено работать -
-
Вызывается эвент типа А, через n времени происходит эвент типа B, но который порожден эвентом A, как-то так.
-
Денормализация, mergе движки
-
Звезду не построить в CH
-
Или будет очень медленно
-
Добрый день , влияет ли настройка сжатия данных на уже записанные данные ?
-
Поищите в истории чата, но насколько помню - нет, только на новые
-
Joined.
-
добрый день
есть такая ситуация
SELECT uniqExact(affid)
FROM affid
WHERE (date >= '2017-01-10') AND (date <= '2017-01-25')
┌─uniqExact(affid)─┐
│ 22499975 │
└─────────┘
1 rows in set. Elapsed: 3.280 sec. Processed 43.00 million rows,
как понять откуда взялось 43млн строк если в результате всего 22млн? -
и есть ли в КХ какой-то анализатор запросов вроде EXPLAIN?
-
-
Нет EXPLAIN, но если открыть лог сервера когда выполняется запрос, там будут некие стадии выполнения запроса
-
ага
то есть можно предположить что прочитана была вся партиция
спасибо -
спасибо
-
а нет ли доки как читать этот лог? )
-
Откройте лог через tail
tail -f /path_to_clickhouse-server.log
Там примерно понятно что происходит -
это-то понятно :)
-
например он пишет
Selected 5 parts by date, 5 parts by key, 1384 marks to read from 5 ranges
как бы знать хорошо это или плохо?
может я запрос коряво написал?
или типа КХ вообще не про это и лишь бы в память влезало -
Оптимизации запросов в КХ обычно начинаются с show create table 'name'. Скорее всего у вас произошло чтение всей партиции. Я так понимаю, вы хотите уменьшить время выполнения за счет ограничения выборки по диапазону дат? Проверьте, есть ли помимо партиционирования по Date еще и индекс по этому же Date[Time].
-
Joined.
-
-
https://clickhouse.yandex/docs/ru/single/#alter
ctrl+f "Куском (part) в таблице называется" -
-
спасибо
-
спасибо, оно.
-
повторю свой вопрос вчерашний:
У меня select на Distibuted таблицу выдает через раз разные(всего 2) наборы данных. По графику видно, что это разные части одного графика с "дырками". Создается впечаление, что merge не проходит или не рандомно не доезжают данные с какой-то из нод. С чего можно начать дебаг проблемы? -
таблицы создавал так https://pastebin.com/KbF7WUBV
-
А нет ли планов реализовать вот это https://github.com/yandex/ClickHouse/issues/838 ? Уж очень хочется хранить скорости изменения величин в CH, но получается это совершенно неоптимально =(Feature request: add ability to apply delta or delta-of-delta encoding to numeric columns before compression · Issue #838 · yandex/ClickHouse
Clickhouse fits well for time-series DB from the performance point of view. But the compression ratio for the data stored in such databases may be further improved. Tables in time-series DBs usuall...
-
Joined.
-
-
что именно?
-
у нас метрики - это десятки миллионов "скоростей" изменения различных величин, их считает наш софт и отправляет в CH уже посчитанные результаты
-
-
у вас там был очень большой поток на запись, может просто репликация не успевает? остановите запись, сравните таблицы на репликах, по count(), например. Ну или сравнить данные, которые уже заведомо доехали, вчерашние, или за час назад
-
@solhov это делает наш софт неимоверно сложным.
-
ну и вообще это стандартная тема для TSDB, Influx/Graphite справляются с этим, но у них с масштабированием не все хорошо. CH отлично справляется, если бы можно было укзаать тип сжатия для таблицы 🙂
-
-
-
вам не кажется, что это странно, переписывать всю логику приложения и делать поспешные выводы?
-
-
но это офтоп, мне интересен ответ разработчиков, а не как я должен нанимать своих программистов 🙂
-
-
-
Прошу прощения, а напомните, как, не зная вашего номера телефона, забанить ваш ник?
-
Андрей, плюсую)
-
contact info -> block user
-
отлично
-
вы что работаете со сбором данных хим состава клеток?)
-
какое там. carbon метрики собираю
-
и сразу банят
-
Мистер глаз, а почему бы вам не сменить ник?
-
-
я за нормы приличия, мы все же не в чате Тарантула, где можно материться 🙂
-
Раз части сообщества неприятно)
-
а графит, кстати, вообще не способен собирать данные корректно: http://grisha.org/blog/2015/05/04/recording-time-series/
-
не помогло
-
Кажется, надо делать это на уровне чата
-
Ты заблочил для себя
-
Кросс-репликация)
-
-
-
да
-
В кликхаусе это больно)
-
-
а как-же быть?
-
Отказаться от кросс-репликации?)
-
-
-
я сижу не через веб-версию, и хотел бы кросс-платформенное решение
-
а между тем это хитрый способ атаки на чаты, в ирц времена было такое 🙂 Ник флуд называлось, но оно было немного иначе
-
сорян, к Дурову предложения
-
Использовать две машины. один шард + две реплики. а как создаются таблицы и описание кластеров можно посмотреть?
-
не надо искать черную кошку. Мне просто нравится ник
-
Добавить в контакты и переименовать
-
-
смотри выше, я не знаю мобильного телефона этого молодого человека
-
-
-
добавив ник нельзя редактировать имя
-
-
-
-
-
напишите?
-
-
-
-
Пожалуйста, не надо. И так оффтопа много.
-
-
Речь не о чувствительности, а о комьюнити конкретно в этом чате. Люди, появившиеся здесь с самого открытия КХ в опенсорс, привыкли к адекватности. А адекватность, а данном случае, это серьзеное восприятие собеседника, шаринг бест практисес и опыта использования данного продукта. Воспринимать серьзено человека с вызывающим ником не то чтобы трудно, но требует дополнительных усилий. И прилагать их вот просто так, мне лично, не хочется. К тому же, такое поведение вызывает явное неодобрение со стороны других участников чата и они не могут с этим ничего сделать, кроме как высказывать его. Ситуация похожа на курение. Вы имеете право курить, но, пожалуйста, не мешайте этим другим людям. Они ведь не мешают вам тем, что не курят? Давайте не скатываться
-