- 01 June 2017 (154 messages)
-
-
-
-
-
-
того же года что и дата. Аналог SELECT EXTRACT(WEEK FROM now()); в Postgres.
-
-
Вопрос: если инициировать выборку из дистрибьютед таблицы под пользователем с ограниченными правами, то запросы в остальные шарды пойдут от имени какого пользователя? Указанного в конфигурации кластера <remote_servers> ?
-
Да, от указанного в <remote_servers>
-
Joined.
-
Просите за нубский вопрос, но в ClickHouse возможно использование алиасов для неагреггированных полей?
select t.field as SomeField from t -
Возможно.
-
select field as SomeField from t будет работать
-
Спасибо! Это похоже то что нужно!
-
Спасибо, разобрался
-
-
зависит от объема "стандартных аттрибутов"
-
если их пять штук и 20 килобайт блоба - кликхаусу тут делать нечего
-
он не предназначен для логов в "свободном формате"
-
Тогда возникает вопрос использования лимитов и квот. Если запрос приходит от условного юзера web с лимитами на память и время, то на другие шарды он уходит от уже другого пользователя без этих лимитов
-
Параметры попадаются на реплики
-
а что вы хотите сделать, допустим у вас есть логи (user_id, visit_date) и (user_id, purchase_date), и вам нужно по ним посчитать что?
-
-
-
-
-
т.е. можно быть увереным, что лимиты установленные на пользователе-инициаторе запроса к дистрибьютед таблице будут распространятся на все ноды кластера?
-
у меня возможны дубли сингл инсертами, которые нельзя терять.
-
-
День защиты детей 2017 #GoogleDoodle
https://g.co/doodle/u9cqwzДень защиты детей 2017День защиты детей 2017 #GoogleDoodle
-
-
-
-
1 июня — детский логотип на Яндексе
К Международному дню защиты детей Яндекс провел в соцсетях конкурс детского логотипа. Мы хотели, чтобы дети нарисовали, как они видят мир. В конкурсе участво...
-
Что значит делать нечего ? Есть более эффективные хранилища ? Или кх будет падать ? Тормозить при 5 rps ?
-
Это значит, что Кликхаус не проектировался для подобного и не даст никаких преимуществ против варианта "положить все в мускул"
-
тормозить не будет, падать не будет
-
-
это мнение основанное на базовом понимании дизайна column ориентированных БД и небольшом опыте эксплутации CH в случае когда данные в формате, который CH обрабатывает хорошо
-
logstash+kibana+elasticsearch
-
В чем преимущество ?
-
именно так, ELK просто создана для такого
-
-
а кликхаус не создавался))))
-
-
это офтоп, CH - это не "обычная субд"
-
это узко-специализированная СУБД
-
-
нет, опять нет.
-
это не причина, это следствие
-
-
нет, я его пользователь
-
-
который внимательно прочитал документацию и имеет пару баз в продакшене
-
-
я это изначально сказал, выше
-
-
Яндекс открывает ClickHouse
Сегодня внутренняя разработка компании Яндекс — аналитическая СУБД ClickHouse, стала доступна каждому. Исходники опубликованы на GitHub под лицензией Apache 2.0.
-
Если вам нужно просто хранить логи, у вас есть много вариантов. Вы можете загружать логи в Hadoop, анализировать их с помощью Hive, Spark или Impala. В этом случае вовсе не обязательно использовать ClickHouse. Всё становится сложнее, если вам нужно выполнять запросы в интерактивном режиме по неагрегированным данным, поступающим в систему в реальном времени. Для решения этой задачи, открытых технологий подходящего качества до сих пор не существовало.
-
этого достаточно, как ответ разработчиков?
-
Вопрос в количестве записей логов. Профит вы будете получать в случае множества записей. Например если льете логи доступа и разбиваете на нужные колонки для хранения в КХ миллион событий в день. Тогда дальнейший анализ или аналитика будет выполняться Очень Быстро.
Если логов мало, то смысл КХ теряется -
-
Меня больше интересует сколько рпс можно ожидать ( при заданном сайзинге серверов) на вставку данных. Анализ логов будет ограничен только выборкой по нескольким полям. Никаких группировок и тп не требуется. Время на выполнение запросов на чтение достаточно "разумное для ожидания" может составлять и минуты.
-
1 реквест в секунду, расчитывайте на это
-
-
-
-
а скорее в размере батча, который, желательно в тащах штук строк измеряется
-
-
-
Зависит и от сложности вставки
-
-
Я писал графитные данные, сразу в бинарном формате. Это string, float64, int 32, date
-
чем больше колонок и данных в них тем медленнее
-
У меня есть опыт записи логов с приложений в кх. Стр-ра примерно следующая: Date, Time, appName, Type, Message, где Message json в несколько kb. Логи собираются в батчере и пушаться по достижению лимита или таймаута. Вставка примерно 20к/с на 16core, 32gb ram. Существенной нагрузки сервер не испытывает. Но были проблемы с выводом последних сообщений из таблицы в графане, т.к. колонка Message имеет огромный размер. имхо
-
-
Ура !
-
-
-
-
-
-
-
20 тыс строк в секунду. Соглашусь с отсальными, что этот кейс не самым лучшим образом подходит для кх. Нужно как-можно лучше структурировать логи
-
-
было дело, такое еще умела RethinkDB, которая как монга, но сильно легче
-
вот там можно было без индексаци и прочего трамбовать довольно много данных, но я до продакшена ее не дотаищил, а потом они и сами свернули лавочку
-
а что, закрыли разработку ?
-
-
да, собирает записи в один запрос и по достижению лимита записей или по таймауту отправляет запрос в кх
-
асболютно верно, писать json не самая лучшая идея
-
-
а можно уплотнить json в messagepack
-
и сжать его эдак раза в полтора, это конечно не решит проблемы с 20кб
-
-
-
-
-
Joined.
-
Привет, есть ли возможность подключить SPSS Modeller к ClickHouse?
-
Joined.
-
Проблема с жирными столбцами в том, что разреженный индекс с ними плохо справляется. Если взять дефолтное значение гранулярности 8192, то будет вообще плохо - в худшем случае для чтения одного сообщения придётся зачитать 20кб * 8192 = примерно 160МБ данных (с диска, конечно, меньше, но ведь их ещё и разжимать...) Можно взять гранулярность поменьше, но тогда вырастет размер индекса, а он резидентный в памяти.
-
-
-
-
-
-
-
-
How to make ClickHouse count() function return 0 in case of zero matches?
Our task is to run a batch of ~20000 queries in ClickHouse and store results into a CSV file. Each query is a count() aggregation returning a single number. We do it like this: ./generate_queries...
-
-
про это есть тикет
-
-
-
-
что-то тоже не нашел. хотя задача уже успела стать классической.
-
-
Тут немного не понятно - индекс одной партиции должен влезать в память или всех одновременно?
-
-
-
-
-
Размер индекса куска (парта) (небольшая терминологическая путаница - партиция это всё-таки один месяц) - всё-таки таблица system.parts :) Для всей таблицы надо просуммировать.
-
-
-
-
Техдир обещает распять?
-
-
-
-
-
а что с ним?
-
-
Тут кто то пробовал, не работает ничего кроме зукипера
-
Кх использует функционал ЗК которого нет в zetcd
-
-
спасибо, Владимир
-
multiop · Issue #38 · coreos/zetcd
ZK's transactions. Haven't seen it used in the wild.
-
-
А где можно почитать: что такое зукипер, чем он отличается от zetcd?
-
-
-
-
-
-
-
-
А есть бенчмарки?
-
Я где то находил, zetcd был в 2-3 раза медленнее
-
-
Joined.
-
Добрый вечер. Передаю через GET запрос запрос, содержащий regexp. Символы \\ URL-энкодятся и регэксп не срабатывает. Не подскажите, что делать?
-
Для загрузки данных из умирающей influx в КХ надо из csv файла со строками типа:
timestamp,tag, A=<значение>
...
timestamp, tag, B=<значение>
...
положить данные в таблицу КХ со структурой:
(timestamp, tag, A, B)
Засада в том, что строки с A и B для совпадающих значений timestamp,tag разбросаны случайно по csv файлу. gzip-нутых csv данных порядка 50-100 гигов.
Как лучше это сделать?
Пока надумал такое :
1) grep A < file | clickhouse-local -S ... -if CSV -q 'SELECT ... format CSV ' | clickhouse-client —query="INSERT INTO DB.tableA FORMAT CSV"
2) grep B < file | clickhouse-local -S ... -if CSV -q 'SELECT ... format CSV' | clickhouse-client —query="INSERT INTO DB.tableB FORMAT CSV"
3) INSERT INTO FinalTable FROM SELECT timestamp, tag, A, B FROM tableA INNER JOIN tableB USING timestamp, tag
4) DROP table tableA; DROP table tableB
Или есть более оптимальный КХ-way способ? -
linux group by date column and show count
i have a CSV file that looks like this: aaa bbb ccc, 2015-01-01 fff ggg ddd, 2015-01-01 ggg hhh sss, 2015-01-02 ddd fff aaa, 2015-01-03 sss kkk www, 2015-01-03 i want to group by the second field...
- 02 June 2017 (159 messages)
-
Добрый день подскажите пожалуйста, я сделал бэкапирование данных в кх методом копирования data папки во процессе работающего сервера, по размеру бэкапов вижу что они отличаются по размерам такое чувство что не все файлы копируются и включаются в архив - возможно по причине того что некоторые файлы не доступны для копирования т.к. используются сервером, но не уверен. Был бы рад любой критике
-
т.е. процессе clickhouse-server пишет/изменяет файлы, а вы в это время копируете их в другое место через обычные механизмы вроде "cp"?
-
и ожидаете, что при восстановлении у вас будут нормальные данные?
-
конечно схема mergetree - это не изменение "in place", но я бы все равно не надеялся на удачное восстановление из таких бэкапов
-
а как насчет ФС со snapshot?
-
Какого типа a и b и есть ли какие-нибудь характеристики по их физической близости друг к другу на диске?
-
Я сегодня первый раз столкнулся с тем, что кликхаус прекратил запрос со словами: 9g is too much for query, stop it
-
-
Я скорее про то, что считать нормальным
-
Пока что у меня под это рабоает только один сервер с 32 гб памяти, очевидно надо просить хостера расширять
-
Какие разумные цифры тут ставить? 16 гигов на запрос? Или лучше попробовать пооптимизировать запрос?
-
я вроде где-то в этом канальчике видел советы делать просто select * fromat RowBinary в файл или что-то в таком духе
-
Консистентность бекапов проверяли? Далеко не факт что такой бекап нормально будет ресториться.
Как по мне, лучше выделить сервак, на него сделать реплики и уже на них FREEZE PARTITION.
Подробнее тут: https://clickhouse.yandex/docs/ru/query_language/queries.html#id5 -
что-то типо того. но на счет пишет сомневаюсь но на выходе в облаке вижу разного размера бэкапы
-
привет. этот способ хорошо, но что будет если я буду селектит в файл 1 млрд данных это будет по времени наверное намного дольше чем копирование?
-
a и b - UInt64 (счётчики пакетов и байтов). Про близость строк с a и b и одинаковым набором остальных полей (тегов и timestamp) ничего определённого сказать нельзя. Насколько я понимаю это просто тупой дамп из key-value storage в потрохах InfluxDB. Маловероятно, что там будет какая-то гарантированная упорядоченность.
Теоретически можно задачку решить чисто линуксовыми тулзами - слиянием через paste двух потоков (grep A|sort ...) и (grep B | sort ...), но я не пробовал и не знаю, как поведёт себя sort на многогигабайтном текстовом файле.
Вот пример куска исходного файла:
device_srcAS_nexthop_interfaces,device=10.146.0.1,iface_in=0,iface_out=22,nexthop=149.6.168.201,src_as=0 bytes=960000i 1488480600000000000
device_srcAS_nexthop_interfaces,device=10.146.0.1,iface_in=0,iface_out=22,nexthop=149.6.168.201,src_as=0 bytes=960000i 1488481200000000000
device_srcAS_nexthop_interfaces,device=10.146.0.1,iface_in=0,iface_out=22,nexthop=149.6.168.201,src_as=0 packets=10000i 1488479100000000000
device_srcAS_nexthop_interfaces,device=10.146.0.1,iface_in=0,iface_out=22,nexthop=149.6.168.201,src_as=0 packets=20000i 1488479400000000000
device_srcAS_nexthop_interfaces,device=10.146.0.1,iface_in=0,iface_out=22,nexthop=149.6.168.201,src_as=0 packets=10000i 1488480600000000000 -
реплики не планируем пока использовать. FREEZE PARTITION создает ведь в папку detached партишины? может оттуда их копировать?
-
Я думал где-то с месяц назад написать конвертер из InfluxDB в CH. Имя метрики - таблица. Но пока застопорилось на том что кажется надо свою библиотечку для КХ писать.
-
О том и речь. Отдельный сервер с репликами чтобы не аффектить на продуктивный кластер.
-
я думаю, что стоит попробовать написать код, который будет читать из инфлюкса два синхронизированных по времени стрима для A и B и их заливать в кликхаус
-
другой вариант могу предложить: сделать собственный сторадж в котором строки вида: UTC:Int32, A:Int64, B:Int64 и пройтись по нему, перезаписав inplace
-
это вот два варианта, которые могу посоветовать
-
Для КХ вроде достаточно связки "clickhouse-local | clickhouse-client". У меня засада в кривости Influx и его cmdline клиентов - вроде бы простой select * from somemeasurement where time > t1 and time < t2 легко выжирает всю память (50 свободных гигов не хватает). Пришлось influx_inspect export использовать, а он, как оказалось, поля (fields) в отдельные строки дампа выводит 😞 Что-то специально писать не хочется - задача миграции разовая.
-
Я с вопросом про размер query. Это вообще разумно поднимать max query memory до 20 или 30 гигабайт? Т.е. я задрать могу, а насколько это оправдано? Может я просто не так пользуюсь и это уже неправильное использование инструмента?
-
Joined.
-
@maxlapshin возможно вы не совсем правильно используете кликхаус? Если был инфлюкс, где нормальной аграгации нету - а вы перешли на кликхаус, который заточен под агрегацию (т.е. не на стороне софта, а прямыми sql вытягивать данные) вот здесь уже нужно или лимитировать, или добавлять максимально доступное ОЗУ исходя из того, сколько может быть одновременных запросов т.к. при переполнении - падает весь демон, а не выдает ошибку для запроса
-
Не знаю как у кликхауса, но к примеру в касандре есть потоковое чтение что в вашем случае очень может помочь, т.е. оперативная память не будет сильно забиваться: прочитал->отдал, но с касандры только сырые данные можно будет получить + очень критично к параметрам WHERE по порядку выборки, или использовать ALLOW FILTERING и терять в скорости
-
-
Ну да, вроде так и удаляется как у обычной таблицы на MergeTree
-
-
-
не уверен, что вас понял, но у меня именно агрегация в SQL.
-
я беру хиты за день и группирую все, которые выглядят как от одного клиента: group by ip, streamname, useragent и потом сгруппированное сортирую и выдаю
-
-
-
-
Joined.
-
-
-
-
-
-
всего их около 2 млн, разных где-то в три раза меньше. Ширина думаю под килобайт
-
-
ок, разберусь ещё
-
@maxlapshin вот пример по нашей базе.
SELECT *
FROM
(
SELECT
COUNT() AS c,
UserIP
FROM impressions
WHERE EventDate >= '2017-05-20'
GROUP BY UserIP
ORDER BY c DESC
)
LIMIT 5
5 rows in set. Elapsed: 1.612 sec. Processed 145.22 million rows, 1.93 GB (90.09 million rows/s., 1.20 GB/s.) -
-
Если начинать добавлять в связку GROUP BY - после этого растёт потребление памяти, что в принципе логично, но не настолько критично как у вас. Возможно получается всё же слишком много записей? Стоит попробовать как-то групировать пользователей сразу, к примеру генерировать какой-то fingerprint
-
-
-
-
хорошо, я попробую разобраться с тем, что я делаю не так
-
Или посмотреть что говорит curl -i http://host:port
-
-
я пытаюсь зайти, используя http://ui.tabix.io/#/login
-
-
-
Браузером "Ок" увидели?
-
-
-
-
-
-
-
Хост: http://10.0.0.234:8123, login default, pass пустой.... ВЫдает "ошибка доступа"
-
-
-
-
/#/login:1 XMLHttpRequest cannot load http://10.0.0.234:8123/s1/query.
-
OPTIONS http://10.0.0.234:8123/s1/query 501 (Not Implemented)
-
/#/login:1 XMLHttpRequest cannot load http://10.0.0.234:8123/s1/query. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://ui.tabix.io' is therefore not allowed access. The response had HTTP status code 501.
-
Вот оно
-
-
а агрегируете как, суммы или уники?
может можно группироать по хешам фиксированной ширины, а потом джойнить к ним исходные строки. -
SELECT
ip, name, type, user_id, country, referer, useragent,
dictGetString('useragents','browser_type',tuple(useragent))
AS ua_browser_type,
sum(deleted_at - created_at) AS view_time,
um(bytes_sent) AS bytes_sent,
min(toUnixTimestamp(created_at)) AS created_at_,
max(toUnixTimestamp(deleted_at)) AS deleted_at_,
min(id) AS id_,
count(distinct id) AS count
FROM sessions
WHERE
account_id=19446
AND created_at_date='2017-06-02'
AND created_at > (toDateTime(1495148194))
GROUP BY
ip, name, type, user_id, country, referer, useragent,
created_at_date
ORDER BY created_at_ asc
LIMIT 200 -
вот, даже без вложенного селекта
-
я группирую всё, что похожее и вот оно не влезает в 9 гигабайт
-
-
-
-
-
-
Link
Приглашаем всех, кто анализирует большие объёмы данных, на встречу, посвящённую СУБД ClickHouse. СУБД ClickHouse, разработанная в Яндексе для нужд Яндекс.Метрики, почти сразу стала использоваться для решения самых разных аналитических задач. ClickHouse работает быстрее всех известных нам СУБД и легко обрабатывает петабайты данных. Это делает СУБД незаменимым инструментом в руках аналитика. Сейчас ClickHouse стала открытым программным обеспечением, так что её могут свободно использовать все. На встрече будет два доклада. Аналитик Яндекса Мария Рыжова покажет типичные задачи, которые легко решаются с помощью этой СУБД, а технический директор проекта СМИ2 Игорь Стрыхарь расскажет о созданном командой СМИ2 Tabix — графическом интерфейсе для работы с ClickHouse. После докладов пройдёт сессия вопросов и ответов. С собравшимися пообщаются аналитики Яндекса, использующие ClickHouse в самых разных сферах. Их можно будет расспросить, как эффективнее всего применять эту СУБД к конкретным задачам. Участие бесплатно…
-
-
да, у меня очень много строк после group by остается
-
окей, следующий вопрос: если я задеру max_query_memory до, скажем, 24 гигабайт при том, что на сервере сейчас 32 гига памяти, кликхаус может упасть с OOM из-за этого?
-
супер, это именно мой вопрос!
-
Еще вопрос есть. Как с помощью https://github.com/yandex/clickhouse-odbc подключиться к базе из R (Win)? поставил релиз 64 бит, R 64 бит. Пишу
library(DBI)
con <- dbConnect(odbc::odbc(),
driver = "ClickHouse ANSI",
# database = "default",
uid = "default",
#pwd = "password",
host = "10.0.0.234",
port=8123L
)
Выдает ошибку: Error: nanodbc/nanodbc.cpp:950: HY000: Cannot parse port number.GitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Ооо, group_by_overflow='any' !!
-
Вот пример, как hash позволяет уменьшить время запроса и потребление памяти:
Запрос 1 - используем hash:
select fromDomainHash, any(fromDomain), count() from test
group by fromDomainHash
order by count() desc
format JSON
"rows": 375,
"statistics": {
"elapsed": 0.026554691,
"rows_read": 1636501,
"bytes_read": 39930314
}
Второй запрос - без использования hash:
select fromDomain, count() from test
group by fromDomain
order by count() desc
format JSON
"rows": 375,
"statistics": {
"elapsed": 0.024187994,
"rows_read": 1636501,
"bytes_read": 53022322
}
В первом случае памяти потребовалось в 1,35 раза меньше! -
а domainHash при этом надо сохранить при записи? Т.е. мне надо хранить hash(useragent) для этого?
-
Привет!
никто не подскажет
match(haystack, pattern)
можно сделать icase -
?
-
-
хранить при чтении быстрее, иначе придется читать длинную колонку и считать по ней хеши.
-
хранить при записи в смысле?
-
-
-
ну в любом случае надо сделать новую таблицу и туда все данные перелить, верно?
-
-
> Такой столбец не может быть указан при INSERT, то есть, он всегда вычисляется.
-
а он вычисляется один раз при вставке или всегда потом при каждом обращении?
-
-
помогло!
-
Итак, что у меня было.
Запрос с group by, оставляющий очень много строк, не влезал в память.
Я сделал alter table sessions add column ref_hash UInt64 materialized cityHash64(referer);
и поменял с group by referer на group by ref_hash
Теперь всё стало сильно лучше и влезает в 10 гигабайт. -
-
неа
-
мне надо по ним сгруппировать
-
Вот тут опять про номрмализацию строк, и у меня такая же проблема.
-
и ещё я поменял вложенный селект с count distinct на uniqCombined((field1,field2,field3))
-
Какой таргет язык?
-
подскажите пожалуйста какой сейчас Go коннектор к кликхаусу считается самым тру?
-
А сколько join в запросах?
-
нисколько
-
у меня одна таблица
-
От Алексея был доклад по способам группировки. Месяц или 2 назад
-
даа, здесь выше выложили
-
я его прослушал уже
-
-
https://github.com/kshvakov/clickhouse
Или свой писатьGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouseGolang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
Го
-
-
спасибо
-
-
практикуемся на С++ :)))
-
на го три либы, а на плюсах одна, даешь конкуренцию :)
-
-
я нашел две более-менее активных
-
ок, две, могу ошибаться:)
-
вот плюсовому драйверу очень не хватает батчера, красивого
-
в проекте я нечто на коленке написал, что задачку решает, но блокирует поток приема данных, некрасиво
-
а как красиво с многопоточностью написать, чтобы сброс данных в CH шел в отдельном потоке без блокировки и чтобы таких потоков могло быть несколько - не осилил откровенно
-
-
-
-
-
-
-
-
-
Joined.
-
s1 это лишнее
-
-
Any ?
-
anyLast()
-
Ооо, да, кажись оно.
-
-
-
Это не страшное даже. Тут выше обсуждение как без такого не выжить по памяти
-
Ну это просто обычно поведение MySQL ) на сколько я знаю только он так умеет.
-
Мускль делает any по умолчанию. Постгрес очень жесткий тут
-
Спасибо!
-
-
+1 за простыню со словарями
-
-
да, userAgent, location_id, и другие систем. обьекты через id
-
Так же, мы используем "хитро" таблицы Summing, допустим у нас есть список рекламных компаний(сайтов/товаров...) которые, есть словарь. Мы инсертим в таблицу каждую минуту все активные компании/товары и делаем +1, тогда можно достать все ключи словаря - через запрос в эту таблицу))
( в ожидании ф-ционала в самом CH )) -
-
нет, у нас объекты insert only, у них статус = active|stop
тут тонкость в виде race condition - но мы списываем на мат.погрешность в наших задачах - 03 June 2017 (3 messages)
-
ок, у меня теперь назрел следующий вопрос: а как вы тестируете проекты, которые используют кликхаус?
-
мокаете запросы к кликхаусу или гоняете всё на тестовом сервере?
-
- 04 June 2017 (23 messages)
-
а как посоветуете быть с геолокацией. Это то, что лучше писать в базу или это вычислимые данные? Кажется, что это надо писать в базу, потому что данные то меняются.
-
у нас событиям добавляется локация пользователя в момент события. А то они любят ее менять произвольно.
-
зависит от ситуации. координаты москвы не меняются, координаты людей меняются.
-
IP -> координаты
-
я про это
-
гоняем на сервере.
-
-
Для геолокации были патчи на префикс лакапы по айпи
-
т.к. эта связь меняется со временем, то если нужно знать где было событие, то либо надо помнить всю историю геопривязки и джойнить при чтении, либо джойнить в момент записи. второе по-моему проще.
-
ок
-
разумно
-
хотя я так понимаю, что как раз для этого есть словари с временем?
-
-
/stat@combot
-
чо там чо там про геолокацию?
-
тыкдом научился работать с геоданными?
-
-
Joined.
-
Всем привет! Кто-то сталкивался с багами оптимизации запросов самим КХ? Когда он выкидывает данные из подзапроса?
-
Вот тут более детальное описание https://groups.google.com/d/msg/clickhouse/tzLZG-FWbvE/siX-Df9tBAAJ
Если кто-то ловил такое, то получилось как то обойти или нет?Google GroupsGoogle Groups allows you to create and participate in online forums and email-based groups with a rich experience for community conversations.
-
ну там считать пересечения, полигоны, линии, расстояния и прочие плюшки
-
-
- 05 June 2017 (88 messages)
-
Коллеги, так может подскажете, можно ли доступиться из tabix.io (открываю с сайта, без инсталляции) к серверу CH в локальной сети с другой машины? Консоль хрома дает такую ошибку: XMLHttpRequest cannot load http://10.0.0.234:8123/s1/query. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://ui.tabix.io' is therefore not allowed access. The response had HTTP status code 501.
-
-
-
Проще в докерер табих запустить. Примерно минут 10 на все про все. Из сообщения неясно - если 10.* сетка до примера тогда приведите лог нормальный. Если сетка не пример - тогда как минимум 8123 порт должен быть выставлен наружу (PAT). и такое ощущение что нужен CORS но это скорее всего уже в настройках самого tabix.io не думаю что под вас будут править. Воспользуйтесь лучше докером + табих. Либо если в локалке поднят nginx or apache тогда скопируйте архив табих с офф страницы и запустить ещё один виртуальный хост
-
-
-
Нужен PAT(NAT) если его нет то как с внешнего ресурса к вам в локалку попадёт табих. Упрощенно говоря
-
-
-
-
Нет.
-
-
-
-
Могу в личку написать чтобы не разводить флуд
-
-
Ошибка не в кх или табикс, а в браузере
-
-
-
https://github.com/yandex/ClickHouse/pull/83 - кажется вот pr который добавил поддержку этого в кх и там же указано как пользоваться.Add CORS hearder,param:add_http_cors_header and check request header by isublimity · Pull Request #83 · yandex/ClickHouse
В ответе HTTP сервера, отдавать заголовок : Access-Control-Allow-Origin: * Если: Указан параметр add_http_cors_header=1 в параметрах запроса Передан заголовок Origin Пример: curl -v "http:/...
-
У меня без проблем все работает внутри локалки. Сервер на другой тачке, табикс локально поднят
-
Главное кх на этот хост повесить, что бы не 127.0.0.1 слушал
-
-
Нужно использовать обратные кавычки: alter table DatabaseName.`.inner.TableName`
-
Joined.
-
-
-
-
GitHub - smi2/phpMigrationsClickhouse: Migrations for Clickhouse cluster
Migrations for Clickhouse cluster. Contribute to smi2/phpMigrationsClickhouse development by creating an account on GitHub.
-
-
в yii2 в одну строчку заработало если что - http://joxi.ru/4vAWKbKhpjDWAW1496673608010 (58 kb) uploaded June 5, 2017 Joxi
made using Joxi.net
-
-
Миграция в одной базе и миграция в кластере немного разные вещи. Вот моя статья на эту тему https://habrahabr.ru/company/smi2/blog/317682/Масштабирование ClickHouse, управление миграциями и отправка запросов из PHP в кластер
В предыдущей статье мы поделились своим опытом внедрения и использования СУБД ClickHouse в компании СМИ2. В текущей статье мы затронем вопросы масштабирования, к...
-
У вас ошибка в настройке подключения к серверу - должнобыть http://host:IP/ и все без s1
-
Несколько нод на одной машине не рекомендуется, потому что это менее выгодно по ресурсам, чем одна нода на машину.
-
Немного информации про железо есть здесь: https://github.com/yandex/ClickHouse/blob/master/doc/administration/tips.txt
-
помогите разобраться, делаю три запроса:
1. `SELECT uniqExact(managed_object) AS qty
FROM alarms WHERE
ts BETWEEN toDateTime('2017-06-01T01:00:00') AND toDateTime('2017-06-01T07:00:00')
or
ts BETWEEN toDateTime('2017-05-30T15:00:00') AND toDateTime('2017-05-30T16:00:00')`
результат = 87238
2. `SELECT uniqExact(managed_object) AS qty
FROM alarms WHERE
ts BETWEEN toDateTime('2017-06-01T01:00:00') AND toDateTime('2017-06-01T07:00:00')`
результат = 35941
3. `SELECT uniqExact(managed_object) AS qty
FROM alarms WHERE
ts BETWEEN toDateTime('2017-05-30T15:00:00') AND toDateTime('2017-05-30T16:00:00')`
результат = 52729
почему 87,238 <> 35,941 + 52,729 (88,670) -
потому что один и тот же managed_object появился и в мае и июне?
-
-
У нас в Яндекс.Метрике это главный вопрос на собеседовании
-
Ожидаем что люди понимают что уников складывать нельзя
-
-
Иногда можно. Но почти всегда нельзя.
-
И в ClickHouse нет primary key :)
-
-
Ребяты, не подскажите, необходимо производить выгрузку в Excel (для бизнеса) всей таблицы из КХ (обычный select * from table), для такого простого функционала odbc-драйвер КХ-ный пойдет?
-
В Excel же 65000 строк максимум было кажется
-
Вроде до 10 млн, в любом случае нужно выгружать небольшие агрегатные таблички до 1 млн.
Для больших объемов, естественно, отдельный скриптец выгрузки -
ага, а потом уже начинается bigdata
-
CSV и импортировать
-
-
tabix умеет экспорт в csv
-
orantius@x:~$ clickhouse-client --query "select * from system.one format TabSeparatedWithNames" > dump.tsv
-
-
-
а только у меня CODE 500 возвращается по https://github.com/yandex/ClickHouse?
-
а не
-
проблема не в CH
-
У меня тоже - это проблема GitHub.
-
вот жешь
-
В старом формате, в xls. В xlsx сильно больше
-
Раскроем секреты: excel <= 2003 2^16 строк, после 2^32
-
ура, я пройду в яндекс. правда полгода назад я пытался их вычитать)
-
В любом случае, люди заморочились написали CH, пошли на кучу компромиссов, чтобы оно шевелилось, а тут хотят бац и в экселюшку все подгрузить.
-
Либо не влезет, либо зачем CH со всеми его заморочками?
-
-
а есть какие-нибудь ограничение на кол-во колонок в таблице для Distributed движка?
-
получилась у нас тут таблица на 719 колонок
-
если пытаться обратиться к ней через Distributed, то сервер падает
-
-
-
у клиента Exception on client:
Code: 32. DB::Exception: Attempt to read after eof: while receiving packet from xdray-3:9000, 192.168.157.3
Connecting to xdray-3:9000.
Code: 210. DB::NetException: Connection refused: (xdray-3:9000, 192.168.157.3) -
в логах сервера ничего не успевает
-
корка создается
-
версия CH старовата
-
завтра попробуем обновиться
-
сейчас 1.1.54198
-
-
да пожалуйста
-
пытаемся сейчас замутить тему с расчетом KPI для оператора сотовой связи
-
и туда ложатся события сети между MSC и BSC/RNC
-
они весьма разнообразны и таблица получилась сильно разряжена
-
-
если реально выяснится, что мы переборщили с таким подходом, будим дробить таблицу
-
ну пока, как вы понимаете, только идут эксперименты
-
в локальную таблицу завтра попробуем повставлять
-
-
Joined.
- 06 June 2017 (83 messages)
-
Такое количество столбцов - полностью нормально для ClickHouse.
В логах на 192.168.157.3 есть что-нибудь полезное? Например, фрагмент "###" - говорит, что сервер получил сигнал. Ниже будет указан стек трейс. Если нет - смотрите в dmesg. -
один раз на сервере проскочил стектрейс. Не уверен, что он относится к моему случаю, т.к. воспроизвести его не могу.
2017.06.05 23:45:14.376130 [ 4 ] <Error> ServerErrorHandler: Code: 210, e.displayText() = DB::NetException: Connection reset by peer: while reading from socket (192.168.157.1:58882), e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x27a44c6]
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) [0x27b6ccf]
2. clickhouse-server(DB::ReadBufferFromPocoSocket::nextImpl()+0x32b) [0x27b682b]
3. clickhouse-server(DB::TCPHandler::runImpl()+0x1179) [0xff6519]
4. clickhouse-server(DB::TCPHandler::run()+0x1c) [0xff6eec]
5. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x2fe17cf]
6. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x12b) [0x2fe2e4b]
7. clickhouse-server(Poco::PooledThread::run()+0xa7) [0x30f5817]
8. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x96) [0x30eff76]
9. /lib64/libpthread.so.0(+0x7dc5) [0x7f8386636dc5]
10. /lib64/libc.so.6(clone+0x6d) [0x7f8383f07ced] -
в dmesg ничего особенного не вижу
-
-
ну вот я и говорю, что следов не остается, но по факту падает clickhouse-server к которому цеплялся клиент
-
вот так в логе:
2017.06.06 10:20:56.472875 [ 6 ] <Trace> TCPConnectionFactory: TCP Request. Address: 192.168.157.1:37452
2017.06.06 10:20:56.472959 [ 6 ] <Debug> TCPHandler: Connected ClickHouse client version 1.1.54198, user: default.
2017.06.06 10:20:59.446788 [ 6 ] <Debug> executeQuery: (from 192.168.157.1:37452) select Timestamp from omega.omega_sccp -
после этого все, сервер упал создал core файл
-
больше нигде ничего
-
добавлю, что это все на CentOS 7
-
коллеги, приношу извинение
-
"дело было не в бабине"
-
в общем при создании Distributed таблицы я указал на себя же
-
в результате такое поведение
-
таблица создалась, но при обращении к ней получается вот такая штука
-
выглядело это примерно так
CREATE TABLE default.test AS default.test_local
ENGINE = Distributed(cluster1, default, test); -
наверное правильней было бы не дать создать такую рекурсию?
-
-
ну вот тут не было предупреждений и в момент создания неправильного объекта, ни в момент обращения к оному
-
Повторюсь, это не более чем дополнительный инструмент, манагерам так удобно, вроде очевидно же
-
Только при показе 700-800к строк (а в csv выгружается столько, сколько отображено) Хром помирает)
В общем, поэкспериментирую с odbc-дровами, посмотрим, че как, всем спасибо -
У вас какая задача то ? Выхлоп в excel положить?
-
Ага
-
-
Joined.
-
Опишу чуть больше: дать манагерам/аналитикам инструмент выгрузки небольших табличек в excel-е, чтобы они сами могли еще что посмотреть и поработать с данными у себя на машинах.
Вариант работы прям через excel симпатишный, если он не взлетит, то, конечно, можно через курс и отдавать sh-скрипт, это понятное дело -
-
привет. не могу создать создать materialzed view с использованием populate, в оригинальной таблице 40млд записей. сначала была ошибка с нехваткой памяти, подкрутил лимиты для group by, теперь ошибка с тем что не хватает файловых дескрипторов
есть какие нибудь настройки для того чтобы делать populate по кусочкам ? -
По кусочкам можно, вручную. Делаете MV без populate или с populate на текущий месяц, если там не очень много данных. А потом ручками вставляете в .inner. таблицу кусками
-
спасибо, попробую
-
А как вы лимитируете кол-во записей для выгрузки? Можно ведь и превысить лимиты экселя.
Как вы смотрите на вариант создания пользователя КХ с ограниченными правами для манагеров/аналитиков? Тогда они смогут напрямую работать с КХ, ведь он отлично для этого подходит. Или предложить использовать Табикс/Графану, тогда можно будет анализировать данные с любого места и в любое время -
У нас 2 сценария использования для аналитиков/манагеров (все на винде):
1) Повертеть данные, посмотреть что-как обычными запросами любые таблицы (сырые, агрегированные, обогащенные данные). Для этой цели есть ридонли юзеры и им отдается tabix (только в версии чуть более старой, без процессов и всякого доп. мониторинга, т.к. полегче)
2) Выгрузка "агрегатных" таблиц полностью (мы просто говорим, какие таблицы так можно выгружать, а какие нет - это и есть лимитирование) для того, чтобы их повертеть excel, графички построить и т.п. Для этих целей в дальнейшем мб будем использовать какой-нибудь Clickview, но там нужен уже полноценный odbc -
-
-
это больная тема :(
-
-
Месяцами - понятно. А если детальные данные дольше дня-недели-двух не нужны? Заморачиваться с таблицей на каждый день и дропом или переименованием? Можно ли для этого использовать движок Merge в котором будет обновляемый список (много) MergeTree таблиц? Или тут могут быть грабли?
-
все затаились и ждут доработки с произвольным партиционированием (ну или хотяб по дням).
ну или в вашем случае можно попробовать глянуть на https://clickhouse.yandex/docs/ru/table_engines/graphitemergetree.html -
но это совсем не дженерик вариант
-
я лично затаился и жду, костылиазация ретеншена очень неприятная и сложная
-
но это скорее будет не ретеншен, а просто дроп старых данных
-
но, опять же, вручную имея возможность дропать данные по дням это будет легко реализовать вручную, обрабатывается день, перекладывается вдругую базу - дропается
-
и так каждый день
-
Joined.
-
-
-
-
Через FREEZE
-
Переименовать старую, создать новую, скопировать данные. Может быть можно обойтись без копирования, через detach/attach партиций. Но если данных не очень много, то спокойнее через insert-select.
-
а если вставлять напрямую в inner таблицу, репликация данных пройзойдет или надо вручную на каждом хосте делать insert ?
-
Если inner таблица реплицируема, то, конечно, репликация будет
-
спасибо за информацию
-
а кто-либо юзал кликхаус вместе с ZFS?
-
(на линуксе, естественно)
-
а в чем профит такой комбинации?
-
возможность собрать очень большие партиции из большого числа дисков в пределах одной машины
-
сейчас насколько я понимаю, кликхаусу нельзя скормить 24 3Тб жестких диска, чтобы он самостоятельно разместил данные на них равномерно.
-
Joined.
-
а чем аналог из md не устроит?
-
кажется использовать зфс чтобы объединить диски это оверкилл
-
-
-
-
-
-
-
-
-
md в этом месте кажется более удачным решением. В десятку его со sparse 2 — и красота
-
нуда 32 харда в рейд 10. мистер бесконечные деньги:)
-
Joined.
-
Мы напилили свой элоквент билдер и свой клиент. Могу на гитхаб вывалить. Для миграций простой query runner через artisan. Список серверов настраивается через конфиг. Не стали мудрить с грамматикой и прочим в их схеме с миграциями.
-
всем привет, собираю стату по кликам, нужно пометить через некоторое время конверсионный, по сути нужен апдейт по номеру клика одного поля
как тут лучше быть? -
выше спрашивал почему зфс
-
а не md или что-то еще
-
основная проблема не отсуствие возможности объединенное блочное устройство сделать, для этого есть lvm, dm, md и аппаратные рейды
-
скорее вопрос в том, какую файловую систему ставить поверх этого 10-60 терабайтного блочного устройства
-
ext4 и прочие - идут мимо. был приятный опыт недельного fsck в оффлайн режиме на 20тб, больше не хочется :)
-
а ZFS On Linux с центосом 6 и 7м прекррасно хранил по 60 тб без единой проблемы почти 3 года, но это были бэкапы с довольно своеобразным паттерном записи (в основном последовательная)
-
отсюда и вопрос, был у кого опыт или нету)
-
Могу соврать, но у нас на сколько я помню часто ставят xfs на дисковые полки. Но это не для КХ.
-
вполне возможно, но все равно на таких объемах файловую систему без self-healing как зфс страшно :(
-
XFS я как-то совершенно упустил из практики, лет 7 назад были потери данных, а после этого "осадок остался" и везде был экст3 ну и потом экст4, с сопутствующим им приколами
-
вот никак не могу найти ответ в мануале: а почему count() возвращается в json как строка?
- 07 June 2017 (126 messages)
-
-
Выложите пожалуйста
-
Сегодня точно выложу клиент, который можно использовать отдельно. Пока там нет поддержки —external файла для использования в условиях where in / not in, но в ближайшие пару дней добавим. Билдер элоквента сегодня в течение дня постараемся покрыть тестами и тоже выложить на гитхаб.
-
-
Всем привет! Не появился еще odbc под windows?
-
сейчас постоянно сыпит такое в лог:
2017.06.07 11:19:08.089529 [ 13 ] <Error> mprobe.sccp_msu_sharded (StorageReplicatedMergeTree): checkPartAndAddToZooKeeper: node /clickhouse/tables/s3_r2_03/mprobe/sccp_msu_sharded/replicas/xdray-9/parts/20170607_20170607_3608084_3614891_1627 already exists
2017.06.07 11:19:08.096770 [ 13 ] <Error> DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 235, e.displayText() = DB::Exception: Part 20170607_20170607_3608084_3614891_1627 already exists, e.what() = DB::Exception, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x27a44c6]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0xfe082f]
2. clickhouse-server(DB::MergeTreeData::renameTempPartAndReplace(std::shared_ptr<DB::MergeTreeDataPart>&, SimpleIncrement*, DB::MergeTreeData::Transaction*)+0xee3) [0x28cee63]
3. clickhouse-server(DB::StorageReplicatedMergeTree::fetchPart(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&, bool, unsigned long)+0x3a3) [0x288ee83]
4. clickhouse-server(DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry const&)+0x7b7) [0x28903a7]
5. clickhouse-server() [0x289362e]
6. clickhouse-server(DB::ReplicatedMergeTreeQueue::processEntry(std::function<std::shared_ptr<zkutil::ZooKeeper> ()>, std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::function<bool (std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>)+0x3b) [0x293e08b]
7. clickhouse-server(DB::StorageReplicatedMergeTree::queueTask()+0x132) [0x28735d2]
8. clickhouse-server(DB::BackgroundProcessingPool::threadFunction()+0x3cc) [0x28b9b9c]
9. clickhouse-server() [0x3174adf]
10. /lib64/libpthread.so.0(+0x7dc5) [0x7f083e96bdc5]
11. /lib64/libc.so.6(clone+0x6d) [0x7f083c23d21d]
При этом данные вроде доступны. Есть идеи что с этим делать? -
-
Коллеги, а что обычно делают, когда на двух репликах получилось разное кол-во строк
-
ну и сыпится постоянно вот та ошибка, что выше приведена?
-
привет. столкнулся со странной ошибкой. запрос такой:
SELECT screen_name, count(*) FROM (
SELECT screen_name, session_id, event_time
FROM analytics.apps_clickstream
LIMIT 2 BY session_id
)
GROUP BY screen_name LIMIT 50
фейлится с ошибкой DB::Exception: Not found column session_id in block. There are only columns: screen_name, e.what() = DB::Exception
подзапрос при этом выполняется и отображает все колонки. -
можешь по-другому это сделать:
-
select screen_name, uniqExact((session_id, event_time)) from analytics.apps_clickstream group by screen_name
-
так не лучше?
-
да это я для примера такой запрос сделал, чтобы показать проблему. изначальная задача вообще определить второй экран в сессии. )
-
Joined.
-
Joined.
-
Joined.
-
Кстати в КХ есть неприятный баг, который неправильно оптимизирует запрос и выкидывает какие то блоки данных
-
Мне из-за этого пришлось считать среднеквадратичное отклонение на прикладном уровне блин...а там бывает по 100 000 строк в результате запроса
-
а ты уже создал issue на github для этого?
-
Нет еще, руки не дошли, но в гугл группах мне кто-то из команды КХ подсказал как этот баг обойти, но этот костыль не всегда работает
-
так все-таки пусть руки дойдут 😊 Просто наверняка многие с этим столкнуться/сталкивались.
-
Да, я думаю многие, но никто еще не написал ) В течение пары часов постараюсь добраться и описать баг
-
Спасибо!
-
-
Речь про Float в первичном ключе или что-то другое?
-
Нет, есть у меня запрос в котором есть несколько вложенных подзапросов. И поверх всех типа select * from (куча подзапросов вложенных). Дак вот самый верхний ругается мол "column learnerHash not found in block"
-
Хотя если сделать select *, count(learnerHash) from (куча подзапросов вложенных), то все ок
-
-
https://groups.google.com/d/msg/clickhouse/tzLZG-FWbvE/siX-Df9tBAAJ вот тут я описывал проблемуGoogle Groups
Google Groups allows you to create and participate in online forums and email-based groups with a rich experience for community conversations.
-
Есть и джоины. Про звездочку не знал, но там не в это дело. learnerHash изначально имеется в левой таблице
-
-
Например даже если я делаю select median(duration) from (куча подзапросов вложенных) то валится ошибка
-
А если к медиане припишу еще count(learnerHash), то все ок работает )
-
Мне там Николай Кочетов ответил как решить проблему, но это решение не всегда работает и не всегда удобно его использовать в запросах
-
-
-
-
Releases · ClickHouse/clickhouse-odbc
ODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
спасибо! то что нужно
-
это же не будет нумерацией строк в выводе. в CH аналога оконной row_number() over () нет, насколько я помню
-
Добавил презентацию с РИТ++: https://github.com/yandex/clickhouse-presentations/tree/master/rit2017yandex/clickhouse-presentations
clickhouse-presentations - Presentations, meetups and talks for ClickHouse
-
-
сорри, перепроверил с подзапросом. действительно, работает.
-
Joined.
-
-
-
Joined.
-
-
Запостил issue в гитхаб по поводу бага с которым я столкнулся https://github.com/yandex/ClickHouse/issues/859Wrong query optimisation throws out required columns from subqueries. #859
Query below works fine. SELECT * FROM ( SELECT learnerHash, passed - eventTime AS diff FROM statements GLOBAL ANY INNER JOIN ( SELECT learnerHash...
-
-
-
Install - Tabix
Tabix DB Gui
-
клиент - tabix - ch
без прямого коннекта к ch не работает -
вкладка tabix.server интересует
-
в данном клиенте. Она работает через tabix.proxy
-
а доков по нему нет, не официальных, не подпольных. Ни кто не задавался вопросом? Чтобы не открывать порты clickhouse наружу
-
Tabix.Server - это закрытая пока разработка, она не в паблике и сильно не доделана
Если нужно прикрыть СH могу посоветовать nginx в котором proxypass на ch.
но сам такое не использовал еще -
Joined.
-
-
-
-
нужно пробовать, я использую ui.tabix.io )
-
Без разницы. Главное скопировать с архива папку с сайтом tabix. Там все достаточно просто
-
Joined.
-
Вывалил на github клиент для CH на PHP. https://github.com/the-tinderbox/ClickhouseClientGitHub - the-tinderbox/ClickhouseClient: Clickhouse client over HTTP
Clickhouse client over HTTP. Contribute to the-tinderbox/ClickhouseClient development by creating an account on GitHub.
-
тру!
-
Планировал сегодня выложить билдер запросов в CH для Laravel/Lumen, но к сожалению нам не удалось завершить его сегодня. Полагаю до конца недели мы с ним закончим и выложу на гитхаб.
-
спасибо
-
Кстати о презентации, есть запись?
-
Кстати о презентации. Есть новости про CH хакатон?
-
-
-
конференции с платным видео
-
у меня в голове не укладываются такие вещи :/
-
-
а простите, как оно должно быть по-другому? =)
-
Joined.
-
это офтоп здесь
-
есть множество конференций таких как NANOG, RIPE, ENOG, DNS OARC, которые ставят во главу угла все же распространение знаний, а не бабло :)
-
на самоокупаемости и волоентерах, иначе оно превратится в рекламу продуктов от спонсоров
-
Учитывая что Алексей говорил про идеи для хакатона и прочее - ребята, простите, но кто же будет потом в этом безобразие участвовать?)
-
Речь не про хакатон, а про конференцию РИТ++
-
-
-
понятно. Тут тоже неоднозначно то всё.
-
-
😊 ни разу не встречал такое за 10+ лет работы в IT
-
Joined.
-
ооо, Илья, такие люди) привет со СГАУ))
-
Поясните, pls : доках написано, что в таблицы с движком ENGINE=SET можно добавлять данные через INSERT. А если надо удалить ненужный элемент из множества? Только через DROP TABLE ?
И вопрос вдогонку: каковы практические ограничения/рекомендации на размеры SET таблиц? -
-
//оффтоп
Highload - первое, что сразу вспоминается -
Вечер добрый всем. А можно ли как-то прочитать данные из таблицы "задом-наперед". Хочется отобразить live feed, чтобы последние записи появлялись вверху. Если делать так:
select date, event from events
where date > '2017-06-01'
order by date DESC
limit 15
то CH читает все данные с указанной даты, затем делает сортировку по дате в обратном порядке. Получается, вместо того, чтобы прочитать последние 15 записей, мы читаем все с заданной даты, и этих данных может быть очень много. Кто как решает подобные задачи? -
за КХ не скажу, но вот так, как вы описали, поступает мускль, а постгрес читает по индексу на date назад и как правило с первого блока набирает первую страницу
-
Так про него и была речь
-
-
-
-
-
-
CREATE TABLE datetest (date Date, s String) ENGINE=MergeTree(date, (date, s), 8192);
INSERT INTO datetest VALUES (0, '0'), (1, '1'), (10000, '10000'), (23011, '23011'), (65535, '65535'), (99999999999, '99999999999');
SELECT * FROM datetest;
SELECT partition, name, active, table, min_date, max_date FROM system.parts WHERE table = 'datetest'; -
-
-
смотря в каком диапазоне числа еще, есть вероятность падать в одну партицию 197001 %)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
SELECT
count(),
avg(query_duration_ms),
avg(read_rows),
avg(memory_usage)
FROM system.query_log
WHERE (event_date = today()) AND (type = 2)
┌─count()─┬─avg(query_duration_ms)─┬────avg(read_rows)─┬─avg(memory_usage)─┐
│ 58430 │ 600.8495635803525 │ 1666922.955279822 │ 94408267.76395687 │
└─────────┴────────────────────────┴───────────────────┴───────────────────┘ -
-
SELECT
count(),
avg(query_duration_ms),
avg(read_rows),
avg(memory_usage)
FROM system.query_log
WHERE (event_date = yesterday()) AND (type = 2)
┌─count()─┬─avg(query_duration_ms)─┬────avg(read_rows)─┬─avg(memory_usage)─┐
│ 58577 │ 27.065093808149957 │ 57156.20260511805 │ 73023700.41504344 │
└─────────┴────────────────────────┴───────────────────┴───────────────────┘ - 08 June 2017 (190 messages)
-
Если ничего не поможет, то могу поискать у нас в вики инструкции, как узнать, что в vfs кеше
-
Я думаю одни из первых вопросов которые тут зададут - версия кх и сколько кусков не смержено?
-
-
Может стоит обновиться до последнего стейбла и сделать оптимайз?
-
Там что то про https://clickhouse.yandex/reference_en.html#system.mergesClickHouse Documentation | ClickHouse Documentation
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
ClickHouse Documentation | ClickHouse Documentation
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
-
-
Там вроде были функции для работы с регулярками
-
replaceRegexpOne можно использовать и регулярку типа /(\d)(?=(\d\d\d)+([^\d]|$))/ в качестве замены например "$1 "
-
Сам не пробовал, это чисто предположение
-
Что-то я не понимаю: это баг или фича?
Есть 2 таблицы - одна обычная, другая с движком Set:
USE proba
SHOW CREATE TABLE set_1
CREATE TABLE proba.set_1 ( d UInt32, i UInt32) ENGINE = Set
SHOW CREATE TABLE test
CREATE TABLE proba.test ( dev UInt32, idx UInt32) ENGINE = Memory
Такая выборка работает:
SELECT * FROM test WHERE (dev,idx) IN set_1 FORMAT CSV
1,11
А эта вылетает:
SELECT * FROM test where (dev,idx) IN proba.set_1 FORMAT CSV
Received exception from server:
Code: 60. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Table proba.proba.set_1 doesn't exist..
Почему имя базы лишний раз дописывается?
Вроде же синтаксис для имён таблиц такой: [db.]name
Или есть ньюансы? -
-
мержей активных нет, количество кусков для каждого месяца - 4-14 штук. оптимайз части таблиц я сделал для предыдущих месяцев
-
просто первая идея которая лезет в голову - что что-то пошло не так с мержем последних кусков и их слишком много
-
-
а сейчас скорость нормализировалась?
-
-
Думаю нет :) Все таки разделить на разряды - это строка получится в любом случае. Clickhouse строго типизирован
-
И в любом случаи стоит обновиться на последний стейбл
-
-
мб создать дистрибьютед таблицу поверх processes?
-
-
есть ведь client_hostname поле
-
-
-
Добрый день! Раньше где-то видел ссылку на changelog, но сейчас ничего похожего найти не могу =( https://github.com/yandex/ClickHouse/releases/tag/v1.1.54236-stable — как понять, что изменилось не изучая все коммиты?yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Кстати да, интересный вопрос )
-
-
ClickHouse Release Notes
ClickHouse is an exellent DBMS with very smart people working on it. Unfortunately, it still lacks some important communication procedures, and arguable the most wanted one is release notes. Altinity mission is to make ClickHouse use easy for everbody, and we will try to fill the gap betwe
-
-
Joined.
-
Joined.
-
-
Мб со страницы со старой необновляемой (так ведь?) документацией https://clickhouse.yandex/reference_ru.html сделать редирект на новую обновляемую https://clickhouse.yandex/docs/ru/single/ ?Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
А то случайно выяснилось, что я уже давно устаревшей пользуюсь :( Правда, новая тормозит нещадно, так что мб лучше продолжить пользоваться старой.
-
мб кому пригодится
CREATE TABLE system.query_log_all AS system.query_log ENGINE = Distributed(cluster, system, query_log, rand()); -
-
да, тоже такое сделал на прошлой неделе. Можно мониторить кол-во запросов с кластера:
$rateColumns(
concat(substring(query, 1, 45), '...') AS query,
count() c)
FROM $table
SELECT
$timeSeries as t,
avg(query_duration_ms) select_duration
FROM $table
WHERE $timeFilter AND type = 2
and query like 'SELECT%'
GROUP BY t
ORDER BY t -
-
-
а оно работает нормально? у меня только это заработало
-
-
да, а почему Вы думаете, что что-то может пойти не так?
-
-
WHERE $timeFilte
не нужен -
он подставляется
-
-
-
-
Joined.
-
Joined.
-
extract(x, "([^=]+)=") + extractURLParameters
-
Joined.
-
всем привет. кто-нибудь подключал здесь odbc драйвер на винде? пытались подключить его к spss моделлеру - ничего не вышло. скачивали сборку из гитхаба последнюю
-
JDBC драйвер прекрасно работает с DBeaver под Windows
-
нужен конкретно odbc драйвер. с jdbc делали подключение через плагин для языка R.
-
-
можете подсказать к кому обратиться по вопросу с odbc? если помогут разобраться - могу сделать PR с описание как его собрать/настроить
-
-
-
давайте начнем немного с начала. у вас есть таблица, в ней одна строка это нечто с урлом. также у вас есть колонка Array(String) с параметрами, например с их именами. а рядом, можно предположить, есть еще одна колонка с значениями, тоже Array(String), в хорошем случае такой же длины как первый.
-
-
и вот вы хотите какой-то отчет, например select k, count() from urls array join Param.Keys as k, Param.Values as v where k in ('1','2','3') group by k. а может быть нет.
-
-
-
-
-
Мы еще добавляем node, чтоб ы можно было из одного места смотреть все и в разбивке по нодам. Для этого на каждой ноде создается view, где в node прописано имя ноды, а потом уже distributed смотрит на все вместе
-
-
-
-
-
-
-
А это чтобы достать список процессов на всех нодах кластера?
-
-
-
-
мне хочется странной визуализиации в кликхаусе, у меня около 15ти числовых полей (32 бита) в базе, я хочу делать отражения в 3х мерное пространство трех заданных полей.
-
и хочу видеть это на 3х мерной картинке с возможностью ее покрутить
-
хорошо, а если бы эти параметры лежали в другой таблице 1 ко многим, вы бы как этот запрос написали?
-
казалось бы, причем здесь кликхаус.
-
тут много плагинов для визуализации обсуждается
-
для 2х мерного случая я абсолютно рад графане, но для 3д в голову не приходит ничего
-
последнее куда я данные заливал, был projector.tensorflow.org , можно сразу в 15 измерениях PCA построить или t-SNE
-
-
красиво, но хочется что-то stand alone, в облаке много штук которые это могут, но обычно хочут денег
-
-
-
-
-
Всем привет, скажите пожалуйста для каких целей Вы используюете ClickHouse?
-
Храню Netflow/sflow телеметрию с сетей в нем ;)
-
Аналитика данных в системах СДО
-
какие другие? arrayExists выдает true если для хотя бы одного индекса предикат выполнился.
-
Пытаюсь запихнуть в КХ маркет-дату.
-
когда мне скучно, я его ломаю, это поднимает настроение.
-
логирование траффика для последующего анализа
-
-
-
-
Plotly plugin for Grafana | Grafana Labs
Scatter plots and more
-
@hagen1778 супер! спасибо!
-
спасибо https://grafana.com/orgs/natelNatel Energy Overview | Grafana Labs
Data visualization & monitoring with support for Graphite, InfluxDB, Prometheus, Elasticsearch and many more databases
-
-
Добрый день.
Каким-нибудь образом реально делать суточные бекапы, учитывая, что партиции бывают только месячные?
И соответственно вопрос, что если использовать месячные партиции как суточные, имитируя новый месяц каждый день? -
+ Сложные и необычные запросы
-
Все ждут произвольного партицирования...
-
-
Ага, это я видел :)
Но теоретически имитация нового месяца вполне рабочий вариант? -
Начиная с 197001 и вперед
-
ну в общем работать будет, но месяцев не так чтоб прям очень много будет )
-
-
Ну лет вперед же много )
-
-
-
по крайней мере так написано
-
-
-
-
-
ну то есть если нужны данные за 2 года, можно по модулю 365*2 даты ротировать :)
-
дропая старые партиции
-
это конечно не очень классно, но ждать тоже неклассно )
-
иногда подождать - лучшее решение
-
-
-
Ну это реалистично. Неудобно конечно.
В принципе можно конечно итеративно снимать бекап месяца, просто к концу месяца он уже будет совсем большой -
или использовать дедупликацию в бэкапе
-
хотя бы на блочном уровне
-
Хм. А поподробнее?
-
ну если система бэкапа умеет поблочную дедупликацию, то можно делать бэкап каждый день, но по факту будет добавляться лишь вновь добавленная информация
-
а система бекапа = это не FREEZE PARTITION?
-
ага, консистентности так или иначе надо как-то добиваться
-
ну или LVM snapshot / ZFS snapshot и разморозка сразу же
-
Для разных вещей: список процессов, список запросов, колонки и таблицы -- чтобы можно было с одного места увидеть все, сравнить между нодами и т.п.
-
В общем, наверное, все таблицы из system.*
-
Интересно насколько реализация в tabix хуже, я сделал так: SELECT * FROM remote('_NODES_LIST_',system.processes)
где в nodes перечислены все узлы кластера через запятую
На наших 12ти нодах на ура работает )) -
а если суточный бекап снимать как
select * from table where date = ? into outfile ...
что об этом подумает кликхаус?) -
А как его потом обратно вставлять?
-
если случилась жопа и нужны бекапы, то видимо скриптом батчить инзерты?
-
-
у нас RAID-10, надо успеть заменить его :)
-
если железо позволяет проще лить на два сервера одини и те же данные
-
мы так и делаем
-
но хочется иметь бекапы на случай ядерной войны
-
хочется еще долгие бэкапы?
-
ага
-
на случай ядерной войны консервы и патроны лучше)
-
а так, да, оправдано
-
сливать их куда-нибудь в coldline гуглу и быть уверенным, что даже если оба ДЦ умрут, данные не похерятся
-
осталось понять как их сливать
-
Ну в принципе можно конечно по итогу месяца сливать партишн, а в рамках месяца сливать в csv
-
тогда восстановление будет аттачем старых партишнов и инзертом недавних данных
-
А можно уточнить, что под timestamp тут подразумеваеться? Unix epoch?
-
-
Я на самом деле еще не смог упереться в какой то потолок при вставке данных
-
-
может с этим связано? https://blog.packagecloud.io/eng/2017/02/21/set-environment-variable-save-thousands-of-system-calls/How setting the TZ environment variable avoids thousands of system calls
TL;DR This blog post explains how setting an environment variable can save thousands (or in some cases, tens of thousands) of unnecessary system calls that can be generated by glibc over small periods of time. This has been tested on Ubuntu Precise (12.04) and Ubuntu Xenial (16.04). It likely applies to other flavors of Linux, as well. It is very easy to test if this applies to you and to correct it, if so. Keep reading for more details!
-
200 потоков, 3 сервера, пишу в distributed таблицу. Пробивал потолок в 10кк в минуту
-
Хотя пиковая нагрузка 4кк в минуту
-
спс за инфо, возможно
-
со временем надо быть предельно аккуратными, даже в С/С++ легко отрелить себе что-нибудь полезное
-
"даже"? :)
-
ну я про производительность, обычно они дьяволски быстры на фоне всего прочего)
-
а вот время... была у меня статейка
-
On Linux vDSO and clock_gettime sometimes being slow
Like the previous post on this somewhat dormant blog, I want to share an oddity I discovered that no search engine could really find for me...
-
во
-
оно еще и в Xen не через vdso
-
виртуализация вообще дьявольщина, я каждый раз разубеждаю юзать любую) чистое железо предсказуемее всего, как ни странно
-
а куда без нее, с железками мороки много
-
https://github.com/yandex/ClickHouse/issues/371 мб тикет уже закрыть надо, поидее исправлено?Security issue: bind 127.0.0.1 only for unsecured database · Issue #371 · yandex/ClickHouse
Hello, I install ClickHouse on the debian server, and play around according the guides. Thanks for the great product! I find ClickHouse server bind to 0.0.0.0 by default, and all databases are unse...
-
Так все равно с ним кто то будет разбираться
-
-
конечно будет. кто-то, но не все :)
-
А это от процессов зависит
-
-
а ссд еще сильнее снижают сложность обслуживания
-
Вставка через VALUES?
-
-
Тогда резолв таймзоны ни при чём (в ClickHouse он всё равно один раз делается). При парсинге VALUES используются два парсера - быстрый и медленный, который включается при ошибках в быстром, зато умеет выражения. Для DateTime строка 'YYYY-MM-DD HH:MM:SS' считается нативным форматом, а unix timestamp - "выражением". Поэтому во втором случае используется медленный парсер.
-
-
это бы в документацию, я случайно обнаружил )
-
-
Спасибо за рязъяснения с DateTime
-
-
-
- 09 June 2017 (64 messages)
-
Всем доброго времени суток! Кто-то занимался переносом данных с одного сервера на другой? Нужно кусок данных перекинуть на другой сервер. Лучше через select ... into outfile ?
-
-
-
-
Спасибо! Тут проблемка ) Сервера в разных подсетях ( Возможности доступа из одной в другую нет
-
Просто мне надо не все данные
-
-
Ок, попробую с партициями поиграться, спасибо!
-
-
Просто у меня там данные по разных объектам, а мне по сути только по одному нужно. Так что лучше наверное дамп будет
-
Joined.
-
так я переливал данные большого объема(70 ГБ кусок)
nohup curl -v -T test351560.csv -X POST 'http://username:passwordg@domain.ru:8123/?query=insert%20into%20customer360.agg_pm_kpi_weekly_prp_dist%20format%20CSV' -H "Transfer-Encoding: chunked" -H 'Expect:' & -
здесь объем может быть любым, в ограничение по оперативной памяти не упрётесь
-
Супер! Спасибо большое!
-
Выгрузил пока данные в Native формате, зажал и перекинул куда надо. Данных примерно 100 гигов всего в общей сложности, мне надо было только часть перекинуть
-
Joined.
-
Joined.
-
спамеры набегают я смотрю :/
-
Joined.
-
-
деволтное занчение, оно же на случай отсутствия значения в insert
-
Может я не так сформулировал вопрос. Мне надо, чтобы при парсинге входного json для неизвестных значений поставлялось что-то из списка допустимых, а не кидалось исключение.
-
Привет!
Подскажите плиз.
Есть географически удаленный кластер КХ. Для заливки данных в него развернутся машина и создана Distributed таблица.
Наблюдаю следующую проблему, в таблицу вставили большую пачку строк и данные не утекают на целевые сервера кластера, в логах:
2017.06.09 15:24:46.867466 [ 395 ] <Trace> dd.Distributed.DirectoryMonitor: Started processing `/var/lib/clickhouse/data/sample/dd/default:NotARealPassord@192%2E168%2E98%2E106:9000/66972.bin`
2017.06.09 15:24:46.888801 [ 395 ] <Error> dd.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (192.168.98.106:9000), e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x28c6df6]
1. clickhouse-server(DB::WriteBufferFromPocoSocket::nextImpl()+0x49d) [0x28dbd6d]
2. clickhouse-server(DB::Connection::sendData(DB::Block const&, std::string const&)+0xd3) [0x2abc8b3]
3. clickhouse-server(DB::Connection::sendQuery(std::string const&, std::string const&, unsigned long, DB::Settings const*, DB::ClientInfo const*, bool)+0xc21) [0x2abded1]
4. clickhouse-server(DB::RemoteBlockOutputStream::writePrefix()+0x56) [0x2b6aee6]
5. clickhouse-server(DB::StorageDistributedDirectoryMonitor::processFile(std::string const&)+0x611) [0x29e2ef1]
6. clickhouse-server(DB::StorageDistributedDirectoryMonitor::findFiles()+0x10c) [0x29e491c]
7. clickhouse-server(DB::StorageDistributedDirectoryMonitor::run()+0x85) [0x29e4e05]
8. clickhouse-server() [0x34b1aaf]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8064) [0x7f3f4b5f9064]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f3f4ac2162d]
И так уже 4 часа для всех серверов из distributed таблицы.
При этом запросы на select к этой distributed таблице работают и вроде как все хорошо. Данные которые сегодня вставили не видны, т.е. ни до одного сервера не доехали.
В чем может быть проблема? -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Joined.
-
?*:яяяяяяя...не люблю спамеров. Что они тут забыли?
-
упорный
-
-
-
Ага, творческие люди и все такое
-
Предлагаю таких "по айпи вычислять" )))))
-
привет, у меня тоже проблема с кластером, которая 100500 ошибок
2017.06.09 12:00:32.379509 [ 36 ] <Error> events_all.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (10.7.16.229:9000), e.what() = DB::NetException, Stack trace: -
данные через jdbc вставляются медленно шопипец - за час несколько миллионов строк
-
пробовал все ноды рестартовать - не помогло. куда рыть?
-
раньше, кстати, все бодренько-шустренько вставлялось
-
-
теоретически, возможно, вставляю спарком через коннектор. но вроде как репартиционировал побольше и batch size 3 ляма выставил
-
-
-
-
-
1. у кликхауса сейчас идеология делять много функций, каждая для своего случая как можно оптимальней. например поэтому нет неявной конверсии типов, а есть явная и есть перегрузки под различные комбинации типов аргументов.
2. например одна из сигнатур arrayMap :: (a->b) -> [a] -> [b], это достаточно полиморфно? -
да, вполне логично. Достаточно или нет - это тяжело оценить. В кдб с другой стороны обратная ситуация - всё очень полиморфно, но кажется что не хватает оптимизации как раз для простых типов/вариантов использования.
-
Сейчас посмотрел, и подумал, что не достаточно, но конечно от случая зависит, так как векторизированный 1+[1,2,3] в sse может мало того что быть быстрее, чем +1 через map. Но и с виду проще :). Т.е. map сама по себе плохая операция, но тут бы как раз помог бы полиморфизм +
-
-
-
-
-
-
Согласен. K/Q как язык в общем-то эффективен и прост, но с ходу не привычен, как и векторные базы :) А про полиморфизм: местами (в данном случае для plus) эффективнее чем более сложные конструкции типа map (\x -> x+1)
- 10 June 2017 (19 messages)
-
Joined.
-
https://github.com/yandex/ClickHouse/issues/777
есть подвижки с zetcd
но пока все валится на вставке
блин =( я в C++ не шарю, было бы круто разобраться с этими падениямиclickhouse core dumped when try work over zetcd · Issue #777 · yandex/ClickHousei create repo https://github.com/Slach/clickhouse-zetcd for reproducing stand clickhouse + zetcd latest clickhouse Dockerimage core dumped after run following query sudo docker-compose run clickhou...
-
-
я конечно продолжаю быть в шоке от кликхауса: у нас 900 млн записей в таблице, индексов нет и всё работает очень и очень быстро.
-
я никак не могу понять: если я хочу сделать сервер для постоянной репликации для бекапа, мне всё равно надо использовать зукипер? Я бы хотел это отложить до последнего
-
Так вам репликация нужна или необходиcть создавать бэкапы раз в N дней?
-
я хочу копирование всех записей на другой сервер с минимальной задержкой
-
-
с ним в принципе надо разбираться и надо поднимать несколько экземпляров
-
Можешь поставить его через Cloudera Manager
-
С зукипером кстати как и с любой инфраструктурной штукой одна проблема - не хочется усложнять себе жизнь, когда у тебя уже стоит скажем консул. Зоопарк мало кто любит.
-
-
В современном мире скорее всего у тебя будет любые 2 из консула, etcd, zookeeper что бы ты ни делал
-
-
Хз, хз. Вон в тарантуле планируют поддержать все 3 и дать выбор пользователю.
-
Я в чудеса не верю, вероятно один из трёх будет ощутимо лучше работать
-
Если будет удовлетворять требованиям, то какая разница? Выше, сильнее и быстрее не всегда лучше -иногда нужно просто чтобы без гемора. :)
-
-
Ну что спорить, увидим. :)
- 11 June 2017 (4 messages)
-
Мы подумываем над тем, чтобы удалить поддержку SET GLOBAL. (Конечно, удалять будем постепенно - сначала из документации, а только потом из кода). Причина - не очевидный порядок применения по отношению к настройкам из профилей пользователей, особенно во время обновления этих профилей; и эту логику стало сложно поддерживать.
Я сам несколько раз пользовался этой возможностью для экспериментов по включению всем некоторых новых настроек. Но это не сильно удобнее, чем добавить или отредактировать файл в users.d. Поэтому я сомневаюсь в том, насколько она нужна.
Вопрос - есть ли кто-нибудь из вас, кто пользовался SET GLOBAL и кто что думает по этому поводу? -
Привет всем еще раз. Не хочу засорять чат, но спрошу. Нужен специалист по СН. Делаем трекер для нашей рекламной сети. Все функции и задачи уже сформированы. Работы на 2 недели с полным фокусом на наших задачах. Кому нибудь интересно? Если знаете кому может быть интересно, можете помочь связаться? Всем хорошего воскресенья.
-
Joined.
-
Joined.
- 12 June 2017 (33 messages)
-
Joined.
-
всем привет, пытаюсь юзать скрипт по загрузке данных из yandex metrica
https://github.com/yndx-metrika/logs_api_integration/
юзаю виртуалку ubuntu 16.04 с 2 гигами оперативки и дефолтным конфигом
получаю
Out of memory: Kill process 13197 (BackgrProcPool) score 906 or sacrifice child
Jun 12 13:21:53 local-metrika2clickhouse-clickhouse-pro kernel: Killed process 13182 (ConfigReloader) total-vm:14636140kB, anon-rss:1830256kB, file-rss:692kB
данных вроде не много грузится
куски по 70 мегабайт
суммарно данных 1.5 гигабайта в TSV формате
как так получается что clickhouse умирает по OOM ?GitHub - yndx-metrika/logs_api_integration: Script for integration with Logs APIScript for integration with Logs API. Contribute to yndx-metrika/logs_api_integration development by creating an account on GitHub.
-
-
'max_memory_usage_for_user', 'max_memory_usage_for_all_queries'
-
смотрите в эту сторону
-
по дефолту ограничение 10гб вроде в кликхаусе. Поправьте users.xml чтобы не вылезал за физически доступный обьем
-
<Trace> MergeTreeBlockInputStream: Reading 1 ranges from part 20140701_20140731_568_568_0, approx. 8192 rows starting from 0
что значит эта запись в логах? -
Только что поставил Clickhouse на CentOS. (Александр АТ c google groups, если ты это читаешь, то просто "от души")).
Я больше все-таки работаю с данными, чем программирую, поэтому в знаниях часто пробелы, но есть огромное желание попробовать, а под рукой есть сервер и БД, которая прямо-таки требует внимания)
Алексей, спасибо за все это и отличную документацию! А Яндексу и сообществу спасибо за опен-сорс) -
Спасибо! Надеемся, будет полезно для ваших задач :)
-
Эта запись сообщает нам о том, какие диапазоны строк необходимо будет сейчас прочитать для выполнения запроса или фонового слияния. Нам говорят, что из такого-то куска данных мы будем читать примерно 8192 строки с самого начала.
-
у меня очень странное поведение просто, у меня тупо в какой то момент сейчас сервер падает, но без всякого OOM уже
и эта запись
2017.06.12 16:10:06.886533 [ 12 ] <Trace> MergeTreeBlockInputStream: Reading 1 ranges from part 20140601_20140630_552_552_0, approx. 8192 rows starting from 0
последнее что есть в log файле
и последнее что есть в .err.log файле это просто
2017.06.12 16:10:01.027339 [ 3 ] <Warning> ConfigProcessor: Include not found: clickhouse_compression
т.е. жалобы на конфиг
при этом
service clickhouse-server restart
не помогает сервер тупо не стартует -
хотя
service clickhouse-server status
показывает
● clickhouse-server.service - LSB: Yandex clickhouse-server daemon
Loaded: loaded (/etc/init.d/clickhouse-server; bad; vendor preset: enabled)
Active: active (exited) since Mon 2017-06-12 16:09:58 UTC; 3min 55s ago -
попробуйте включить core dumps или запустить clickhouse под gdb
-
а в dmesg написано что "clickhouse-server segfaulted..." или подобное?
-
ну вот сделал я service clickhouse-server stop
потом
service clickhouse-server start
и видимо запустилась какая то компактификация
потому что у меня 20-30 мегов в секунду чтение и iotop даже в консоли не может запуститься...
в смысле консольный ввод вывод тормозит
а хост машина показывает что VboxHeadless отжирает 20-30 мегов на чтение -
> запустилась какая то компактификация
Так и есть. Компактификация (мерж) производится в фоне почти всегда.
> 20-30 мегов в секунду чтение
Это мало.
> iotop даже в консоли не может запуститься...
Проблема с виртуальной машиной - слишком урезанная конфигурация? -
Совет такой: откройте
top -d0.5
отсортируйте по оперативке: Shift+M
и смотрите, что происходит. -
так, ну вот сейчас заработали лимиты
и приложение которое льет данные стало выпадать
ValueError: Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 477.21 MiB (attempt to allocate chunk of 1048576 bytes), maximum: 476.84 MiB, e.what() = DB::Exception
зачем нужно 0.5 гигабайта памяти для TSV файла который весит 70 мегабайт? -
файл c данными это просто выгрузка из metrika logs api
-
https://mega.nz/#!uU42CBoI!58xKHMdW1tBgsWBRzUGdo6zcHhRA6pnSWBIeUWbet60
вот образец данных которые я пытаюсь грузить через запрос вот такого вида
CREATE DATABASE metrika2clickhouse;
CREATE TABLE metrika2clickhouse.hits_all ( Artificial UInt8, Browser String, BrowserCountry String, BrowserEngine String, BrowserEn
gineVersion1 UInt16, BrowserEngineVersion2 UInt16, BrowserEngineVersion3 UInt16, BrowserEngineVersion4 UInt16, BrowserLanguage String, BrowserMajorVersion String, BrowserMinorVersion String, ClientID UInt64, ClientTimeZone Int16, CookieEnabled UInt8, CounterID UInt32, Da
te Date, DateTime DateTime, DeviceCategory String, Download UInt8, Event UInt8, FlashMajor UInt8, FlashMinor UInt8, From String, GoalsID Array(UInt32), HasGCLID UInt8, HttpError String, IFrame UInt8, IpAddress String, JavascriptEnabled UInt8, LastAdvEngine String, LastSe
archEngine String, LastSearchEngineRoot String, LastSocialNetwork String, LastSocialNetworkProfile String, LastTrafficSource String, Link UInt8, MobilePhone String, MobilePhoneModel String, NetworkType String, NotBounce UInt8, OpenstatAd String, OpenstatCampaign String,
OpenstatService String, OpenstatSource String, OperatingSystem String, OperatingSystemRoot String, PageCharset String, Params String, PhysicalScreenHeight UInt16, PhysicalScreenWidth UInt16, Referer String, RegionCity String, RegionCountry String, ScreenColors UInt8, Scr
eenFormat UInt16, ScreenHeight UInt16, ScreenOrientation String, ScreenWidth UInt16, ShareService String, ShareTitle String, ShareURL String, Title String, URL String, UTMCampaign String, UTMContent String, UTMMedium String, UTMSource String, UTMTerm String, WatchID UInt
64, WindowClientHeight UInt16, WindowClientWidth UInt16 ) ENGINE = MergeTree(Date, intHash32(ClientID), (Date, intHash32(ClientID)), 8192)
INSERT INTO metrika2clickhouse.hits_all FORMAT TabSeparatedWithNamesLinkMEGA provides free cloud storage with convenient and powerful always-on privacy. Claim your free 20GB now
-
в общем я не удержался
https://github.com/yandex/ClickHouse/issues/868
сделал issue
потому что считаю такое поведение clickhouse очень страннымHow many memory need for insert 70Mb TSV file? · Issue #868 · yandex/ClickHousei install latest clickhouse-server official ubuntu package from repository change settings in users.xml 500000000 1000000000</max_mem...
-
-
В целом в этом нет ничего странного, так как на каждый столбец выделяются буферы для ввода-вывода (по-умолчанию по 1 MB), а также выделяются буферы для столбцов одного блока. Хотя 0.5 гигабайта всё-равно выглядят черезмерно, и с этим можно разобраться. Спасибо, что приложили файл.
-
Очень люблю такое. Вам бы сразу к Бокунову. Я за неделю не напишу. Никто не напишет. Если нормально. А абы как - обращайтесь. За деньги поможем.
Сколько готовы платить? -
Ребят, давайте финансы в личку, а?
-
@artmkin Павел, а не было каких-либо изменений с ColumnDate? Почему-то в С++ клиенте отвалились поля Date (все по нулям), хотя считается все как и раньше, поле DataTime рядом - заполняется корректно.
-
+void ColumnDate::Append(const std::time_t& value) {
+ data_->Append(static_cast<uint16_t😠value / 86400));
+} -
кажется я понял свою ошибку :)
-
починилось, я пытался кастить и сам приводить в нужный формат дату, а нужно было лишь использовать тот же time_t, что использовал для DateTime. Красота :) Прошу прощения за беспокойство.
-
С первого взгляда этот код выглядит абсолютно неверным, так как в сутках не обязательно 86400 секунд и сутки не обязательно начинаются тогда же как в UTC. Можно предположить, что он корректный, если бы в описании этой функции было указано, что туда надо передавать особенное значение time_t, которое соответствует началу нужного дня в UTC. Но в комментариях этого не написано. Указано только бессмысленное:
/// Appends one element to the end of column.
void Append(const std::time_t& value);
Поэтому не удивительно, что при использовании этого кода возникает путаница. -
на самом деле код делающий тоже самое у меня выглядел примерно также :(
-
но сломался он потому что была двойная конверсия секунды в дни и потом опять дней еще раз в дни, что в итоге в любом случае давало нули
-
его наверное просто стоит передавать далее как time_t и не заморачиваться преобразованием в самой библиотеке отправляя эту проблему в CH ;)
- 13 June 2017 (83 messages)
-
Ребят....проблема с distributed таблицей. Пишу данные и в логах вот такое сыпится
2017.06.13 12:55:19.446774 [ 22 ] <Error> statements.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (10.20.122.3:9000), e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x2969826]
1. clickhouse-server(DB::WriteBufferFromPocoSocket::nextImpl()+0x5ad) [0x297de7d]
2. clickhouse-server(DB::Connection::sendData(DB::Block const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0xe5) [0x2b6f365]
3. clickhouse-server(DB::Connection::sendQuery(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&, unsigned long, DB::Settings const*, DB::ClientInfo const*, bool)+0xc35) [0x2b709b5]
4. clickhouse-server(DB::RemoteBlockOutputStream::writePrefix()+0x6a) [0x2c25eda]
5. clickhouse-server(DB::StorageDistributedDirectoryMonitor::processFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x6f9) [0x2aa4cf9]
6. clickhouse-server(DB::StorageDistributedDirectoryMonitor::findFiles()+0x14c) [0x2aa680c]
7. clickhouse-server(DB::StorageDistributedDirectoryMonitor::run()+0xc5) [0x2aa6d05]
8. clickhouse-server() [0x36744ef]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f4f0fd8a6ba]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f4f0f3ab82d] -
ClickHouse server version 1.1.54236
-
@FacedSID и скорость вставки смешная получается, да?
-
Проблема в том, что данные даже не пишутся в таблицу, их нет. Хотя в соседнюю распределенную таблицу пишутся, но в ней всего 4 столбца, она как лог служит
-
Может стоит на последний стейбл обновиться?
-
я вот до 1.1.54236 обновился, и тоже такая шляпа началась
-
Ну в гите вроде как 54237 последняя, но ее вроде не собрали в релиз еще
-
Интересно, а если делать даунгрейд версии сервера, ничего не сломается?
-
Joined.
-
-
Joined.
-
Всем привет!
ClickHouse meetup наконец-то едет в Минск! Встреча 29 июня.
Будет интересно как администраторам ClickHouse, так и тем, кто пока только присматривается к системе. Мы приглашаем белорусских пользователей также поделиться своим опытом использования ClickHоuse и выступить на встрече с блиц-докладами.
Участие в мероприятии бесплатное, но необходимо заранее зарегистрироваться: количество мест в зале ограничено.
Посмотреть программу и подать заявку на участие можно на странице встречи: https://events.yandex.ru/events/meetings/29-june-2017/ClickHouse Meetup, 29 июня 2017, Минск — События ЯндексаСобытия — вся информация о конференциях, школах, семинарах и других мероприятиях Яндекса — как прошедших, так и предстоящих.
-
Также можно поделиться с друзьями в сетях
https://www.facebook.com/Yandex.Events/posts/1568900803130035
https://vk.com/yandex.events?w=wall-17796776_5432
https://twitter.com/ya_events/status/874564684531335168Яндекс.МероприятияClickHouse Meetup отправляется в Минск! 29 июня в Минске впервые выступят с докладами создатели СУБД ClickHоuse и те, кто ежедневно использует её для решения аналитических задач. Докладчики...
-
Боюсь спрашивать про митап в Украине)
-
А я боюсь отвечать :) Приезжайте в Минск!
-
Минск прекрасен, рекомендую :)
-
-
-
Нет, не планируется.
-
-
-
а тут написано, что будет трансляция
-
кому верить ? )
-
Верить мне, не будет трансляции (
-
-
была опечатка
-
-
Видео тоже не планиурется. Опубликуем пост в блоге ClickHouse https://yandex.ru/blog/clickhouse
-
А видео не хотите по каким-то legal issues?
-
было бы очень интересно посмотреть
-
попробовал поделить файл пополам, все вставилось нормально
значит дело все таки в том что у меня там 72 колонки
и 130 тысяч строк
ну вроде по вашим словам не должно аллоцироваться больше 100 мегабайт
все таки было бы не плохо разобраться -
Я пачки по 10-15 гигабайт заливал
-
Хотя колонок было поменьше
-
У меня проблема с записью другая. На сервере пишу в распределенную таблицу и получаю IO Error: Broken pipe, причем на шардах никаких ошибок в логах нет...
-
И это блин на продакшене...
-
И че с этим делать даже не знаю. Один вариант - сделать роутинг на нужный сервер на уровне приложения
-
я бы начал с strace процесса CH и tcpumpd/wireshark
-
broken pipe должен возвращать вполне конкретный сокет и эту ошибку видно в сисколлах
-
-
-
-
-
Попробуем поймать... Скажите, с какой версии обновились? Какая конфигурация кластера? Чем отличаются Distributed таблицы, в которые INSERT работает, от тех, в которые не работает?
-
-
Обновлялся с релиза перед 1.1.54236. Конфигурация кластера абсолютно идентична (имеется ввиду все три шарда идентичны, т.к. это по факту клоны виртуалок). Таблицы отличаются только структурой, т.е. разный набор колонок.
-
можно так: toDateTime(toUnixTimestamp('2017-06-13 00:00:00', 'Etc/GMT+3'))
-
То есть с 1.1.54231, верно? Кластер 3 шарда, есть ли реплики, или всего 3 сервера? Distributed таблица создана на одном из этих серверов?
-
Да
-
Реплик нет, просто 3 шарда
-
Distributed таблица создана на всех трех серверах
-
-
-
Супер! Спасибо большое! :)
-
И там еще был баг с выбросом колонки при оптимизации запроса https://github.com/yandex/ClickHouse/issues/859. По нему ничего не известно?Wrong query optimisation throws out required columns from subqueries. #859
Query below works fine. SELECT * FROM ( SELECT learnerHash, passed - eventTime AS diff FROM statements GLOBAL ANY INNER JOIN ( SELECT learnerHash...
-
Достаточно неприятный кейс на самом деле (
-
Привет. https://clickhouse.yandex/docs/ru/table_engines/graphitemergetree.html – насколько этот движок специфичен для Graphite? Насколько он стабилен? И будет ли документаци на него на английском?
-
Ребята, clickhouse упал по OOM Killer
после старта сервера
отожрал всю свободную память
и увел в жестокий iowait всю систему... -
http://take.ms/iUsHN
выглядит все примерно так -
все счетчики показывают что система начинает есть на чтение весь доступный диск
-
-
Движок стабильный. Можно использовать и не для Graphite, но структуру таблицы он требует вполне определённую.
-
-
-
-
-
-
-
-
-
https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_graphite_merge_tree/test.py#L30 – тут будет храниться и дата, и timestamp? Почему timestamp – UInt32, а не DateTime?yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
Кажется, можно выносить отдельные ключи в MATERIALIZED VIEW и join'ить, join'ить.
-
-
Дата тоже нужна (как и для обычного MergeTree). Значения даты и других столбцов, не участвующих в прореживании, будут взяты из первой строки группы строк, объединяющихся в одну (строки отсортированы по первичному ключу).
-
-
-
-
-
-
-
https://clickhouse.yandex/docs/ru/table_engines/graphitemergetree.html
В документации колонка называется Version, а в коде дефолтное название Timestamp - https://github.com/yandex/ClickHouse/blob/e03ae570f7a760a4acedbea77e5063a99a9b15e2/dbms/src/Storages/StorageFactory.cpp#L199yandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
Не дождался я предложения :-(
-
ну может человек забросил удочку и ушел искать в ином месте)
- 14 June 2017 (179 messages)
-
А кто нибудь пробовал пускать clickhouse из docker с volume на data папку?
-
-
-
Помните прикол с Broken pipe при разрыве соединения distributed таблиц? ) Рестартнул сервера иииииии...у меня появилось по 7-8 дубликатов этих данных на каждого юзера ) Например вместо 3000 эвентов, 24 000, но это из-за того, что я как раз таки 7 или 8 раз пытался данные записать в КХ
-
похоже действительно коннект теряется, а CH этого не замечает. Рестарт восстанавливает коннект и все что не залилось, доливается)
-
Весело ) Причем такая беда была примерно неделю ) Ну, слава богу данные на месте!
-
Joined.
-
Joined.
-
у меня broken pipe перманентно в логах сыпется, и данные почти не вставляются :(
-
рестарт ниалё
-
А мне помогло ( Возможно у вас другая проблема
-
Там где то советовали как выловить причину
-
Joined.
-
Joined.
-
Joined.
-
-
Добрый день! Кто-нибудь пробовал AD прикрутить к кликхаусу?
-
Joined.
-
-
Можно через https://github.com/kvspb/nginx-auth-ldapGitHub - kvspb/nginx-auth-ldap: LDAP authentication module for nginx
LDAP authentication module for nginx. Contribute to kvspb/nginx-auth-ldap development by creating an account on GitHub.
-
спасибо
-
Joined.
-
-
Какая-то особенность Telegram - текст, начинающийся на / воспринимается как команда, и если на него нажать, то производится автоматический перепост этой команды. Подробнее не знаю.
-
-
-
Я посмотрел у себя эти broken pipe когда начинаются. Ситуация такая - есть кластер из 14 машин, 7 шардов по 2 реплики. Таблица с хитами, на данный момент в ней в районе 45 миллиардов записей. От этой таблицы есть несколько materialized view AggregatingMergeTree.
-
Идея была такая - в таблицу пихаются данные, и автоматически рассчитываются предагрегации для дальнейших отчетов.
-
Судя по всему, что-то пошло не так, сейчас при попытке дальнейших вставок валится
DB::Exception: Memory limit (total) exceeded: would use 93.13 GiB (attempt to allocate chunk of 512 bytes), maximum: 93.13 GiB, e.what() = DB::Exception (from 10.7.16.188:54877) (in query: INSERT INTO dbreports.events (<куча колонок>) FORMAT TabSeparated) -
и после этого с нод валятся broken pipe
-
-
Вопрос: что я делаю не так, не стоит ли поубивать нафиг эти материализованные вьюхи (подозреваю, что это они жрут память при вставке), и как вообще работать с такими объемами, потому как при попытке полностью предрассчитать отчет и вставить данные селектом в таблицу, я тоже вываливаюсь по памяти
-
Память может расходоваться данными для INSERT-а и запросами, которые делают вычисления для вставки во VIEW. Обычно, такие запросы должны потреблять меньше оперативки, чем сами данные для INSERT-а, так как для обработки они используют только пачку вставляемых данных. Но это если вы не используете в запросах для VIEW какие-нибудь IN, JOIN с другими таблицами.
-
@milovidov_an у меня по идее обычная вставка в табицу events, по сути распаршенные сырые данные (вставка из spark'а через jdbc), ну и собственно вот одна из материализованых вьюх:
CREATE MATERIALIZED VIEW dbreports.top_pages_month_without_geo_ ( month Date, did UInt64, short_url String, Users AggregateFunction(uniq, UInt64), Cnt AggregateFunction(count)) ENGINE = ReplicatedAggregatingMergeTree(\'/clickhouse/tables/{shard}/top_pages_month_without_geo_20170515\', \'{replica}\', month, (month, did, short_url), 8192) AS SELECT toStartOfMonth(event_date) AS month, did, short_url, uniqState(uid) AS Users, countState() AS Cnt FROM dbreports.events GROUP BY month, did, short_url -
Выглядит нормально. А напишите, какой стек трейс у ошибки? Его можно посмотреть в логе сервера.
-
-
-
вот так вот лучше
-
А эта ошибка именно при INSERT?
(не при SELECT, не при создании materialized view?) -
> in query: INSERT INTO dbreports.events
:) -
от dbreports.events материализованные вьюхи должны автоматически заполняться, я на это грешу
-
Да, но они обрабатывают не более чем ту пачку данных, которую вы вставляете INSERT-ом. После агрегации этой пачки данных, не должно расходоваться сильно больше оперативки. А с помощью какого интерфейса вставляете? (Может быть, получается большой размер пачки?)
-
@milovidov_an цепочка сложная. spark->clickhouse_spark_connector->jdbc
-
коннектор я тут вот форкнул: https://github.com/archimed-shaman/clickhouse-spark-connectorarchimed-shaman/clickhouse-spark-connector
spark to yandex clickhouse connector. Contribute to archimed-shaman/clickhouse-spark-connector development by creating an account on GitHub.
-
батчами пытаюсь писать по 5000000 записей, могу попробовать поменьше :)
-
-
А кто подскажет, при отправке через HTTP интерфейс сразу нескольких файлов для использования в запросе, их можно зажать? Или в случае с —external файлы передаются не сжатыми?
-
Судя по тестам в гите - гзип работает только при вставке данных (
-
-
а где такая есть?)
-
ложили - это речь про то, что демон падает или о том, что тормозит?
-
Хм. Почему то вот такая команда clickhouse-client —query="SELECT * FROM system.numbers WHERE number in _numbers" —external —file=numbers.csv —format=CSV —structure="number UInt64" —name=_numbers выполняет запрос, но процесс просто висит и все
-
клиент КХ не отдает exit статус короче
-
И такая же петрушка при HTTP запросе
-
Сервер и клиент 1.1.54236
-
В файле один столбец с цифрами от 1 до 6
-
Я кажется понял в чем прикол :) Там же почти бесконечность в таблице numbers :)
-
-
-
-
Сорри за панику! Только сейчас дошло
-
-
-
Если используется обычный HTTP интерфейс (не Native формат) и настройка max_insert_block_size не изменена, то сервер сам разобъёт на куски по 1 048 576 строк.
А сколько в байтах весят ваши чанки? -
Вы не используете решардинг?
-
-
Закомментируйте секцию <resharding> в конфиге.
Более подробно про описанное поведение сказать не могу. -
Тут не понял вопрос, защита от чего конкретно нужна?
-
-
Единственное, перед запуском CH удалили в ZooKeeper все старые данные.
Вот лог из Zookepera.
Thu Jun 08 06:36:14 UTC 2017 INFO deleteNode() deleted node [/clickhouse/task_queue/resharding_distributed/online/ip-172-16-0-199.ec2.internal]
Thu Jun 08 06:36:14 UTC 2017 INFO deleteNode() deleted node [/clickhouse/task_queue/resharding_distributed/online/ip-172-16-0-60.ec2.internal]
Thu Jun 08 06:36:14 UTC 2017 INFO deleteNode() deleted node [/clickhouse/task_queue/resharding] -
отловил занимательное поведения - развалился клауд на час - CH начал употреблять дофига ресурсов на чтения https://drop.vitalvas.com/storage/18/92/b6a7499da46ea24b717f54d2c9f3.png
error log: https://pastebin.com/8PFTbguk
версия 1.1.54198 -
-
Можно.
-
Восстановление реплики?
-
-
-
Демон падает, в логах что-то про нулевой указатель.
-
Плохо. Пришлите описание структуры таблицы. Можно на pastebin.
-
-
Joined.
-
Вставка в основную таблицу и в mat. view неатомарна. Но если использовать Replicated-таблицы для обеих и повторять вставку после любой ошибки, то данные будут корректно вставлены без дубликатов в оба места.
-
-
А у меня сложилось впечатление, покрепленное опытом, что атомарна или почти. Ошибка вставки в MV приводит к откату вставки в основную таблицу. Исключение -- когда несколько некаскадных MV на одной таблице: если на момент ошибки какие-то MV уже обновились, то они не откатываются
-
Во всяком случае в рамках одной реплики. Остальные реплики (основая таблица и MV) догоняются полностью независимо
-
Вставка идёт сначала в MV, потом в основную таблицу. Если ошибка на этапе вставки в MV, то ничего не вставится.
-
Всем привет!
есть возможность средствами КХ выстраивать запросы в очередь?
есть органичение по кол-во конкурентных запросов. Есть ли у КХ средство из коробки или всегда будет лететь ошибка? -
а можно как-то кх ограничить по памяти? а то жрет всю оперативу, выжирает весь своп и сервер вешается так, что даже по ssh не достучаться
-
шуршит в фоне мержами
-
-
-
max_memory_usage выставлено, но чот по ощущениям выжрато весьма больше :)
-
-
а ну да
-
У меня такая же ошибка тоже на вставках последняя версия выжраламвсю оперативу и сервер крашнулся по oom
-
У меня получается наоборот, в основной таблице данных больше чем в MV. Ошибок при вставке нет. Получается данные в основную таблицу попали, а до MV не доехали. Когда не было реплик, вроде данные соответствовали, а с репликами что-то не получается добиться правильно работы MV
-
Коллеги, у меня в запросе есть условие WHERE category_id IN (:categoryIds), использую NamedParameterJdbcTemplate
а можно как-то на уровне SQL переписать это условие, чтобы в случае, если в :categoryIds передавалось NULL, то это условие игнорировалось по сути, и в фильте запроса не было категории? ну то есть чтобы SELECT вывел по всем категориям? -
Поставьте в users.xml в profiles/default
<background_pool_size>2</background_pool_size>
Может быть в будущем сделаем, чтобы сервер сам подстраивался под инсталляции с очень маленьким объёмом оперативки. -
MV создана с Replicated движком?
-
@milovidov_an ну я бы не сказал, что 120gb - это очень маленький объем :)
-
Да, это явно не про ваш случай. Про Slach, у которого 4 GB.
-
config.xml:
<!— Maximum number of concurrent queries. —>
<max_concurrent_queries>100</max_concurrent_queries>
Также в users.xml в профиле пользователя можно прописать queue_max_wait_ms:
/** The wait time in the request queue, if the number of concurrent requests exceeds the maximum. */ -
Ситуация такая. У вас выставлено ограничение max_memory_usage_for_all_queries. Некоторые SELECT-ы в сумме используют много памяти. Затем идёт INSERT. Сам INSERT расходует немного памяти, но в сумме на все запросы оперативки уже не хватает. Поэтому INSERT кидает исключение.
-
ох, спасибо. выставлял потому, что именно память зажирает и сервак вешает. почему - пока понять не могу
-
Решение: выставить также обычный max_memory_usage меньше, чем max_memory_usage_for_all_queries. Уменьшить максимальное количество запросов на пользователя - max_concurrent_queries_for_user. Включить внешнюю агрегацию - см. https://clickhouse.yandex/docs/ru/query_language/queries.html?highlight=max_bytes_before_external_group_by#id8
-
интересно, а линукс умеет пристрелить отдельный поток, а не приложение целиком при событии OOM?
-
Пристрелить отдельный поток, для программы на C++, не имеет смысла - кто же будет деструкторы вызывать - разблокировать mutex, освобождать память и т. п.
-
это да, конечно...
-
-
в теории ведь можно добавить поток в отдельную cgroup
-
и наложить на нее ограничения памяти
-
но как это состыкуется с C++ - оооочень сложный вопрос
-
-
queue_max_wait_ms
а эта настройка в доке не описана
дефолтное значение у нее получается 0? -
если бы ОС умела передать инфуормацию об этом в приложении - поидее было бы возможно
-
в бусте есть т.н. interruption point
-
когда приложение может прочесть уведомление и например пристрелить поток
-
и вызвать корректно освобождение занятых ресурсов конкретно этим потоком
-
-
Адресное пространство - общее, у потока нет его ресурсов (кроме стэка)
-
Да
-
эх, сколько развлечения удалили :)
-
По-умолчанию, 5 секунд.
-
В таком случае я затрудняюсь сказать навскидку, какая возможна причина. Можно посмотреть в лог. Для каждого INSERT-а, при записи, пишется сообщения вида:
<Debug> merge..inner.hits_timings2 (Replicated OutputStream): Wrote block 125579 with ID 17833449664338286632_166080607874846114, 116 rows
И посмотреть на соответствия с обычной таблицей и MV. -
-
если вам не нужна фильтрация по id, то зачем вы ее добавляете в запрос?
-
ну там передается либо список ID шников, либо NULL и если NULL, то это значит вывести все категории
-
-
-
-
Такое как-то можно починить?
Сегодня уже 14 июня, а он все еще надеется...
Part 20170606_20170606_238257_238365_21 is covered by 20170606_20170606_238257_238370_22 but should be merged into 20170606_20170606_238257_238372_22. This shouldn't happen often.
Checking if anyone has part covering 20170606_20170606_238257_238372_22.
Found all blocks for missing part 20170606_20170606_238257_238372_22. Will wait for them to be merged. -
Есть неактивные реплики?
-
-
У вас записываются метрики в Graphite?
-
-
Посмотрите ClickHouse.Metrics.LeaderReplica, ClickHouse.ProfileEvents.LeaderElectionAcquiredLeadership для обеих реплик. Если по первому графику видно, что они перекрывались хоть в какой-то момент времени - значит это баг на нашей стороне.
-
-
Можно, но не очень удобно.
-
-
-
Где всего одна реплика была всегда?
-
-
-
Но там ведь было слегка другое сообщение?
-
-
> Checking if anyone has part covering 20170606_20170606_238257_238372_22.
Found all blocks for missing part 20170606_20170606_238257_238372_22. Will wait for them to be merged.
Это выводится, если есть другие реплики... -
-
-
-
Напишите на почту (clickhouse-feedback). Нужно больше подробностей.
-
-
Joined.
-
Вот и меня настигла проблема broken pipe
2017.06.14 18:16:04.011259 [ 2 ] <Error> hits_d.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (10.138.208.224:9000), e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x2969826]
1. clickhouse-server(DB::WriteBufferFromPocoSocket::nextImpl()+0x5ad) [0x297de7d]
2. clickhouse-server(DB::Connection::sendData(DB::Block const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0xe5) [0x2b6f365]
3. clickhouse-server(DB::Connection::sendQuery(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&, unsigned long, DB:
:Settings const*, DB::ClientInfo const*, bool)+0xc35) [0x2b709b5]
4. clickhouse-server(DB::RemoteBlockOutputStream::writePrefix()+0x6a) [0x2c25eda]
5. clickhouse-server(DB::StorageDistributedDirectoryMonitor::processFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x6f9) [0x2aa4cf9]
6. clickhouse-server(DB::StorageDistributedDirectoryMonitor::findFiles()+0x14c) [0x2aa680c]
7. clickhouse-server(DB::StorageDistributedDirectoryMonitor::run()+0xc5) [0x2aa6d05]
8. clickhouse-server() [0x36744ef]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f3c3ac906ba]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f3c3a2b182d] -
-
На втором сервере:
2017.06.14 09:43:36.158877 [ 19 ] <Error> ServerErrorHandler: Code: 101, e.displayText() = DB::NetException: Unexpected packet from client, e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x2969826]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x108f49f]
2. clickhouse-server(DB::TCPHandler::receiveHello()+0xc8) [0x10a34f8]
3. clickhouse-server(DB::TCPHandler::runImpl()+0x1cc) [0x10a721c]
4. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x10a827b]
5. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x3274d5f]
6. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x13b) [0x327b19b]
7. clickhouse-server(Poco::PooledThread::run()+0xb7) [0x34e6e07]
8. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x34b2e45]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7efc71ac56ba]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7efc710e682d] -
А какая у вас версия сервера? И есть ли в таблице Nullable-колонки?
-
-
-
-
-
-
-
Ура, спасибо!
-
-
-
-
-
Всем привет! Выкатили новую версию php клиента https://github.com/the-tinderbox/ClickhouseClient. Подробности в релизе.GitHub - the-tinderbox/ClickhouseClient: Clickhouse client over HTTP
Clickhouse client over HTTP. Contribute to the-tinderbox/ClickhouseClient development by creating an account on GitHub.
-
Так же выкатили обещанный билдер запросов с fluent подобным интерфейсом
-
https://github.com/the-tinderbox/ClickhouseBuilder
Можно пользоваться как standalone так и подключить в Laravel/LumenGitHub - the-tinderbox/ClickhouseBuilder: Fluent queries builder for Clickhouse. Also has integration with Laravel / Lumen.Fluent queries builder for Clickhouse. Also has integration with Laravel / Lumen. - GitHub - the-tinderbox/ClickhouseBuilder: Fluent queries builder for Clickhouse. Also has integration with Larave...
-
Если у кого то будут вопросы, пожелания - все в личку :) Если будет что добавить, то кидайте pull-реквесты
-
-
Я так полагаю, что результат хранится в оперативке
-
Ну т.е. ничего не должно всплыть
-
Это монга по курсору ходит и то, даже она вроде как не выкидывает вновь добавленные данные
-
Хотя на счет КХ я могу ошибаться :)
-
-
-
-
А по поводу авторизации через АД можете что - нибудь подсказать?
- 15 June 2017 (73 messages)
-
-
-
Нету какой-нибудь прокси или балансера перед КХ?
-
-
-
У меня была подобная проблема, только Expected end of line, но это при селекте с использованием внешнего файла. Проблема возникала потому, что я отправлял зажатый файл, а при селекте зажатый файлец нельзя отправлять
-
В КХ вроде был встроенный механизм балансировки, могу ошибаться, но в документации есть https://clickhouse.yandex/docs/ru/settings/settings.html#load-balancing
-
-
-
Да, есть Nullable колонки https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00395_nullable.sqlyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Там в тесте есть примеры
-
-
sorry :/
-
а когда релиз планируется с багфиксом broken pipe?
-
Joined.
-
Добрый день! А как то можно скрыть пароль пользователя в логах?
-
В течение недели, вчера мне сообщили так в этом чате.
-
Это супер новости! А по багу с оптимизацией запросов ничего не известно пока?
-
-
-
-
-
-
Ну так написано в доке, что в несколько потоков вставка быстрее
-
-
-
Ага и я так полагаю уже измусоленные unix таймштампы вместо времени? )
-
-
-
сотировка по времени?
-
Мы такого не пишем :) это какой драйвер?
-
сортировка по первичному ключу
-
ммм, я видел такое в InfluxDB
-
они как опцию предлагают сортировать на клиенте
-
python clickhouse
-
-
резонно
-
Какой из? Их несколько вроде... И наверно лучше у авторов драйвера спросить, что когда такое бывает.
-
-
В первичный ключ если только добавить нужную колонку
-
Либо выбирать не все колонки
-
т.е. не по звездочке
-
Много колонок?
-
ppodolsky / clickhouse-python
Hg repository hosted by Bitbucket.
-
-
-
-
Id, date, string. В запросе конечно не пишу *. Написал тут для экономии места.
-
-
помогло
СПАСИБО -
Пичалька. Как жить?
-
но наверное имеет смысл, если ты можешь, готовить данные сразу в правильном порядке )
-
-
Joined.
-
-
Поддерживаю вопрос. Очень туго живется без ORDER BY.
-
Подождите, вроде order by тут ни при чем
-
Там в запросе where по индексу
-
Как я понимаю, он не работает
-
А order by по индексу в большинстве случаев не будет давать ожидаемого профита, как я понимаю. Следствие организации хранения данных в merge tree.
-
Подумал ещё немного. Будет, но зависит от данных и запроса. Не так как в классических базах с каким-нибудь btree.
-
Ребята, вы можете обновить benchmark? Например, там сравнение с очень старой версией MemSQL. Сейчас 5.8, а начиная с 4.0 columnstore существенно переработан и ускорен
-
А какое отношение MemSql имеет к КХ?
-
Там же написано - benchmark
-
-
Надо обновить. Для MemSQL даже не так сложно, потому что сохранилась пошаговая инструкция. Сделаем, если найдём время.
-
Я все вертику жду обновления, уже версия 8.1 в проде бегает 😬
-
С Вертикой не будет принципиальной разницы в зависимости от версий
-
Добрый день! Как-то проблема решилась? Тоже самое наблюдаю, все норм работает. INFO. Но все же. Сыпятся постоянно такие сообщения..
-
Это вообще не ошибка. Это говорит о том, что мы спросили у ZK данные о каком-то узле, но узла нет. С точки зрения приложения, и с точки зрения самого ZK, это нормальная ситуация. Можете понизить уровень логгирования в ZK.
-
-
есть такой человек Andy Pavlo, он хорошо знает ребят из MemSQL, может они сами захотят прогнать?
-
Смысл в том, что все системы проходят тесты на одинаковых серверах.
А вообще было бы хорошо. Сейчас для этого не хватает генератора тестовых данных. - 16 June 2017 (128 messages)
-
Всем привет. Кто-нибудь пробовал использовать odbc драйвер на windows? У вас он хоть с какой-нибудь программой начал отрабатывать?
-
Мы пробовали spss моделлер, excel 2013, tableau 10.3 - где-то видит только таблицы, где-то еще видны поля. но селект нигде не получилось сделать. эксель просто не подлкючился
-
-
пока не получается настроить табло чтобы подцепить кх https://community.tableau.com/message/629589#629589
-
Здравствуйте!
Система генерирует поток событий. У события есть время появления, уникальный идентификатор и текстовое представление события.
Структура таблицы для хранения событий:
CREATE TABLE IF NOT EXISTS test_data (CounterID UInt32, EventDate Date, Payload String) ENGINE = MergeTree(EventDate, (CounterID, EventDate), 8192)
Я хочу использовать кликхаус в качестве хранилища событий с возможностью запуска аналитики и с возможностью последующей выгрузки в другие системы.
Записал в таблицу примерно 0.5*10^9 таких событий и пытаюсь перегружать их по мере пеступления во внешнего клиента таким запросом:
SELECT CounterID,EventDate,Payload FROM test_data WHERE CounterID > 5 ORDER BY CounterID LIMIT 5 FORMAT JSON
Запрос выполняется 50 минут.
Всего строк
COUNT()=623171850
"statistics":
{
"elapsed": 3094.789434725,
"rows_read": 623171850,
"bytes_read": 430075954723
}
Аналогично для запроса
SELECT CounterID,EventDate,Payload FROM test_data WHERE CounterID > 623171000 ORDER BY CounterID LIMIT 5
По какой причине в этом запросе происходит чтение всех строк и не используется индекс?
Есть ли правильный способ перегружать данные из таблицы во внешнюю систему по мере поступления событий или clickhouse в принципе не предназначен для таких задач?
версия clickhouse 1.1.54236 -
Судя по вчерашнему общению на тему order by, то он вроде как не использует индекс
-
И возможно так долго данные читаются как раз таки из-за order by, но я могу ошибаться ) Лучше дождаться ответа от разработчиков
-
Хотя...скорее всего у вас слишком большая гранулированность CounterID
-
И получается так, что особого профита от индекса по этой колонке нет
-
Получается аналогично фулскану
-
Можно добавить еще колонку какую то типа eventBatch и класть туда например пометку о каждых 10 миллионах записей
-
И вместо CounterID включить ее в индекс
-
Например на батчи в диапозоне 623 170 000 - 623 171 000 значение eventBatch будет 623 170 000
-
Тогда можно будет делать запрос типа prewhere eventBatch > 623 170 000 where CounterID > 623 171 000
-
Вот тут есть очень развернутый ответ Алексея на тему того как работает первичный ключ: https://groups.google.com/forum/#!topic/clickhouse/eUrsP30VtSU
-
А нет ли желания рассказать про ClickHouse на https://smartdataconf.ru/ ?Link
SmartData 2021 — конференция для Data-инженеров. 4 дня. Спикеры со всего мира. Несколько десятков технических докладов о хранилищах данных, стриминге, data governance и многом другом.
-
Спасибо, интересно
-
Joined.
-
Про Excel.
-
В 2016 запрос через odbc - работает. 2013 ещё надо найти.
-
Можем. Организаторы заинтересованы в нашем докладе?
-
Если читается много строк - значит получается, что много строк подходят под условие CounterID > 5 или CounterID > 623171000. При этом ORDER BY CounterID LIMIT 5 уже не помогает, так как ORDER BY не использует индекс.
Чтобы было эффективнее, можно поставить условие на CounterID сверху, как-то наугад: CounterID > 5 AND CounterID < 500. Понятное дело, что так не всегда возможно.
ORDER BY не использует индекс. Но это было бы хорошо реализовать. Ещё не реализовано, потому что требуется несколько другой способ распараллеливания запроса (разделения задач по потокам) - более "последовательный", чем когда известно, что мы будем читать весь диапазон. И такая логика просто ещё не разработана. -
Затрудняюсь ответить. Я пока только посетитель конференций, проводимых JUG.ru.
-
ну хоть кто-то здесь не ненавидит яву=)
-
Joined.
-
Вспомнил, что у нас уже есть предварительная договорённость о конференции от Jug.ru как раз в это время. Думаю, это она и есть. Значит будем.
-
про использование order by понял, спасибо
-
Существует ли возможность смерджить одноуровневые массивы? Например, для структуры: Key UInt32 | Value Array(UInt32)
поулчить все уникальные значения элементов массива Value для определенного ключа? -
Где то видел модификаторы агрегатных функций ForEach
-
Которые по массиву топают
-
Можно воспользоваться агрегатной функцией groupUniqArrayArray. На вход принимает массивы. На выходе будет массив со всеми уникальными значениями.
Название необычное, потому что это - агрегатная функция groupUniqArray, к которой ещё приписали комбинатор -Array. -
спасибо!
-
-
это из области жесктих дисков, время необходимое на передвижение головки механического диска на другую дорожку
-
условно, это время задержки межда получением команды "прочти блок Х" и его прочтением с магнитной пластины.
-
-
нет :)
-
это относительно постоянная величина в районе 4-9 мс
-
она зависит сугубо от расстояния между дорожками (чем дальше - от центра - данные на диск легли - тем дольше)
-
ну и как следствие, чем больше обращений с паттерном "рандом read / write", когда чтение запись идет не последовательно, а в разные файлы (как следствие размещенные в физически разных местах жесктого диска) идет этот самый seek
-
чем больше рандомность - тем больше он времени жрет. Идеальный вариант - когда данные пишутся последовательно и очень большими блоками, так будет быстрее всего.
-
либо выкинуть начерт механические диски и забыть про бурду что я только что рассказал :)
-
-
я почти уверен, что - в штуках :)
-
Joined.
-
Joined.
-
Joined.
-
В штуках с момента запуска сервера. Это количество системных вызовов для seek.
-
т.е. это не seek шпинделя?
-
-
С реальным перемещением головок связано косвенно.
Смысл счётчика - количество мест, с которых мы читали файлы.
Например, если после обработки запроса, счётчик увеличился на 10 - значит было 10 разных мест, начиная с которых мы делали чтения файлов. -
Joined.
-
Joined.
-
удобная штука для отладки
-
-
Вот такое только что придумал.
-
-
-
-
-
-
А если у меня виртуалки? Я могу просто склонировать три шарда и сделать их репликами? Данные будут переналиваться или лучше чистый инстанс кх поднимать?
-
-
Чет не совсем понимаю, а как оно поможет?
-
Плохо объяснил наверно. Реплики существуют только в конфиге
-
-
Если реплик больше одной, используется другой код, в котором проблемы нет. Таким конфигом мы заставляем ClickHouse думать, что их две на шард, хотя на самом деле одна :)
-
-
-
-
-
-
-
-
-
-
-
скорее вопрос, зачем поставили в продакшен то, что прилетело в репах
-
нежели чем к авторам. КХ - опенсорс и идет без гарантий, SLA и прочего
-
-
мы держим свой репо со старой версией КХ и долгим процессом обновления на новую версию
-
по факту 1-2 месяца задержки между продакшеном и выходом фичи в репо КХ
-
Не, у меня вопрос без претензий. Чисто истерес. Т.е. если эта версия стоит на метрике и там все работает, быть может админы метрики имеют какое-то секретное заклинание.
-
А, вот он и ответ. Спасибо!)
-
выше описали) они по другому вставляют
-
Всем привет, а существует ли чатик про логс апи метрики? И если нет - уместно ли будет тут спрашивать?
-
Joined.
-
Говорят, чата по Logs API нет и надо писать в поддержку Метрики.
-
Так и есть.
-
Joined.
-
попробовал
-
-
-
я возможно не правильно сделал. У меня 2 шарда. Я получается в кадом шарде создаю еще по одной такой же реклике и добавляю <internal_replication>true</internal_replication>
-
-
-
да
-
-
-
Это без ZK он автоматом цепляется?
-
Там watcher на файле конфига висит? )
-
-
А автоматом хватает только секцию remote_servers? Или какие то части конфига тоже?
-
И тут еще уточнение, делать reload или именно restart?
-
-
-
А планируется какой то механизм управления юзерами, например как в mysql?
-
Что бы не через конфиг рулить
-
-
Только вроде restart ждет пока все коннекшены отработают? А релоад вроде аля graceful? Или прям один в один команды? )
-
Да, что то типа того
-
-
Удобно было бы джунам и разрабам давать доступ к деву например, что бы не один логин пасс на всех )
-
-
Понятно, спасибо за объяснения :)
-
Кстати, а не планируете добавить автообновление словарей так же как и кластеров и юзеров? )
-
Было бы полезно
-
Конфиги словарей обновляются без перезапуска сервера. Так было сделано с самого начала.
-
Супер! Не знал об этом!
-
Joined.
-
-
AMD has Intel squarely in their sights with the Ryzen release; all the released and currently available consumer Ryzen CPUs have native hardware SHA support, and their highly-anticipated Naples (codename Epyc) server chipsets due for release in Q2 2017 are sure to win them favor in the high performance, high throughput, encrypted endpoint game when they’re released in just a few months.
-
Немного офтоп, но думаю много кому такая оптимизация будет актуальна
-
Joined.
-
у интела тоже есть аппаратный SHA :)
-
-
Intel® SHA Extensions
Download PDF New Instructions Supporting the Secure Hash Algorithm on Intel® Architecture Processors July 2013 Executive Summ
-
- 17 June 2017 (6 messages)
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
Joined.
- 18 June 2017 (1 messages)
-
Joined.
- 19 June 2017 (141 messages)
-
Joined.
-
Ребята, доброго времени суток. Подскажите пожалуйста каким образом производятся операции бэкапирования (в ClickHouse). Возможно у кого то есть свои определенные "best-практикс" на этот счет. Буду рад любой информации по этому вопросу. Заранее благодарен
-
-
Думал над подобным вариантом. Вот только сразу ряд "Но" возникает. Если запись будет в базу вестись постоянно (24x7) - то скопировать наверное не получится. А вариант с инсертом в другую базу и только потом архивирование (например) - как то громозко выглядит
-
-
-
Спасибо... изучу этот момент. Очень признателен за ответ
-
-
-
-
-
дело в том, что данные представляют собой денежный эквивалент, а float для денег не подходит
-
-
-
-
-
А вы не в Белорусии считаете? )
-
Просто там как бы сумма то огого должна получиться, max value вроде 18446744073709551615...
-
если в строке будет большее число, чем сможет вместить в себя тип данных, то оно не распарсится
-
когда данных много за большой период, то сумма, с учетом умножения на 100, может получаться больше максимальной границы
-
-
-
Там давно деноминацию провели
-
И 1 новый рубль почти как полбакса стоит ;) оч недурно
-
184467440 миллиардов не хватит?
-
-
Привет. Можно чтоб в словаре flat или hashed идентификатор был строкового типа? или только через complex_key_hashed ?
-
только через complex_key
-
Релиз новый еще не собрали?
-
ну я не вижу вариантов, кроме как хранить кусками поразрядно
КХ при этом не сможет просуммировать больше uint64
если нужно uint128 сделать 8 полей по uint16
потом выбирать SUM(f1), SUM(f2), ... SUM(f8)
и уже в своей программе досуммировать, учитывая единицу переноса -
-
128 битные числа - мне нравится идея
-
как минимум - я бы мог использовать их для IPv6 и манипуляции с ними, FixedString, конечно, работает, но нэтивный да еще и числовой тип с потенциальной возможность увеличения компрессии... мммм! :)
-
Привет! подскажите плиз как правильнее работать с праймари ключами, когда необходимо делать запросы по непересекающимся критериям.
например есть большая таблица фактов, там среди прочих есть колонки clientId, applicationId, country.
1/3 запросов будет делать фильтровать по clientId, 1/3 запросов будет делать group by applicationId, 1/3 будет фильтровать/группировать по полю country.
Можно создать композитный (clientId, applicationId, country), но вроде как он ускорит только первый тип запросов.
Вопроса два:
1. Влияет ли наличие поля в праймари ключе на выполнение запросов с group by?
2. В приведенном выше кейсе, какой из способов создания праймари ключа выбрать? -
Вот есть подробное описание от Алексея. Думаю будет полезно: https://groups.google.com/d/msg/clickhouse/eUrsP30VtSU/p4-pxgdXAgAJGoogle Groups
Google Groups allows you to create and participate in online forums and email-based groups with a rich experience for community conversations.
-
-
2-3 таблицы?
-
Joined.
-
-
-
-
-
Eсть ли NaN для Int типов? Или NaN есть только для Float?
-
-
FixedString16
-
просто string будет сильно неоптимально AFAIK :(
-
nan значения есть только в float-типах
-
я уииды пробовал просто в string хранить, да, как раз раза в два-три медленнее запросы и больше оперативки
-
Ребят, через tcp драйвер можно
set max_memory_usage
ставить? -
-
Я его проставил, но похоже на весь кластер не распространилась настройка
-
Так как при обращении к ditributed таблице другие сервера прекращают выполнение из-за памяти
-
А в КХ как то можно получить значение колонки предыдущей строки в блоке?
Например у меня такая логика: если column = 1, то вернуть 0, если нет, то посчитать runningDifference(column2), но при условии что у предыдущей строки column != 2 например -
-
Хотя я догадываюсь как можно. Применить sequenceMatch с нужными правилами и если match = 1, то делал runningDifference
-
Нет, не получится так сделать, к сожалению ( Это же блин агрегатная функция (
-
Всем привет! Подскажите, есть ли возможность подсчитать процентное значение столбца от общей суммы?
-
вы же не знаете сумму, пока не дочитаете до конца.
-
разве что свернуть столбец в массив.
-
Хорошая мысль, сейчас попробую :)
-
не знаю, но мне хотелось бы ее подсчитать один раз на запрос. Например, вы подсчитываете кол-во событий с каким-то условием. А потом считаете процентное соотношение от общей суммы событий
-
это можно сделать вроде
select countIf(condition) / (select count() from ...) from ... group by... -
-
-
-
Joined.
-
там есть cross join https://stackoverflow.com/questions/30509149/get-column-sum-and-use-to-calculate-percent-of-total-mysql
не знаю, правда, как быстро он работаетGet column sum and use to calculate percent of total (mySQL)Here is a very basic look at my table. I have columns 1 and 2 and need to generate column 3. Column 3 is simply the total of the Number column for all Name divided by Number for the given row. |...
-
Блин, этот баг с оптимизацией запроса просто не дает спокойно жить (
-
Простой запрос не работает
-
-
Мы все трём лапки и ждем побольше running функций...
-
-
-
Вот я тоже :) Может быть ребята не знаю что народ хочет? ) Поэтому особо ничего нового в этом направлении не появляется?
-
-
у нас словарь сделан
-
Внешняя база?
-
Да. Так как КХ только только планирует внедрить updateable словари то у нас сделано в Postgres.
-
Извините, а можно подробнее? Так как я про такие словари спрашивал месяц наверное назад и я так понял что этого ждать не стоит. Так как это одна из основных фишек кдб, очень удобная, и которой нет в КХ
-
-
-
-
у меня быстрый вопрос. Я решил воспользоваться прогрессом возвращаемым в HTTP хедерах
-
< X-ClickHouse-Progress: {"read_rows":"214418","read_bytes":"25670058","total_rows":"327680"}
< X-ClickHouse-Progress: {"read_rows":"222610","read_bytes":"25686442","total_rows":"327680"} -
я правильно понимаю, что read_rows*100 / total_rows это примерно процент выполнения запроса?
-
-
спасибо
-
ща сделаем круто в интерфейсе
-
-
Если делаете это на чистом JavaScript, можете сбросить пример попробую в tabix прикрутить)
-
А как в яваскрипте получить поток хедеров
-
Мне кажется этот вопрос не тут нужно задавать :)
-
Ну так это вопрос о том как в табиксе получить прогресс
-
Так, а как отсюда вот правильно руками собрать кликхаус? https://github.com/yandex/ClickHouseGitHub - ClickHouse/ClickHouse: ClickHouse® is a free analytics DBMS for big data
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
-
а, ништяк, спасибо. почитаю. а то я чот сбилдил, а что - сам не понял
-
-
-
@iamigor да я даже деб пакет вроде собрал, сейчас попробую развернуть по серверам взамен версии с багой
-
-
-
Ага
-
-
-
-
-
-
-
-
<!-- If element has 'incl' attribute, then for it's value will be used corresponding substitution from another file.
By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in 'include_from' element.
Values for substitutions are specified in /yandex/name_of_substitution elements in that file.
--> -
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
-
-
Нужно добавить в документацию пример со структурой директорий и файлами.
-
-
Также, как и другие форматы. Можно указать меньше столбцов в INSERT INTO table (columns...). Тогда нужно отправлять данные только для указанных столбцов, а значения остальных будут вычислены при вставке.
-
-
@milovidov_an Добрый день, скажите столкнулись с проблемой. как её можно решить
-
-
626 млн записей read. 255 сек....
-
-
если сделать select count(*) за даты которые я сканю выходит 300 млн. почему 626 млн сканит не понятно
-
-
@orantius ну на основе этих данных строим отчет. но данные приходят за 250 сек и пост обработка еще пару минут. как быть? и я так и не понял почему фулл скан идет. подсчитывает на 300 млн записей. а запросом на sum сканит 600+
-
select
eventDate,
toString(country) as country,
toString(region) as region,
toString(city) as city,
toString(gender) as gender,
age as group_age,
SUM(requests_count) AS requests
from
`audience_statistic_segments
where
`eventDate` between '2017-05-21' and '2017-06-19'
group by
eventDate,
`country`,
`region`,
`city`,
`gender`,
`group_age
order by
eventDate asc,
`country` asc,
`region` asc,
`city` asc,
`gender` asc,
`group_age` asc -
-
select
count(*)
from
`audience_statistic_segments`
where
`eventDate` between '2017-05-21' and '2017-06-19' -
count - 335340740
-
-
-
я туплю там тоже 300 млн. совпало
-
но все равно не пойму как тогда на основе большого количества данных построить отчет
-
в тех же метриках явно можно фильтровать как угодно и группировать
-
-
чтобы вместо пустых строк (где нету данных) не прилетала длинная невидимая строка с байтами
-
-
-
-
- 20 June 2017 (466 messages)
-
Joined.
-
одна машина у нас. не понял на счет > 100 байт
-
Joined.
-
А может ли долго запрос возвращаться из-за высокого IOPS ?
-
6 тыс IOPS
-
-
600+ млн записей по 40 полей. расчет суммы и группировка по 5 полям и сортировка по 5. смотрю по мониторингу что местам то 5 то 6 тыс IOPS. что значит external_group_by и external_sort? как можно оптимизить скорость выполнения?
-
По умолчанию КХ выполняет все операции в оперативной памяти, и, если ее не хватит, запрос со сложной групировкой может не выполниться. Для этого есть параметры max_bytes_before_external_group_by и max_bytes_before_external_sort, которые указывают после какого порога сбрасыавть данные во временные файлы на диск
-
запустили запрос. еще выполняется
-
-
это memory
-
процессор
-
-
по IOPS пик был на 304
-
из этого следует что он упирается именно в проц?
-
Create table в студию
-
percent-steal в обычном режиме не должен быть таким высоким. Скорей всего на машине очень много чего работает одновременно, либо настройка КХ не совсем корректна, например, выставлен больший параметр по использованию потоков чем есть виртуальных процессоров на машине
-
это отдельная машина для кх. там только он и стоит. до запрос steal был 22%, после запроса 35-45. где можно уменьшить этот параметр ?
-
таблица содержит только 1 индекс на eventDate. запрос который запускаю - выше (вчера скидывал)
-
сколько процессов КХ работает на машине?
-
-
а как посчитать?
-
есть еще процесы которые просто висят не грузят проц. но жрут память таких много
-
-
ps ax | grep clickhouse-server | wc -l
2 -
и 2 виртуальных ядра
-
-
-
-
ps -axH | grep clickhouse-server | wc -l
43 -
Я тестировал кх на 1 ядре и 4 гигах оперативы :) показал достаточно хороший результат с таблицей в 90 гигов и 18 колонками
-
-
idle 0 ) снова запустил запрос
-
-
-
и jenkins есть да. но он не грузит ведь ничего
-
и apache стоит для tabix
-
и collectd для сбора метрик
-
-
да
-
-
amazon
-
-
-
-
я знаю что такое steal
-
-
-
прод машину нельзя останавливать)
-
-
-
-
-
можешь более подробно объяснить эту кухню
-
если остановить машину и снова включить - есть вероятность попасть на другой гипервизор и будет steal ниже, всегда?
-
-
-
steal значит что на физ хосте оверселинг довольно высокий и тебя активно переключает гипервизор, если очень условно
-
-
-
-
-
-
в общем я так понял это проблема виртуализации
-
или выделения ресурсов
-
это не означает, что гипервизор сломался/плохой
-
это скорее означает, что потребление ресурсов больше, чем вы заплатили / выделено админами
-
и гипервизор режет это потребление в соотвествии с тем, что вам выделено.
-
если мы говорим о нормальных облаках - а-ля амазон, гугл, азур - то на другой машине все будет точно-также
-
это значит что сервер упирается в нагрузку по тарифному плану и гипервизор режет ?
-
скорее всего именно это и значит, эта штука крайне специфична к типу гипервизора и ведет себя по-разному
-
другие инстансы имеют такие же конфиги железа и там тоже есть нунлевой steal?
-
окей кто работал с amazon какой тип инстанса предпочтительнее для кх ?
-
точно ли нагрузка на все инстансы идентичная?
-
ui сервер тоже бывает steal 40+ %
-
если нагрузки нету то steal вообще 0
-
Типы инстансов Amazon EC2 – Amazon Web Services
Типы инстансов EC2 включают различные комбинации таких компонентов, как ЦПУ, память, хранилище и сетевые ресурсы. Это обеспечивает возможность выбирать тип инстанса, наиболее соответствующий вашим потребностям.
-
какой инстанс нужен для нормальной работы кх ?
-
мы используем почти везде t2
-
может в этом проблема
-
-
-
-
Как раз статья на тему - сравнение ClickHouse на AWS с физическим сервером и с Redshift:
https://www.altinity.com/blog/2017/6/20/clickhouse-vs-redshiftClickHouse vs Amazon RedShift BenchmarkJun 19, 2017 We continue benchmarking ClickHouse. In this article we discuss a benchmark against Amazon RedShift.
-
где это глянуть ? предположу что в monitoring CPU Utilization ( Percent ) ?
-
-
@milovidov_an не хватает тестов физической железки в ряду =(
-
И контейнеров! :)
-
какой instance предпочтитетльнее для работы КХ?
-
-
из списка который есть
-
это очень мало
-
-
-
-
да я почитал
-
я создаю c4.xlarge инстанс
-
думаю он спасет)
-
и еще одна проблема мы используем gp2 диск на 100 гигов. а это всего 300 IOPS что может тормозить дополнительно
-
-
ничего себе не на быстрых. по 5 тыс IOPS
-
обычная сата - это от силы 200-300 IOPS
-
и клихаусу вполне хватает
-
в общем наша ошибка была в том что мы взяли T2 инстанс под кх. он съедал кредиты цпу мигом и потом тормозил
-
Кто-то может подсказать как можно в КХ просуммировать по следующей логике.
Есть вот такой результат https://img.facedsid.ru/6e9wq.jpg
Суммировать нужно все, что между строками у которых skip = 1 :) При этом еще как то умудриться выдернуть первый eventTime который лежит в промежутках между skip = 1 и собственно на выходе должно получиться что-то вроде:
2016-11-09 18:43:08 - 29
2016-11-09 19:52:08 - 1318
и т.д. -
Суммировать нужно колонку duration )
-
ну т2 надо понимать зачем использовать, так то это отличная штука
-
да согласен переборщили отдав такой инстанс на кх
-
-
-
-
online.net люто рекомендую =)
-
привет) в ближайшие месяцы мы планируем с концам уехат на хецнер, т.к. посчитали что это в 2 раза выгоднее по цене и полный контроль
-
-
полный контроль... я бы НЕ РЕКОМЕНДОВАЛ если дорожите своим бизнесом %)
-
ну на самом деле с хецнером не так прям чтоб много проблем пока ты мелкий-средний
-
-
-
хецнер это не для mission critical. точка =)
-
там как повезет, повезет с железкой - будет все ок долгие годы
-
им сейчас можно доплатить чтобы железо было не БУ )
-
-
увы, это не решает
-
траст ми! айм энджинер!
-
ну точнее я 7 лет с ними работал с несколькими тысячами машин в саб-аренде
-
если сервер сдохнет они не несут ответственности ?
-
отвественность? о чем вы?
-
железка в месяц стоит дешевле чем ужин в ресторане
-
-
у них нет SLA :)
-
сейчас насоветуют)
-
Причем тут насоветуют? Конечно свое железо это оптимальное решение.
-
свое в своем дц со своим техником - маст, если mission critical :)
-
а иначе будут постоянно постмортемы в стиле "ну у нас облако упало, мы не виноватые такие"
-
-
-
-
-
-
-
они наружу же, а не во внутренней сети
-
внутри можно ваще свич свой попросить и в стойку влепить :)
-
-
-
не вариант для тех, у кого свои ноды по локациям распределены
-
увы тогда
-
-
-
-
-
-
-
зависит от того, какие будут запросы. если они всегда включают фильтр по id сайта и диапазону дат, то лучше (счетчик, дата), если нет, то могут быть разные варианты.
-
-
а у КХ есть какой нибудь флаг дебага для запуска из консоли? а то
> clickhouse —extract-from-config —config-file=/etc/clickhouse-server/config.xml —key=path
> /work1/clickhouse/
и все, процесс не поднимается -
RPI есть 3 разные версии, 2 их них 32 бит - на них никак. версия 3 - 64 бит, на ней запустить можно. Но в ней только 1g ram .
-
Я про 3-ю, но понятно. Просто ищу timeseries бд на нее.
-
-
-
так, попырил сырцы, все просто, —stacktrace —log-level debug
-
хотя, один чорд понятнее не стало, почему не взлетает
> $ clickhouse —extract-from-config —config-file=/etc/clickhouse-server/config.xml —key=path —stacktrace —log-level debug
> 2017-06-20 07:52:20.029 <Warning> ConfigProcessor: Include not found: clickhouse_compression
> /work1/clickhouse/ -
-
лог остался от того кликхауса, который ставил до этого из пакетов, и он не обновляется, в том и беда
-
попробовал от sudo -u clickhouse -g clickhouse, не помогло
-
-
prll сорян, я кажется олень. —extract-from-config и key нафиг не нужный были. но это я из rc скриптов пытался выдернуть, чтобы понять. почему же не стартует
-
чот я жостко протупил :) это же не строка запуска, а получение ключа из конфига, по именам же понятно, а я баклан не ту строчку поди взял 😂
-
-
Я б посоветовал брать виртуалки с армв8 и собирать на них.
-
Ок, подумаю
-
Я б посоветовал взять графит на самом деле, кх кажется оверкилл
-
-
-
Поставили c2.xlarge (4 ядра и 8 гигов ram). выполняется 3 запроса каждые 5 сек. по 100 млн read rows. 1 ядро съедает все. если запустить большой запрос на выборку в добавок то получится 2-3 ядра будут забиты. как держать нагрузку если 100 человек захотят получить данные статистики если уже при нескольких запросов такой сервер съедает. percent-steal 0%
-
а вы что конкретно делаете и для какой аудитории? )
-
на самом деле, мне надо докупить ссдшку и у меня будет дома относительно шустрая ARMv7 железка
-
-
ну теже графики построить на основе статистики в кх
-
-
а зачем там 100 человек одновременно?
-
шлется запрос получаются агрегационные данные - строится график
-
у каждого зарегистрированного пользователя есть свои графики (дашборд)
-
возьмите уже с них по 1 евро и арендуйте сервер ;)
-
и так выходит 200$ в месяц этот кх сервер который не держит даже 10 запросов
-
не пойму что не так...
-
-
за 200 баксов в месяц можно кластер из трех i7 32гиговых собрать в хетзнере
-
@milovidov_an Алексей хотел бы услышать ваше мнение на счет clickhouse, почему он такой прожорливый или может мы делаем что-то не так
-
ну у вас в память оно явно не влезает, а хранилище у амазона по дефолту тормозное
-
сколько иовейт-то?
-
почти 0-1% всегда
-
ну тогда надо знать запрос:) сожрать 100м рядами одно ядро не сложно) мы же не знаем чего ты там считаешь.
-
Читаю это. И видно что люди занимаются тем же самым - нормализуют строки. все пытаются нормализовать строки :)
-
Да потому что это OLAP. В отличие от того же PG работает в множестве потоков и максимально мобилизует ресурсы сервера для выполнения запроса.
-
-
-
load average 1.5
-
оно таки влезает в память судя по объему
-
эти 3 запроса выполняются каждые 5 секунд по очереди
-
-
вот запустились еще парочку запросов для показа статистики. load average 3
-
3 ядра забито из 4
-
-
-
да конечно
-
а если я хочу посмотреть суммарное количество показателей за месяц
-
Спотнкулись со словарями.
Переопределил dictionaries_config через отдельный файл
<yandex>
<dictionaries_config>dictionaries.d/*.xml</dictionaries_config>
</yandex>
По данному пути положил словарь, но он не подхватывается, хотя
[root@xdray-3 clickhouse-server]# grep dictionaries_config config-preprocessed.xml
<dictionaries_config>dictionaries.d/*.xml</dictionaries_config>
Перезапуск сервера не помогает -
если положить словарь в /etc/clickhouse-server то все подхватывает
-
т.е. работает дефолтный патерн
<dictionaries_config>*_dictionary.xml</dictionaries_config> -
в чем подвох?
-
-
-
-
-
-
не понял вопрос
-
показать содержимое чтоль?
-
и еще попутно. Видел тут много про "DB::NetException: I/O error: Broken pipe:" Какая сейчас ситуация?
-
есть релиз с фиксом?
-
объясни плиз. они вроде как по дефолту должны кешироваться самим кх?
-
-
-
я что-то пригрустил. вначале небыло предела моему счастью когда мы слезли с mysql, а теперь это какой нужен сервер чтобы обслужить хотябы 500 реал тайм человек..
-
-
-
-
-
мы только для статистики её используем
-
но на основе почти 1 млрд записей мы строит пользователю графики и отчеты
-
а админу свои отчеты более показательные
-
про nginx не понял. как ты его связал с кх запросы ведь летят на порт кх
-
-
smi2 ?
-
-
а мы шлем запросы напрямую на порт сервера через драйвер сми2
-
-
-
-
если я захочу посмотреть график посекундно мне агрегация не подходит
-
-
схлопнуть 1 млрд в 50 млн не проблема. но это будет по минутам или часам
-
а при достижении большей нагрузки 50 млн когда нибудь снова привратяться в 1 млрд
-
я думаю за пол года спокойно
-
-
вот интересно как яндекс построил свои метрики. у них ведь и кеша никакого нету. прямые запросы. я конечно понимаю что у них сервера реактивные, но я думаю в чем-то есть принципиальная разница архитектурная в хранении данных может
-
-
я очень сомневаюсь, что у яндекса нету "кэша" который копит свежие данные и мгновенно выдает их в метрике
-
ну так писал миловидов их начальник по clickhouse
-
в веб интерфейсе я имею в виду
-
-
-
ну user_id это хорошо. решает много проблем
-
но если нужно построить отчет по всем пользователям суммарный
-
такой запрос просто повалит сервер на бочок
-
-
построить расчет по всем это задача мапредьюса и не реалтаймовая
-
можно более подробно?
-
делать вставку дублирующая на таблицу типа agregateMergerTree ?
-
вернее не такой же. а с тем набором полей который необходим в отчете. просто пусть суммирует для каждого пользователя
-
-
-
-
-
нет, прописать <dictionaries_config>/etc/clickhouse-server/dictionaries.d/*.xml</dictionaries_config>
-
А он уже в репах?
-
Это я как бы спрашиваю
-
А) ну на прошлой неделе тут в чате говорили что в течение нелели примерно будет. Так что надеемся на этой неделе )
-
я имею ввиду что вместо 1 большой таблицы. делать несколько таблиц по секундно, по минутно, по часам, дням, месяцам. Соответственно по секундно можно выбрать диапазаон только час. по часам день. Ну и агрегировать в разные таблицы данные
-
или как
-
-
-
метрика выдает отчеты из кх. но у нас 400+ машин и при необходимости используется семплирование.
-
что представляет из себя это сэмплирование?
-
Грубо говоря по индексу читается только часть данных в надежде на то, что получится достаточно репрезентативная выборка
-
в некоторых случаях клиенту все равно, пришло к нему на сайт 1000 человек или 1001. тогда можно строить отчет по части данных, который показывает примерные числа, но работает быстрее.
-
а если важно
-
тогда кликхаус не используют
-
а тащут ACID базу
-
Тогда и модели данных другие используют
-
в общем из большой базы сырых данных надо делать подготовленные агрегейтмердж таблицы а лучше summerge. но проблема потом добавлять новое поле, ведь update нету и добавить данные из сырой в подготовленную не получится
-
Вроде помогло. Правда я еще одновременно откатился на чуть раньшую версию CH. Но думаю именно абсолютный путь тут помог.
Спасибо! -
-
то что нужно делать зависит от того, скольк у вас данных пишется, сколько у вас данных читается, какой сервис с какими отчетами вы делаете, какие у вас требования к нему по времени ответа, количеству запросов, точности ответа, а также сколько у вас есть на это денег.
-
-
Добрый вечер, коллеги, подскажите пожалуйста, если внешним словарём является исполняемый скрипт, и запрос вида Select .... LIMIT 10; то исполняемый скрипт выполнится только 10 раз (LIMIT) или для всего набора данных?
-
внешние словари вроде целиком данные все подсасывают
каждые N секунд, в зависимости от лайфтайма и того, запрашивали их или нет
а потом просто в оперативке хранятся в течение своего TTL
(так происходит в случае с flat, hashed)
а для cache описывается, как доп.запросы будут происходить
https://clickhouse.yandex/docs/ru/single/index.html#cache -
INSERT INTO table2 SELECT * FROM table1
DB::Exception: Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 524288 bytes), maximum: 9.31 GiB. -
и что делать с большими таблицами?
-
через внешний файл только?
-
-
-
ну... закат солнца вручную конечно
-
но для CH походу это норма и фича
-
ща попробуем так
-
сам запрос у вас потоковый, но если у вас тяжелые строки, а в случае select * так может быть, то нужно чтобы за один раз в память читалось не слишком много строк.
-
ну и ограничение делать вот по редложению Игоря?
-
-
нда... суточные данные не всегда проходят
-
либо еще дробить либо как-то системно
-
значит max_block_size, говорите
-
а этот параметр можно на уровне сесси установить?
-
но как-то из описания не очень вериться, что это поможет
-
перечитал еще раз
-
да похоже оно
-
спасибо за наводку
-
Ещё поставьте max_threads = 1.
Для INSERT SELECT без фильтрации большее количество не имеет смысла. -
-
ды не почему
-
норм
-
просто у меня данные вылезают
-
в другом случае может и прокатило бы
-
но это более системный вариант походу
-
ща нащупаю размеры оптимальные и запущу
-
-
а вот при таком массовом insert-е как merge работает? Я правильно ожидаю, что после копирования новая таблица будет иметь больше part-ов чем исходная (в которой достаточно старые данные)?
-
и как следствие больше размер и менее эффективная
-
decompress=1 поддерживает только внутренний формат сжатия.
Для использования gzip, указывать его не нужно. Вместо этого просто используйте HTTP заголовок.
https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00302_http_compression.shyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
Да, после копирования таблица может иметь больше part-ов.
Мержи работают примерно так же, как при обычных INSERT-ах, хотя и более оптимально если вставляются уже сортированные данные (это так при INSERT SELECT без преобразований, и с выставленной настройкой max_threads=1). -
у меня изменился немного PK
-
это преобразование?
-
Да. Если сортированность данных по PK меняется, то будет несколько менее оптимально по CPU.
-
спасибо за пояснения!
-
Да, отчёты Метрики строятся налету из неагрегированных данных, хранящихся в ClickHouse. Это работает одинаково, как для свежих, так и для старых данных. Отдельных примочек для свежих данных нет, кэшей нет, предагрегации тоже нет.
-
А после выборки есть какая то постобработка? Есть же какая то бизнес-логика поверх данных
-
и почему так быстро?. у нас 600 млн записей почти минуту отдает, пытаюсь посчитать для них сумму и сгруппировать по странам регионам
-
У меня 850 млн строк и достаточно массивные запросы отрабатывают не дольше 150мс
-
Очень странно, что у вас все так долго (
-
эм.. тогда я точно не понимаю в чем дело
-
а какой сервер? может какие-то настройки сервера отличные от тех что по умолчанию?
-
Я нормальное распределение считаю по 500 млн буквально за 50мс )
-
у меня много группировок по строковым типам
-
У нас три шарда по 32 ядра, 96 гигов оперативы и по 300 гигов ссд. Это виртуалки.
-
Может есть смысл сделать внешний словарь и перевести строки в числа? Что-то типа предварительной подготовки данных
-
ну это только некоторые из полей можно так сделать. но не все к сожалению
-
Мы периодически перекладываем данные из монги в КХ, но из монги берем только нужные данные. Предварительно я вычисляю идентификатор пользователя и идентификатор "сайта"
-
сервер 4 ядра и 8 гигов ram. это конечно в 10к раз хуже вашего
-
Ну я первый раз гонял КХ на сервере с один ядром и 4 гигами оперативы :) Навалил туда 2.5 ярда )
-
Это на одной машине, без шардов. Скорость выполнения запросов даже параллельных была достаточно большая.
-
магия
-
Действительно странно
-
вот элементарный пример
-
SELECT count(*) FROM xxx
-
-
7 сек чтобы посчитать количество ... это норм?
-
-
-
-
это в 4 раза медленее. но это запрос на сервере. а если отправлять запрос на порт 8123 то 7 сек
-
и у вас 18 rows/s у меня почему-то 3 rows/s
-
диски ssd
-
У нас сложная бизнес-логика и нам приходится какие то данные агрегировать и "кешировать", но данные мы выбираем асинхронно, порядка 10-11 одновременных запросов в КХ. Таких инстансов, делающих асинхронные запросы на данный момент 50 штук.
-
Все летает
-
но на примере обычного теста я отстаю в 4 раза. это как объяснить?)
-
Возможно все таки кол-во потоков играет определенную роль :)
-
Попробуйте поднять мониторинг на том же графите с карбоном и посмотрите куда у вас что течет
-
есть мониторинг
-
только что смотреть. памяти хватает. проц съедают потоки clickhouse-server. место есть
-
iops не упирается в диск
-
вот еще раз выполнил запрос
-
-
уже почти 0.5
-
в среднем от 0.2 до 0.5
-
-
Я, к сожалению не спец по кишкам КХ, но я думаю должен
-
Я долго с PK игрался, пока оптимальный вариант не подобрал
-
В том числе и группировки стали шустрее работать
-
-
-
У меня да, используются в группировках колонки, которые в ключе есть, но иногда и без них данные группирую
-
Просто по этим же колонкам приходится еще фильтр делать
-
В ключе у меня 4 колонки всего
-
Дата, идентификатор сайта, идентификатор пользователя и действие которое пользователь совершил
-
Когда перекладываем данные, то они частично сортированы и пишутся пачками по 100 000 строк в 200 потоков :) Потолок в 10млн строк в минуту не пробил, т.к. монга быстрее не отдает
-
-
У нас по одному диску на каждом шарде. Скорость увеличивалась по мере увеличения потоков на запись
-
Причем чуть ли не линейно )
-
-
В три
-
Точнее в одну распределенную таблицу
-
А данные уже по шардам расползаются сами
-
Сейчас из-за бага с broken pipe пишу по серверам напрямую, но там не больше 10к строк раз в 10 минут )
-
Большими порциями мы архивные данные гоняем в КХ, такое практикуем раз в месяц где то
-
Сейчас есть release candidate. В stable ещё не попало, так как много заморочек с выкладкой на наши серверы. Из последнего тега testing уже можете собирать.
-
А инструкции по сборке deb пакетов есть у вас?
-
Да - нужно воспользоваться обычной инструкцией по сборке - там внизу пункт.
-
Спасибо вам всем за все что вы делаете :)
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Алексей, а есть какая то информация по этому багу? https://github.com/yandex/ClickHouse/issues/859Wrong query optimisation throws out required columns from subqueries. #859
Query below works fine. SELECT * FROM ( SELECT learnerHash, passed - eventTime AS diff FROM statements GLOBAL ANY INNER JOIN ( SELECT learnerHash...
-
Очень жить мешает :)
-
Неправильное выкидывание ненужных столбцов из подзапросов. Пока не исправили. Эта функциональность сделана неудобно и возникает желание сделать исправление более глобально. Может быть, получится исправить быстрее, если очень надо.
-
Ну это не прям критично для нас, просто может быть кто-то тоже с таким сталкивался. У нас данных пока не так много, что бы прям сильно страдать от этого
-
Просто если это пофиксить, то это сэкономит тонну процессорного времени
-
Из-за невозможности выполнить подобный запрос приходится считать результаты таких запросов на прикладном уровне, а это иногда бывает не быстро
-
А можете ещё приложить структуры таблиц (SHOW CREATE TABLE)?
-
Да, сейчас напишу в issue
-
Закинул
-
Могу так же семпл данных приложить
-
Пригодится.
-
Ок, тогда подготовлю сейчас семпл в csv и закину тоже
-
Добавил семпл с данными. Там 2.5 млн строк
-
-
-
-
-
-
-
синтаксически список в правой части in это вообще тупл, т.е. не массив, хотя проверки относительно него делаются как для массива, проверяется существования общего типа всех компонентов. массивы же не считаются отношениями, это такой вектор-строка, в отличие от вектора-столбца, который представляет собой таблица с одной скалярной колонкой. arrayReduce немного маскирует это отличие, но не всегда помогает.
-
-
а вот это интересно. ну т.е. работать должно, почему бы и не работать, неужели он хеши считает на каждую строку.
-
-
-
-
-
-
-
SELECT *
FROM
(
SELECT number AS x
FROM system.numbers
LIMIT 100000000
)
WHERE has(
(
SELECT arrayMap(x -> cityHash64(x), ['AAA', 'BBB'])
), x)
Ok.
0 rows in set. Elapsed: 1.693 sec. Processed 100.01 million rows, 800.06 MB (59.07 million rows/s., 472.52 MB/s.)
SELECT *
FROM
(
SELECT number AS x
FROM system.numbers
LIMIT 100000000
)
WHERE has(arrayMap(x -> cityHash64(x), ['AAA', 'BBB']), x)
Ok.
0 rows in set. Elapsed: 4.484 sec. Processed 100.01 million rows, 800.06 MB (22.30 million rows/s., 178.43 MB/s.)в три раза отличается. -
SELECT *
FROM
(
SELECT number AS y
FROM system.numbers
LIMIT 100000000
)
WHERE y IN
( SELECT arrayJoin(arrayMap(x -> cityHash64(x), ['AAA', 'BBB']))
)
Ok.
0 rows in set. Elapsed: 0.389 sec. Processed 100.01 million rows, 800.06 MB (257.02 million rows/s., 2.06 GB/s.)еще четыре раза. любопытно. -
-
-
-
-
-
-
has(arr,val) эквивалентно val in (select arrayJoin(arr)) если arr не зависит от строки. если arr сам столбец, то так не получится.
-
Парни, нужна помощь
-
какой-то разрыв шаблонов получается
-
а какие времена ответов. и где во втором запросе cityhash
-
-
и так CH кластер:
<s3_r1>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>xdray-1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>xdray-2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>xdray-3</host>
<port>9000</port>
</replica>
</shard>
</s3_r1>
на каждом сервере создана локальная таблица с таким конфигом:
...
ENGINE = ReplicatedMergeTree('/clickhouse/tables/s3_r1/omega/omega_sccp_local','{replica}',
EventDate, cityHash64(sccp_src_local_ref, sccp_dst_local_ref),
(EventDate, session_type, Timestamp, sccp_cr_m3ua_opc, sccp_cr_m3ua_dpc,
cityHash64(sccp_src_local_ref, sccp_dst_local_ref)), 8192); -
т.е. Replicated, но реальных реплик нет
-
поверх создана таблица типа:
CREATE TABLE omega.omega_sccp AS omega.omega_sccp_local
ENGINE = Distributed(s3_r1, omega, omega_sccp_local, cityHash64(sccp_src_local_ref,sccp_dst_local_ref,sccp_cr_m3ua_opc,sccp_cr_m3ua_dpc)); -
при вставке строки в таблицу идет копирование на каждый шард
-
т.е. вставляешь 1 строку, получаешь 3
-
причем это дубликаты
-
и запрос из omega.omega_sccp их честно выдает
-
-
в чем фокус?
-
-
У вас replicated таблицы являются репликами друг друга.
-
-
-
-
не очень понял... ща еще раз перепроверю