- 01 July 2019 (171 messages)
-
Подскажите, пытаюсь выполнить запрос
select 'ch1' as host_address, 9000 as port from remote(concat(host_address, ':', toString(port)), 'system.replicas');
получаю ошибку DB::Exception: Hosts pattern must be string literal (in single quotes)
Так как не нашел отдельной функции string literal, добавляю экранированные одинарные кавычки - результат тот же
select 'ch1' as host_address, 9000 as port from remote(concat('\'', host_address, ':', toString(port), '\''), 'system.replicas');
Как эту штуку побороть? -
никак, remote принимает только константы. Формируйте sql на клиенте.
-
благодарю. а с константами в remote - там под капотом какая-то фундаментальная проблема, или просто так сделали?
-
даже не знаю как ответить (я вообще имею отношения к разработке КХ примерно -100000).
Но вот например вы знаете какую-нибудь СУБД которая позволяет задать имя таблицы в виде переменной? Как вы себе это видите?
select 'aa' as t from xxx||t where t > 'z' ? -
ну в данном случае речь именно о функции remote с конкретно описанной сигнатурой, куда первым агрументов в виде строки передается выражение, генерирующее адреса удаленных серверов. о том, что это константа догадаться было…гм… неочевидно
-
я вполне могу представить некую eval функцию в каком-нибудь постгресе, которая позволяет задавать имя таблицы в виде переменной
-
ну вы первый у кого настолько нетривиальное realm of sql.
-
-
Добрый день. Вопрос по использованию памяти в запросе с использованием join. В результате выполнения в память помещаются все колонки перечисленные после слова select?
-
Это очень похоже на опыт с ORM, у меня коллега сырого sql не нюхал, примерно таким же задаётся
-
Крутой сборник SQL запросов для мониторинга и проерки здоровья Postgres.
Какой index hit rate, статистика вакуума, неспользуемые индексы и тд.
https://github.com/lob/pg_insightsGitHub - lob/pg_insights: A collection of convenient SQL for monitoring Postgres database health.A collection of convenient SQL for monitoring Postgres database health. - GitHub - lob/pg_insights: A collection of convenient SQL for monitoring Postgres database health.
-
Joined.
-
-
Joined.
-
Joined.
-
Joined.
-
как посмотреть логи таблицы, т.е. какие операции совершались в таблице в прошлые дни?
-
-
-
Что вы имеете в виду? В sql разве есть понятие константых строк (а какие они ещё могут быть, если не константные)?
-
-
ClickHouse Meetup в Минске 11 июля: https://yandex.ru/promo/metrica/clickhouse-minsk
Площадка сильно больше обычного, так что нужна помощь в распространении информации по белорусским и украинским IT сообществам.LinkПриглашаем технических специалистов на митап по ClickHouse. Разработчики системы расскажут о новых функциях и планах, а пользователи — о собственном опыте.
-
None
-
В линкедине не публикуете? С удовольствием бы репостнул
-
-
добрый день. А будет запись/трансляция докладов?
-
+1
-
пока точно не известно, к сожалению
-
Слайды с митапа в Новосибирске: https://github.com/yandex/clickhouse-presentations/tree/master/meetup25yandex/clickhouse-presentations
Presentations, meetups and talks for ClickHouse. Contribute to yandex/clickhouse-presentations development by creating an account on GitHub.
-
Моя презентация похоже не обновлена - там ведь были исправления опечаток.
-
хорошая идея - хранить все презентации в одном месте. спасибо!
-
Percona2019 надо обновить также.
-
Подскажите как работают MV поверх реплицированных сырых таблиц.
Хочу понять, как на двух нодах будет работать следующее – сырые события (ReplicatedMT) –> матвьюха (ReplicatedSummingMT). Происходит ли дублирование в MV? т.е она сама по себе Replicated, сырые события тоже Replicated, но делает ли MV агрегацию, когда импорт был не в локальную таблицу с сырыми событиями, а туда прилетела репликация? -
MV не работает с реплицированной таблицы. Там insert не происходит если то не работает
-
Нужная MV на каждой реплике, тогда все будет работать.
-
-
MV ловит все что прилетело в локальную таблицу реплики. Если таблица назначения MV репилцируемая, то блоки с других реплик ей прилетают из зоокипера уже агрегриованными.
-
Joined.
-
Точно так же с шардированием и реплицированием, матвьюха нужна на всех шардах и репликах куда прилетают "сырые" данные
-
-
-
-
А вам именно массив нужен? Хеш не подходит?
-
-
Помогите разобраться:
Есть запрос
select p2, p3+, p4+, p1+, p1++, count(Maxp1++InMinute) maxinminute,
groupUniqArrayIf(res, has(two_arr, res) = 0) newp3+
from
(
select p2, p3+, p4+, p1+, p1++, Maxp1++InMinute, arrayJoin(p3+) AS res, any(statp3+) two_arr
from
(
select p2, p3+, p4+, p1+, p1++, Maxp1++InMinute,
groupUniqArrayIf(p3, Date<today()) statp3+
from 'table'
global any inner join
(
select p2, groupUniqArray(p3) p3+, groupUniqArray(p4) p4+,
count(extract(p1, '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}')) as p1+,
uniq(extract(p1, '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}')) as p1++, Maxp1++InMinute
from 'table'
global any inner join
(
select p2, max(p1++inminute) Maxp1++InMinute
from
(
select toStartOfMinute(TimeStamp) Time,
groupUniqArray(extract(p1, '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}')) p1++inminute,
p2
from 'table'
where TimeStamp between now()-3600 and now() and p2 != '00000000-0000-0000-0000-000000000001'
GROUP BY Time, p2
)
group by p2
) using p2
where TimeStamp between now()-3600 and now() and p2 != '00000000-0000-0000-0000-000000000001'
group by p2, Maxp1++InMinute
) using p2
group by p2, p3+, p4+, p1+, p1++, Maxp1++InMinute
)
group by p2, p3+, p4+, p1+, p1++, Maxp1++InMinute, res
)
group by p2, p3+, p4+, p1+, p1++, Maxp1++InMinute
having p1++ >900 or (p1++>500 and notEmpty(newp3+)=1)До обновления на 19.7.3.9 срабатывал на отлично. После обновления стал терять столбцы p3+, p4+, p1+, p1++ на втором подзапросе.
[Unknown] Code: 47, e.displayText() = DB::Exception: Missing columns: -
Всем привет! ALTER TABLE RESHARD окончательно выпилили из свежей версии? В доке никакого упоминания не осталось.
Теперь балансить данные по кластеру без переименования таблиц можно только вручную перенося партиции на новую тачку кластера? -
очень странно не_парсится decimal128 из строки из приджойненой таблицы, bc value is too short
при этом напрямую из таблицы всё парсится. в чем может быть дело? -
так наверное в правой таблице нет строки и получается пустая '', недавно сделали todecimalornull orZero
-
Да. Выпилили полтора года назад.
-
и правда, иннер решил вопрос
-
спасибо
-
что то не могу его найти в версии 19.9.2.4. Он же с клиентом ставится?
-
-
Ну баг обычный https://github.com/yandex/ClickHouse/issues/2507[Exception] when use union all with constant throw DB::Exception: Cannot convert column · Issue #2507 · yandex/ClickHouse
version 1.1.54383, version 1.1.54342 union all with constant from distributed table, throw exception a minimal reproducible example CREATE TABLE datacenter.testunionalla_shard ON CLUSTER datacenter...
-
Подскажите обратную функцию array join?
-
Можно написать clickhouse obfuscator (через пробел)
-
groupArray
-
ОК. Спасибо!
-
Уважаемые, подскажите, какие настройки дисковой подстистемы рекомендованы? Что-то при XFS поверх LVM крайне удручающе выглядит при большом количестви партов.
-
После удаления *_dictionary.xml таблица по прежнему живёт в кх, можно ли как-нибудь удалить ее без ребута кх?
-
Да. Надо в файлике перед удалением сделать пустой тег.
<dictionaries></dictionaries>
Словарь удалится и можно удалить файл.
Т.е. создайте файл назад на секунду. -
Понял, спасибо, сейчас поробую
-
Рекомендованы mdraid и ext4(кх написан с учетом кишков ext4). Но от большого числа партов вряд ли поможет.
-
В массиве есть повторяющиеся значения, хочу вывести массив с уникальными значениями. Как это сделать?
-
arrayReduce('groupUniqArray', arr)
-
спасибо
-
а если создать симлинк, как это сделано с остальными (clickhouse-server, clickhouse-client и тд) будет работать?
-
спасибо
-
-
Да
-
Да, в общем случае результат джойна будет какое-то время в памяти со всеми колонками результата.
-
Спасибо!
-
а с какой версии обновились?
-
19.4.0 до 19.7.3.9
-
К сожалению данного контекста не хватает, чтобы разобраться. Можно прислать (можно в личку) полный текст ошибки и/или минимизировать пример, на котором это происходит, в идеале до сведения к запросу, не требующему данных.
-
Да.
-
Ошибку пришлю чуть чуть позже. Спасибо
-
Привет!
Есть ошибка - DB::Exception: Type mismatch for column colName. Column has type UInt32, got type String.
drop этой колонки поможет? -
ошибка при insert ?
-
У вас во вьюхе один тип, в таблице другой. - пересоздать вьюху
-
при селекте
-
это физическая таблица
-
изначально был один тип у колонки, потом был альтер
-
-
alter у дистрибьютид тоже нужен
-
-
set enable_optimize_predicate_expression = 0, allow_experimental_cross_to_join_conversion = 0, allow_experimental_multiple_joins_emulation = 0
-
Спасибо
-
Если не сложно, можете подсказать? Если в запросе есть where как по полям из первичного ключа, так и по полям вне его, то CH будет делать scan для полей вне ключа только по той выборке, которую он предварительно сделал по первичному ключу?
-
-
да.
-
Отлично, спасибо
-
Дата центр встанет на кликхаус?
-
Дата центр встанет на кликхаус?
-
Есть тонкий момент, что если не указана prewhere, то для prewhere (при optimize_move_to_prewhere=1) будет выбрана наименьшая(самая легкая) колонка, в нее КХ зайдет по ограниченям первичного ключа, отфильтрует ( найдет первичные ключи ) и остальные колонки будут читаться уже этими ключами.
Т.е. в случае where pk_column = ? and bad_filter_column_always_true and good_filter_column_sometimes_true
имеет смысл писать
prewhere good_filter_column_sometimes_true
where pk_column = ? and bad_filter_column_always_true
КХ не может сам найти good_filter_column_sometimes_true потому что у него нет такой статистики. -
Около 30 терррабайт
-
Что для этого нужно
-
Какие библиотеки
-
Ленинская
-
PREWHERE крутая штука. Спасибо, что подсказали.
-
В чём ваш вопрос? Кликхаус может жить с большими объёмами данных, для этого и существует, вас что-то конкретное смущает?
-
оьбем 30 трб
-
🤣🤣🤣 Это очень круто было👍🏻
-
это объем среднестатичтического шарда, что в этом страшного?
-
приборы восемь
-
у меня ноутбук столько осилит.
-
а сколько максимально он может понянуть
-
а сколько максимально потянет мускул\постгрес?
-
один сервер? у меня есть сервера с 60ТБ диска, там в 50 раз ужато, изначальных сырых данных.
-
Ограничений нет, сколько серверов поднимете, столько и будет
-
а сколько стоит
-
бесплатно
-
а где тут зарыта понетизация, такие же объемы нужно окупать
-
ага, сча яндекс будет на опенсорс продукте навариваться =)
-
почему бы нет если спрос есть
-
вопрос про яндекс.облако? это в другой чат.
-
Мы не храним данные, данные хранят сами пользователи, мы предоставляем код
-
Это не так много, у нас примерно столько же на 9 машинах
-
Коллеги, такой вопрос: при создании MV можно указать движок таблицы, куда будут сохраняться данные, а что будет, если мы удалим MV?
-
При создании MV можно указать явную таблицу куда будут сохраняться данные с помощью TO. В этом случае при drop MV таблица останется.
Если при создании MV явная таблица не была указана, то данные будут сохранятся в автоматически созданной таблице .inner.{mv_name}. Эта таблица будет дропнута при drop MV. Если она нужна то можно сделать detach MV, rename .inner.... to ... -
@den_crane спасибо
-
ищите доку сами, если нету, могу дописать
-
-
Доку нашел, но 19.9.2 ругается на синтаксис:
CREATE MATERIALIZED VIEW _test TO _view_test ON CLUSTER mycluster
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{cluster}/{shard}/test', '{replica}')
PARTITION BY ...
ORDER BY ...
TTL ...
POPULATE AS SELECT ...;
Syntax error: failed at position 46 (line 1, col 46):
Expected one of: AS, OpeningRoundBracket, Dot, token -
Ругается как раз на TO
-
Либо TO либо не TO и ENGINE = ReplicatedMergeTree(
-
POPULATE тоже не сделан с TO
-
Поправил ReplicatedMergeTree() -> MergeTree() и убрал POPULATE, все равно ошибка
-
TO точно TO
-
еще раз
без TO
CREATE MATERIALIZED VIEW requests_graph
ENGINE = AggregatingMergeTree(request_date, (request_hour,request_uri), 8192)
AS SELECT
request_date,
с TO
CREATE table requests_graph (
request_date Date,
request_hour DateTime('UTC'),
CREATE MATERIALIZED VIEW requests_graph_mv
to requests_graph
AS SELECT -
либо храним в неявной таблице и MV без TO
либо в явной с TO -
Т.е. сначала сделать таблицу, а потом при создании МВ указать ее в качестве целевой "для данных" - так?
-
да
-
Вот этот момент точно нужно в документации описать. Я был уверен, что TO - это что-то вроде альяса для .inner.*, позволяющего задать иное имя для таблицы с данными.
-
-
Добрый день, подскажите, пожалуйста, если кто-нибудь знает
Можно ли сделать с такой логикой:
SELECT *
FROM
numbers(100)
WHERE
number BETWEEN (select 10,20 /*Результаты большого запроса*/)
Или единственный вариант:
SELECT *
FROM
numbers(100)
WHERE
number>(select 10)
AND
number<(select 20)
Понимаю, что можно через временные и всёвотэтовот, но если без побочных таблиц, может есть какой-нибудь синтаскис через массивы? А то я уже подумываю костылить через pointInPolygon -
Подумал было, что нашел способ, как обойти это ограничение - использовать конструкцию TO при создании MV и назвать таблицу с данными не начиная с точки. Но все равно не реботают фильтры. Т.е. они работают при непосредственно выборке по таблице с данными, но если выбирать из view - не фильтруются.
-
переименуйте MV
-
Сделал таблицу _inner_test и MV _test TO _inner_test. Что во что переименовать?
-
with
-
_inner_test в test, test в test_MV
-
Joined.
-
В чем разница? Есть какие-то ограничения на имена таблиц для фильтров row-level security
-
Если вам удобно оборачиваеть имя таблицы в обратные кавычки - разницы нет
-
нет. Проблема в том что вы что-то не понимаете.
есть таблица X, вы делаете из- нее селекты, на нее наложены row_level фильтры. Как называется MV вообще не имеет значения, назовите его trulalala И НЕ ИСПОЛЬЗУЙТЕ в select -
Имена вроде _xxx оборачивать в обратные кавычки не требуется, но мне удобно, why not ;)
-
Наверное для секурности можно trulalala положить в другую БД на которую не давать доступ
-
Или вообще с помощью row_level запретить читать из trulalala
-
У меня есть таблица S (от source - источник данных), она живет в базе D1. Я сделал новую базу D2 и сделал в ней таблицу I (от inner - внутренняя, "эмуляция" .inner.* для вьюхи) и сделал MV с именем V (от view) вида CREATE MATERIALIZED VIEW D2.V TO D2.I AS SELECT * FROM D1.S WHERE ... ;
Соответственно, в D2.I у меня только строки, которые удовлетворяют WHERE вьюхи.
Дополнительно я хочу отфильтровать строки для разных пользователей - для этого пытаюсь использовать row-level фильтры на таблицу D2.I. Они не работают. -
Господа, насколько валидна следующая схема?
CREATE TABLE IF NOT EXISTS attr_state
(
Id UInt64,
Attributes Array(UInt64),
Sign Array(Int8),
Ts DateTime
)
ENGINE = MergeTree
ORDER BY IdВремя от времени я обновляю длинный список аттрибутов (~1-5M). Некоторые добавляются, некоторые пропадают, при апдейте пишу список того что поменялось, sign показывает значение удалилось или добавилось.
Насколько это хорошо/плохо для операций вида посчитать количество включений аттрибута по набору ID?
Имеет ли смысл проиграть по памяти и писать без Array в колонку и везде дублировать дату? -
Joined.
-
>для этого пытаюсь использовать row-level фильтры на таблицу D2.I. Они не работают.
вот это странно и что в xml ? -
<databases>
<D2>
<V>
<filter>number = 42</filter>
</V>
<I>
<filter>number = 42</filter>
</I>
</D2>
</databases> -
select * from I — фильтрует
select * from V — не фильтрует -
Уточните что значит длиный список атрибутов? Длина массива в одной записи?
-
-
Да, в массиве может быть много записей
-
Привет, можно ли как-нибудь через alter table сменить ttl таблицы merge tree?
-
спасибо, нашел ALTER TABLE test MODIFY TTL TestDateTime + INTERVAL 60 DAY
-
-
Как посмотреть какой выставлен TTL у таблицы?
-
т.е. похоже RL security в принципе для MV не работает, т.е. вариант с созданием MV в базе в которую нет доступа вообще
-
SHOW CREATE?
-
спасибо огромное
-
-
Еще одна боль есть - я хочу I-таблицу обернуть в Distributed (потому что I в моем случае - реплицируемая). Т.к. для distributed запросов по умолчанию используется пользователь default, row level security тоже не будет работать (( Точнее - он отработает для локальной таблицы, но не для удаленной.
Решение - создать отдельный специальный кластер в remote_serves для каждого юзера, но это же подразумевает создание для каждого юзера своей Distributed-таблицы ну и остальные вытекающие проблемы с доступом ((( -
да вроде нет.
select timezone() ? -
но для старых партов как оказалось это не применится.
-
я решил проблемы вычитанием одного дня из даты) хотя так конечно заметно медленне работает
-
SELECT toISOWeek(toDate('2019-06-30'))
┌─toISOWeek(toDate('2019-06-30'))─┐
│ 26 │
└─────────────────────────────────┘
SELECT toISOWeek(toDate('2019-07-01'))
┌─toISOWeek(toDate('2019-07-01'))─┐
│ 27 │
└─────────────────────────────────┘ -
👍
- 02 July 2019 (187 messages)
-
подскажите, а есть возможность узнать непосредственно из экземпляра кх его соственный http_port? (в system.settings его нет)
-
нету, только в конфиге или в
netstat -nlp|grep click -
то есть если, к примеру, через set кто-то выставил значение, то посмотреть я его не смогу
-
нельзя это выставить через set , только в конфиге и применится с рестартом.
-
а все, что можно выставить через set оказывается в system.settings?
-
Да. Это параметры сессии.
-
а в кх есть какой-то хитрый вариант выполнить через экземпляр bash комманду, чтобы получить порт? типа sql блаблабла clickhouse extract-from-config --config-file /etc/clickhouse-server/config.xml --key=http_port
-
Можно. Только зачем? По асфальту на коньках?
-
я по-хитрому собираю конфигурацию локальных таблиц под distributed движком, чтобы напрямую писать в них в ряде случаев. пишу через http, все собрать могу через экземпляр кх с distibuted, кроме http_port
-
если расскажете как, буду благодарен
-
А чем вам поможет знание порта в кх? Nat balancer port forwarding ?
-
Словарь executable
-
расширение для гринплама, которое льет через собственный внутренний движок внешних таблиц данные в кх по хитрому алгоритму (там долго рассказывать детали)
-
Да мне все равно. Я столько не пью.
-
спасибо!
-
-
-
Joined.
-
-
-
-
Это нормально, ищите сразу на гитхабе https://github.com/yandex/ClickHouse/search?l=SQL&q=parallel_view_processing&type=yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Акция в Облаке — не упустите возможность развернуть управляемые базы данных и использовать их со скидкой! С 1 по 31 июля 2019 г. разверните новую базу данных в Облаке, используйте её платно и получите скидку до 40% на использование этой БД в течение 12 месяцев.
Как участвовать в акции?
1. Перейдите на платный аккаунт или пополните баланс, если вы уже используете платную версию Облака.
2. С 1 по 31 июля выберите СУБД, с которой вы не работали раньше, из списка на сайте и создайте кластер БД. Используйте эту БД платно в течение месяца, включая 31 июля.
3. С 1 августа получите скидку на все классы хостов этой СУБД в Облаке на 12 месяцев.
Если вы пробовали работать с БД в Облаке до июня, то у вас тоже есть возможность получить скидку на год. Подробные условия здесь.Link12 месяцев платного использования сервисов по управлению базами данных со скидкой до 40%. Акция действует с 1 по 31 августа 2019 года. На БД Redis™ в Облаке скидка может достигать 42%. Подробные условия по ссылке: https://ya.cc/66XzD
-
Привет. Есть readoly профиль, есть юзер с этим профилем, запускаю клента передаю send_logs_level, он не выставляется, через SET send_logs_level тоже, говорит
Cannot execute SET query in readonly mode.
Можно ли как-то создать сессию под readonly юзером и при старте поменять уровень send_logs_level? -
-
-
-
-
As far as I understand 1st user should readonly=2 (allow change any settings), than you can add constraints on all settings except send_logs_level (I don't know if there an easier way).
-
-
👍 спасибо
-
Всем привет! Подскажите, mergeTree движок пишет какую-то мету для вставляемых строк типа времени вставки или вроде того?
-
построчно - нет. для парта (одного инсерта пока он не смержился) вся метадата есть в system.parts
-
А шо делать если в клауд карта не добавляется и все запросы в саппорт игнорируются?
-
есть номер тикет в саппорте?
-
Joined.
-
-
я много раз заполнял форму на сайте
на почту ничего не приодило -
SELECT
elapsed,
formatReadableSize(memory_usage) AS memory_usage,
initial_user,
formatReadableSize(read_bytes) AS read_bytes,
substring(query, 1, 650) AS query
FROM
system.processes;
Правильно я понимаю, что такой запрос возвращает процессы только на текущей ноде кластера? А можно ли получить процессы на всех нодах или надо на каждой отдельно запрашивать? -
remote позволяет
-
Есть две колонки "время начала" и "время конца" хочу найти продолжительность(интервал) между колонками в часах и минутах. Подскажите, плиз?
-
даже в спам? не Украина случаем?
-
ни в спаме, нив логах мта
-
она самая
-
вероятно какой-то побочный эффект от https://www.president.gov.ua/documents/822019-26290УКАЗ ПРЕЗИДЕНТА УКРАЇНИ №82/2019 — Офіційне інтернет-представництво Президента України
Про рішення Ради національної безпеки і оборони України від 19 березня 2019 року
-
Всем привет, есть вопрос по тому какой движок лучше юзать. Цель следующая: хранить текстовые данные( анкоры(например site.com/url) ) как в ahrefs“, но анкоры со страницы могут со временем удалятся, и их нужно будет удалять из базы. На сколько я понял, сейчас нет для решения это задачи подходящих движков, или кто-то решал уже подобное? Поделитесь как
-
Именно в контексте кликхаус
-
удалять это не про кликхаус. удаление только через alter table.
-
Это я знаю
-
Вопрос в другом
-
Можно попробовать на CollapsingMergeTree построить такое, но сильно от задачи зависит
-
не получится так
-
там нет дублей
-
нужо именно хранилище
-
с которого можно быстро доставать и сортировать данные
-
Мы вставляем с sign -1 ту же запись для удаления
-
не совсем понял о sign - 1
-
А данные отдаются через вью
-
Это для CollapsingMergingTree
-
Строки схлопываются с -1 и 1
-
Просто помечать данные удалёнными, а не удалять.
-
Тоже вариант
-
но это для числовых значений
-
у меня же будут строковые
-
или я не правильно понимаю
-
не имеет значения тип поля
-
+
-
Строки схлопывается по ключу
-
Тоже вариант, но со временем таких данных будет очень много и придется тратить деньги на сервера
-
Шардировать по месяцам, например и дропать шарды.
-
@alikutov твой вариант хорош, а как ведет себя кх на большем объеме записей?
-
Со временем "помеченные" строчки будут свернуты https://clickhouse.yandex/docs/ru/operations/table_engines/collapsingmergetree/#table_engine-collapsingmergetree-collapsing
-
Ребятки, есть тут кто, подключающийся по odbc из Tableau к ClickHouse?
При публикации воркбуков постоянно слетает форматирование. Кто-нибудь сталкивался с этим? Нашли причину?🙏 -
Нельзя, допустим за один день могли поставить 10 ссылок и удалить из них 2, а если дропать шард - то остальные 8 в этот же день тоже дропнутся
-
-
Спасибо ребят
-
-
У нас записей не очень много, около 100к в день
-
Ну у меня всего будет около 1кк
-
-
1 миллион это не о чем
-
Но на PG слишком большая нагрузка и так, по этому и решил юзать кх
-
КХ легко жует миллиарды и триллионы
-
Да, я знаю)
-
По этому и хочу его использовать
-
+ данные занимают меньше места чем в том же pg
-
Почитай доку, там все подробно расписано
-
таблицу на миллон строк проще удалять через ALTER TABLE чем городить коллапс
-
И даже на русском))
-
MV c to или без?
-
apt-get install cassandra -- я не шучу
-
Ага, у проекта уже и так 3 отдельных бд есть, еще 4-ю не хватало туда)
-
По этому и уточнил
-
самая простая как по документации
CREATE MATERIALIZED VIEW default.statistic
ENGINE = MergeTree() PARTITION BY toYYYYMM(timestamp) ORDER BY (.....) SETTINGS index_granularity = 8192 AS
SELECT *
FROM default.data; -
Кассандра это про "быстро достать 1 ключ" ))
-
И что ? Ну забивайте гвозди тапком.
-
Мне нужно не таблицу а 1 запись удалить
-
Да, так и будем делать:)
-
через ALTER TABLE записи и удаляются по фильтру WHERE
-
Это я тоже знаю) Но в услове в where должно быть тип UInt 8
-
А у меня String
-
-
по стрингу удаляет тоже
-
где ты там это прочитал?
-
-
это результат должен быть такой
-
а не тип столбца
-
Uint8 там вместо true/false юзается
-
Да, мой проеб, сорян
-
Просто пробовал удалить через IDE, а там выполняется такой запрос
-
-
По этому не хотело удалять
-
Тогда можно обыкновенный MergeTree юзать и не парится
-
Joined.
-
было CREATE MATERIALIZED VIEW testmv
detach table testmv;
rename table `.inner.testmv` to `.inner.newtestmv`;
# mv /var/lib/clickhouse/metadata/dw/testmv.sql /var/lib/clickhouse/metadata/dw/newtestmv.sql
attach table newtestmv; -
понял! спасибо большое
-
-
убирает из инстанса, без удаления данных на диске. Фактически ребут КХ это detach -> attach
-
-
-
-
У меня есть требование работать от readonly-пользователя. В этом случае поможет только Distributed поверх system.processes?
-
ну вопрос тогда какая у вас версия, это смержили только что https://github.com/yandex/ClickHouse/pull/5209
-
-
да. Зачем пользователю туда ходить?
-
есть. что за "форматирование слетает"? как это выглядит?
-
да я понял что это новинка 🙂 врятле Вы стали бы советовать обходной путь если бы простой ренейм работал бы, Спасибо за наводку! чтото мне самому не пришло в голову попробовать table вместо матвью указывать в командах
-
Короткий ответ: цвета графиков
Длинный: изменяю исходную (автоматически "назначенную") цветовую гамму графиков (чтобы план одиним цветом, факт 2018 - другим, факт 2019 - третьим). Мало того, что на десктопной версии это изменение не сохраняется, так ещё при публикации воркбука на сервер tableau нужная цветовая гамма не передается - передается исходный вариант🤷 -
Мониторинг.
-
Добрый день, подскажите пожалуйста почему может возникать такая ошибка:
2019.07.02 11:50:00.909962 [ 15 ] <Error> sns.co_uk_product_agg_original (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Cod
e: 10, e.displayText() = DB::Exception: Not found column avg_price in block. There are only columns: , e.what() = DB::Exception, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x4810b46]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x264a23f]
2. clickhouse-server(DB::Block::getByName(std::string const&)+0x9a) [0x3a2daca]
3. clickhouse-server(DB::ColumnGathererStream::init()+0x16c) [0x43ce56c]
4. clickhouse-server(DB::ColumnGathererStream::readImpl()+0x8e0) [0x43cfb70]
5. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x1fd) [0x3a3f38d]
6. clickhouse-server(DB::MergeTreeDataMergerMutator::mergePartsToTemporaryPart(DB::MergeTreeDataMergerMutator::FuturePart const&, DB::MergeListEntry&, unsigned long, long, DB::DiskSpaceMonitor::Reservation*,
bool)+0x3c28) [0x42bc368]
7. clickhouse-server(DB::StorageReplicatedMergeTree::tryExecuteMerge(DB::ReplicatedMergeTreeLogEntry const&)+0x959) [0x424a8a9]
8. clickhouse-server(DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&)+0x25b) [0x424f52b]
9. clickhouse-server() [0x424fcd0]
10. clickhouse-server(DB::ReplicatedMergeTreeQueue::processEntry(std::function<std::shared_ptr<zkutil::ZooKeeper> ()>, std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::function<bool (std::shared_ptr<D
B::ReplicatedMergeTreeLogEntry>&)>)+0x41) [0x431d031]
11. clickhouse-server(DB::StorageReplicatedMergeTree::queueTask()+0x19d) [0x422bd8d]
12. clickhouse-server(DB::BackgroundProcessingPool::threadFunction()+0x3ee) [0x427ab9e]
13. clickhouse-server() [0x4ca4f9f]
14. /lib64/libpthread.so.0(+0x7dd5) [0x7fe4f5874dd5]
15. /lib64/libc.so.6(clone+0x6d) [0x7fe4f5097ead] -
ведь если скаченная реплика была повреждена, то не сойдутся чексуммы и парт будет стянут по-новой?
-
3d secure работает без каких-либо проблем
ошибку в я.к. не могу увидить - она мелькает на доли секунды -
версия КХ ?
-
1.1.54390
-
Жесть
-
-
очень хотим обновиться, но есть неотложные дела, которые нужно делать сейчас, к сожалению
-
если при сохранении книги (в Десктопе) и повторном открытии ее (в Десктопе) цвета сбрасываются, то это вопрос к Табло (не к CH). Напишите мне в личку, разберемся.
-
select parseDateTimeBestEffortOrZero('2014-09-21T09:44:28+0400')
для инсерт date_time_input_format "Method to read DateTime from text input formats. Possible values: 'basic' and 'best_effort'." -
Через регулярку возможно
-
-
Чего соображать. Кх поддерживает это через besteffort
-
-
-
-
-
Всем привет. У меня в таблицe хранятся полигоны в струтурe Array(Tuple(Float64, Float64))
но при попытке подставить ее в функцию pointInPolygon получаю ошибку
DB::Exception: Argument 2 for function pointInPolygon must be constant array of tuples
Получается в таблице хранится не константы?
описывал структуру используя `Nested`🤔
есть способ обйти это? 🤔 -
Моё скромное ИМХО, что единственный «хороший» формат датывремени — это UNIX timestamp (и ClickHouse, насколько мне известно, так и хранит датувремя). Соответственно, я бы рекомендовал всегда стараться вставлять в ClickHouse датувремя обычным числом, чтобы не было путаницы с временными зонами, например. Единственное место, где все-таки таймзона, выставленная на сервере влияет — это то, как считается дата на основе датывремени. Обычно её удобнее всего считать в той таймзоне, которая для ваших клиентов ближе всего (например Москва), и дата хранится отдельно, так что её нельзя (или очень сложно) пересчитать потом
-
с этим согласен, но это натягивание совы на глобус с минимальной работой напильником 🙂 данные из кафки идут
-
-
под константой имеется в виду что вы руками вводите полигон
-
-
-
-
-
-
-
avg_price это alter-м добавили или это alias колонка?
-
В том то и загадочность ситуации что avg_price это Float32 который существовал с давних времен и не менялся в ближайшее время
-
ну надо в общем смореть в логе что делал [ 15 ], и откуда этот парт взялся и куда делся
-
-
-
в смысле на инициаторе где distributed такого словаря нет?
-
-
почему вы решили что на инициаторе он не нужен? инициатор домерживает
-
-
т.е. прикол в том что из-за () пол-запроса можно переместить на инициатор
-
-
как запрос выглядит примерно?
-
-
нет спасибо, я уже хороший
-
-
у вас в having dictGetInt8
собрав со всех нод резултат и досуммировав, having нельзя проверить без словаря -
-
потому что он в having ?
-
-
-
-
Вставляю данные из представления в таблицу. 20 млн строк. 3 млн вставляет и всё. Можно как-то подтюнить чтобы всё вставилось?
-
-
Тайм-аута уже нет, я менял запрос по разному - всегда вставляет в точности одно количество строк. Вроде была настройка по максимальной величине пакета на вставку
-
Там по памяти ещё проблема - пока в массивах, все ок, а только делаю array join - сразу вся память заканчивается. Тоже не знаю как бороться
-
group by / order by в запросе? Какая ошибка copy/paste ? Сколько памяти?
-
Ошибка есть? Что в логе КХ ?
-
-
Joined.
-
@den_crane завтра выложу всё, сегодня уже нет доступа к системе
- 03 July 2019 (148 messages)
-
-
Joined.
-
Joined.
-
-
Joined.
-
-
@milovidov_an есть ли такие средства ограничения доступа на уровне СУБД?
-
Вот тут разве не об этом? https://clickhouse.yandex/docs/ru/operations/access_rights/
-
По крайней мере ограничить юзеру список доступных баз - точно тут есть
-
Спасибо. Прочитал весь текст, а в примере конфига нужную строку и не заметил.
-
<allow_databases>
<database>test</database>
</allow_databases>
??? -
@den_crane с запросом получилось так - часть на массивах потребляет 700мб. После array join всё, труба, просит 250гб на запрос и умирает (я не даю ему столько памяти). Никак не получается обойти.
-
-
Вроде ничего криминального кроме собственно array join нету. 3.5млн записей пока с массивами, 25млн в развернутом виде
-
До array join считается влёт
-
-
Да, я нашел. Спасибо.
-
В cross join 20 записей и считается моментально. Все плохое начинается только на array join
-
Это в нем 20 записей, а в результате перемножения выборок у тебя весь результат может легко вырасти в 20 раз
-
-
Там не перемножается - оно же аггрегировано в одну строку
-
В случае с VIEW возникает ошибка доступа, если пользователю я даю доступ к представлению из базы данных, куда доступ у пользователя отсутствует
-
Я не знаю, можно ли настроить права per таблицу, но то, что вы описали, звучит логично, не? Типа вы запретили смотреть пользователю базу X, значит то, что он не сможет посмотреть вьюху (которая по сути таблица, если речь о матвью) из базы X - ожидаемо.
-
Вьюха в моем случае содержит ограниченный список полей, которые можно отобразить пользователю
-
-
Ну, кажется решение такое - вы делаете пользователя X, который может делать с базой че угодно и делаете пользователя Y с опцией readonly, в список его баз пишите ту, в которую ему надо ходить на чтение. Но, как я понимаю, он будет уметь читать все из этой базы
-
Привет всем,
-
Да, и это мне не подходит(
-
подскажите есть какой то простой и быстрый способ импоритровать таблицу из DB clickhouse в CSV, таблица сама по седе не очень большая.
-
?
-
export table in csv · Issue #1751 · yandex/ClickHouse
Hello, There is any way I can export an entire table in csv or any other format ? SELECT * from table is excluded as time the table is pretty big and I need something to export it in chunks Silviu
-
спасибо
-
Появился экспериментальный YouTube канал, где будем стараться собирать весь видео контент по ClickHouse в одном месте: https://www.youtube.com/channel/UChtmrD-dsdpspr42P_PyRAw Подписывайтесь, чтобы быть в курсе развития событий 🙂
Из совсем эксклюзивного материала там пока только часть последнего митапа в Новосибирске.
Предстоящий ClickHouse Meetup в Минске 11 июля: https://yandex.ru/promo/metrica/clickhouse-minsk -
None
-
-
о, наконец-то, круть👍
-
-
Увидел лого и подумал: "А причем тут Билайн?" ))) Очень хорошо что сейчас будет канал где собраны все видео!
-
Тоже поймал ошибку cannot schedule task. В каких случаях она возникает? У меня внешний процесс транкейтит табличку в памяти (Memory), вставляет данные, матвьюха на ней обогащенные данные кладёт в целевую.
-
Отвечу сам: по алфавиту, причём по названию MV, имя целевой таблицы значения не имеет (это для кейса CREATE MAT VIEW .. TO ..)
Порядок обхода — деталь реализации: https://github.com/yandex/ClickHouse/blob/9ea05b2401a01f37307ebf11d2d7bd4cccdffe5a/dbms/src/Interpreters/Context.h#L88
И завязываться не хочется.
Вопрос: есть ли риск, что в будущем std::set заменят на std::unordered_set и свойство нарушится? Или таки где-то свойство зафиксировано, но я его не вижу?ClickHouse/ClickHouseClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Зачем это нужно:
Нам в одном месте нужна транзакционная запись в несколько таблиц (A, B, C). И предполагаемое решение:
* все строки провязываются некоторым общим transaction_id
* делается общая таблица A&B&C (конкатенацией полей) с ENGINE=null, после чего MV в A, B, C.
* Последним MV добавляется некоторый "~transaction_log", куда пишется тот же transaction_id.
* Если в transaction_log есть запись, то записи легли во все нужные таблицы, куда должны были лечь (A, B, C), иначе, при фейле записи хоть в одну и них общая операция INSERT зафейлилась, не дойдя до последней MV. -
/
-
Joined.
-
Здравствуйте
-
Столкнулся с проблемой, с какой-то периодичностью жрёт CPU, хочу отследить какие запросы или что конкретно может это делать. Подскажите пожалуйста куда смотреть.
-
-
Мержинг?
-
В htop, нагрузка clickhouse-server/config.xml
-
MergeTree
-
мержтри мержит парты в бэкграунде. Поэтому всплески проца ожидаемы.
-
Просто всплески каждые 24 сек, 6 ядер до 80-90 поднимает, на 1-2 секунды
-
подними логлевел и гляди в логи какие запросы коррелируют
-
Спасибо, попробую
-
Еще как вариант включить query_log и читать его
-
-
-
Матвью из двух таблиц можно сделать? Через union не работает
-
можно заджойнить, только очень внимательно надо это делать, т.к. во вьюху попадет состояние на момент записиси
-
Просто два матвью которые пишут в одну ТО
-
а сколько у вас таблиц и как они партиционированы? Сколько партиций?
-
20 таблиц, 201906│ 20190619_20190629_1_7621_6689│ TestsNews
-
Joined.
-
привет, а подскажите как unix nano сковертировать в datetime?
-
toDateTime(intDiv(nano, 1000000000))
-
thx
-
select count() parts_count
from system.parts
where table like '%%' and active -
По разным таблицам, в среднем 20
-
а подскажите, кто нибудь пробывал индексы по колонкам для быстрого лукапа?
к примеру у меня есть табличка с логами (2-3тб), логи в ней сортированы по времени. В табличке есть доп колонки по которым хотелось бы быстро искать логи (trace_id всякие), я правильно же понимаю что эти индексы позволят мне делать подобные выборки "быстро" -
>я правильно же понимаю что эти индексы позволят мне делать подобные выборки "быстро"
нет, индексы этого не позволяют (можно конечно с bloom поизвращаться, но это так, может ускорит в два раза, а для других trace_id замедлит).
В общем-то только вручную вторичное таблицей отсортированной по trace_id которая будет или хранить данные из первой или ссылаться на первую. -
ок, такой вариант тоже рассматривал
-
почему то показалось что эта фича мне поможет
-
-
поможет если trace_id коррелируют с временем (с основным индексом), например всегда растут.
-
увы это не так :(
-
это дефолтное значение, его можно поменять и поставить 100ГБ если память есть
-
-
это пользовательская users max_memory_usage_for_all_queries max_memory_usage
cat /etc/clickhouse-server/conf.d/memory_usage.xml
<?xml version="1.0" ?>
<yandex>
<profiles>
<default>
<max_memory_usage_for_all_queries>101310968832</max_memory_usage_for_all_queries>
<max_bytes_before_external_group_by>50655484416</max_bytes_before_external_group_by>
<max_memory_usage>101310968832</max_memory_usage>
</default>
</profiles>
</yandex> -
Помогло, спасибо!
-
-
Если подключаться через DBeaver, то можно в настройках драйвера указать таймаут
-
-
»\Теперь просто по read timed out падает) время таймаута тоже можно задать?
Попробуйте запустить запрос в обычном консольном клиенте КХ clickhouse-client. Так вы точно поймете в чем причина отвалов. -
Если создать MATERIALIZED VIEW t1 TO t2, то запрос в t1 будет возвращать данные из t2?
-
да, MV это триггер на инсерт, оно подписывается на таблицу во FROM, и обрабатывает то что присылат insert
если TO не указано то MV само создает сторадж и называет его `.inner.{MV_NAME}` , если TO указано то пишет туда. -
-
Ребят, подскажите, кто-то пробовал писать данные напрямую в кликхаус используя сервис statsd?
-
-
StatsD -> Graphite -> Clickhouse не подходит?
-
Возможно. Спрашиваю, так как для ресерча нужно ))
-
Мы так делаем, все ок.
Вопросы по мониторингу, видимо лучше задавать в @metrics_ru (не реклама :) ) -
спасибо )
-
Joined.
-
Подскажите, пожалуйста, почему таймзона не применяется "на лету" с переменной?
а только если передать явно строкой
timezone(): America/Los_Angeles
toTypeName(toDateTime(now())): DateTime('America/Los_Angeles')
berlin_timezone: Europe/Berlin
toTypeName(toDateTime(now(), berlin_timezone)): DateTime('America/Los_Angeles')
toTypeName(toDateTime(now(), 'Europe/Berlin')): DateTime('Europe/Berlin') -
привет, изучаю внедрение ClickHouse - что-то никак не найду чьих либо тестов по сравнению CH на SSD против HDD...
-
HDD достаточно, там, в основном, последовательное чтение.
-
наверно потому что эти тесты никому особо не интересны. Держать такую аналитику на ssd обычно сильно дороговато выходит
-
-
так либо в сервер ставим 10*10ТБ дисков либо один 100ТБ ssd скорость будет одинаковая
-
-
1 NMVE по тестам = 10HDD (RAID 0)
-
да о том и речь
-
-
-
я видел aws i инстансы с 1TB озу, двумя nvme и 128 (или 256 не помню) ядрами с КХ, некоторым надо (сам не пользовался)
-
-
я тут почитал про kdb+ и посмотрел на цены, такое железо + КХ будет дешевле в разы
-
-
это если все данные кх в память положить?
-
так там и есть все в памяти
-
Просто пытаюсь понять (сравнивая цены выделенных серверов с ssd и hdd) какой профит производительности в цифрах. Сервер с ssd стоит примерно в 2 раза дороже чем с hdd (не в разы). Разве он не будет как минимум в два раза быстрее...?
-
сервер с 1 SSD (NVME) читающим 1.6ГБ/c будет в 10 раз быстрее чем сервер с одним HDD (я проверял на 1TB NVME)
-
предлагаю учитывать, что производительность зависит далеко не только от иопсов
-
ну да - там и тип RAID повлияет и количество ядер процессора - понимаю.
-
-
Понял как правильно поставить вопрос)
Как в КХ оптимально хранить апдейты жирного списка ключей? Хочется с timestamp'ом знать какие добавились, какие пропали не сохраняя всю кучу значений. Каждый ключ уникален. -
Если ключ уникален, то храните в реплайседмерж. По крайней мере вы будете избавлены от заботы о дублях. Тем более список ключей это не всегда dic or other. Вполне достаточно движка MergeTree
-
История скорее что для каждого объекта состояние описывается набором уникальных значений. Раз в какое то время я их обновляю и хотелось бы писать в базу только разницу и таймстамп.
-
Тогда вам путь через MV
-
Опять же... озвучьте ТЗ, плиз
-
Никто здесь ваших процессов просто не знает и не сможет что-то советовать
-
CREATE TABLE IF NOT EXISTS attr_state
(
Id UInt64,
Attributes Array(UInt64),
Sign Array(Int8),
Ts DateTime
)
ENGINE = MergeTree
ORDER BY IdБыло так и в Sign хранил удалилось значение или добавилось. Минус что приходилось вне базы вычислять текущий финальный стейт. -
А сколько записей в таблице?
-
Структуру нужно хранить ручками, кстати
-
500M строк в таблице, в аттрибутах несколько миллионов может быть
-
Вам не стоит надеяться, что КХ будет реагировать на "каждый чих" относительно ваших array
-
Имеется в виду если я collapsing или replacing юзаю?
-
Добрый день, есть вопрос. Проблема такая, сделал кластер(для теста) в котором 3 zookeeper-a + 6 КХ (3 шарда по 2 реклики)... это все дело живет на локальной машине и запускаеться через docker-compose.
После запуска создаю таблицу CREATE TABLE IF NOT EXISTS default.ttt ON CLUSTER cluster_1 (id Int32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/ttt', '{replica}') PARTITION BY id ORDER BY id и CREATE TABLE IF NOT EXISTS default.ttt_all ON CLUSTER cluster_1 AS default.ttt ENGINE = Distributed(cluster_1, default, ttt, rand());
дальше закидываю какие-то данные в таблицу for ((idx=1;idx<=100;++idx)); do clickhouse-client --query "INSERT INTO default.ttt_all VALUES ($idx)"; done;
В принципе ничего нового и интересного тут нету. Когда останавливаю кластер docker-compose down и запускаю заново docker-compose up -d, то таблица default.ttt пропадает c первой реплики одного или двух (из трех) шардов... Причем до остановки кластера, таблица есть везде, и данные отдаються. Причем локально data/default/ttt существует на той реплике откуда пропада таблица -
rand() - дыс из жопа
-
Зря вы так
-
Рандомайз СТОИТ использовать, но очень аккуратно
-
-
-
Не вопрос... Только тестовать заведомо ... не стоит. Вот этот мужик @den_crane знает о вашем вопросе очень много.
-
Таблица на простом mergeTree чтобы не надеяться логику апдейтов. Вытаскиваю все записи, вне КХ считаю какие attributes на текущий момент присутствуют, считаю что надо записать в новый Sign, Attributes.
Смущает что когда апдейтов накопится много будет долго работать, ну и хочется средствами КХ это делать. -
Можно в лоб дампать весь список attributes и время, тогда последнее состояние мгновенно будет вытаскиваться, но тогда КХ ведь не пожмет ничего)
-
Я бы предложил вам дискретный цикл: загрузка, удаление.
-
В смысле загрузить все... в память, а потом сравнить с текущим по ключу и удалить лишнее.
-
Я так делаю и работает очень даже быстро...
-
Это если требуется только последнее состояние?
-
Мне нужно уметь вытащить историю, какие ключи добавлялись, какие удалялись, поэтому пришла в голову схема с Sign, Attribute, Timestamp
-
они в таких объемах больше про энергоэффективность, чем про производительность
https://nimbusdata.com/products/exadrive-platform/advantages/Advantages - Nimbus DataPlug-and-Play for Diverse Workloads Featuring the same 3.5” form factor and interface used by hard drives, the ExaDrive SSDs are plug-and-play compatible with hundreds of storage and server platforms. ExaDrive’s low power (as low as 0.1 watts/TB) and portability also make it well-suited for edge and IoT applications. Advantages World’s highest capacity SSD World’s most […]
-
А разве времени обновления у ключей нет?
-
Тогда конечно мержтри, но с датой обновления в контексте сервера
-
Мне кажется, что так будет удобней, конечно, если я правильно понял вашу задачу.
-
О, мне кажется начинаю понимать идею. Текущий стейт храним в Collapsing и обновляем, чтобы вытаскивать без аггрегации всех записанных difference, а какие ключи удалились - добавились пишем в отдельный mergeTree. Оно?)
-
Если на пальцах то задача такая:
есть состояние [23, 45, 222, 48]
через час мы получили новое [23, 9, 6, 222]
чтобы не есть память апдейт я храню как
[9, 6, 45, 48]
[1, 1, -1, -1],
где знак показывает значение добавилось или удалилось. Лью это в mergeTree. -
-
Joined.
- 04 July 2019 (191 messages)
-
Коллеги! А кликхаус можно считать аналитическим кубом? Или, например, говорить, что в нём есть часть функционала из аналитического куба?
-
Да, вполне можно считать
-
-
привет, подскажите, как бы оптимизировать следующий запрос:
есть табличка (пару ТБ) с логами, сортирована по timestamp + пару колонок дедубликации. Хочу сделать быструю выборку топ Н самых свежих строк. Работает прям долго и таймаутится :( -
к сожалению я уже не помню что тогда было не так(
-
Мат вьюху с движком replacing ?
-
а это не раздвоит мои данные?
-
Вообще кубом обычно называют либо базу, поддерживающую mdx, либо вообще базу с многомерным хранением. В кх нет ни того, ни того. Тогда почему кубом?
-
в каком плане?
-
ну матвью сделает же копию моих данных в удобном для себя формате
-
-
-
-
Да, только не таблицу, а матвью с таким движком
-
а как вы делаете что бы свежие данные в ней были? дату как версию или что?
-
у меня ща так то и основная табличка ReplicatedReplacingMergeTree
-
-
Всем привет! Вопрос наверняка избитый, но может есть какой-то чит из коробки.
Есть таблица ивентов, где на один request_id всего 5-10 ивентов (но зато много уникальных этих request_id).
При построении репорта нужно делать SELECT ... GROUP BY request_id, который валится по оперативе.
Хочется получить MV в котором просто делать запросы без GROUP BY. Могут ли помочь SummingMergeTree, AggregatingMergeTree в данном случае? Вариант где данные за последние пару часов еще не проагрегировались, но для более старых уже
точно схлопнулись, был бы ок (аналог OPTIMIZE в ReplacingMergeTree).
Сейчас мы по сути так и делаем сами: отдельно раз в пару часов GROUP BY по свежим ключам и объединям такие результаты в MV с агрегированными уже раньше. -
Возникло подозрение, что сессии остаются у кх, если рвётся подключение клиента. Основная версия зависания кх у нас то, что мы создали нагрузку, при которой ответы от кх сталм приходить с задержкой, которую не ожидали клиенты и рвали сессии. В результате осталась куча ожидающих закрытия сессий снаружи кх и незавершенные сессии внутри него. На некоторых серверах запросы запускались и зависали (с ошибкой cannot schedule task) , а на некоторых возвращали ошибку о превышении количества сессий. Но это все предположения, когда есть падение - есть ошибка, а когда зависание без ошибок - предположения.
-
Все правильно - копай матвью, движок summing merge tree, а если при группировке вам нужно количество уникальных, то и агрегатные ф-ии.
-
Но вроде эти движки не гарантируют, что все строки проагрегируются в одну, поэтому без GROUP BY на старых данных SELECT выдаст может не выдать корректный результат, разве нет? А с GROUP BY всё равно свалится по оперативе
-
всем привет. такой вопрос - сейчас у нас используется ReplacingMergeTree для того, чтобы обновлять одно UInt8 значение с 0 на 1. Сейчас в этом не устраивает скорость селекта с FINAL, поэтому думаю над другим вариантом.
Использовать обычный мержтри и мутации ALTER TABLE UPDATE - нормальная практика? Не вижу никаких минусов, но как-то не уверен. Менять нужно одно поле и одно за раз, не пачками -
Да догруппировать надо. Но если вам нужна группировка по календарным интервалам (сутки с 00, неделя с пнд, месяц с 1го числа), то там будет очень мало записей - не свалится. Дополнительно можете приводить в меньший тип ваших агрегатов, чем uint64, т.к. все агрегаты в нем собираются.
-
а подскажите, насколько адекватно для партиций использовать час, если я собераюсь хранить максимум 2-5 дней информации?
-
Вполне можно
-
Коллеги! А кто-то занимался аналитическими системами? Там вообще есть понятие при ETL для зон с "грязной" информаций и "чистой"? Я имею в виду не столько разделение raw данных и структурированных, сколько модерацию полученной информации.
-
Тут админ этого чата как-то говорил, что кх не любит много партиции. Сутки норм. 5 тестируйте, возможно нет.
-
а размер партиции какой любит?
-
у меня суточная партиция 5-7тб
-
а часовая уже не такая и страшная
-
-
ну думаю да, но вот как то читать плохо получается
-
Ключи сортировки?
-
да, индексы помогают, осталось только побороть вот такой запрос
SELECT
toDateTime(intDiv(-timestamp, 1000000000)) AS ts,
level
FROM logs
ORDER BY timestamp ASC
LIMIT 10
┌──────────────────ts─┬─level─┐
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
│ 2019-07-04 14:39:06 │ INFO │
└─────────────────────┴───────┘
10 rows in set. Elapsed: 247.588 sec. Processed 5.06 billion rows, 111.83 GB (20.44 million rows/s., 451.69 MB/s.) -
я вот чет думал что раз табличка сразу сортирована по timestamp то будет быстро и красиво
-
Таймстемп у тебя доли секунд хранит?
-
+
-
unixnano инвертированный
-
-
-
-
-
сейчас вот так
ORDER BY (timestamp, _partition, _offset, _idx)
PARTITION BY toYYYYMMDD(toDate(intDiv(-timestamp, 1000000000))) -
Коллеги, подскажите, как Вы настраиваете clion чтобы в нём разрабатывать?
Может как-то cmake настраиваете для проекта?
При попытке импорта проекта получаю в консоли cmake :
/usr/local/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=/usr/bin/gcc-7 -G "CodeBlocks - Unix Makefiles" /home/akonyaev/git/ClickHouse/dbms/src
CMake Error at Common/StringUtils/CMakeLists.txt:4 (include):
include could not find load file:
/cmake/dbms_glob_sources.cmake -
-
а разве эт плохо? я вот вижу что у меня диск почти в потолок, но эт я просто пишу от души
-
Не плохо и не хорошо. Делать вычисления на миллиарде записей постоянно и при вставке и при чтении - я бы так не делал. Но решай сам, тут имхо.
-
хм, резонно, сейчас попробую. спасибо
-
хотя по идеи это цпу грузит, а цпу у меня с запасом
-
но попробовать стоит.
-
Может кто-то из разработчиков экспортировать свои настройки clion?
-
-
-
хм, 1. Size (778.76 GB) is greater than max_[table/partition]_size_to_drop (53.69 GB)
а как бы это дропнуть табличку то -
Joined.
-
Truncate?
-
в конфиге поправить можно
-
та же беда :(
-
-
🙏
-
Подскажите, пожалуйста, при восстановлении падавшего сервера, есть ли возможность поступающие сейчас данные реплицировать сразу, а у того, что в истории сделать меньший приоритет?
-
-
Народ, всем привет.
Подскажите, если кто знает.
Выгружаю из LOGS API данные, сначала по всем визитам за неделю, потом по всем хитам за неделю.
Потом создаю таблицу с идентификатором визита и единичный идентификатором хита.
Потом провожу сравнение хитов из новосозданной таблицы и с хитами из логов.
Я правильно понимаю, что в ymswatchids записываются не все хиты?
Если да, то почему? -
Joined.
-
Камрады приветствую.
пробую скопировать с одного КХ на другой. Таргет это 3 инстанса.
<tables>
<table_crm_fin_account>
<cluster_pull>source_cluster</cluster_pull>
<database_pull>analytics</database_pull>
<table_pull>crm_fin_account</table_pull>
<cluster_push>default_cluster</cluster_push>
<database_push>analytics</database_push>
<table_push>crm_fin_account</table_push>
<engine>ENGINE = MergeTree PARTITION BY date ORDER BY date</engine>
<sharding_key>rand()</sharding_key>
</table_crm_fin_account>
</tables>
Всё запускается, по логам видно, что на исходном сервере больше 2к партиций. Но потом валит ошибку при попытке дропнуть партицию с датой на таргет сервере.
2019.07.04 10:47:34.605004 [ 1 ] {} <Debug> ClusterCopier: Execute distributed DROP PARTITION: ALTER TABLE analytics.crm_fin_account DROP PARTITION '2019-07-04'
2019.07.04 10:47:34.611961 [ 4 ] {} <Information> ClusterCopier: Code: 60, e.displayText() = DB::Exception: Received from kube-clickhouse-stage-2:9000, 10.50.63.185. DB::Exception: Table analytics.crm_fin_account doesn't exist.. (version
19.8.3.8 (official build))
2019.07.04 10:47:34.617127 [ 5 ] {} <Information> ClusterCopier: Code: 60, e.displayText() = DB::Exception: Received from kube-clickhouse-stage-0:9000, 10.50.29.164. DB::Exception: Table analytics.crm_fin_account doesn't exist.. (version
19.8.3.8 (official build))
2019.07.04 10:47:34.619641 [ 6 ] {} <Information> ClusterCopier: Code: 60, e.displayText() = DB::Exception: Received from kube-clickhouse-stage-1:9000, 10.50.59.119. DB::Exception: Table analytics.crm_fin_account doesn't exist.. (version
19.8.3.8 (official build))
2019.07.04 10:47:34.619824 [ 1 ] {} <Information> ClusterCopier: DROP PARTITION wasn't successfully executed on 3 shards
И так короче по кругу.
Что ему нужно? На новом и нет этих партиций, там только база создана. -
насколько я понял то копир сам должен создавать таблички в новой базе. Нет?
-
В идеале, должна быть оптимизация, если в запросе order by по order key. Просто пока не реализована (
-
-
-
Ttl?
-
было такое, когда начал копировать и прервал, а потом опять пробовал запустить. Надо все почистить и заново начинать
-
-
Ок, попробую
-
-
Подскажите пожалуйста, коллеги: есть ли какое то ограничение на количество партиций в одной таблице?
могу я например сделать 100тыс партиций в одной таблице? -
сделать можете, но далеко не факт, что ФС не поплохеет и КХ вместе с ней же.
Ну и традиционное - парты и партиции это разное -
Да, про парты в курсе. Ограничение 300 на партицию. Можно выставить в конфиге.
-
Что подразумевается под словом "почистить"?
База есть, но пустая, в ней никаких таблиц нет. -
тогда это какой-то другой случай, у меня в одном из шардов была таблица, в остальных не было
-
Еще вы пытаетесь писать в ту же таблицу от куда читаете
-
получаю данные из SummingMergeTree с ключевым словом FINAL:
SELECT SUM(clicks) as clicks, date as short_date FROM table FINAL WHERE date >= '2019-07-03' AND date <= '2019-07-03' GROUP BY short_date
это занимает 1-1.5 секунды.
убираю FINAL, запрос проходит за менее чем 0.1 секунд. Данные получаю уже оптимизированные, то есть так же одна строчка. Понимаю, что могу получить несколько, если оптимизация не прошла, или данные в нескольких партициях
НО
мне ничто же не помешает их самому суммировать. Почему с FINAL тогда запрос в 10-15 раз медленнее? И могу ли спокойно делать запрос без FINAL и самому суммировать? -
Да, в моём сообщении конфиг пуша и пулла показан.
-
-
-
так на таргете вообще пусто. Он бы так и писал - я думаю - что неззя в таблицу с тем же именем.
-
-
я хочу залить с имеющегося инстанса в пустой шардированный кластер.
Я так понимаю копир должен сам создавать таблички в таргете -
-
-
в вопросе ENGINE есть, я хз
-
могу прислать свой xm на копирование - может найдете что-то
-
давай, поэкспериментирую
-
Кх будет стартовать 4.5 часа и мутации не будут работать на replicated таблицах.
-
Для фс это семечки если inod-в хватит.
-
Конечно надо досуммировать самому. Final до тысячи раз замедляет запросы.
-
то есть досуммирование самому не имеет подводных камней и позволительно, ок спасибо
-
Про старт понятно, при старте КХ чекает все парты по всех партицях. А почему мутации не будут работать?
Планировал ALTER DROP PARTITION, для реплициуемой таблицы с 100тыс партами после манипуляций. Будет отваливатся в связи с большим обменом с ZK ? -
Это вообще изначальная идея для всех агрегирующих движков. Final имеет смысл для отладки и микроскопических таблиц с replacing движком
-
Там в транзакции к зк будут перечислены все парты таблицы. На 30000 партов зк отбивает транзакцию по размеру - имена партов длинные, получается несколько мегабайт пакет.
-
спасибо большое, не знал) начали подозревать это только когда скорость на проде замерили
-
Благодарю, т.е. получается на реплицируемую таблицу предел где то 30000 партов - 100 партиций по 300 партов максимум, так?
-
300 партов-то у вас не будет. В старых партициях обычно 1-4 парта.
-
300 партов это просто предохранитель что мержи не успевают за инсертами.
-
И его можно поменять на любое число. По дефолту 300. На 150 инсерты замедляются на 1 сек.
-
Добрый день всем!
пытаюсь поработать с MySql engine.
создал табличку
делаю запрос
select * from mysql_table
limit 100;
запрос выполняется дольше 1 минуты. при этом такой же запрос напрямую занимает меньше секунды
при этом в логах вижу -
-
запрос в datadrip делаю
-
-
куда копать?
-
похоже на то что limit на стороне кх только работает
-
-
понял, спасибо большое!
-
select * from ecinity.sys_contact
where id > 658574738;
да, выполняется быстро.. -
подскажите еще пожалуйста, к какому типу привести следующую калонку из мускула?
opt_out bit default b'0' null,
пробую opt_out Nullable(Int8) default toInt8(0)
получаю ошибку mysqlxx::CannotParseValue: Cannot parse signed integer: -
-
Добрый день! в КХ есть поддержка полнотекстового поиска? без морфологии, просто быстрый поиск по части содержимого текстового поля
-
очень не хочется еще эластик для этого подымать
-
-
ага
-
-
ну я имел в виду, оптимизирован ли LIKE, работает ли он по индексам?
-
как например в постгре есть спец индексы для этого
-
-
-
понял, спасибо!
-
Ну, если речь про fulltext индексы, то вроде как это полноценные инвертированные поисковые индексы
-
При использовании управляемой базы данных ClickHouse в Облаке вы можете обновить версию СУБД, которую использует кластер. Теперь можно воспользоваться новыми функциональностями ClickHouse, не пересоздавая кластер БД и не перенося данные.
Список доступных для обновления версий можно посмотреть на экране создания или изменения кластера в консоли управления. Обратите внимание, что понизить версию СУБД не получится.
Подробности здесь.
#yacloud_newsДокументация Yandex.Cloud | Yandex Managed Service for ClickHouse | Изменение версии ClickHouseВы можете изменить версию ClickHouse, которую использует кластер, на любую из поддерживаемых Managed Service for ClickHouse версий.
-
-
Всем привет, никто не знает костыль как сделать уникальный ключ в таблице?
-
кроме варианта хранить эти данные в другом хранилище
-
Ююид?
-
ReplacingMergeTree + FINAL на запросах
-
-
Модификатор FINAL может быть использован только при SELECT-е из таблицы типа CollapsingMergeTree
-
Из доки
-
-
Думал над таким вариантом
-
Но мне кажется что это дичь
-
Походу пг придется таки юзат ь
-
а по ходу уже разбиратся что можно в кх запихнуть
-
добрый день
подскажите, если у меня есть materialized view, которое читает с null табличке, имеет Engine ReplicatedSummingMergeTree и создано как
create table t_null (clientIPv6 FixedString(16), clientIPv4 UInt32, date Date, datetime DateTime) Engine=Null;
CREATE MATERIALIZED VIEW r0.t_minute
(
uniquesIPv4 AggregateFunction(uniq, UInt32),
uniquesIPv6 AggregateFunction(uniq, FixedString(16)),
date Date,
timeslot DateTime
)
ENGINE = ReplicatedSummingMergeTree('/clickhouse/cluster/tables/{shard0}/t_minute', '{replica}', date, date, 32) AS
SELECT
date,
toStartOfMinute(datetime) AS timeslot,
uniqState(clientIPv4) AS uniquesIPv4,
uniqState(clientIPv6) AS uniquesIPv6
FROM t_null
GROUP BY
date,
timeslot
Если мне надо поменять select для view, и я не могу ходить по каждому metadata_path, правильно ли мне сделать
drop table r0.t_minute
CREATE MATERIALIZED VIEW r0.t_minute
...
Или есть другой способ переписать SELECT?
DETACH + ATTACH с изменённым select например -
-
в этом тесте явно проверяется https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00331_final_and_prewhere.sqlyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Может что-то поменялось значит)
-
На самом деле все современные судб делают примерно так, просто внутри. Честный delete никто не пишет - вместо него пишется запись на удаление, которая мержится в фоне.
-
Ну пг по факту данные не удаляет
-
она апдейдит их, помечая удаленными
-
И только при вакууме они удаляются уже
-
по поводу своего вопроса с update materialized view:
насколько я вижу с тестов, на кластере из трёх нод в случае
drop table r0.t_minute
и пересоздании этой вью, я получаю свои предыдущие данные назад
но может я что-то упускаю, и по факту будет дроп underlying inner таблицы тоже? -
-
но мне нужно что бы в таблице данные были уникальными
-
как уникальный составной индекс в пг
-
Кто пользуется копиром? Почему он не может создать таблицы на таргете сам? куда смотреть?
-
replacing (с order by по составному ключу) + final на селектах вам это должны обеспечить
-
Ну по факту в таблице будет какое-то время 2 записи
-
+ возможно только последовательное чтение
-
А это - скорость
-
и теряется весь смысл
-
-
Да, пока не сделается вакуум
-
но в выборке эти записи участвовать не будут
-
в случае с пг
-
-
Optimize больше на EXPLAIN ANALYZE похож
-
В общем кх к сожалению не подходит для этой задачи(
-
Спасибо за помощь)
-
Спорное утверждение. Вернетесь, когда PG перестанет хватать :)
-
Да, я так и написал)
-
Тогда буду что то думать
-
Что можно вынести
-
При дропе данные пропадут. Можно сделать detach и attach с другим селектом
-
-
-
## добавляем поле NEWCOL
detach table kostya_test.view_table;
alter table kostya_test..inner.view_table add column NEWCOL String;
ATTACH MATERIALIZED VIEW kostya_test.view_table( date Date, customer_id UInt32, val AggregateFunction (sum, UInt32), NEWCOL String) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/kostya_test.view_table', '{replica}', date, (date, prom_customer_id, val), 8192)AS SELECT date, customer_id, sumState(val) AS val,NEWCOL FROM test_db.log_41949_pageviews_product GROUP BY date, customer_id; -
-
-
К сожалению, ClickHouse не умеет (пока что?) оптимизировать SELECT ... ORDER BY pk LIMIT ... Поэтому, если ваш timestamp является одним из первых столбцов в первичном ключе и партиционирование по дате, то можно сделать запрос примерно такого вида: SELECT ... FROM table WHERE date >= yesterday () AND ts >= now() - 300 ORDER BY ts DESC LIMIT N. Соответственно, если за последние 300 секунд у вас достаточно данных для лимита N, то здорово, иначе нужно запрос повторить с другим фильтром по timestamp. К сожалению, лучшего варианта (без создания доп таблиц) я не знаю.
-
-
Подскажите пожалуйста, почему на сложные долгие запросы не срабатывает KILL QUERY, там где он как раз нужен?
-
-
-
я думаю это возможно связано с тем, что thread вашего запроса залочен
я бы попробовал сделать
curl -s "https://clickhouse-dsn/?query=select+1&query_id=_query_id_here_"
если replace_running_query=1, то это заменит ваш долгоиграющий запрос на select 1
https://clickhouse.yandex/docs/en/operations/settings/settings/#replace-running-querySettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
спасибо! буду пробовать
-
Всем ночи доброй.
Подскажите по движку URL
В доке сказано, что Запросы ... SELECT транслируются в ... GET запросы...
как-то параметры этого запроса можно задать?
через http выгружаем справочник на примерно 10к записей, не хочется их на каждый запрос по сети гонять -
-
Что такое сумма ивента?
-
колличество ивентов, раньше как считали: event_date, countIf(event='click') as clicks, countIf(event='view') as views, уникальным ид, так как некоторые бразуеры дважды отправляли ивенты
-
Optimization of ORDER BY with respect to the ORDER key in MergeTree tables. by anrodigina · Pull Request #5042 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en For changelog. Remove if this is non-significant change. Category (leave one): Improvement Short descript...
-
Либо ReplacingMergeTree юзать для схлопывания по ID либо группировать по нему
-
а после группировки как посчитать? replacing не подходит, так как нужно хранить их в базе, для аналитики понимание сколько таких случаев есть
-
Сложно ответить не видя структуры
- 05 July 2019 (154 messages)
-
Кстати, какая ишью на реализацию этой оптимизации?
-
Slow order by primary key with small limit on big data · Issue #1344 · yandex/ClickHouse
Hello. I have such table: CREATE TABLE logs.logs ( timestamp DateTime, nsec UInt32, `string_fields.names` Array(String), `string_fields.values` Array(String), `number_fields.names` Array(String), `...
-
-
-
-
Там уже почти готовый пр есть ❤️
-
-
-
-
-
Добрый день всем,
подскажите кто знает, к какому типу привести следующую калонку из мускула?
opt_out bit default b'0' null,
пробую opt_out Nullable(Int8) default toInt8(0)
получаю ошибку mysqlxx::CannotParseValue: Cannot parse signed integer: -
Гайз, а это же старый баг как я понимаю? Есть какой-то обходной путь что бы работали алиасы из вложенных запросов для MV при инсерте?
CREATE TABLE IF NOT EXISTS test_table (
A String,
B Int64
) ENGINE MergeTree()
ORDER BY (A, B )
PARTITION BY tuple();
INSERT INTO test_table (A, B ) VALUES ('A', 1), ('B', 2), ('B', 3);
-- тут ок, табличка создается сумма считается
CREATE MATERIALIZED VIEW IF NOT EXISTS test_view
ENGINE = MergeTree()
ORDER BY (A, BB )
PARTITION BY tuple()
POPULATE AS
SELECT A, BB FROM (
SELECT
A,
sum(B ) as BB
FROM
test_table
GROUP BY A
);
SELECT * FROM test_view;
-- При вставке возникает ошибка DB::Exception: Missing columns: 'BB' while processing query:
INSERT INTO test_table (A, B ) VALUES ('C', 4), ('D', 5), ('D', 6); -
https://github.com/Altinity/clickhouse-mysql-data-reader/blob/master/README.md тут пробуют String. в целом работает. но не так как хотелось..Altinity/clickhouse-mysql-data-reader
utility to read mysql data. Contribute to Altinity/clickhouse-mysql-data-reader development by creating an account on GitHub.
-
привет!
есть такой запрос:
SELECT resource_id, owner
FROM db.table1
WHERE resource_id in (
SELECT resource_id from db.table2
WHERE date > today() - 14
)
хочется вместо него написать JOIN, но такой же быстрый — подскажите, как? моя попытка провалилась (думал, что соптимизируется):
SELECT resource_id, owner
FROM
(
SELECT resource_id, owner
FROM db.table1
) ALL JOIN
(
SELECT resource_id from db.table2
WHERE date > today() - 14
) USING resource_id -
-
-
-
Ничего более подходящего не можете вспомнить?)
-
Думаю, что использовать - клик очень подходит. Но не знаю как персистить данные, в клик лучше пачками сохранять, если каждое сообщение персистить отдельно, не знаю как он себя поведет. Плюс еще есть движок из кафки, не смотрел и не изучал как работает
-
IN - это ОК, КХ работает сильно иначе с JOIN чем другие, оно для фильтрации не подойдет
-
Вк
-
Никак он не подходит, берите https://scylladb.com и смотрите как не напопроться на large partition и всеScyllaDB | The Real-Time Big Data Database
Scylla scales-up performance of 1,000,000s of OPS per node, and scales-out to hundreds of nodes and 99% latency of <1 msec.
-
Спасибо изучу.
-
Ну и, понятное дело, что "основная БД для месенджера" подразумевается хранение сообщений, для хранения изеров и прочего вам нужна обычная реляционка типа MySQL или PostgreSQL. Если нужно сделать пруф оф концепт - и сообщения туда же положите, все будет работать хорошо до определенного момента (когда станет очень много сообщений), а он, между прочим, и вообще может не наступить
-
оу. хорошо (смутило, что простой IN, без GLOBAL, выключен по умолчанию)
-
Ну - у нас не совсем мессенджер - нагрузки там будет оооочень мало. Можно сказать чат для сайта. Насчет других баз - там микросервисная архитектура, и чат просто один из сервисов - которому нужна база для хранения истории переписки. За юзеров отвечают другие сервисы и их БД
-
-
Ребят, подскажите в чем может быть причина такого сообщения в логах clickhouse?
2019.07.05 07:51:09.876895 [ 32 ] {} <Error> void DB::StorageKafka::streamThread(): Code: 48, e.displayText() = DB::Exception: Method write is not supported by storage Kafka, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x6834a66]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x317311f]
2. clickhouse-server(DB::IStorage::write(std::shared_ptr<DB::IAST> const&, DB::Context const&)+0x4c) [0x5cd537c]
3. clickhouse-server(DB::StorageMaterializedView::write(std::shared_ptr<DB::IAST> const&, DB::Context const&)+0x86) [0x64b8e06]
4. clickhouse-server(DB::PushingToViewsBlockOutputStream::PushingToViewsBlockOutputStream(std::string const&, std::string const&, std::shared_ptr<DB::IStorage> const&, DB::Context const&, std::shared_ptr<DB::IAST> const&, bool)+0x321) [0
x633da51]
5. clickhouse-server(DB::PushingToViewsBlockOutputStream::PushingToViewsBlockOutputStream(std::string const&, std::string const&, std::shared_ptr<DB::IStorage> const&, DB::Context const&, std::shared_ptr<DB::IAST> const&, bool)+0xa17) [0
x633e147]
6. clickhouse-server(DB::InterpreterInsertQuery::execute()+0x1cb) [0x5e9ce0b]
7. clickhouse-server(DB::StorageKafka::streamToViews()+0x592) [0x680eba2]
8. clickhouse-server(DB::StorageKafka::streamThread()+0x8b) [0x680effb]
9. clickhouse-server(DB::BackgroundSchedulePoolTaskInfo::execute()+0xe1) [0x5d3f7d1]
10. clickhouse-server(DB::BackgroundSchedulePool::threadFunction()+0x62) [0x5d3fea2]
11. clickhouse-server() [0x5d3ff04]
12. clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x187) [0x683a7b7]
13. clickhouse-server() [0x73c681f]
14. /lib64/libpthread.so.0(+0x7e25) [0x7f7480d26e25]
15. /lib64/libc.so.6(clone+0x6d) [0x7f7480029bad]
(version 19.7.3.1) -
Микробардак, да он самый. Есть вариант просто все пока персистить в реляционку, на первом этапе. Но всегда есть мысли про будущее, в далеком будущем когда реляционка станет тормозить на нашем объеме данных
-
Наверное потому, что: "Method write is not supported by storage Kafka"
-
Таблицу и view создаю:
create table kaffkka
(
id UInt64,
customer_id UInt64,
location String,
type String,
created String
) ENGINE = Kafka SETTINGS kafka_broker_list = 'xxx.xxx.xxx.xxx:9092',
kafka_topic_list = 'db4.xxxxx.locations',
kafka_group_name = 'kaffkka',
kafka_format = 'JSONEachRow',
kafka_num_consumers = 1;
CREATE MATERIALIZED VIEW view_kafka to kaffkka
AS SELECT id
FROM kaffkka; -
был тут уже один с такой идеей, емнип, не удалось его переубедить, что КХ это не про длинные строки
-
Вы из таблицы kaffkka с движком кафка хотите писать в таблицу kaffkka, надо сделать проверку при создании матвью
-
Как доростете до объемов - переделаете
-
Во это интересно. Я просто расписываю пока для себя минусы. Из моих минусов:
1) Не ясно как вставлять данные(если вставлять их не пачками, могут быть отставания от того что видит юзер и его реальной историей)
2)нет апдейтов конкретных записей, если потребуется функциональность апдейта сообщений то придется это делать через новую запись с версией -
тут лучше зайти с другой стороны.
Ваша переписка будет юзер - юзер.
99% выборок - это получение последних сообщений по паре юзер - юзер.
Зачем вам КХ - непонятно.
Можно хоть в .txt сохранять, хоть в монгу, прости хоспаде -
Будут выборки по датам. С такой-то по такую-то. И зная монгу, когда коллекции вырастут до 25 млн записей - все будет очень плохо.
-
нужно выбирать сообщения по всем юзерам за диапазон?
-
Берете любую реляционку, строите индекс по дате и все дела
-
По всем, думаю нет.
-
в купе с индексом по юзеру будет летать ведь. тут точно не нужен КХ
-
Пока звучит примерно так - у вас нет сейчас проблемы, но вы хотите взять КХ и получить несколько проблем
-
Либо сделать просто, но иметь потенциальные проблемы. Хотя в случае с КХ от потенциальных проблем - никто тоже не застрахован
-
Просто это в монге, КХ это 100% не просто
-
ну как сказать - был у меня опыт. Решил стартовать с монги, в проекте было очень много аггрегационных запросов. Примерно неделю потратил на изучение агрегационного фреймворка монги и его трансляцию на dsl джавовый. В итоге когда реализовал - залил данные, все стало жутко медленно работать, за выходные переписал на кликхаус - и все стало летать
-
Повторю общее мнение - КХ это не про онлайн хранилище. Это аналитика.
Можно его использовать как внешний доп-индекс для основной БД если есть необходимость делать по ней аналитику.
Но не как основную БД для такого рода задач. -
Спасибо. Да - я это понял.
-
-
Привет, интересует такой вопрос. Когда создавал таблицы установил primary key, сейчас хочу расширить его еще по нескольким полям с таблицы, но без потери данных в таблице. Такое возможно?
-
Я делал так: создавал новую таблицу с расширенным ключом потом делал INSERT INTO new_table SELECT * FROM old_table
-
Я нашел issue на гитхабе
https://github.com/yandex/ClickHouse/issues/3450
https://github.com/yandex/ClickHouse/issues/448 и много других, даже кто-то пытался пофиксить. https://github.com/yandex/ClickHouse/pull/3796
Дело так и не пошло да? Очень полезная фича. Есть какие-то технические проблемы с реализацией?Issue with query Alias in Materialized View · Issue #3450 · yandex/ClickHouseHello I'm currently using CH 18.14.8 and i'm facing an issue when building materialized views. I'm trying to build and feed automatically a site aggregated table from an inp...
-
-
Mv не умеют вложенные запросы.
-
Да, но при populate такой MV снчала все хорошо, ошибка только при инсерте. А чем отличается POPULATE от инсерта?
-
Тем что это две разные по свой природе вещи.
При populate делается обычный запрос к таблице. При инсерт таблица не читается и делается необычный селект -
Joined.
-
Exception: Syntax error (Multi-statements are not allowed
как это в curl исправить? -
несколько запросов в одном реквесте нужно сделать, кто-то делал такое?
-
в теории можем же представить бакет с данными в виде таблицы и применить к ней запрос из MV?
-
можем.
Я просто вам сообщаю что вложенные запросы никогда не работали в MV.
Наверняка есть feature request об этом созданный два года назад. -
Почему не может? У нас работают.
-
мне тоже надо было, не получается
-
-
Joined.
-
Отсылаю запрос к кх через odbc, по тексту ошибки вижу, что драйвер исковеркал запрос (добавил букву в конец запроса, например). Ещё получаю ошибку "exec direct called, but statement query is not equal to prepared". Менял строку подключения и версии драйверов - не помогает. Никто не сталкивался?
-
А кх насколько старый? Вроде год назад новый драйвер стал несовместимым.
-
Иногда ещё бывает, что отсылается предыдущий запрос, а не текущий
-
Кх 19.8.3.8
-
Пробовал последние три версии драйвера
-
Может работа драйвера зависить от настроек сервера?
-
-
-
а подскажите, можно как то попарсить в кх вот такого вида duration (9.954087992s)
-
Ребят, подскажите, можно ли выполнить в консоле запрос за один раз, в котором создается N таблиц. Возможно можно как-то разделить запросы ";".
Нужно что-то типа такого:
create table 1; create table 2; create table 3; - за один запрос создано 3 таблицы... -
отрезать s и кастануть во флоат?
-
Пример раз - делаем "переменные" перед запросом
WITH '2019-07-01 13:24:00' AS specific_ts
SELECT count()
FROM table_name
WHERE (dt >= toDate(specific_ts)) AND (ts >= specific_ts) -
Regex extract / replace
-
на точку с запятой консоль ругается...
-
clickhouse-client -m -n
-
В консоли или в скрипте? В одной строке нельзя. Перевод строки нужен. После ; все откидывается до перевода строки.
-
в скрипте
-
если -n то не нужен
-
спасибо, попробую @blind_oracle
-
:) select 1; select 2;
SELECT 1
┌─1─┐
│ 1 │
└───┘
1 rows in set. Elapsed: 0.002 sec.
SELECT 2
┌─2─┐
│ 2 │
└───┘
1 rows in set. Elapsed: 0.001 sec. -
Пример два - убираем из результата запроса поле, которое не хотим показывать:
WITH sum(bytes) AS sum_bytes
SELECT
formatReadableSize(sum_bytes) AS human_bytes,
table
FROM system.parts
WHERE active
GROUP BY table
ORDER BY sum_bytes DESC
LIMIT 1 -
Нет. Скорее всего это у вас в коде. Откуда odbc используется?
-
Вариант 3 - взять скалярный результат из подзапроса:
WITH
(
SELECT sum(number)
FROM numbers(5)
) AS sum
SELECT sum * 2
┌─multiply(sum, 2)─┐
│ 20 │
└──────────────────┘ -
спасибо, примеры понятны
-
-
насколько я знаю нет. там указывется одна партиция.
-
но я смотрю на вложенные запросы это не распостраняется
-
-
Варианты - через линкед сервер в ms sql, второй - кодом на питоне через pyodbc или pyoyodbc. Всеми способами в кх улетает некорректная строка
-
Через tabix или dbeaver (jdbc) всё ок
-
Начинаю подумывать о мосте odbc-jdbc
-
Да, внутри вложенного запроса надо писать свой with ....
-
-
-
Вложенные запросы работают, не работают только алиасы полей вроде как. У вас без алиасов да?
-
Кстати да, вот такой вариант работает:
CREATE TABLE IF NOT EXISTS test_table (
A String,
B Int64
) ENGINE MergeTree()
ORDER BY (A, B )
PARTITION BY tuple();
INSERT INTO test_table (A, B ) VALUES ('A', 1), ('B', 2), ('C', 3);
CREATE MATERIALIZED VIEW IF NOT EXISTS test_view
ENGINE = MergeTree()
ORDER BY (A)
PARTITION BY tuple()
POPULATE AS
SELECT A, B FROM (
SELECT A, B FROM test_table
);
SELECT * FROM test_view;
INSERT INTO test_table (A, B ) VALUES ('C', 4), ('D', 5), ('E', 6);
но как только поменяем populate на
SELECT A, b FROM (
SELECT A, B as b FROM test_table
);
то перестает инсерт работать -
-
-
-
-
-
-
-
Спасибо помогло...
-
Кх сам их удаляет
-
Joined.
-
-
Без алиасов, они нужны? У меня и джойны и ины... Один раз через мВ большой объем данных обогатили полями.
-
Нет
-
-
Значит что-то глюкануло. Если их нет в system.parts то я думаю можно просто снести с диска и все
-
Ну например сумму считать во вложенном запросе, без алиаса не знаю как в MV ее пропихнуть
-
-
yandex/ClickHouse tagged: v19.9.3.31-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.9.3.31-stable
Release notes:
v19.9.3.31-stableClickHouse/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
И с алиасами и с агрегатными функциями. С движками summing merge tree и replacing merge tree.
-
Всем привет.
Подскажи. плиз, по функции dictGetUInt64
Если в табличке есть 2 записи у которых attr_name=value, как я понимаю, она берет последнюю. Насколько это доведение детерминировано, и можно ли им управлять?
Словарь - категория элемента, в системе может быть несколько категорий, нам нужно брать первую. У таблицы есть PK(id), в зависимости от которого мы решаем какая первая. -
На самом деле не последняя а как повезет, просто перезатирает последняя но она может любой запросы многопоточные. Я бы сделал source словаря http и написал в урле запрос с argmin.
-
Уважаемые гуру SQL, вопрос хоть и не совсем по clickhouse (хотя мне нужно выполнить задачу именно в нем), но очень прошу помочь. Поиски по интернету увы не дали ответа... Сам вопрос тут: https://toster.ru/q/645930 , спасибоКак построить запрос в sql?
Ответили на вопрос 3 человека. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.
-
SELECT argMax(id, price), argMax(group, price), max(price ) ?
-
any можешь добавить ещё если неважен ид
-
any? будьте добры пример
-
Я с телефона. После того как max возьмёте ещё раз сгруппируйте и any это группировка
-
-
сейчас попробую
-
Просит обязательно закидывать id и price в GROUP BY
-
-
Пардон, имя столбца не правильно написал. Работает, спасибо! но вроде как argMax достаточно тяжелая функция
-
в каком смысле тяжелая?
-
ресурсоемкая функция, ошибаюсь?
-
а запрос долго выполнялся?
-
все остальные варианты, order by limit by / in (select max) еще хуже
-
можно написать
SELECT argMax((id,group,price), price) FROM table GROUP BY group
но это примерно тоже самое -
пока что шустро, но там всего 300 строчек пока еще) таблица сессионная. Еще раз спасибо!
-
-
ну (price, -id) даст максимальный price / мин id (для равных price)
SELECT argMax((id,group,price), (price, -id)) FROM table GROUP BY group -
в любом случае это уже подзапрос. Строчку нужно вывести всю
-
┌─argMax(tuple(is, group, price), tuple(price, negate(is)))─┐
│ (6,'g2',255) │
│ (1,'g1',232) │
└───────────────────────────────────────────────────────────┘ -
-
да, id там String, поэтому он ругается: Illegal type String of argument of function negate
-
is имеется виду id?
-
-
ну тоже наверно не отработает, т.к. id => String type
-
-
Алексей, еще раз спасибо, видимо в обычной MYSQL подобная задача будет реализована хуже т.к. в ней нет argMax
-
Вы кстати не подскажите, TTL у строчек в новых версиях ch сам будет отрабатывать или его запускать нужно? По документации не понял
-
в 8м mysql можно попробовать через оконные функции и индексу по group,price
-
Сам. Альтером можно добавить TTL на существующую таблицу, но применится это только к строкам вставленным после alter.
-
спасибо, осталось дождаться stable версии с TTL
-
Вроде уже 3 стейбла с TTL.
-
во всяком случае docker образ от яндекса поумолчанию использует 19.1
- 06 July 2019 (56 messages)
-
Всем добрый день! Не получается настроить правильно Distributed таблицу, кто-нибудь можем помочь правильно настроить? Буду благодарен
-
-
Joined.
-
Добрый день не подскажите альтернативы хранения json ?
-
1. Разложить по колонкам
2. Вставлять как колонку с json в null таблицу, потому MV в другую таблицу с extract* полей из оригинальной
3. Массивы keys/values
4. Ну или просто хранить json в String поле -
-
а можно ли как-то увидеть пример второго пункта
-
CREATE TABLE main(..., json String) ENGINE = Null
CREATE TABLE target(a Int64, b String, ...) ...
CREATE MATERIALIZED VIEW target_handler TO target
AS SELECT
visitParamExtractInt(json, 'a') AS a,
visitParamExtractString(json, 'b') AS b,
...
FROM main -
спасибо, будем разбираться)
-
-
-
отлично, благодарю Вас.
-
-
-
ну по сути да у меня уже готовый json приходит упакованный, но он может быть разных форматов
-
разных форматов в плане полей
-
-
общий список полей заранее не известен
-
-
да нужно будет)
-
-
для вывода в дэшборд
-
-
-
-
-
-
вот в этом и дело что необходима ch
-
просто будут прилетать распарсенные токены в формате json
-
я их анмаршелю в golang и нужно отправить в бд
-
вот вся суть
-
this
-
-
-
-
-
то есть как я понимаю можно хранить как стринг в базе а потом доставать её так же как строку и на строне приложения строку анмаршелить в json
-
-
отлично!)
-
-
как вы указали выше, хорошо
-
всем привет
Мне нужно получить элемент массива
arrayElement(arraySort(new_aclid),1) as new_aclid_zero
В итоговую таблицу получаю array(UUID)
А должен быть просто UUID
Где проблема и как сделать эту операцию? -
Таких кейсов быть не может. Вначале селект строит список партов, а зтем начинает их читать.
-
Если нужно получить елемент массива - обратитесь к массиву по индексу
Например 4й элемент - Array[4] -
Супер. Это я и хотел услышать
-
-
в КХ есть некий аналог MVCC т.е. данные выдаются те, которые были на момент запроса
-
read committed? Или repeatable read?
-
там нет транзакций, поэтому репитебл рид смысла не имеет.
так что да, что-то вроде рид коммитед -
Только на уровне партов. Если инсерт создаст 10 партов то можно увидеть только часть, например 3.
-
да, до max block size который по дефолту 1млн оно атомарно
-
Да тут половина вставляет в 100500 партиций сразу у них без млн куча партов.
-
-
Как можно прибить висячие запросы - сначала повис TRUNCATE TABLE потом за ним стали какие то другие запросы виснуть? KILL QUERY не удаляет их из очереди…
-
Всем привет проблема подключения через datagrip к хосту яндекс облаку кликхауса (Managed Service for ClickHouse)
https://monosnap.com/file/9V3lxeFPY92jmVuDdKL7qAnPFQaaKe
ну и конечно использую сертификат
https://monosnap.com/file/OdHBTiIA1zqiD5ahUWrIbdWjmFWdaV
лог ошибки
https://paste.laravel.io/84101f69-6f5c-4b14-941c-5eee31b1a487
Спасибо за помощь! -
я уже просто везел перетыкал меня эта ошибка выводит уже, наверняка кто то уже сталкивался - помогите пожалуйста.
- 07 July 2019 (56 messages)
-
У вас тоже? Вторую неделю бьюсь с зависанием кх. Использую временные таблицы и чищу их транкейтом перед вставкой. Сначала использовал таблички на диске - приводило к тому, что парты переставали объединяться (и все (по всем таблицам) встает с to many parts). Потом перевёл эти таблички в память (engine=Memory), сейчас все зависает c ошибкой cannot schedule task. Если косяк в транкейте, значит завтра переведу на drop-create. Посмотрим.
-
Мы плюнули и рестартим нафик пока не нашли, как обойти проблему.
-
Кто-нибудь подскажет как порт наружу открыть а то что-то правила iptables не помогают
-
что значит не помогает? tcpdump пакеты видит. Что пишет nc -v host port запущенный снаружи? А вообще настройка linux это offtopic тут imho.
-
<listen_host>::</listen_host> как понимаю из документации нужно так сделать в конфиге
-
да действительно раскоментировал добавил свой хост все поднялось
-
-
А можно писать в odbc-таблицу? Или только читать?
-
Joined.
-
что такое временные таблицы? mergeTree ?
>drop-create
drop любой mergeTree сбрасывает кеш марков (для всех таблиц), поэтому дропать их постоянно -- не очень идея.
Используйте drop / create Log/TinyLog, .... в качестве временных. -
что за кэш марков, можно поподробнее?
-
кеш primary ключей
-
-
Joined.
-
-
-
-
Кто подскажет. Делаю запрос в таюлицу, где 2-5 строк могут повторяться, кроме одного столбца. Как мне поставить условие GROUP BY для получения первого значения?
-
Первого - любого?
-
Да, в крайнем правом столбце
-
any(правый столбец). Все остальные поля в group by
-
Отлично, спасибо!
-
-
Непонятно. Какой движок у таблицы? Долгие select в это время бежали?
-
Таблица простая CREATE TABLE IF NOT EXISTS analytics.day_balance ON CLUSTER api_replicated
(
date Date,
token_id UInt32,
amount Float64
) ENGINE = ReplicatedMergeTree('/clickhouse/api_replicated/tables/analytics/day_balance', '{replica}')
PARTITION BY toStartOfMonth(date)
ORDER BY (token_id, date); -
-
-
-
-
Спасибо, попробуем. Временные - это набор данных, которые вычисляли на кластере и приземляли на каждый шард, чтобы при распределеных вычислениях на каждом шарде не поднимать данные со всего кластера ( group by по distributed таблице по полям отличными от ключей шардирования). Приземляли через транкейт и инсерт, сначала на MergeTree, но после того, как весь кластер (все шарды) перестали мержить парты и заливка по всему кластеру встала по to many parts, перешли на Memory. Теперь все встаёт по cannot schedule task. Спасибо, попробую завтра log.
-
-
привет, вопрос по запросу.
возможно ли вытащить одним запросом топ N=1 по sum(v) в каждой группе
или только через временные таблицы на каждый уровень вложенности - 1? -
Order by group, sum desc limit 1 by group
-
-
Ранк типа?
-
-
Через массивы тогда. Какой результат ожидаем?
-
нижняя часть скрина - результат выдачи
-
-
можно, пожалуйста, подробнее если это про групповые ранки?
-
Denny Crane [not a Yandex bot] in ClickHouse не тормозит
create table xrollup(metric Int64, b date, v Int64 ) engine=MergeTree partition by tuple() order by tuple(); insert into xrollup values (1,'2018-01-01', 1), (1,'2018-01-02', 1), (1,'2018-02-01', 1), (1,'2017-03-01', 1); insert into xrollup values (2,'2018-01-01', 1), (2,'2018-02-02', 1); SELECT metric, toYear(b) y, toYYYYMM(b) m, SUM(v) AS val FROM xrollup GROUP BY metric, y, m with ROLLUP ORDER BY metric, y, m ┌─metric ─┬────y ─┬──────m ─┬─val ─┐ │ 0 │ 0 │ 0 │ 6 │ всего по всем метрикам │ 1 │ 0 │ 0 │ 4 │ всего по метрике 1 │ 1 │ 2017 │ 0 │ 1 │ всего по метрике 1 за 2017 │ 1 │ 2017 │ 201703 │ 1 │ всего по метрике 1 за март 2017 │ 1 │ 2018 │ 0 │ 3 │ │ 1 │ 2018 │ 201801 │ 2 │ │ 1 │ 2018 │ 201802 │ 1 │ │ 2 │ 0 │ 0 │ 2 │ │ 2 │ 2018 │ 0 │ 2 │ │ 2 │ 2018 │ 201801 │ 1 │ │ 2 │ 2018 │ 201802 │ 1 │ └────────┴──────┴────────┴─────┘
-
Спасибо! То что нужно! В документации GROUP BY только с TOTAL описан
-
В общем надо было сразу написать что внизу результат. Нифига не очевидно.
Кроме rollup есть ещё cube. На гитхабе есть и в тестах и в тикетах примеры. -
да, я уже нашел. https://github.com/yandex/ClickHouse/issues/322ROLLUP, CUBE and GROUPING SETS · Issue #322 · yandex/ClickHouse
When I use [WITH TOTALS](https://clickhouse.yandex/reference_en.html#WITH TOTALS) modifier with GROUP BY I got an aggregate statistics for ALL rows. Feature: when I do query with several GROUP BY, ...
-
Joined.
-
у меня вот так работает (в URL):
jdbc:clickhouse://your-hostname.mdb.yandexcloud.net:8443/your_database?ssl=1&sslmode=strict&sslrootcert=/usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt -
Всем привет! А подскажите пожалуйста какая настройка отвечает за подробность логов? На девелопе кх работает в контейнере и в логах вообще все в кучу - trace, debug, info, error. Можно как то настроить уровень логгирования?
-
/usr/bin/clickhouse: Operation not permitted не знаю что это значит
-
capsysadmin хочет или еще что?
-
да юрий спасибо, уже нарыл тоже 🙂 ….
-
При старте? В докере? Официальный с докерхаба?
Тупо нет x? -
-
внутри systemd-nspawn. Официальные deb пакеты. Если запустить с --capability=all все работает
-
кажется это переповторение старого бага
-
https://github.com/yandex/ClickHouse/issues/4095 вот этого в иной реинкарнации18.16.1 Operation not permitted · Issue #4095 · yandex/ClickHouse
Hello! Deb package version 18.16.1 from Yandex repository gives errors: clickhouse-extract-from-config: Operation not permitted Need to emphasis what clickhouse deployed inside systemd-nspawn conta...
-
Спасибо!
- 08 July 2019 (168 messages)
-
is there a way to change table settings on the fly without detaching and attaching again? ie min_merge_bytes_to_use_direct_io
-
добрый день
Может есть свежее гайд по миграции данных из mysql to clickhouse ?MySQL to ClickHouse data migration and replicationAltinity has developed an open source clickhouse-mysql tool that helps to migrate existing MySQL table to ClickHouse and setup realtime replication of changes (INSERTS only). Here we review necessary steps using a simple example.
-
-
Привет всем. Поставил clickhouse, запустил clickhouse-server. При запуске clickhouse-client столкнулся с проблемой:
Code: 194. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Password required for user default.
Погуглив не нашел однозначного ответа. У этого человека ошибка точь в точь как у меня:
https://blog.csdn.net/zhangpeterx/article/details/94863499
Пишет что нужно зайти с паролем, но пароль для юзера default я не устанавливал. В users.xml пароль не задан. Создание пароля не помогает, ошибка та же самая.
Кто нибудь сталкивался с подобным? Заранее спасибо. -
-
Спасибо!
-
-
-
он спрашивает при установке, если жмакнуть ок и не писать пароль, то пароль будет отсутствовать
-
Было такое, да.
-
-
Всем доброго утра! :)
Ребята, кто сталкивался с Coordination::Exception. Coordination::Exception: Connection loss. ? Возникает при попытке запустить мутацию на удаление данных. Причем какие-то мутации работают, а какие-то нет. -
Всем привет. Какой странное поведение в КХ, замечено при вставке и удаления данных почти одновременно. КХ в какой-то момент перестает отвечать, потребляет много ресурсов и все, и ничего не происходит. Помогает перезапуск. Думаю, что связанно с опреацией удаления данных.
UPD: скорее всего это возникает, когда поступают несколько заданий на удаление данных в одной партиции -
Теоретически, удаление работает в фоне и новые данные не затрагивает
-
Всем привет!
Как в словаре задать отрицательные значения в качестве ключа? -
Всем привет. Какой странное поведение в КХ, замечено при вставке и удаления данных почти одновременно. КХ в какой-то момент перестает отвечать, потребляет много ресурсов и все, и ничего не происходит. Помогает перезапуск. Думаю, что связанно с опреацией удаления данных.
UPD: скорее всего это возникает, когда поступают несколько заданий на удаление данных в одной партиции
UPD: добавил скрин состояния мутаций, после чего эт возникает
При попытке вставить новые данные после этго возникает ошибкка:
Cannot mmap 64.00 MiB., errno: 12, strerror: Cannot allocate memory -
а после перезапуска КХ, эти мутации сразу выполняются, а значение в parts_to_do меняется на ноль
-
Может ли это возникнуть при зависании процесса мержа партов по тем партам, которые были удалены/очищены параллельным процессом?
-
Добрый день, есть вопрос - нужно сделать семплирование по 2-м колонкам, как лучше сделать? сейчас сделал так, но есть подозрение что это не очень правильно:
ENGINE
ReplicatedMergeTree('table_name', '{hostname}')
PARTITION BY
toYYYYMM(event_date)
ORDER BY
(..., browser, domain, tuple(browser, domain), ...)
PRIMARY KEY
(..., browser, domain, tuple(browser, domain))
SAMPLE BY
(tuple(browser, domain)) -
@prll
https://github.com/yandex/ClickHouse/issues/5883 -
В SAMPLE нужно кортеж (browser, domain) обернуть в что-то типа cityHash
И добавить это выражение в список колонок таблицы -
Коллеги, как сменить пользователя под которым engine HDFS лезет в hdfs. По умолчанию это пользователь clickhouse. Можно ли это поменять?
-
Ребят, а где можно почитать changelog для stabel версии v19.9.3.31-stable?
-
ClickHouse/ClickHouse
ClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
это точно changelog которого мы заслужили?
-
Это единственный который есть
-
-
Привет. Есть поле1 с секундами(тип Uint64), есть поле2 с датой и временем(DateTime). Хочу отнять с поле2 поле1(поле2-поле1). Как проеобразовать поле1 в времянной тип ? toSecond не работает
-
toDateTime(поле1)
-
Там есть ещё ветка 19.11, а можно где-то прочитать чем 19.7 отличается от 19.9/19.11 ? А то они все стабильные и все выходят практически одновременно
-
человекочитаемый ченджлог пока написан только для 19.7, @Alesapin обещает выше что скоро обновят :)
-
2020 | Документация ClickHouse
ClickHouse release 20.9 ClickHouse release v20.9.2.20-stable, 2020-09-22 New Feature Added column transformers EXCEPT, R
-
Можно посмотреть коммиты и их описания зачастую достаточно если прям сильно надо
-
Привет всем!
в логе при старте версии 18.14.18.1 54409 :
<Information> Application: It looks like the process has no CAP_NET_ADMIN capability, 'taskstats' performance statistics will be disabled. It could happen due to incorrect ClickHouse package installation. You could resolve the problem manually with 'sudo setcap cap_net_admin=+ep /usr/bin/clickhouse'. Note that it will not work on 'nosuid' mounted filesystems. It also doesn't work if you run clickhouse-server inside network namespace as it happens in some containers.
что это ? зачем нужна такая статистика -
Создаю словарь и не знаю что(0 или ничего) проставить в строке null_value для атрибута с типом date. Подскажите?
-
Всем привет!
Можно ли выполнить мутацию один запросом обновив историчную таблицу данными из буферной (в vertica или oracle это можно сделать оператором merge)? -
Для профилирования работы КХ.
-
Какое дефолтное значение тебе надо возвращать, если в словаре не будет данных? Его и пиши.
-
Вопрос по clickhouse-copier.
Я пытаюсь расшардировать таблицу на два шарда. Будет ли clickhouse-copier работать быстрее чем решардинг путем вставки в distributed таблицу? -
В КХ есть планировщик запросов, учитиывющий эту статистику или это для людей инфа ?
-
Это нужно для счетчиков в system.events. Напрямую КХ их не использует насколько я знаю, но могу ошибаться.
-
Нашел ответ в блоге Алтинити:
As the conclusion, we can see that performance of clickhouse-copier is similar to SELECT … INSERT statements but when it gets to a distributed database it gets more efficient because it uses the most of parallel resources -
подскажите, модно ли посмотреть, на что кликхаус тратит в данный момент ресурсы, на какие операции. Не делаю запросов, а КХ занимает много ресурсов.
-
-
Каких ресурсов? Если процессор, то мержит парты скорее всего. Смотри в system.merges
-
оперативку
-
сколько? там кеш марков до 5гб может кушать по дефолту
-
Нету.
-
В логе кх какие ошибки? В логе зукипера? Подозреваю что у вас в таблице лесятки тысяч партиций, на таких таблицах мутации не работают.
-
Да, там под 6000 партиций в таблице ( Это кроме как изменить ключ партиционирования никак не лечится?
-
Может в ЗК поднять лимиты на размер батчей в логах?
-
complex.. словари позволяют задать ключ из одного поля любого типа и потом передавать тип через тупл tuple(-333)
-
Спасибо😊
-
Нет, не лечится.
какая у вас версия кх? Где-то внутри кх повышали максимальный размер транзакции зк пару месяцев назад. -
У нас 18.14.18 версия. Черт, придется менять ключ партиционирования ( Спасибо за помощь! Так бы долго бились с проблемой!
-
-
0 или что тоже самое 1970-01-01
-
Движок replacing и обычный insert
-
Зачем вам мутации? Вам drop partition нужен или ttl
-
dictGet* в качестве имени словаря требует константу и, похоже, нет способа собрать имя на лету - concat не подходит. Или я не прав? Почему оно так?
-
Всем привет! Подскажите пожалуйста, грузим с firebase события в КХ, но параметры события у нас приходят json-строкой, например так: "[{"key":"item_id","value":{"string_value":"701"}},{"key":"firebase_screen_class","value":{"string_value":"RootActivity"}},{"key":"link","value":{"string_value":"https:\/\russia\/sochi\/"}},{"key":"screen_name","value":{"string_value":"DealsFragment"}},{"key":"firebase_event_origin","value":{"string_value":"app"}},{"key":"firebase_screen_id","value":{"int_value":"-1930814127147257036"}}]". Можно ли как-то это распарсить как массив, чтоб каждая пара key-value была отдельным элементом, а потом уже использовать arrayJoin для фильтрации нужных элементов?
-
Выше ваш мессадж про argMax. Сейчас использую In (select max), чтобы получить последний срез профилей сущностей в таблице (10 столбцов, сущностей 70 млн, по матвью ReplacingMergeTree по дате заливке). Вопрос: argMax на 10 полей подряд будет легче, селект ин?
-
так сделали в Я, им не надо было не константу.
-
1. строго говоря результат будет разный. argmax вернет одну строку (любую для одинаковых max)
2. надо тестить, перфоманс будет разный в зависимости от наличия и возможности использовать индекс и в зависимости от кол-ва дубликатов по ключу. -
Опубликовали статью про анализ производительности запросов: https://habr.com/en/company/yandex/blog/459198/
-
None
-
Судя по документации - это не гарантированная дедубликация, и как можно узнать когда он все процессы дедубликации завершит?
-
Кстати, я тут столкнулся с интересной штукой.
Мне дали сервер в железным раид 10 ( PERC H730 Mini LSI) 12 hdd.
Я померил скорость fio direct write / read 200 ГБ файла. И скорость селектов в КХ.
Затем рейд переключили в HBA mode. Cделали раид 10 far2 (теже диски).
Скорость по fio ухудшилась. Скорость селектов выросла от 2 до 10 раз.
Вопрос. Каким профилем fio тестить диски под КХ ? -
никак, может никогда не завершить, тоже самое будет с мутациями (update)
Делать запросы так чтобы возвращалась нужная ("последняя") запись -
Если говорить о гарантированном результате, то аналогов смержить 2 таблицы больше нет?
-
нет, точнее можно можно с помощью aggregating merge tree, но это тоже самое
-
А эксперимент точно чистый? кеши ос и т.п. сбрасывались перед проверкой КХ?
-
а теперь нужно в hba режиме поставить фрю и zfs и прогнать еще раз, подозреваю что все может улучшится
-
sync; echo 2 > /proc/sys/vm/drop_caches
system drop mark cache
по перфомансу было видно что сброс влияет -
-
не знаю что такое zfs, вопрос умеет ли он far
-
raid10 делался md? или силами hba?
-
-
я к тому что некоторый хба умеют в простенькие рейды вроде 1\0\10
-
mdadm --create --verbose /dev/md0 --raid-devices=10 --level=10 --layout=f2 --chunk=1M --bitmap=internal --bitmap-chunk=128M /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2 /dev/sde2 /dev/sdf2 /dev/sdg2 /dev/sdh2 /
dev/sdi2 /dev/sdj2 -
думается надо смотреть в сторону глубины очереди рейд контроллера, скорее всего при чтении паралелльных колюмнов mdraid лучше это дело распараллеливает по дискам
-
или что-то в таком духе
-
таже карточка в обоих случаях PERC H730 Mini (LSI чип), но в raid mode vs hba mode
-
-
еще раз, мне насрать на железные рейды, они все говно, если карточка стоит дешевле $1000
Вопрос. Каким профилем fio тестить диски под КХ ? -
попробуй тредов прибавить в fio
-
т.е. то что far на последовательном чтении выдает в два раза больше, это неправда?
-
-
http://www.ilsistemista.net/index.php/linux-a-unix/35-linux-software-raid-10-layouts-performance-near-far-and-offset-benchmark-analysis.html?start=1
The first graph depicts a RAID10 NEAR layout:
2x sequential read speed (sequential read access can be striped only over disks with different data)
Now it is the turn of FAR layout:
4x sequential read -
-
-
-
ну КХ читает max_read_buffer_size, по дефолту 1048576 , и я делал раид по КХ доке --chunk=1M
-
-
А битмап вам зачем? Он очень сильно снижает производительность. Ведь в случае вылета диска у вас все равно будет полный ресинк
-
спонтанные ребуты
-
Ну рейд не должен ломаться при спонтанных ребутах, если конечно вы спонтанно диски не дергайте туда сюда
-
вы это, сделайте рейд без битмапа на 10ТБ дисках, а потом вытащите его из розетки, и все поймете.
конечно он не сломается, просто будет тормозить первые 12/20 часов -
битмап же тупая отметка что запись прошла она диска зеркала
-
если его нет, то надо проверить что оба диска в зеркале синхронны
-
в моем случае надо прочитать 120ТБ
-
Просто любопытно, какого рода инфа в таких объёмах?
-
я без понятия наверное скооллы мышки у нескольких сотен миллионов юзеров.
тут у половины людей кластера из 400 нод. Мне туда еще расти и расти. -
Всем привет. Кто-нибудь сталкивался с проблемами с временными зонами. На сервере стоит Europe/Moscow, в консоли (clickhouse-client) делаю select now() возвращяет правильное время +3, делаю тоже самое на клиенте (локалхост или нет) показывает +0. Из-за чего проскакивает такая хрень
-
-
-
-
а в конфиге самого КХ какая таймзона прописана?
-
-
-
-
офигеть просто
-
wut? это восхищение кликхаузом или что?
-
yep
-
-
В общем имеем такую проблему, как мне кажется.
-
подскажите, пожалуйста, в кликхаусе важен порядок объявления полей, что бы он соответствовал ключу сортировки?
допустим, ключ сортировки (а, б, с), а поля объявлены в последовательности б, а, с... -
не важен
-
спасибо
-
Господа, подскажите, а настройку timezone КХ не релоадит на лету?
-
Joined.
-
это jdbc? datagrip?
-
нет. А что кто-то релоадит? у меня тут rsyslog пишет время(TZ) трехлетней давности (rsyslog 3 года не рестартили)
-
у.меня в датагрип воспроизводится
-
Привет, не подскажете, может у кого была такая проблема.
Строю график в графане. Выводит только одну точку и все, в инспекторе запроса все 100 записей, а на графике только одна первая точка. ( группировку делаю)
В tabix все выводит, запрос верный -
там проблема в самом jdbc
-
я в config.xml поменял timezone, но КХ не среагировал
-
на самом деле у меня более общий вопрос, как заставить КХ не применять timezone, так как даты мы сами пишем уже с учетом зоны
-
я делаю в jdbc так, чтобы увидеть серверное UTC
use_time_zone Canada/Atlantic
use_server_time_zone_for_dates false
use_server_time_zone false
https://github.com/yandex/clickhouse-jdbc/issues/202How to set timezone? For example Atlantic/Canada · Issue #202 · yandex/clickhouse-jdbcru.yandex.clickhouse clickhouse-jdbc 0.1.39 String...
-
Php storm. JDBC. По http аналогично
-
Пробовал в шторме, никаких изменений
-
в чем ваша проблема я вообще не понял.
покажите
select toTypeName(now()),toTypeName(toDateTime(now()))
с сервера и с клиента -
Покажу чуть позже. Проблема в том, что гружу данные в кх через пхп по http и проблема имеет иесто быть
-
я понял что проблема есть, я не понял какая.
-
-
у меня похожая проблема
-
Joined.
-
Joined.
-
<!-- Server time zone could be set here.
Time zone is used when converting between String and DateTime types,
when printing DateTime in text formats and parsing DateTime from text,
it is used in date and time related functions, if specific time zone was not passed as an argument.
т.е. если TZ у линукса UTC, а в конфиге <timezone>Europe/Moscow</timezone> КХ будет конвертировать строки в из Moscow в UTC, точнее все несколько сложнее потому что можно сделать поле в таблице A DateTime('Europe/Moscow'). -
-
-
-
т.е. по логике если TZ в Линуксе и КХ одинаковый то он не должен трогать даты?
-
а в конфиге КХ ?
-
-
да, но jdbc будет конвертить в tz jvm
-
ну во что-то не похоже, у меня сейчас и clickhouse-client конвертит, хотя и в Линуксе и в кх стоит Europe/Moscow
-
а он считает что в таблице UTC и накидывает 3ч
-
т.е. если
create table tzz(A DateTime) engine=Log;
insert into tzz values('2010-01-01 00:00:00');
то select покажет другое время? -
попробую
-
-
-
-
эээ, это не совсем проблема jdbc.
тут вот в чем штука, если на сервере UTC и в config.xml UTC , то jvm сконвертит в TZ moscow если у нас на ноуте московское время -
-
чтобы JVM не конвертило я делаю
use_time_zone Canada/Atlantic
use_server_time_zone_for_dates false
use_server_time_zone false
на ноуте Canada/Atlantic (на сервере UTC)
в этом случае JDBC считает что он с сервера КХ загружает время в TZ Canada/Atlantic и конвертирует из Canada/Atlantic в Canada/Atlantic и таким образом я вижу что было на сервере в UTC -
Попробую. Спасибо
-
коллеги, привествую!
как задать MergeTree таблицу чтобы была одна партиция? -
Partition by tuple()
-
спасибо большое!
-
create table M ( ...) Engine=MergeTree order by ...
либо опустить секцию partition by
что ровно тоже самое что Partition by tuple() -
время одно и тоже
-
хотя в соседней таблице прибавляет 3ч
-
-
либо туда было записано при других настройках и конвертнулось при записи в UTC либо туда кто-то так пишет.
-
спасибо, буду проверять
-
Странно так. Снёс буферную таблицу, изменил интервал сброса на:
Buffer(local, views_local, 2, 60, 60, 10000000, 10000000, 100000000, 100000000)
Причём работает как надо раз в 60 секунд +-…
Но в system.tables в engine_full почему-то по-прежнему
Buffer(local, views_local, 2, 10, 10, 10000000, 10000000, 100000000, 100000000) -
- 09 July 2019 (197 messages)
-
Добрый день! Подскажите, пожалуйста, как сгруппировать две строки у которых одинаковый ключ и вторым столбцов идет массив. Причем в одной из строк он пустой, а в другой необходимо сохранить порядок элементов:
т е из выборки вида
key []
key [2,4,6]
нужно получить
key [2,4,6]
есть ли агрегатная ф-ция которая накапливает аргументы-массивы (но с учетом того что у меня будет только в одной строке не пустой масив, то порядок в нем должен сохраниться)?
Спасибо! -
Ну или как еще можно "развернуть" строки-массивы в столбцы
у меня
key ['a','b','c']
key ['a1','b1','c1']
а нужно получить
key ['a','b','c'] ['a1','b1','c1'] -
select k, groupArray(v) from (
select 1 k, [7,8,1] v union all select 1 k, [] v union all select 2 k, [1,2,3] v
) group by k
┌─k─┬─groupArray(v)─┐
│ 1 │ [[7,8,1],[]] │
│ 2 │ [[1,2,3]] │
└───┴───────────────┘ -
select k, flatten(groupArray(v)) from (
select 1 k, [7,8,1] v union all select 1 k, [] v union all select 2 k, [1,2,3] v
) group by k
┌─k─┬─flatten(groupArray(v))─┐
│ 1 │ [7,8,1] │
│ 2 │ [1,2,3] │
└───┴────────────────────────┘ -
спасибо!
-
а, да, еще groupArrayArray
select k, groupArrayArray(v) from (
select 1 k, [7,8,1] v union all select 1 k, [] v union all select 2 k, [1,2,3] v union all select 1 k, [3,9,7]
) group by k
┌─k─┬─groupArrayArray(v)─┐
│ 1 │ [7,8,1,3,9,7] │
│ 2 │ [1,2,3] │
└───┴────────────────────┘ -
круто!)
-
Коллеги, а можно как-то выделить временные подпоследовательности из таблицы, отсортированные по времени?
-
А что значит временные последовательности? Серии подряд идущих дат? А выделить в каком виде надо? Из каких данных?
-
например, есть таблица посещения сайта с веб-аналитикой по пользователям. Пользователь использует сайт и отправляются эвенты. То есть в таблице имеется нечто такое:
user_uuid, ts_event, site
Хотелось бы вытащить время посещения сайта пользователем в формате user_uuid, site, ts_start, ts_end -
min(ts_event) as start, max(ts_event) as end?
-
У тебя пользователь может заходить на сайт в течение дня, допустим, каждые 30 минут, но это не значит, что пользователь на сайте был сутки
-
я же не знаю по каким ивентам ты считаешь где пользователь зашел и где вышел
-
Нужна информация о каждом посещении пользователя
-
для генерации сессий нужна дополнительная логика (и не всегда она тривиальная)
-
ну так и выберай каждое)
-
Когда пользователь поменял сайт, где также трекаются ивенты
-
скорее всего нужно внедрять дополнительную логику на беке
-
а выборку делать в стиле select usr_id, site, groupArray(ts_event) group by usr_id, site
-
а разные интервалы ты как выберешь?
-
смотри, даже по другому можешь сделать, select usr_id, groupArray(site), groupArray(ts_event), если сайт 1 тогда забераешь крайние границы в времени, если сайта два, тогда уже на беке проходишь массивы и смотришь где у тебя пользователь последний раз был на сайт1 и перешол на сайт2, просто если этот переход это не частый случай, тогда и проверок нужно будет не много, если же частый, можно еще поробовать объединить это два groupArray с помощью arrayMap и лямбды, но я в них не особо, так что тут уже не помогу
-
а если сайтов 100+?
-
разве использования бека нельзя такой запрос сделать
-
я думаю что можно, только более чательно узичить функции кликхауса, но в моей практике пока таких заданий не было, поэтому не помогу
-
Привет. А кто может подсказать по TTL или же подсказать где вменяемая дока по ним? Никак не могу понять принцип его работы, он вроде должен удалять данные после определенного времени, а по факту это не происходит...
-
Сделал такую штуку. Не помогло. Также проверил данные по http и они оказались корректны. То есть при отобржении они ломаются. В случае jvm. Однако интересный момент: Если данные уже записаны в КХ, то при получении данных они получаются "битым", а если это же поле обернуть в toDateTime() то оно возвращается корректно. В свою очередь, если делать запрос вида select toDateTime('') без указания часового пояса, оно всегда будет не корректно потому, что происходит конвертация.
-
-
-
Таблица была создана с ттл или он потом прикручен?
-
Сразу создавал с TTL
-
Попробуй optimize final на нее. Но по идее таблицам с ттл делается периодический внеплановый мерж чтобы удалить старые данные.
-
Так работает. Получается постоянно нужно будет запускать optimize?
-
Попробуй посмотреть параметр merge_with_ttl_timeout, по идее это периодичность мержей для ттл
-
Спасибо, сейчас гляну.
-
Таки да, очень похоже на то что проблема в этом.
merge_with_ttl_timeout — Minimal time in seconds, when merge with TTL can be repeated. Default value: 86400 (1 day).
А я тестировал с часовыми интервалами. -
А можно как-то пронумеровать строки через переменную, которую не на каждой строке нужно инкрементить?
-
не совсем понял, можно детальнее?
-
Можно ли пронумеровать интервалы посещения через case
-
Есть ли в КХ поддержка использования переменных, как в sql
-
-
Коллеги, добрый день, пробую собрать 19.9.3.31 стэйбл - ошибкой падает
https://pastebin.com/Pzres096
собдираю под центось7, devtoolset8 -
-
да, все забирается
-
19.9.2.4 там тоже не собирается
-
clickhouse-debuginfo-19.9.2.4-1.el7.x86_64
clickhouse-server-19.9.2.4-1.el7.x86_64
clickhouse-cpp-rpm-1.2-2894.el7.x86_64
clickhouse-server-common-19.9.2.4-1.el7.x86_64
clickhouse-common-static-19.9.2.4-1.el7.x86_64
clickhouse-client-19.9.2.4-1.el7.x86_64
clickhouse-compressor-1.1.54378-3.el7.x86_64
Отлично себя чувствуют, кстати. -
это из репки алтинити или сам собирал?
я только что проверил на центос7 + девтулсет8 и 3.31 и 2.4 не собираются с одной и той же ошибкой. -
скриптами альтитнити сам собираю
-
-
-
-
девтулсет-8 обновился с неделю назад. возможно это сломало
-
-
Всем привет! Столкнулись с тем, что данные в Matview(engine=ReplicatedSummingMergeTree) расходятся с теми, что лежат в основной таблице(engine=ReplicatedCollapsingMergeTree) (обе таблицы реплицируемые).
Воспроизвести локально не получается.
На проде, через какое-то время часть строк в matview суммируются в нули.
Поэтому два вопроса:
1. Подскажите, чем может быть вызвано расхождение? (Думали, что запрос в основную таблицу выполняется успешно, но падает в matview, но в логах ошибок нет)
2. Если перевставить данные, то проблема уходит. Есть ли способ совершить "перевставку" данных из основной таблицы в matview только по определённым ключам, не пересоздавая её?
Определения обеих таблиц могу скинуть в упрощённом варианте -
Joined.
-
-
Салют парни).. Такой вопрос: пытаюсь запилить сбор сообщений из Kafka в КХ. У брокера самоподписанный серт, expired к тому же). Пытаюсь в конфиге КХ сделать: <enable_ssl_certificate_verification>false - вообще тишина в логах. Может кто сталкивался?
-
Помогло, спасибо.
-
Девтулсет откатите на одну ступеньку - все соберется
-
Они в Я всё на убунте собирают 😁
-
Да тут речь про сборку на центоси вроде был
-
-
Не, тов. Сапин из разработчиков КХ и говорил про их CI внутренний
-
Хорошая идея, но мы суммируем данные при добавлении
CREATE MATERIALIZED VIEW campaign_statistics (
date Date,
campaign_id String
) ENGINE = ReplicatedSummingMergeTree(
'/clickhouse/tables/cluster/database/campaign_statistics',
'{replica}',
date,
(date, provider_id, connection_id, campaign_id),
8192
) AS
SELECT date, campaign_id,
sum(sign * impressions) AS impressions,
sum(sign * clicks) AS clicks,
FROM statistics
WHERE (adgroup_id = 0)
AND (ad_id = 0)
AND (keyword_id = 0)
GROUP BY date, campaign_id -
Если запрос с SELECT вызывается ТОЛЬКО на ту порцию, которую мы вставляем, тогда да, проблема в этом
-
-
-
Исходя из доки A SELECT query can contain DISTINCT, GROUP BY, ORDER BY, LIMIT... Note that the corresponding conversions are performed independently on each block of inserted data. For example, if GROUP BY is set, data is aggregated during insertion, but only within a single packet of inserted data. The data won't be further aggregated
Видимо, при вставке идёт GROUP BY только на ту часть, которую мы вставляем. Не очень понятно, что такое each block of inserted data -
Блок это по дефолту ~миллион строк. Любой инсерт больше этого это несколько блоков
-
Нет
-
Спасибо, проверим
-
подскажите, как правильно переместить реплику с одного сервера на другой?
конфигурация 2 шарда по 2 реплики, нужно у одного из шардов переместить одну реплику на другую машинку -
MV & replicated deduplication · Issue #5274 · yandex/ClickHouse
When I upload unique rows they are deduplicated because MV query calculates them into the same rows. CREATE TABLE testNull (date Date,id String) ENGINE = Null; CREATE TABLE testNoAggregate (date Da...
-
Сделать как еще одну реплику.
Создать таблицы на новом сервере. Данные реплицирует кх. Обновить описание кластера. Затем на удаляемой реплике дропнуть таблицы. -
Если реполикейтид с зукипером таблицы.
-
Можно удалить эту реплику и создать пустую таблицу на новой машинке. Возможно, можно как-то быстрее.
-
Подскажите пожалуйста, как лучше:
есть ~50 таблиц в mysql (500+ колонок), которые относятся к одному домену, и могут быть распрямлены в одну таблицу...
Как лучше их сохранить в КХ?
1. Тоже 50 таблиц?
2. В одну большую таблицу с много колонок?
3. В одну таблицу с типом и key/value массивами?
или может ещё какой способ есть?
Данные потом нужны для анализа и вприницпе могут понадобится все, какие именно зарание не известно.
(+ возможны частые изменения, на добавление новых колонок) -
2
-
а не будет проблем, с тем что слишком много колонок, если больше 1000 потом будет?
если не ошибаюсь там же по 2 файла на колонку, отводится, и много null полей на самом деле.
насколько 3тий вариант хуже?
просто он сразу позволяет не заморачиватся насчёт не всех данных, и добавления новых колонок -
Ну если больше 500 колонок то можно начать неосновные складывать в массивы. Массивы медленнее чем просто колонки.
-
ну я так и думал в 3тем варианте.. Немного опишу юз кейс.
У нас есть кредитная политика, и в её рамках выполняется различное количество разных экшенов для получения решения о десижене(в зависимости от условий каждый раз разный набор). Сейчас результаты всех экшенов разбиваются на cp_* таблицы.
Ну а в КХ я думал промежуточные результаты этих экшенов скидывать в к/v массивы. -
а скажите пожалуйста, чем плохо 50 таблиц?
-
Не упустите последнюю возможность зарегистрироваться на ClickHouse митап в Минске послезавтра: https://yandex.ru/promo/metrica/clickhouse-minskLink
Приглашаем технических специалистов на митап по ClickHouse. Разработчики системы расскажут о новых функциях и планах, а пользователи — о собственном опыте.
-
None
-
просто в 50 раз больше партиции и zk трафика. Может вам и нормально, у вас наверное не будет 1млрд ивентов в час.
-
спасиба
-
Joined.
-
-
-
max_memory_usage_for_all_queries
-
-
-
-
-
нет
-
-
большое спасибо, это наш кейс 👍
-
Joined.
-
Привет! Подскажите, как в отдельный столбец разместить размер итоговой выборки (обычно делается через count(*) в классических базах).
Нужно для реализации пагинации на клиенте. Пробую по-привычке сделать - ругается на отсутствие группировок. -
Joined.
-
Всем привет! Сегодня заметил у себя в папках detached партиции с префиксами unexpected_ и ignored_
Подскажите, что это означает? Как они у меня появились? -
никак, и в классических базах тоже никак. Вы что-то путаете.
можно сделать with но это смертельно для перфоманса
with (select count() from t) as c select *, c from t limit 10
ну и пагинация вообще не про КХ -
Ок, спасибо
-
...ignore это вообще нормально -- это парты которые были смержены в более крупные, помечены inactive, ожидание 8 минут перед удалением + спонтанный ребут КХ, нашли крупный парт, проверили, нашли мелкий -- уже покрыт смерженным хорошим крупным-> mv _ignore
unexpected_ это хуже надо искать в логе КХ сообщения про эти парты. Есть в парте dict файл? Есть в таблице LowCardinality поля? -
Joined.
-
dick файл не вижу, а LowCardinality есть
-
У меня на одной реплике всё ок, а на второй куча unexpected_
-
без сообщений в логах можно только гадать, вы проверьте у вас кол-во партов на репликах совпадает или нет, возможно вот этих unexpected_ не хватает и их надо сфетчить с реплики
возможно случается вот это https://github.com/yandex/ClickHouse/issues/5790
и сразу как последствие вот это https://github.com/yandex/ClickHouse/issues/5789 -
А как сфетчить с реплики? Скопировать и сделать ATTACH? Или есть другой способ?
-
Всем привет. Кто-нибудь знает, как работать с результатами, получаемыми модификатором [with totals]?
-
Привет!
А как работает дедупликация в MergeTree, если вставка исходно идет в Distributed-таблицу, а не напрямую в MergeTree? Есть ли разница, или нюансы какие-то? Что если в Ditributed-таблицу на разных серверах сделать несколько вставок при неработающем ZK? Есть непроверенное подозрение, что это приводит к игнорированию проверки хешей блоков. -
всем привет. А почему где-то есть InsertQuery, а где-то нет? в обоих случаях инсерты есть
SELECT event FROM system.events where event = 'InsertQuery' -
Всем привет. Может быть кто-то подскажет по следующему вопросу. Есть гигансткая (2 000 000 000 записей) таблица с данными ReplicatedMergeTree и три репликации кликхауса. Как правильно создать материальное представление для этой таблицы?
Если делаю через populate, то данные дублируются и в материальном представлении их становится больше, чем в основной таблице.
Пробовала еще создавать без populate таблицы, а потом на одной из реплик делать select из основной таблицы и insert в материальное представление - в итоге получаю ошибку
Code: 76. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Cannot open file /tmp/tmp24358hjpfba, errno: 24, strerror: Too many open files -
ЕСТЬ МАНУАЛ КАК ПОДНЯТЬ КЛИКХАУС????
-
ClickHouse DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
На русском языке есть?
-
Это же рф продукт
-
язык там поменять можно
-
-
сложно тебе будет в it...
-
я понимаю что в it все н англ, но как может российский продукт иметь только мануал на англ языке
-
очень странно
-
Почему нет?
-
странное заявление
-
причём здесь тоже отсуствует InsertQuery
https://clickhouse.yandex/docs/en/operations/system_tables/#system_tables-events -
Если продукт ориентирован на всех, а не только на Россию (что нередко в IT), и ресурсы разработчиков ограничены (они всегда ограничены), то логично выбрать только один язык для документации и это обычно английский, т.к. он наиболее распространен в мире. Но, безусловно, приятно, когда документация есть и на русском, хотя, по моим наблюдениям, документация у ClickHouse на английском содержит меньше неточностей :)
-
я тоже считаю что российский продукт должен быть написан на русском языке. Например на Фокале или Драконе. А то развели понимаешь, исходный код на англ.
-
-
изыйди
-
дедупликиция только для replicated движков. Естественно Distributed должна посылать одно и тоже и в таком-же батче в тот-же шард, поэтому например rand как ключ шардирования использовать нельзя.
-
Прекратите отрицать всё новое!
-
фокал и 1с - это изык демонов, потому нет
-
поддерживаю
-
где-то? это о чем?
-
-
на кластере из трёх реплик, на двух нодах есть, на одной отсуствует
-
нет, а зачем? возьмите rollup https://t.me/clickhouse_ru/66894
-
а инсерты туда идут в ту одну?
-
да
-
❤️ спасибо!
-
А я могу создать MV на основе двух других MV?
-
Естественно, ключ фиксированный.
Но вот я смотрю стату - и вижу иногда дубли. Причем есть опять же неподтвержденное ощущение, что иногда отправка на один шард (видимо, когда данные уходят в локальную реплику) из Distributed - проходит, а на остальные - нет.
То есть, сейчас три шарда. Обычно - на всех трех данные правильные. Иногда возникают дубли сразу на всех трех шарда. А иногда (чуть реже) - дубли только на двух шардах из трех. Найти сходу кейс, когда проблемный только один шард из трех - не получилось вообще. -
detach table / attach table скачивает недостающие куски, еще есть system sync replica -- но я не пользовался.
-
как вы повторяете insert при ошибке?
-
-
вроде -- это хорошо.
-
-
-
нет. MV не каскадируются. Вешайте все MV на исходную таблицу.
-
а заливка в несколько потоков? может больше 100 партов создается между повторами? Какой у таблицы partition by ?
-
один запрос с одной исх машинки в минуту. Шард для запроса выбирается случайно. Машинок - пара десятков. Количество запросов сверяли, все как задумано.
PARTITION BY toMonday(event_date)
SETTINGS replicated_deduplication_window = 1000, replicated_deduplication_window_seconds = 864000, index_granularity = 8192 -
-
зачем вам MV ? Вы его хотите сделать на всех 3х репликах?
populate вам не подойдет наверное.
У вас есть какая-то date или datetime в таблице. Сделайте MV where date >= '2019-07-10' завтра туда начнут попадать новые данные, затем начинайте доливать в MV старые данные вручную insert-м маленькими порциями (по дню/по часу). -
каждый запрос меньше 1M строк - меньше одного блока. С учетом distr - это примерно 60 блоков в минуту. в dedup window укладывается с огромным запасом.
-
3 шарда и пара десятков машинок? таблица репликейтид?
-
-
-
таблица репликейтид?
-
-
я бы создал копии таблиц и попробовал бы заливать тестовые данные повторяя одно и тоже и посмотрел есть сообщения already exists; ignoring it.
-
-
-
я не очень понимаю как distibuted пилит insert на куски, и я видел странные штуки, когда distibuted разбивала insert на 1000 мелких кусочков, возможно в этом проблема
-
-
-
ну distibuted пытается в другую реплику запихать в этом случае, надо читать лог что там происходит.
-
я вижу в query_log результатом insert’а в distributed таблицу - ошибку table in read only mode, например. И теперь неясно, данные-то в Distributed ушли, и потом попробуют вставиться, или нет. Пока кажется - что ушли, и потом, с учетом того, что они же оказались в другой distributed-таблице, и все они потом одновременно «включились», когда ZK стал доступен - не проверились на дубли.
Такой race condition. -
Спасибо! Поняла
-
В общем, кажеся это случлось из-за того, что у париций изменились пермишены.
Посоны, никогда не меняйте пермишены в /var/lib/clickhouse/backup, потому-что там хранятся хардлинки, а разные хардлинки не могут иметь разные пермишены. -
Inodes store information about files and directories (folders), such as file ownership, access mode (read, write, execute permissions), and file type
-
ну теперь я тоже об этом знаю)
-
ну и мы мониторим detached заббиксом и я начинаю разбираться сразу как-только прокукарекает
-
Daniel in ClickHouse не тормозит
может, кому-то пригодится #!/bin/bash dtched=$(find /var/lib/clickhouse/data/click/*/detached/* -type d 2> /dev/null | wc -l) echo $dtched
-
Ну не ставить же заббикс ради этого) Может в КХ такую метрику будет полезно добавить?
-
system.detached_parts
-
👍спс!
-
-
CH умеет только один тип join - HashJoin. HashJoin не использует индексы. И правая таблица при HashJoin целиком помещается в память.
MergeJoin -- обе таблицы отсортированы по ключу объединения запланирован на. -
Спасибо, тогда остается IN c 10 млн ключей (
-
ну 10млн. может и немного для join. У меня бывает и 400млн. джойнится только долго и памяти два вагона нужно.
in умеет по индексу, но не будет при 10млн., там после 100тыс начинается хеш. -
-
-
зависит от версии КХ, возможно вам надо поля ограничить запросом
вместо a join b using x
написать a join (select x,f1,f2 from b) using x -
Доброй ночи. Обнаружил неожиданный стектрейс при вставке.
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Assertion violation: std::char_traits<char>::length(rPath.data()) == rPath.size() in file "../contrib/poco/Foundation/src/File.cpp", line 46 (version 19.9.2.4 (official build))Уменьшил размер вставляемой группы с 900 000 до 400 000 элементов - не помогло. Уменьшил до 100 000 - помогло. -
-
Joined.
-
есть поля CODEC(Delta ?
https://github.com/yandex/ClickHouse/issues/5847 -
Поля со сжатием?
-
show create table покажите
-
-
короче уберите Delta у Date и других Int16, Int8
https://github.com/yandex/ClickHouse/issues/5756#issuecomment-506649391
https://github.com/yandex/ClickHouse/issues/5847 -
-
/spam
-
@den_crane @Demelor cross join (select count () from t) намного производительнее, чем with count()
-
с чего бы вдруг? with один раз вычисляется в константу в КХ
-
With разве не отдельно на каждую строку будет считаться?
-
КХ не умеет коррелировать, и with не умеет cte. И вычисляется в константу
-
Фигово. А я думал, что вчера нашел хороший способ делать промежуточные вычисления не выводя их результаты...
- 10 July 2019 (240 messages)
-
/spam
-
-
Select * from system.numbers
-
-
-
Использует
-
-
@stokwel Не поделитесь архитектурой этой связки?
В моем случае, уже есть сервер на PHP старенький для статистики был, использовать Node, Go не вариант. Я сделал так:
1. Сервер: получает запросы от пользователей, обрабатывает и валидирует.
2. Сервер: здесь находится Kafka
3. Сервер: здесь находится КХ
PHP, точнее первый сервер не может обработать запросы, крашится с socket unavailable ()Resource temporarily unavailable) while connecting to upstream).
Как можно правильно собрать все это?
З.Ы. в качестве клиентской библиотечки используется: https://github.com/weiboad/kafka-phpGitHub - weiboad/kafka-php: kafka php clientkafka php client. Contribute to weiboad/kafka-php development by creating an account on GitHub.
-
select number from numbers(345627, toUInt64(5324563 - 345627));
-
-
У нас используется https://github.com/arnaud-lb/php-rdkafkaGitHub - arnaud-lb/php-rdkafka: Production-ready, stable Kafka client for PHP
Production-ready, stable Kafka client for PHP. Contribute to arnaud-lb/php-rdkafka development by creating an account on GitHub.
-
-
Коллеги, доброе утро. Пытаюсь потестировать 19.9.3.31-stable под центосью - не запускается вообще. Детали и бектрэйсы кор https://pastebin.com/rBgqb55p
-
Доброе утро, коллеги!
Как всегда к вам за советом, с клиническим случаем: сливал 36 таблиц в одну, движок ReplicatedReplacingMergeTree, структура у всех одинакова, партиции по часам, одинаковый набор, слив делал через FETCH PARTITION/ATTACH PARTITION, в итоге ~ 150млрд строк.
Собственно проблема: по завершению в system.replication_queue скопилось 13 сообщений вида:
last_exception: Code: 49, e.displayText() = DB::Exception: Part 792e8294a0838cb07c6732e893c2149c_24_36_1 intersects next part 792e8294a0838cb07c6732e893c2149c_29_29_0_778 (state Committed). It is a bug. (version 19.5.4.22 (official build))
postpone_reason: Not executing log entry for part 792e8294a0838cb07c6732e893c2149c_24_36_1 because source parts size (894.32 MiB) is greater than the current maximum (391.92 MiB)
Или
last_exception: Code: 49, e.displayText() = DB::Exception: Part 3e99e9aefcded98aa1ae5bcc1cd79c6b_0_12_1 intersects next part 3e99e9aefcded98aa1ae5bcc1cd79c6b_5_5_0_1096 (state Committed). It is a bug. (version 19.5.4.22 (official build))
postpone_reason: Not executing log entry for part 3e99e9aefcded98aa1ae5bcc1cd79c6b_0_12_1 because source parts size (1.72 GiB) is greater than the current maximum (1.70 GiB).
Пробовал делать DETACH/ATTACH таблицы — все те же ошибки вернулись.
Подскажите, что можно сделать чтобы исправить?
Селект из таблицы работает, но мерджи постоянно повторяют попытки слить и LA существено прыгает. -
Не выдерживают PHP FPM socket-ы, топик создается, данные не летят, как вы с этим справлялись?
-
-
Так в МВ ты только вставляемые и видишь
-
-
-
-
Joined.
-
Joined.
-
Добрый день. никто не пробовал вставлять данные в CH через pandas to_sql? интересует сценарий когда таблица еще не заведена. для psql/mysql/etc to_sql сам создает таблицу если ее нет, а в случае с CH происходит:
sqlalchemy.exc.CompileError: No engine for table
очевидный рецепт просто создать таблицу заранее, но как-то не элегантно -
Мне кажется это так себе идея
-
хочу проверить что бы MV вставила только уникальные записи, для основной таблицы уникальность не важна
-
Делай MV на ReplacingMergeTree и выбирай из нее с учетом того что дубликаты могут быть.
Других способов обеспечить уникальность в КХ насколько я знаю нет. -
Видимо не такой у нас поток данных, высокая нагрузка у нас на go
-
-
19.9.2.4 работает хорошо у нас
-
-
А есть ли какое-то общее правило по выбору версии?
Какая версия используется на серверах Яндекса и какая в платном облаке?
Когда планируется следующий стабильный релиз? -
-
мы берем стабильные версии, собриаем и прогоняем на своих тестах и вычислениях. Если все ок - запускаем в боевое окружение. В основном - если в релизе есть какие-то новые интересные фичи либо закрываются баги, с которыми все же столкнулись. Скорее всего это не лучший кейс по использованию клика)
-
Спасибо! 🙂
-
Суперинтересно было бы еще комментарий от авторов КХ из Яндекса услышать, конечно 🙂
-
Коллеги, всем доброго времени суток. Прежде всего, хочу выразить благодарность всем, кто занимается разработкой этого инструмента, а так же тратит свое время на помощь сообществу.
Нагуглил про относительно недавнюю возможность clickhouse - задавать строке тип LowCardinality. К сожалению, не нашел в доке описания данного типа.
Кто может сказать, какое количество уникальных значений максимально для данного типа, позволяющее дать более выгодную оптимизацию, чем подключение внешнего словаря или использование обычной строки? -
-
тут эмпирически вывели след. формулу
если вы сможете на память сказать как минимум 50% уникальных записей, то LowCardinality даст преимущество над String -
зависит сильно от памяти конкретного человека =)
Если более конкретно, до 20 значений допустимо? или до 50, например? -
вроде как до 1к считается ок на большом кол-ве данных. (Но я не проверял)
-
Понял вас, спасибо!
-
Joined.
-
Немного продвинулся и вопрос немного проще (возможно)
В первой таблице есть 3 вариации (по параметрам) строки из первой таблицы.
1) parm1.example.com/path_url
2) example.com/param2/path_url
3) https://example.com/path_url
Во второй табличке хранится path_url и его ID
Я хочу связать данные из первой табличики (предварительно провести группировки) со второй (добавить ID) и положить в MV, из которой я буду забирать данные по ID (быстрее же) -
В презентащии от Я были цифры до 1-10 миллионов.
У меня успешно работает с ~1млн уникальных значений -
В Apache Kudu, которая очень отдаленно напоминает КХ, словарный кодек вообще дефолтный для стрингов и автоматом откатывается на обычный если очень много уникальных значений.
КХ вроде идет в ту же сторону. -
подскажите, а как правильно сделать партиционирование по часам?
-
toStartOfHour(...)
-
Апну
-
Привет, можно ли на лету сделать временную таблицу и туда сохранить данные запроса и потом использовать его в другом JOIN?
-
-
Та же фигня в т.ч. при сборке gcc-9.1 после ручного фикса проблем с gcc-8.3.1+
Есть подозрение что этот коммит поломал: https://github.com/yandex/ClickHouse/commit/edc0db3367111b857d273bb4282bd9b05636f418Merge pull request #5828 from yandex/date-lut-fix-uct · yandex/ClickHouse@edc0db3Fix wrong resolution of time zone name. (cherry picked from commit dc59b245f10e69330ddf45f08308e26ee48524f3)
-
все так. путь к файлу с tz неверный
-
проблема в относительных симлинках.
/etc/localtime в редхатах указывает на ../usr/share/...
если сделать абсолютный симлинк - то взлетает. -
Оказывается в мастере это уже пофикшено.
https://github.com/yandex/ClickHouse/commit/74b245cfd4001375db48958c853a250d4e082407#diff-6592c12822391e0d13272bbaf9e1a6ffFixed DateLUT initialization when /etc/localtime is a relative symlin… · yandex/ClickHouse@74b245c…k like ../usr/share/zoneinfo/Europe/Moscow
-
@Alesapin Товарищи, а вы не могли бы этот ☝️коммит бэкпортнуть в 19.9 бранч и выпустить хотфикс релиз?
-
а то по сути 19.9.3 на всех редхатах сейчас неюзабелен по умолчанию
-
через rsyslog полет нормальный, только как решение, нормальное?
-
Сейчас посмотрю
-
Спасибо!
-
спасибо, будем ждать фикс
-
Привет! Друзья, подскажите, пожалуйста, куда копать.
Хочу органиовать в кликхаусе храненые сырых данных из логов с пользовательскими метриками.
У разных событий разное число полей с данными, проблема очень похожа на то, что решали баду в этом докладе https://habr.com/ru/company/oleg-bunin/blog/442616/ (хранение данных в такой в структуре: есть поле с вектором названий событий и поле с вектором даных по этим названиям), но, если верно понял, немного теряется суть самого кликхауса, как колоночной БД. Как правильно организовывать хранение сырых данных в кликхаус в таких условиях? -
Сейчас как хранилище использую постгрес, сырые данные в json храню. Пока такое решение устраивает, но хочется большего :)
-
-
Если число всех метрик конечное, можно создать колонки под все метрики и заполнять только те, которые присутствуют по факту. Если число метрик условно бесконечное, тогда лучше использовать вектор и определять его состав по какому- то типу пользователя, например.
Смысл кликхауса не теряется, поскольку у него есть огромное количество функций для работы с массивами -
Joined.
-
Коллеги, добрый день.
Подскажите, как работает max_parts_in_total? Он не дает насоздавать кучу мелких part-ов?
У нас просто была проблема, когда начали вставлять через Distributed - ClickHouse плодил много мелких кусков и ругался, что не успевает их мерджить. Ключ шардирования был (account_name, toStartOfHour(time_local))
Спасет ли max_parts_in_total от этого? -
Понял, спасибо. Попробую повторить и погонять решение от баду, на первый взгляд оно мне вполне подходит
-
Joined.
-
Куча партов - плохо. Параметр просто не дает убить базу совсем.
Ты не путаешь шардирование и партиционирование? -
Нет, ключ шардирования же указываем в Distributed для вставки
-
Да. При этом к партиционированию он не имеет отношения никакого.
-
Этот ключ просто выбирает на какую реплику что класть
-
если написать
source_table join mv_storage_table
сджойнится только вставляемые записи потому что source_table === NEW
но вам лучше сделать через not in
select
from source_table
where key not in (select key from mv_storage_table)
или https://gist.github.com/den-crane/fb1108e4843250a71bac7528a79700c2 не уверен правда что в MV так можно -
Добрый день, пытаюсь решить следующую задачу, необходимо посчитать время проведенное в конкретном режиме, часть таблицы представляет собой таймстемп - режим (режим - енам).
1562764534000 | F1
1562764534000 | F1
1562764534000 | F1
1562764534000 | F2
1562764534000 | F4
1562764534000 | F3
1562764534000 | F1
1562764534000 | F5
Получить необходимо время в мс проведенное в каждом из режимов. Была попытка написать через running_difference, но результат не был достигнут. В классических рдбмс можно было бы применить lag() и lead() функции, но их тут пока нет, может быть кто то уже сталкивался с подобной задачей? -
либо engine Memory либо temporary table (что тоже самое engine Memory, но дропнется по завершению сессии, т.е. нужна сессия).
-
да это просто защита от дурака, не позволяющая сделать много партиций в облаке.
наверное вам надо вставлять в Distributed пачками в которых уже предсортировано по account_name toStartOfHour(time_local) -
а лучше вообще вставлять в сами шарды
-
скажите пожалуйста, есть какой-нибудь db migration tools для КХ?
(типа flyway/Liquibase) -
Не понимаю, наверно не правильно описал задачу.
t2 = таблица (2,5млрд) на которую вешается MV
t3 = MV
вставляется пачками по 200k в таблицу t2
CREATE MATERIALIZED VIEW IF NOT EXISTS t3(c1 UUID, c2 UUID, c3 String, date_created Date )
ENGINE = MergeTree()
PARTITION BY tracking_uuid
ORDER BY date_created
AS
SELECT c1 , c2, c3, toDate(date_created) AS date_created
FROM(
SELECT c1,
c2,
c3,
toDate(date_created) AS date_created,
isNull(tb1.h) AS flag,
h
FROM t3 ANY LEFT JOIN
(SELECT DISTINCT h
FROM t2 insert_data
WHERE h IN(SELECT DISTINCT h FROM t3)
) AS tb1 USING h
WHERE flag = 1
ORDER BY flag DESC); -
Загнать в массив и делать через arraymap и enumerate
-
Заняло некоторое время что бы понять что сообщение не мне 😄
-
https://stackoverflow.com/questions/51856397/clickhouse-running-diff-with-grouping
Но зависит от количества значений. Нам, увы, не подошло, памяти не хватило.Clickhouse running diff with groupingGeneral Task A table consists of three columns (time, key, value). The task is to calculate a running difference for each key. So, from input --------------- | time | key | value | --------------...
-
А насколько не подошло? Сильно ограничены?
-
видимо не туда ткнул, прошу прощения.
-
там кстати не разбиение на интервалы
-
КМК разбиение на интервалы нельзя сделать с помощью массивов
-
потому что у массива тоже самое кол-во элементов на выходе
-
-
Подробности уже не помню, кликхаус вроде бы сразу после начала выполнения запроса ругался, что нужно больше памяти, просил сотни гигабайт. У нас на каждый ключ группировки были тысячи значений, по которым надо было посчитать runningDiff'ы и потом их сагрегировать.
-
-
-
У нас исходные данные считались в флинке, записывались в кафку и оттуда читались кликхаусом. Поэтому просто добавили в флинк расчёт runningDifference.
-
Как решить только на стороне КХ не придумали
-
Joined.
-
Привет, помогите разобраться:
Хочу в MAT VIEW SummingМergeТree (t2) получать количество строк из исходной таблицы МergeТree (t1).
t2 забирает данные из t1 так:
SELECT
floor((xxx / 100) * 2, 2) AS xxx,
1 AS yyy
FROM t1
Ожидаю, что инсерт каждой строчки в t1, будет скопирован в t2, и выражения будут равны:
1. sum(t1.xxx) == sum(t2.xxx)
2. count(t1) == sum(t2.yyy)
Однако сходится только 1, а 2 - нет.
Кто-то может пояснить, почему так? -
toUInt64(1) AS yyy
-
у вас через 1 байт оверфлоатится
-
Спасибо, попробую с кастом
-
-
в общем-то desc t2 покажет типа поля у yyy и там наверняка Int8
-
Да, так и есть, переделал с кастом - теперь ок, спасибо
-
Joined.
-
На версии 18.14.15 после вставки по http, получали респонс от сервера, с text/plain в заголовке content-type, после обновления до 19.7.3.9 сервер стал возвращать в этом заголовке text/tab-separated-values, и, по видимому, из-за этого теперь возникает ошибка при использовании библиотеки @apla/clickhouse
С чем связано это изменение? Можно ли это поведение как-то настроить? -
Добрый вечер! Подскажите, пожалуйста как подсчитать арифметическое среднее трёх чисел. Но не агрегатную avg, а простое арифметическое среднее над несколькими числами (внутри лямбды). Спасибо.
-
-
(a+b+c)/3 ?
-
У меня динамическое число аргументов, получается сложное выражение
-
-
Может можно закатать их в массив и найти среднее из массива?
-
-
Я бегу по массиву и внутри лямбды в зависимости от условия решаю должно ли число попадать в выражении среднего или его нужно пропустить
-
Точнее не так
-
Бегу по массиву и в зависимости от условий лезу в другие массиы, тяну оттуда числа и хочу найти по ним среднее
-
-
Да, так подойдёт, спасибо
-
select arraySum( arrayFilter(x-> x%2, z) as f) / length(f)
from (select [1,2,3,4,5,6] z) -
Спасибо!
-
Наберусь наглости и апну свой вопрос https://t.me/clickhouse_ru/108344
Чет мой мозг отказыаается выдавать решениеВладислав Мошиков in ClickHouse не тормозитНемного продвинулся и вопрос немного проще (возможно) В первой таблице есть 3 вариации (по параметрам) строки из первой таблицы. 1) parm1.example.com/path_url 2) example.com/param2/path_url 3) https://example.com/path_url Во второй табличке хранится path_url и его ID Я хочу связать данные из первой табличики (предварительно провести группировки) со второй (добавить ID) и положить в MV, из которой я буду забирать данные по ID (быстрее же)
-
Добрый день.
Тестирую синхронную вставку через Distributed-таблицу, собрал для этого в докере схему из 2 шардов по 2 реплики. В целях тестирования отключил обе реплики одного из шардов и при попытке вставки логично получаю следующее сообщение:
<Error> HTTPHandler: Code: 279, e.displayText() = DB::NetException: All connection tries failed. Log:
Code: 210, e.displayText() = DB::NetException: Connection refused (shard12:9000, 172.29.0.4)
Code: 210, e.displayText() = DB::NetException: Connection refused (shard11:9000, 172.29.0.5)
...
: Insertion status:
Wrote 0 blocks and 0 rows on shard 0 replica 0, shard11:9000 (average 3 ms per block)
Wrote 1 blocks and 1899 rows on shard 1 replica 0, shard21:9000 (average 3 ms per block)
Проводил этот тест полгода назад (с версией 18.14), и тогда эти 1899 строк вставлялись на реплику второго шарда и были видны при select-ах в таблице под Distributed. Сейчас (с версией 19.4) эти 1899 строк не видны - count(*) возвращает 0 (после восстановления первого шарда все данные и тогда, и сейчас корректно вставляются). В changelog-е не увидел связанных с этим изменений...
Были ли какие-то изменения в сервере, из-за которых поведение изменилось? Если нет, то в сторону каких настроек смотреть? -
-
-
-
тут задача на 30 сек, можно тупо в первую таблицу колонку с id добавить и посчитать ее через словарь
path_url и его ID -- их ведь не много
делаем словарь на основе второй таблицы, через dictGet будем выбирать id -
Я вот со словарями не подружился
-
сколько строк во второй таблце?
-
В первой таблице не могу подкинуть колонку. Это сырые данные из метрики
-
детский сад.
Ладно и все таки сколько строк во второй таблце? С точностью до 100 миллионов? -
1лям
-
предположим вторая таблица t2 (url String, id UInt64)
словарь
<?xml version="1.0"?>
<dictionaries>
<dictionary>
<name>t2</name>
<source>
<clickhouse>
<host>localhost</host>
<port>9000</port>
<user>default</user>
<password/>
<db>default</db>
<table>t2</table>
</clickhouse>
</source>
<lifetime>300</lifetime>
<layout>
<complex_key_hashed/>
</layout>
<structure>
<key>
<attribute>
<name>url</name>
<type>String</type>
</attribute>
</key>
<attribute>
<name>id</name>
<type>UInt64</type>
<null_value>0</null_value>
</attribute>
</structure>
</dictionary>
</dictionaries> -
к такому словарю можно ходить dictGetUInt64('t2', 'id', tuple('path_url'))
-
делаем MV
create mat .. view
as select count(), dictGetUInt64('t2', 'id', tuple( extractPath ...(url) )) id
from t1
group by id -
на самом деле я думаю что зависит от того в какой шард Distributed пошлет первым. В КХ нет транзакций откатить вставку нельзя.
-
добрый день, попытался переместить реплику (кластер 2х2) но что-то пошло не так, в итоге у меня теперь один шард имеет одну пустую реплику...🤷♂
подскажите, по шагам, что нужно сделать, чтобы восстановить данные этой реплики... -
>один шард имеет одну пустую реплику..
так а вторая реплика в этом шарде не пустая? -
первый шард первая - ок, вторая пустая
второй шард обе ок -
Пошел читать по каждой функции. Спасибо
-
проверьте show create table что zk путь совпадает, что макросы подстановки номера шарда правильные (system.marcros) и в конфиге
на обоих серверах посмотрите system.replication_queue -
пути совпадают, очереди пустые(
можно внести еще одну реплику, чтобы на нее восстановить? -
что в system.marcros
-
-
новые данные в эту реплику дописываются, а вот старых нет(
-
у вас таблица replicated ?
-
да, все таблицы replicated
-
что на второй реплике в system.marcros
-
-
на втором шарде соответственно layer 01,02 и шард 02
-
select * from system.replicas where table = .... на обоих серверах
вы неправильно понимаете что такое layer, у вас он точно есть в zk path у таблицы? -
создаются все таблицы так:
'/clickhouse/tables/{layer}-{shard}/db/table' -
аааа жуть. Даже понятно как это все исправить за пару rename. писец, кто вам вообще рассказал про layer.
-
у вас явно куски данных разные, у вас нет реплик
-
упс... и как быть тогда?(
-
на сервере где нет данных
останвливаете заливку
create table ....._2
....
'/clickhouse/tables/1-{shard}/db/table'
проверяете что данных которые для layer 02 нет в другой реплике
переливаете из таблицы layer2 в новую create table ....._2
drop table layer2
rename table ....._2 to ... -
https://clickhouse.yandex/docs/ru/operations/table_engines/replication/ тут вроде именно такой пример создания реплицируемой таблицы...
-
layer это двух уровневый шардинг, для тех у кого 400 серверов
-
Подскажите есть ли альтернатива функции COL_LENGTH
-
Пример запроса "IF COL_LENGTH(seq,keys) IS NULL BEGIN ALTER TABLE seq ADD keys String END""
-
а можете объяснить, что это за манипуляции и для чего они?
данные, как я понимаю не восстановить? -
в каком смысле не восстановить, они все на месте, я как раз написал как все починить, не потеряв.
смысл в том что layer лишь задает путь фактически layer2 и layer1 это две разные таблицы, два разных шарда.
у вас есть одна реплика ch1 / layer1 === '/clickhouse/tables/1-{shard}/db/table'
надо сделать на ch2 таблицу с другим именем и путем '/clickhouse/tables/1-{shard}/db/table' -
туда реплицируются данные
-
остановить заливку на ch2 или вообще остановить
-
проверить что "новые" данные в ch2 которые залились в layer2 отсутсвуют в layer1
-
перелить insert select из layer2 в layer1
-
дропнуть layer2 таблицу
-
переименовать layer1 таблицу
-
'/clickhouse/tables/1-{shard}/db/table' <-- 1 будет захардкожена, не используя макрос
-
что она вообще делает? это mysql ?
-
возвращает длину столбца в байтах
-
т.е. репликация должна быть однослойной, правильно?
у меня второй шард по такому же принципу собран... -
я просто хочу добавить столбец в таблицу если его не существует
-
ALTER TABLE alter_test ADD COLUMN IF NOT EXISTS Added0 UInt32;
-
да однослойный шардинг. Как вообще кластер описан? Заливка через distributed ? <internal_replication>true</internal_replication> ?
-
thanks )
-
Заливка через distributed
<yandex>
<remote_servers>
<clickhouse_shards>
<!-- shard 01 -->
<shard>
<replica>
<host>ch1</host>
</replica>
<replica>
<host>ch2</host>
</replica>
</shard>
<!-- shard 02 -->
<shard>
<replica>
<host>ch3</host>
</replica>
<replica>
<host>ch4</host>
</replica>
</shard>
</clickhouse_shards>
</remote_servers>
</yandex> -
<internal_replication>true</internal_replication> не прописан
-
https://github.com/yandex/ClickHouse/blob/0eed697623afd251c1908073c4a2850a9bfc9cdc/dbms/tests/integration/test_distributed_ddl/configs/config.d/clusters.xml
нужен
<internal_replication>true</internal_replication>
льете как? через дистрибьютид? она вам тогда и делает у вас репликацию, у вас фактически не используется replicated -
да, заливаю через distributed.
table -ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/db/table', '{replica}')
select count() from table
выдает следующее:
ch1 - 342036875
ch2 - 4555253
ch3 - 342081025
ch4 - 339250416
table_all - Distributed(clickhouse_shards, db, table ,rand());
select count() from table_all
ch1 - 684179367
ch2 - 343867136
ch3 - 684179367
ch4 - 681348758
это нормальный результат? -
"льете как? через дистрибьютид? она вам тогда и делает у вас репликацию, у вас фактически не используется replicated"
как переконфигурировать кх не потеряв данные? ваш вышеописанный способ подходит?
мне на каждой ноде где layer - 2 нужно создать layer 1, как вы описали? -
скорее всего что вам таблица ch2 - 4555253 не нужна и ее можно просто дропнуть не переливая из нее данные в новую, потому что дистрибьютид их записала в ch1 и они реплицируются в новую таблицу
-
>мне на каждой ноде где layer - 2 нужно создать layer 1, как вы описали?
да -
а 3 и 4 нужно переливать, правильно?
конфик сервера в какой момент править? после того, как всё перелью? -
точнее 4 сделать layer 1
-
В первую очередь стоит посмотреть, насколько скорость последовательного чтения отличается от расчётной. Для неплохих hdd должно получаться в районе 1.5 GByte/sec на массив из 12 дисков.
-
даже можно сделать проще
у вас ch1 - 342036875 ch3 - 342081025 содержат правильные данные и полные.
вам надо дропуть или переименовать таблицу на ch2 и ch4, поменять layer на layer1 в макросе и создать таблицу, данные реплицуруются
таким образом у вас будет везде layer1
и сделайте обязательно true</internal_replication до включения заливки -
Joined.
-
а что делать с distributed таблицами?
-
ничего, с ними и так все ок
-
по действиям:
1. стопаю заливку
2. переименовываю таблицы на ch2 и сh4
3. создаю новые таблицы с layer1
4. internal_replication -> true
5. профит
6. включаю заливку
всё правильно?) -
попробую, тут проблема похоже в том что КХ читает через кеш линукса во много потоков и надо как-то подобрать профиль fio чтобы чтение получалось примерно такое же.
а то fio direct=1 получается сильно оторванный от реальности -
заливка потом так же через distributed?
-
все правильно,
> создаю новые таблицы с layer1
это можно сделать через макрос -
да
-
а хотя у вас уже есть старые таблицы заданные через макрос, да тут лучше сначала захардкодить 1
-
я как раз собирался переносить ch2 и ch4, я же могу поднять ещё две реплики и настроить их через макросы как layer 1? пока без удаления ch2 и ch4? и добавить их в конфиг? или так лучше не делать?
-
Можно вообще не указывать partition by.
-
да можно
-
@den_crane ещё вопрос: получается, что пути в зоо будут одинаковые у каждого шарда?
т.е. для первого будет /ch/tables/1-1/db/tablename ?
tablename одинаковое или для каждой реплики шарда своё имя?
т.е. для таблицы tablename так:
/ch/tables/1-1/db/tablename1
/ch/tables/1-1/db/tablename2
/ch/tables/1-2/db/tablename3
/ch/tables/1-2/db/tablename4 -
'/clickhouse/tables/{layer}-{shard}/db/table', {replica}
раскроется в
shard 1 / layer 1
'/clickhouse/tables/1-1/db/table' , ch1
'/clickhouse/tables/1-1/db/table' , ch2
shard 2 / layer 1
'/clickhouse/tables/1-2/db/table', ch3
'/clickhouse/tables/1-2/db/table', ch4 -
благодарю!) спасибо за помощь и разъяснения)
-
-
GROUP BY toYYYMMMMDD(date column) - по дням
-
group by toStartOfFiveMinute(EventTime) ?
https://clickhouse.yandex/docs/ru/query_language/functions/date_time_functions/#tostartoffiveminute
тут описание есть -
Подскажите пожалуйста как обновить поле которое находится в nullable(string) ?
ALTER TABLE security_logs UPDATE key=value WHERE key= ? -
key=value это что? другая таблица?
-
key = название стоблца value = значение в нём
-
и что не работает?
ALTER TABLE security_logs UPDATE key='value' WHERE key= 'another value' -
yandex/ClickHouse tagged: v19.9.4.34-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.9.4.34-stable
Release notes:
v19.9.4.34-stableClickHouse/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
там поле пустое, а как по документацию смотрел там пишут что нужно возращаемое значение Uint8
-
Надо доку чтоль поправить, вы уже не первый
-
UInt8 это boolean = where key is null
-
или key = 'aaaa'
-
при key is null я уже пробывал ошибка " Syntax error: failed at position 46: 30 08:42:04 WHERE msgtime is null. Expected one of: NOT, LIKE, WHERE, AND,..."
-
isNull(key)
-
SELECT isNull(NULL)
┌─isNull(NULL)─┐
│ 1 │
└──────────────┘ -
тоже самое выдаёт, пробывал также с empty(key)=1
-
случайно не знаете на сколько оно быстрое?) скажем в сравнении с UNION ALL, где в каждом содержится BETWEEN между интервалом (в разрезе дня недели/месяца/квартала/года, всегда какой-то один интервал в запросе учавствует), либо еще вариант в подзапросе сгенерить несколько интервалов и потом по ним джойнить.
З.Ы. Больше 7 интервалов не бывает в одном запросе -
просто я создаю поля если их нету в таблице и пытаюсь заполнить данными
-
не знаю видимо уже поправлено
ALTER TABLE ZZZ
UPDATE A = 'a' WHERE isNull(A)
Ok. -
оно это кто? сама функция не стоит ничего, это просто округление до начала интервала.
а груп бай.. ну тут сложно сказать что вы считаете быстрым. -
решение) ладно, будем пробовать, видел эту функцию, но не подумал что при помощи нее можно группировать. спасибо
-
Группировать можно по любому expression насколько я знаю.
Главное чтобы памяти хватило :) -
окей, ну меня все-таки интересует стоимость, что лучше сгруппировать по какому-то интервалу, либо выбирать до 7 диапазонов отдельными запросами и объеденять при помощи UNION ALL? прошу не пинать за такой вопрос, под рукой большой базы нет, проверить стоимость того или иного решения нет, поэтому спрошу на всякий у комьюнити, чтобы не эксперементировать на проде
-
Выбирать по диапазонам дешевле т.к. не нужно хранить промежуточный результат в памяти как при груп бае
-
так промежуточный результат в случае отдельных запросов тоже же будет?
на примере наверное лучше показать, я сравниваю:
SELECT ContentID, t, count(*)
FROM tracks
WHERE StartTime BETWEEN '2019-07-05 00:00:00' AND '2019-07-05 02:59:59'
GROUP BY ContentID, toStartOfInterval(StartTime, INTERVAL 3 HOUR) as t
UNION ALL
SELECT ContentID, t, count(*)
FROM tracks
WHERE StartTime BETWEEN '2019-07-05 03:00:00' AND '2019-07-05 05:59:59'
GROUP BY ContentID, toStartOfInterval(StartTime, INTERVAL 3 HOUR) as t
UNION ALL
SELECT ContentID, t, count(*)
FROM tracks
WHERE StartTime BETWEEN '2019-07-05 06:00:00' AND '2019-07-05 06:59:59'
GROUP BY tracks.ContentID, toStartOfInterval(StartTime, INTERVAL 3 HOUR) as t;
….
и это:
SELECT ContentID, toStartOfInterval(StartTime, INTERVAL 3 HOUR) as t, count()
FROM tracks
WHERE StartTime BETWEEN '2019-07-05 00:00:00' AND '2019-07-05 29:59:59'
GROUP BY ContentID, t; -
Не очень понятно зачем в первом запросе группировать если там и так 3-часовые интервалы?
-
-
-
дату можно выбирать так же toStartOfInterval() просто не группировать по ней
-
в первом запросе не будет буфферизации т.к. все три пойдут скорее всего в параллельных тредах и сразу стримятся на клиента.
-
а во втором груп бай и если в этих 24 часах слишком много строк то память кончится и ой
-
в group by идет агрегация еще по одному полю, а toStartOfInterval не агрегационная функция
-
если ее из групбая вынести в селект как во втором запросе то мешать не будет
-
тогда, наверное, UNION буду юзать, ибо у меня есть агрецация еще по кварталам года)) там точно память можеть кончится
-
ну тут проблема в том что квартал это как раз неплохо. плохо когда короткие интервалы.
-
ибо чем больше интервалов - тем больше вариантов и больше нужно памяти
-
т.е. грубо говоря использование памяти пропорционально произведению количества уникальных значений полей в GROUP BY
-
а есть разница?
-
это я тупанул, если ее вынести то запрос не взлетит. можно как ты правильно предложил ее в any обернуть.
-
или вообще выкинуть т.к. интервал тебе и так известен
-
а, понял. спасибо большое! буду пробовать
-
Joined.
- 11 July 2019 (233 messages)
-
Всем привет! Столкнулся с такой задачкой. Есть таблица 'table-name' БД в MySql. В этой таблице 30+ млн записей. В день приходит 12 тыс insert, 50 тыс update. Данную таблицу хочу реплицировать в clickhouse. Репликацию осуществил при помощи ProxySQL, переписывая mysql-запросы в clickhouse-запросы (insert в replacing_merge_tree). Так вот если с update проблем нет, то с insert все сложнее. В mysql запрос приходит без уникального идентификатора, а в clickhouse автоинкремент не реализован. И я решил эту проблему таким образом:
insert into tablech SELECT * from mysql('host:3306', 'db-name', 'table-name', 'user-name', 'password') WHERE id = (select max(id) + 1 from tablech);
Что оказывается достаточно тяжело при наличии 30+млн строк в таблице 'tablech' (каждый поиск max(id) длится 5 секунд). Каким образом можно решить данную проблему? Понимаю, что решение мегаколхозное, но может как-то из коробки clickhouse можно получать max(id) быстрее 5 сек?
P.S. Железо намеренно слабое. -
А зачем нужен уникальный id в olap базе?
generateUUIDv4() -
-
Если есть неизменяемая дата, можно ее добавить к условию tablech, что сильно упростит выполнение запроса:
date > today() - 2 -
Joined.
-
-
Что в логах КХ? Может быть не может распарсить кривое сообщение, поэтому остановился?
-
1. Можно сделать MV на ReplacingMergeTree с одной записью, куда пишется последний Id, откуда из подзапроса и выбирать.
2. Если Id - ключ, то можно подождать влития оптимизации по выборке max/min по ключу -
-
Откуда любовь к uuid такая? Большой, немонотонный (как следствие, индексы не накрутить), ну и риск совпадения все равно есть.
Может, это все неважно, когда КХ для аналитики используется, но это же не всегда так) -
2019.07.11 09:12:57.035516 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Information> executeQuery: Read 25 rows, 973.00 B in 0.001 sec., 36883 rows/sec., 1.37 MiB/sec.
2019.07.11 09:12:57.035534 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Debug> MemoryTracker: Peak memory usage (for query): 1.02 MiB.
2019.07.11 09:12:57.035573 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Debug> MemoryTracker: Peak memory usage (total): 1.02 MiB.
2019.07.11 09:12:57.035591 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Information> TCPHandler: Processed in 0.001 sec.
2019.07.11 09:12:57.035828 [ 41 ] {} <Information> TCPHandler: Done processing connection.
2019.07.11 09:12:57.498066 [ 18 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:12:57.496002 [ 1 ] {} <Information> : Starting ClickHouse 19.7.3.9 with revision 54419
2019.07.11 09:12:57.500317 [ 1 ] {} <Information> Application: starting up
2019.07.11 09:12:57.503067 [ 1 ] {} <Information> StatusFile: Status file /sql/clickhouse/status already exists - unclean restart. Contents:
PID: 21718
Started at: 2019-07-11 08:29:06
Revision: 54419
еще настраивал zabbix
19.07.11 09:12:55.778825 [ 41 ] {29ec7227-5cc3-4f64-a9bb-accd8ca122ce} <Information> executeQuery: Read 36 rows, 3.96 KiB in 0.001 sec., 56114 rows/sec., 6.02 MiB/sec.
2019.07.11 09:12:55.778836 [ 41 ] {29ec7227-5cc3-4f64-a9bb-accd8ca122ce} <Debug> MemoryTracker: Peak memory usage (for query): 1.02 MiB.
2019.07.11 09:12:55.778863 [ 41 ] {29ec7227-5cc3-4f64-a9bb-accd8ca122ce} <Debug> MemoryTracker: Peak memory usage (total): 1.02 MiB.
2019.07.11 09:12:55.778875 [ 41 ] {29ec7227-5cc3-4f64-a9bb-accd8ca122ce} <Information> TCPHandler: Processed in 0.001 sec.
2019.07.11 09:12:55.779083 [ 41 ] {} <Information> TCPHandler: Done processing connection.
2019.07.11 09:12:55.997221 [ 18 ] {} <Debug> StorageKafka (queue): Started streaming to 1 attached views
2019.07.11 09:12:56.497644 [ 18 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:12:56.861906 [ 43 ] {} <Trace> TCPHandlerFactory: TCP Request. Address: [::1]:42024
2019.07.11 09:12:56.861982 [ 43 ] {} <Debug> TCPHandler: Connected ClickHouse client version 19.7.0, revision: 54419, database: system, user: zbxreadonly.
2019.07.11 09:12:56.866371 [ 43 ] {} <Information> TCPHandler: Done processing connection.
2019.07.11 09:12:56.997875 [ 18 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:12:57.029170 [ 41 ] {} <Trace> TCPHandlerFactory: TCP Request. Address: [::1]:42026
2019.07.11 09:12:57.029245 [ 41 ] {} <Debug> TCPHandler: Connected ClickHouse client version 19.7.0, revision: 54419, database: system, user: zbxreadonly.
2019.07.11 09:12:57.034792 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Debug> executeQuery: (from [::1]:42026, user: zbxreadonly) SELECT value FROM system.asynchronous_metrics WHERE metric = 'MaxPartCountForPartition'
2019.07.11 09:12:57.035201 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.07.11 09:12:57.035252 [ 41 ] {b871dca3-082b-4f58-a6df-0492e77f67f4} <Debug> executeQuery: Query pipeline:
Expression
Expression
Filter
One -
Сообщение такое же (т.е. работало), обычно если криво он ругался
-
А если указать другую consumer-group при создании Kafka Engine?
-
-
2019.07.11 09:20:12.532568 [ 41 ] {6b9199d1-5146-454d-9f2e-f4596f5cd58d} <Information> executeQuery: Read 42 rows, 5.82 KiB in 0.001 sec., 60246 rows/sec., 8.16 MiB/sec.
2019.07.11 09:20:12.532580 [ 41 ] {6b9199d1-5146-454d-9f2e-f4596f5cd58d} <Debug> MemoryTracker: Peak memory usage (for query): 1.03 MiB.
2019.07.11 09:20:12.532608 [ 41 ] {6b9199d1-5146-454d-9f2e-f4596f5cd58d} <Debug> MemoryTracker: Peak memory usage (total): 1.03 MiB.
2019.07.11 09:20:12.532621 [ 41 ] {6b9199d1-5146-454d-9f2e-f4596f5cd58d} <Information> TCPHandler: Processed in 0.001 sec.
2019.07.11 09:20:12.532805 [ 41 ] {} <Information> TCPHandler: Done processing connection.
2019.07.11 09:20:12.755295 [ 14 ] {} <Debug> StorageKafka (queue): Started streaming to 1 attached views
2019.07.11 09:20:13.255709 [ 14 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:13.755898 [ 14 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:14.256048 [ 14 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:14.756198 [ 14 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:15.256443 [ 14 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:15.256653 [ 14 ] {} <Trace> StorageKafka (queue): Execution took 2501 ms.
2019.07.11 09:20:15.757162 [ 15 ] {} <Debug> StorageKafka (queue): Started streaming to 1 attached views
2019.07.11 09:20:16.257630 [ 15 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:16.757829 [ 15 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:17.257978 [ 15 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:17.758169 [ 15 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:18.258330 [ 15 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:18.258649 [ 15 ] {} <Trace> StorageKafka (queue): Execution took 2501 ms.
2019.07.11 09:20:18.758754 [ 17 ] {} <Debug> StorageKafka (queue): Started streaming to 1 attached views
2019.07.11 09:20:19.259160 [ 17 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:19.759347 [ 17 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:20.259497 [ 17 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:20.759644 [ 17 ] {} <Trace> StorageKafka (queue): Polled batch of 0 messages
2019.07.11 09:20:20.978326 [ 43 ] {} <Trace> TCPHandlerFactory: TCP Request. Address: [::1]:42650
2019.07.11 09:20:20.978417 [ 43 ] {} <Debug> TCPHandler: Connected ClickHouse client version 19.7.0, revision: 54419, database: system, user: zbxreadonly.
2019.07.11 09:20:20.983454 [ 43 ] {6ba46812-2637-45b1-8e42-e87eaf2450d6} <Debug> executeQuery: (from [::1]:42650, user: zbxreadonly) SELECT value FROM system.metrics WHERE metric = 'DelayedInserts'
2019.07.11 09:20:20.983795 [ 43 ] {6ba46812-2637-45b1-8e42-e87eaf2450d6} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.07.11 09:20:20.983834 [ 43 ] {6ba46812-2637-45b1-8e42-e87eaf2450d6} <Debug> executeQuery: Query pipeline:
Expression
Expression
Filter
One -
-
Покажите ещё результат вывода kafka-consumer-groups --bootstrap-server kafka-broker:9092 --group consumer-group-из-кликхауса --describe
-
-
Правильно. Но если кафка не знает о кликхаусе, то откуда он тогда poll'ит сообщения?
-
В clickhouse-server.err.log ошибок нет?
-
-
а вот эти группы, они же не от балды, МБ их нужно где-то до этого учитывать?
-
-
-
От балды. Кафка автоматически балансирует партиции топика между консьюмерами из одной консьюмер-группы, руками группу нигде регистрировать не надо.
-
Словарь создал, но совсем не понял этот запрос 🤯
-
Так у вас с мускуле есть id или нет?
-
господа, кто знает можно ли lowcardinality поле в первичный ключ?
-
Понял, тогда почему он не может увидеть группу?
-
Можно
-
Ребят, подскажите плз, можно ли в КХ, сделать "системного" пользователя, через которого будет работать репликация и шардирование, но под которым нельзя будет авторизоваться через кли/апи?
-
Спасибо
-
-
всем доброго утра. подскажите, что не так с макросами?
$ cat /etc/clickhouse-server/config.d/macros.xml
<macros>
<shard>01</shard>
<replica>fmedia-test</replica>
</macros>
2019.07.10 17:28:25.208143 [ 37 ] {} <Error> ConfigReloader: void DB::ConfigReloader::run(): Poco::Exception. Code: 1000, e.code() = 2, e.displayText() = File not found: /etc/clickhouse-server/config.d/.#macros.xml (version 19.7.3.1) -
Как можно одну БД рамзестить на другом диске на том же сервере?
-
Господа, доброго времени суток! В документации есть пример данных с использованием схемы «звезда». В ней разово мержатся все таблицы в одну денормализованную.
Скажите, пожалуйста, есть ли механизм, который позволяет автоматически вставлять в денормализованную таблицу данные каждый раз, когда добавляются данные в одну из нормализованных таблиц?
Если да, так как быстро запись появится в денормализованной таблице с момента записи в одну из нормализованных таблиц? -
перенести и сделать симлинк
-
Перенес, сделал, пишет нет доступа (Access denied)
-
проверяйте имеет ли пользователь, с которого запускается кх, необходимые права на директорию
-
Привет, уперся в лимит Max query size exceeded, при запросе where in. На 33000. Подскажите как решить
-
Увеличить значение Max query size.
Например: SETTINGS max_query_size = 104857600 -
Это в config.xml? Есть какой-то потолок?
-
SET max_query_size = {значение}
-
А можно узнать какое сейчас?
-
users.xml
-
SELECT value FROM system.settings WHERE name = 'max_query_size'
-
Прописал, но после входа в клиент. Значение возвращается на предыдущее
-
-
Там же 1 по всем записям лежит? А все агрегаты кх итак в Uint64 считает. Почему поле с единственным значением не может быть меньшего типа?
-
Выше вопрос про этот пост
-
-
SET устанавливает значение для текущей сессии. Если прописать в users.xml, изменение будет постоянным.
-
А есть лимит максимальный?
-
Конвейера нет. Есть create table ttt as vvv, где vvv - может быть вьюхой.
-
Мне просто надо создать таблицу и сразу забрать из нее одним запросом)
-
-
Я использую summing merge tree. Вставляю из каждой только те поля, какие есть в исходных, а читаю через вьюху с группировкой.
-
Зачем?
-
Точнее тут. Зачем?
-
Нет доступа на сервак( И надо сейчас обновить в табло данные( А по View не работает. И соответственно единственный инструмент только Custom SQL из интерфейса табло(
-
-
Есть один свободный инвайт на сегодня на митап в Минске(один из сотрудников не смог пойти). Если кому надо - пишите )
-
Create table as select спасёт отца русской демократии?
-
-
-
-
Спасибо большое за ответ. То есть, по каким- то признакам он потом мержит эти данные в одной таблице?
-
Да, подробнее в доке про движки MergeTree. Там после вставки с одной таблицы, в результирующей будут заполнены вставляемые поля, а остальные 0. И т.д. Потом группируете и получаете одну портянку. Summing MergeTree погруппирует за вас в фоне, чтобы меньше места на диске занимало
-
Небольшое уточнение. У меня есть 2 характеристики сущности во времени: изменение статуса, изменение местоположения. То есть, мне очень важно в правильном порядке делать этот join, чтобы сущность всегда честно была в определенной локации в определенном статусе в определенный момент времени. Используя ваш подход я смогу этого добиться?
-
Как часто выполняется фоновая группировка и как быстро?
-
Как я вас понял, у вас несколько таблиц с данными, которые вам надо объединить в одну портянку по общим ключам. Как сгруппируете, то и получите.
-
По таймауту драйвера ODBC) Если не получаются долго данные, падает по таймауту. А из таблицы оно сразу начинает строчки получать. Запрос во вьюхе тяжелый(
-
Да, мне нужно из n таблиц, строка каждой из которых пркдоставляет определенную характеристику одной сущности в момент времени. Мне нужно из этого собрать одно денормализованное представление, в котором каждая строка будет сразу все n характеристик предоставлять на каждый момент времени
-
Таймаут драйвера тоже поправить не могу( Нет доступа(
-
В общем, буду копать в сторону summing merge tree, спасибо!
-
В общем, что вы хотите в кх нет. Оптимизируйте запрос, увеличивайте таймаут или внешним собственным процессом играйтесь с временными таблицами. Но временные таблицы - слабая сторона кх, у меня подобный процесс до сих пор косячит - а няньчусь с ним уже порядочно.
-
-
подскажите, в чем может быть проблема:
кластер 2х2, перестала реплицироваться одна нода, в логах Connection refused... -
Спасибо
-
куда смотреть?(
-
interserver_http_host задан? на порту КХ слушает? файрвол разраешает ходить по этому ip/порту?
-
ничего не менял, не настраивал. подключение к этой реплике работает.
-
-
-
стандартное значение стоит <interserver_http_port>9009</interserver_http_port>
клиентом на 9000 и по http тоже подключаюсь -
Случаем, не на 127.0.0.1 listen получился?
-
хост какой? netstat сделайте посмотрите какие интерфейсы слушают 9009
-
Это нормально то, что КХ пулит по 9, 10 сообщений?
2019.07.11 13:07:56.069456 [ 43 ] {} <Information> TCPHandler: Done processing connection.
2019.07.11 13:07:56.155418 [ 22 ] {} <Trace> StorageKafka (queue): Polled batch of 10 messages
2019.07.11 13:07:56.155509 [ 22 ] {} <Trace> StorageKafka (queue): Committing message with offset 91570
2019.07.11 13:07:56.655646 [ 22 ] {} <Trace> StorageKafka (queue): Polled batch of 9 messages
2019.07.11 13:07:56.655738 [ 22 ] {} <Trace> StorageKafka (queue): Committing message with offset 91579
2019.07.11 13:07:57.156228 [ 22 ] {} <Trace> StorageKafka (queue): Polled batch of 10 messages
2019.07.11 13:07:57.156309 [ 22 ] {} <Trace> StorageKafka (queue): Committing message with offset 91589
2019.07.11 13:07:57.308640 [ 41 ] {} <Trace> TCPHandlerFactory: TCP Request. Address: [::1]:33692
One -
Добрый день, коллеги! Подскажите пожалуйста, можно както увеличить параметр parts_to_throw_insert без перезагрузки сервера?
-
<listen_host>::</listen_host>
с другого хоста подключение есть, между репликами в шарде тоже клиент работает. вот только очередь растет
queue_size: 531
inserts_in_queue: 413
merges_in_queue: 118 -
-
netstat -at
tcp6 0 0 [::]:8123 [::]:* LISTEN
tcp6 0 0 [::]:9000 [::]:* LISTEN
tcp6 0 0 [::]:9009 [::]:* LISTEN -
Подскажите, для разнесения баз по разным дискам можно просто примонтировать раздел в нужную точку для нужной базы, или есть опция базы, предписывающая КХ, где её размещать?
-
у вас по ipv6 только работает клик?
-
interserver_http_host параметр в конфиге нужен.
-
Помогите разобраться с dictGetUInt64
В https://t.me/clickhouse_ru/108440 @den_crane рекомендует исрользовать dictGetUInt64 для получения ID
я не понимаю конструкцию запроса dictGetUInt64('t2', 'id', tuple( extractPath ...(url) )) id а именно, что происходит внутри tupleDenny Crane in ClickHouse не тормозитделаем MV create mat .. view as select count(), dictGetUInt64('t2', 'id', tuple( extractPath ...(url) )) id from t1 group by id
-
нет
-
ваш нетстат говорит, что ipv4 нет
-
когда нетстат показывает ipv6, это значит там v6 + v4
-
Принял, не знал
-
в доке сказано, что не нужен, если хост можно определить через hostname -f
-
Колеги приветствую!
есть ли существенная разница в плане производительности и потребления ресурсов между запросами:
select url, count() as cnt
from logs
group by url
having cnt > 10
limit 100
и
select url, cnt
from (
select url, count() as cnt
from logs
group by url
) where cnt > 10
limit 100
или внутри все равно будет приведено +- к одному? -
Привет всем!
Кто решал на CentOS 7
Application: It looks like the process has no CAP_NET_ADMIN capability, 'taskstats' performance statistics will be disabled. It could happen due to incorrect ClickHou
se package installation. You could resolve the problem manually with 'sudo setcap cap_net_admin=+ep /usr/bin
/clickhouse'. Note that it will not work on 'nosuid' mounted filesystems. It also doesn't work if you run cl
ickhouse-server inside network namespace as it happens in some containers.
? -
Устанавливаю в service-файле:
[SERVICE]
CapabilityBoundingSet=CAP_NET_ADMIN
не помогает -
никакой любви нет. Я не пользуюсь. Да и очень медленно генерация. Просто за неимением лучшего.
-
А что должно быть в mv? Урлы отпарсили?
-
Я делаю этим пользвателем default оставляю его без пароля как изначально было и разрешаю ему ходить только с айпи адресов других кх нод кластера.
-
Не хватает тега <yandex> и не надо больше ничего в других конфигах писать.
-
Идеальная MV для меня - отфильтрованная t1 (метрика) с несколькими стобцами из словаря или t2
Фильтрую для того, что бы исключить дубли в данных метрики -
Это невозможно.
-
Разобрался, спасибо
-
Там движок summing он единички складвает .
-
Через detach table поправить sql на диске attach, что в принципе тоже самое что и ребут
-
В доке кх описана масса функций как парсить урл. Ищите которая вам подходит что бы отрезать домен как вам надо.
-
-
-
Писать как в два массива [0],[1]
-
-
Ну да.
-
-
Всем привет. Почему при использовании нового синтаксиса джойна, результат отличается от старого синтаксиса
новый синтаксис такой:
FROM inner.finance_blank_with_amount_lst as t1
LEFT JOIN inner.gds_bonus_with_fact_factor_lst AS t2 ON t1.TicketID = t2.TicketID
не совпадет результат, если использовать старый
ANY LEFT JOIN(
SELECT TicketID
FROM inner.gds_bonus_with_fact_factor_lst
) USING TicketID -
может дело в ANY ?
-
а какой аналог его в новом синтаксисе? отличается?
-
так же ANY LEFT JOIN ... ON ..
-
спасибо 🙏
-
Та с функциями то все понятно. Я стучусь в словарь URLы должны совпадать. Но я на месте post_id всегда получаю 0
SELECT count(), dictGetUInt64('posts', 'post_id', tuple(path(URL))) AS post_id
FROM (
SELECT path(URL)
FROM (
SELECT CounterID, ClientID, Date, URL, any(LastTrafficSource) AS TrafficSource
FROM row_hits
WHERE like(URL, concat('%', 'https://example.ru/', '%'))
GROUP BY CounterID, ClientID, Date, URL
)
)
GROUP BY post_id -
Joined.
-
Joined.
-
/3
-
Ребят, подскажите, для того, что бы создать мат. вью без хранения в ней данных, достаточно просто не описывать схему а указать таблицу, которая принимает данные?
-
матвью без хранения это же просто вью
-
нет, мне нужна мат вью, как триггер на вставку в другую таблицу. Данные должны попадать в конечную таблицу, которая указывается после 'TO'; в самой же мат. вью не должно быть данных.
-
Joined.
-
если TO указано то вью будет посылать данные туда
-
если TO не указано MV создаст свою собственную таблицу и будет писать в нее
-
Она туда посылает данные, но так же эти данные попадают в саму мат.вью
-
Тоесть, задачу по переправке данных в другую таблицу она выполняет
-
Но в ней так же данные лежат
-
собственная таблица (неявная) называется .inner.mvname
-
да, она создается, если ТО не указать
-
когда вы делаяете запрос к MV она читает либо TO либо .inner.mvname
-
странно, я указываю ТО, .inner.mvname не создается, данные попадают в конечную таблицу. Но когда делаю запрос к самой мат вью select count(*), то кликхаус говорит, что там лежат какие-то записи
-
@den_crane
-
когда вы делаяете запрос к MV она читает либо TO либо .inner.mvname
-
Понятно. Спасибо. Я думал в ней лежат тоже какие-то данные, которые могут занимать лишнее место
-
сделайте тест и напишите truncate table которая to и увидите что в MV тоже все пропадет
-
@den_crane хорошо, спасибо!)
-
покажите
select dictGetUInt64('posts', 'post_id', tuple(путь написанный вручную))
select dictGetUInt64('posts', 'post_id', tuple(path(урл написанный вручную))) -
потом select * from таблица на которую смотрит dict where xxxx = путь написанный вручную
-
Всем привет, насколько я понял виртуальные поля _topic, _offset, _key таблицы с engine = kafka доступны только с версии 19.11, на докерхабе я видел только клик версии 19.9, кто-нибудь знает, когда примерно 19.11 будет в докерхабе, или как получить доступ к этим полям в 19.9?
-
Оба 'select dictGetUInt64' - возвращают 0
В таблице на которую смотри dist - запись есть -
сделайте create database dict Engine=Dictionary
-
тогда в базе dict появится таблица posts
-
отображение словаря
-
и проверьте что в ней
-
Плная таблица, нужный URL тоже в ней
-
почему урл-то? там путь вроде в таблице хранится
-
Я залил туда урлы. И функцией достаю путь
-
речь была про t1 - урлы, t2 - пути и id путей, словарь делаем на t2 ? не ?
-
Словарь делаем на t2 чтобы к урлам t1 добавить id
-
ОК и как понимать эту фразу тогда?
>Плная таблица, нужный URL тоже в ней -
откуда там урлы?
-
В словаре есть колонка id и url
-
У меня в t1 урлы с разными доменами, но path совпадает
-
словарь это K/V , по K возвращает V . Естественно ваш K это путь. Каким образом в t2 попали урлы и зачем, я осознать не могу. Извенити.
-
Ну я же поле из словаря прошоняю через path
-
еще раз словарь -- это K/V
например есть табличка
вася | петя | 16
таня | тася | 42
словарь может вернуть петя или 16 по ключу вася. Почему у вас в словаре не вася, а что-то другое это вне моего понимания. -
т.е. нафига там урлы?
-
ну и нет никакой проблемы их обрезать и сделать ключом, а сам урл положить в другое поле
-
это можно сделать даже на уровне виртуальных полей alias / materialized
-
Так и сделаю
-
Коллеги добрый день. В документации говорится, что в движке AggregatingMergeTree строки с одинковым первичным ключом заменяются на одну, а что проиходит в случае, если у нас таблица состоит из 5 колонок и первичный ключ только на первых 3х, то все строки с одинаковым ключом схлопнутся в одну не смотря на остальные 2 колонки?
-
в двух колонках будет any -- любое значение из этих колонок схлопнутых строк
-
@den_crane спасибо
-
ну можно их вычислить всякими maxState argMaxState и положить например что-то разумное
-
-
Метрики нод и логи?
-
если это началось после апгрейда, даунгредится назад
-
Joined.
-
в табло к сожалению нет Initial SQL для драйвера Generic ODBC (есть только для некоторых -- не всех -- конкретных СУБД, в хелпе можно найти каких именно, погуглив **Initial SQL**). а другого варианта не придумаю. даже CTE не получится выполнить -- Custom SQL должен начинаться с SELECT
-
Всем привет, почему нельзя сделать: ALTER TABLE x MODIFY COLUMN x String DEFAULT ‘’ для (x Nullable(String)) ?
Спасибо! -
В логах ни за что глаз не цепляется. Ошибки если и есть, то по недоступности узла по сети. Причём я в параллели подключён клиентом на "недоступный" сервак- меня не выкидывает. Количество открытых сессий меньше ограничений, увеличили ограничения на количество одновременных запросов. Но кардинально не изменилось. Что в метриках? Вижу сколько памяти, сколько запросов - причину зависания там не видно (мне).
-
Joined.
-
Апгрейд не делали. Были другие проблемы, которые сами себе выкопали, а потом закапывали. Теперь дошли до проблемы, у которой не видим причин (или путей обхода)
-
а какие таймауты поменяны от дефолтных? Может тупо инициатор ждет 10500 минут а нода ничего не пришлет?
Или после такого зависания все остальные тоже виснут? -
Таймаут все дефолтные. Там вообще почти все параметры дефолтные. Увеличили количество одновременно выполняемых запросов и количество партов в партиции. Количество партов немного, увеличивали чтобы данные перелить
-
create table XX (x Nullable(String)) engine=MergeTree order by tuple();
ALTER TABLE XX MODIFY COLUMN x String DEFAULT ''
Ok. -
зависает один на котором сбойнуло или все?
-
-
-
Можно ли как-нибудь в SELECT в MATERIALIZED VIEW сделать фейковое поле, чтобы в HAVING заиспользовать, при этом в саму таблицу не класть?
CREATE MATERIALIZED VIEW ... TO ...
AS SELECT
argMin(..., ...) AS _some_tmp_field
FROM ...
GROUP BY ..
HAVING _some_tmp_field != 0 -
а написать HAVING argMin(...)!=0 нельзя что-ли?
-
Можно. Но там условие сложное, хочется названия дать
-
Обернуть в еще один SELECT без этого поля, если проблема в несоответствии количества столбцов
-
create table XXX (x Nullable(String), y String) engine=MergeTree order by tuple();
Ok.
insert into XXX (y) values (‘a’);
Ok.
ALTER TABLE XXX MODIFY COLUMN x String DEFAULT ‘’;
Code: 349. DB::Exception: Received from clickhouse-server:9000, 172.17.0.2. DB::Exception: Cannot convert NULL value to non-Nullable type. -
Разве можно в MV обернуть?
-
-
CREATE MATERIALIZED VIEW ... TO ...
AS SELECT col1, col2,... FROM (SELECT
argMin(..., ...) AS _some_tmp_field
FROM ...
GROUP BY ..
HAVING _some_tmp_field != 0) -
У меня есть такие в бою
-
-
-
-
Только не забывайте, что GROUP BY в MV работает только в рамках одного блока INSERT в исходную таблицу
-
ALTER TABLE XXX MODIFY COLUMN x Nullable(String) DEFAULT '';
-
Наоборот, максимально этим пользуюсь)
-
👍
-
в смысле это же поле / его часть используется в select ? можно сделать промежуточный alias
select max....( length( arrayMap ( ...) as X0) as X1) as X
having X1 >0 -
😅
-
Не используется xd
-
-
Прости, возможно я неправильно выразился. Мой вопрос относительно смены типа.
-
наверное баг или просто еще не сделали, никто не натыкался.
можно попробовать проапдейтить сначала -
После
alter table XXX update x='' where isNull(x) ничего не меняется -
a select count() from XXX where isNull(x) ?
-
Возвращает 0
-
Но всё также падает
-
Joined.
-
-
А можно где-то достать слайды митапа или запись? Очень понравилась, спасибо!
-
Alter table update отрабатывает не мгновенно, а при следующем мердже. Вероятно еще не успел заапдейтить, если таблица большая. Принудительный merge может помочь, но это может быть больно.
-
там реально не работает, видимо вообще не реализовано, дело не в update
-
Ещё можно добавть новую колонку alter table xxx add column y String default x; Потом удалить default через alter, дропнуть x и переименовать y -> x
-
переименование уже сделали?
-
переименовать колонку только нельзя
-
Можно - таким же хаком через default)
-
>Можно - таким же хаком через default)
для default x, проблема в том что надо дождаться полного мержа, или сделать optimize final
поэтому сильно дешевле или два update или перелить все в новую таблицу -
Ну да, я и писал, что может быть больно, апдейт по сути тоже самое, просто более человечечким лицом
-
Позже будут в https://github.com/yandex/ClickHouse-presentationsyandex/clickhouse-presentations
Presentations, meetups and talks for ClickHouse. Contribute to yandex/clickhouse-presentations development by creating an account on GitHub.
-
Спасибо большое за митап!
-
+1
-
+1. Спасибо всем огромное за митап!
-
-
Могу ли узнать если есть уже ранее заготовленные столбцы то может ли кликхаус входящий json раскидать по ключу и значнию ?
- 12 July 2019 (227 messages)
-
КХ понимает подмножество json -- JSONEachRow
select 1 a, 2 b format JSONEachRow
{"a":1,"b":2}
Он не понимает массивы в виде К/V но понимает
select [1,2,3] k, [3,4,5] v format JSONEachRow
{"k":[1,2,3],"v":[3,4,5]} -
да я уже разобрался вот только думаю теперь как передать это в prepare
-
mdraid (hba)
dd if=/dev/zero of=test oflag=direct bs=100M count=1000
104857600000 bytes (105 GB, 98 GiB) copied, 236.313 s, 444 MB/s
dd if=test of=/dev/null iflag=direct bs=100M
104857600000 bytes (105 GB, 98 GiB) copied, 64.3187 s, 1.6 GB/s
fio --name=test1 --filename=fio --rw=read --bs=10M --direct=1 --ioengine=libaio --iodepth=32 --size=100G --numjobs=1
read: IOPS=177, BW=1864MB/s
таже карточка но рейд железный
dd if=/dev/zero of=test oflag=direct bs=100M count=1000
104857600000 bytes (105 GB, 98 GiB) copied, 230.426 s, 455 MB/s
dd if=test of=/dev/null iflag=direct bs=100M
104857600000 bytes (105 GB, 98 GiB) copied, 167.755 s, 625 MB/s
fio --name=test1 --filename=fio --rw=read --bs=10M --direct=1 --ioengine=libaio --iodepth=32 --size=100G --numjobs=1
read: IOPS=63, BW=654MB/s
mdraid
dd if=/dev/zero of=test oflag=direct bs=1M count=100000
104857600000 bytes (105 GB, 98 GiB) copied, 367.762 s, 285 MB/s
dd if=test of=/dev/null iflag=direct bs=1M
5214568448 bytes (5.2 GB, 4.9 GiB) copied, 26.7059 s, 195 MB/s
dd if=test of=/dev/null iflag=direct bs=10M
18245222400 bytes (18 GB, 17 GiB) copied, 17.5792 s, 1.0 GB/s -
Всем привет, тут хотят у нас в ISP Hadoop + Spark разворачивать и в него закидывать всю инфу из разных баз (Postgres, биллинг самописный, логи, Jira, Сетевое оборудование, логи чатов и проч). Я раньше погляжывал на Spark, но потом появился CH. Читал на Percona сравнение систем, там CH победил, учитывая появение ML функций появился еще один аргумент за. Подскажите еще чего-нибудь на тему холивара, может кто из личного опыта подскажет?
-
задача то какая?
-
записываь можно куда угодно, вопрос что с этим собираетесь делать =)
-
А, пардон, не указал, глобально сохранить и привлечь клиентов, за меньшие деньги. Конкретно №1 - проанализировать причины ухода, предсказание оттока и его предотвращение. Пример: 1)были ошибки на порту + звонок в ТП + отсутствие трафика = абон недоволен - надо ему позвонить и поговорить. 2) был визит инженера + звонок в ТП + непополняется баланс = проблема.
-
Я со своей колокольни тоько могу судить - оработал в ISP(комстар регионы в НН) , если бы эту инфу грузить с моей сторой работы - колтчество данных в день для CH было бы очень маленокое, даже если бы я грузил все трапы со всех свиечй достпупа (ИМХО вся магия в этой задаче присходили бы на жтапе ETL + ML(не знаю как ML работает в CH и можно ли обойтись только CH). вполне возможно что вам нужен будет и CH и Spark
-
Spark - ETL + ML , CH - сторадж + аналитика
-
вообще инетересно как делают ML на клике
-
-
Для себя я вот такую картину вижу (как я бы начинал делать, может и не правильный подход) - CH - сырые данные и подготовка данных для ML модели, сам ML на python
-
Интересна задача - но опять же есть ощущение что ml вам придется делать на этапе etl , перед тем как вставлять данные в кх: анализ чата и выставление меток, анализ тикетов и классификация.
-
Да
-
где можно посмотреть прогресс слияния ReplacingMergeTree?
-
select * from system.merges как обычно
-
Не лагало? Можно как-то оптимизировать?какая либа?
-
Joined.
-
привет, подскажите, хочу поменять ip, нужно ли после смены ip выполнить SYSTEM DROP DNS CACHE или само обнвоится?
-
Либа https://github.com/kszucs/pandahouse. Юзаем старую версию КХ 1.54390. Даже очень совсем неоптимизированный запрос с JOIN и агрегатными функциями на очень неудачной схеме справляется за 3 минуты и вытягивает 45 МЛН записей без каких либо вопросовGitHub - kszucs/pandahouse: Pandas interface for Clickhouse database
Pandas interface for Clickhouse database. Contribute to kszucs/pandahouse development by creating an account on GitHub.
-
насколько помню, если КХ через пару попыток обращения понимает что IP не валидный , то он сам сбрасывает кеш и все должно будет работать . Главное не заюзать старый IP в другом или рядом стоящем кластере :)
*Не уверен*, просто на подумать и поискать ответ: Возможно будет важно чтобы у вас в конфигах имена были вместо IP, это на случай реплицирования через zk. Не знаю есть ли у него кеш, и посмотрите что у него записано , нет ли там IP вместо доменных имен. -
-
Спасибо
-
в remote_servers имена, в создании таблиц использовали макросы, в макросах тоже имена, в зукипере по пути /tables/../replicas/.../host тоже имена
еще где-то посмотреть ? -
в таком случае похоже что проблем быть не должно.
-
-
Joined.
-
Joined.
-
Коллеги, всем привет))))
-
Привет!
Нужно перегнать терабайт данных из одной таблицы в другую (разная структура).
Запрос выполняется около часа, потом отваливается с сообщением "Code: 394, e.displayText() = DB::Exception: Query was cancelled (version 19.9.3.31 (official build))"
Нужно поменять какую-то настройку? -
Подскажите, пожалуйста, есть ли для Clickhouse законченное решение для просмотра логов , типо как решение loghouse , но оно заточено под k8s , а хочется чтото под standalone
-
Кароч нужно что-то типа ELK , но на clickhouse )
-
tabbix и прочие клиентские приложения для clickhouse не предлагать )
-
-
Добрый день :)
В этом чате работает бот который следит за тем чтобы люди не спамили, поэтому будет лучше если вы будете задавать вопрос одним сообщением. Да и для остальных, я думаю, это будет очень удобно.
Заранее спасибо. ;) -
Прошу прощения ) больше так не буду )
-
Joined.
-
-
Joined.
-
Подскажите, как проще всего переименовать неключевую колонку в mergeTree таблице?
Ренейма же вроде нет? -
вчера обсуждали https://t.me/clickhouse_ru/108779 и внизAndrei Tupitcyn in ClickHouse не тормозит
Ещё можно добавть новую колонку alter table xxx add column y String default x; Потом удалить default через alter, дропнуть x и переименовать y -> x
-
Спасибо!
Тогда несколько вопросов про мутациям вцелом и про update в частности:
1. мутации до сих пор в бете?
2. в документации сказано что при выполнении мутации таблица в старом формате конвертируется в новый формат. О каком формате идёт речь?
3. чем может быть чревата обратная несовместимость этих форматов?
4. обновление формата - это тяжёлая операция? От объёма данных и размера кластера это зависит или нет? -
2. Новый формат хранения на диске
3. Тем что при откате КХ на старую версию таблица не заведется
4. Любая мутация это, по сути, переливание всех данных из старых столбцов в новые. В какой формат их переливать особой разницы нет. -
redash?
-
А есть ли планы или уже какие-то инструменты для анонимизации (не для тестирования) в CH? Что-то в духе https://aircloak.com/wp-content/uploads/Diffix-High-Utility-Database-Anonymization.pdf
-
Обфускация данных для тестов производительности
Пользователи ClickHouse знают, что его главное преимущество — высокая скорость обработки аналитических запросов. Но как мы можем выдвигать такие утверждения? Это должно подтверждаться тестами...
-
-
а в чем разница?
-
-
ну для чего вы обфускатор использовать будете это уже ваше дело :)
-
для тестов или гдпр
-
Ну это же вроде тоже не то, больше для графиков ))) а мне нужно для удобного фильтра по логам
-
сам ищу :(
-
думал расковырять логхаус
-
но он плохо расковыривается
-
То есть update на старой таблице не легче чем трюк с дефолтным значением и optimize partition - оба способа будут переналивать данные.
А на новых таблицах update затрагивает только целевой столбец, а остальные данные не ворочает.
Я правильно понимаю? -
в PDF по ссылке описана разница между обфускацией и анонимизацией, не претендую на звание эксперта в этой области, но, видимо, а) там всё не просто б) спрос есть и будет расти
-
Live merge of "processors" branch
Slides: http://clickhouse.yandex/presentations/meetup24/5.%20Clickhouse%20query%20execution%20pipeline%20changes/ Processors description: https://github.com/...
-
еще от вк была поделка, но она не такая клевая :( https://github.com/VKCOM/lighthouseGitHub - VKCOM/lighthouse: Lightweight interface for ClickHouse
Lightweight interface for ClickHouse. Contribute to VKCOM/lighthouse development by creating an account on GitHub.
-
Т.к. парты в КХ по сути immutable то любое их изменение вызывает цикл декомпрессия-изменение-сжатие обратно.
В доках пишут что любые мутации полностью переколбашивают весь парт, а не только отдельные столбцы. -
Не читал, многабукаф, но по моей практике GDPR-комплаенса до таких низкоуровневых вещей никто не опускается. Обфускации и замены user id каким-нить хешем от него вполне достаточно. Возможно это изменится в будущем если регуляторы начнут дрючить сильнее.
-
loghouse от flant более менее вменяемый но его надо напильником пройтись для того чтобы он не только под k8s работал )))) там они используют кастомный плагин для fluented
-
Все привет. В кликхаусе можно как-то переименовать БД?
-
А как-то можно понять в каком формате таблица, будет ли она вообще конвертироваться если выполнить миграцию? В system.tables не вижу чего-то похожего.
-
Мутации появились в 1.1.54388 - если таблицы создавались в версиях новее то формат новый
-
А если я не уверен, никак не узнать? Кто-то мог какую-то мутацию выполнить уже, например.
-
ну я из него хочу вырвать только интерфейс, поставка в кликхаус уже есть.
-
Похоже про формат я наврал. Текущие версии КХ делают format_version = 1 (можно увидеть в /var/lib/clickhouse/data/<database>/<table>/format_version.txt
При этом в исходниках есть как минимум еще 2, 3 и 4. -
подскажите пожалуйста, а как работает TTL на табличку? я создал табличку, в ней partition by toStartOfHour(_timestamp) TTL _timestamp + INTERVAL 12 hour, смотрю на партиции и вижу заполненные таблички у которых интервал явно больше 12 часов. Что я делаю не так?
-
Саму БД нет. Затея так себе. Можно сделать новую БД и отренеймить в нее все таблицы, потом дропнуть старую БД.
Надо учесть, что ренейм матвьюх не поддерживатся, надо пересоздавать. + Merge, Distributed, Buffer имеют в create прямое указание БД которое останется старым и их надо пересоздать. В replicated путь в зукипере останется тот же...
Вообщем только руками по одной таблице и вьюшке смотря в CREATE. -
Выполнение могло прерваться по таймауту max-execution-time, но там другое сообщение должно быть. В логе было что-то еще?
-
смотрели SeekTable, там есть flat table где можно быстро фильтровать в search-стиле. Для более сложных фильтров можно настроить параметры.
-
😂
-
Структура сильно разная? доальтерить исходную таблицу до конечной и использовать clickhouse-copier нелья?
-
Структура сильно разная? доальтерить исходную таблицу до конечной и использовать clickhouse-copier нелья?
-
Практически такая же, ORDER BY другой
После выполнения скрипта во второй таблице данные есть, но не все -
Смотрел ошибки в логах? там должны быть грабли - too many parts(300)
-
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x16) [0x72868b6]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x22) [0x39a9032]
2. /usr/bin/clickhouse-server(DB::IBlockInputStream::isCancelledOrThrowIfKilled() const+0x90) [0x658eac0] -
Вобщем я пришел только к одному вменяемому способу сделать другой ORDER BY в новой таблице и перегнать данные - clickhouse-copier
Во всех других при большой вставке > 100млрд строк (32 колонки) я ловлю too many parts и данные вставляемые в эти партиции дропаются.
использовал в вариантах 1 таблица — 2я таблица другой порядок в ORDER BY и 1 таблица 1партиция — кластер 10 шард, 100 партиций -
Подумал, может быть процесс закрывается спустя время, по какой-то настройке
-
Спасибо
-
Такая ошибка там будет <Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too many parts (303). Merges are processing significantly slower than inserts
-
У меня такой не видно
-
Попробуй тогда перед запросом сделать set max_execution_time = 99999; и попробовать еще раз
-
Да, это сделано
-
yandex/ClickHouse tagged: v19.10.1.5-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.10.1.5-stable
Release notes:
v19.10.1.5-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Видео с митапа в Минске: https://www.youtube.com/playlist?list=PL0Z2YDlm0b3hLz6dmyu6gM_X871FG9eCc
-
None
-
Там хард линки создаются это очень легкая операция
-
-
ребят, можно ли как-то переименовать название базы данных в кликхаус?
-
если так - то хорошо. в доках об этом ничего как обычно :)
-
Так в итоге на старых таблицах переименование колонки выгоднее через update сделать чем через optimize или нет разницы?
-
Попробовал на небольшой таблице у которой format_version.txt = 0 сделать update - format_version.txt так и остался 0
-
Через апдейт если колонок больше 3.
-
в доке не про этот формат, а про версию парта.
Но там папки после мутации по другому назваются и старые кх(не умеющие мутации) такие папки не поймут. -
Раз в сутки интервал проверки ттл (по умолчанию)
-
так На видео автор все рассказал
-
А, вижу, номер мутации в конце имени добавился
-
Joined.
-
при инсерте даты можно взять стрингу и обернуть toDate(?)
-
тогда почему
'clickhouse: Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected [ before: {}: (at row 1) -
Joined.
-
но не нужно
-
В каком формате строка?
-
The Go Play Space
Alternative Go (Golang) Playground with syntax highlighting, turtle graphics and more
-
функция на го
-
пишем запрос как строку и аргументы как ?
-
10 11 ему не нравится (
-
Я так понимаю
-
Вы sql в виде текста можете посмотреть? У вас там дата в виде числа секунд?
-
createTableImpressions = `CREATE TABLE impressions (
EventDate Date, -
Нельзя в value при INSERT функции использовать
-
дата в го просто строка
-
потом отправляем его в строку запроса кликхауса
там только год месяц и день -
EventDate: "2019-06-05",
-
для второго дня с кликхаус вообще неплохо думаю )))
А КАК ? -
-
потому что там слайс значений
-
поле структуры слайс
-
-
при чем тут валью ?
-
это поле
-
а полей много
-
Я не понял о чем Вы
-
ВСем привет!
есть сервер источник данных, генерирует стату… и есть сервер с ClickHouse отдельно выделенным под него. Как правильно слать данные на ClickHouse?
варианты рассмотренные нами:
- сначала собираем данные на локальном сервере MYSQL, и после кроном пушим через HTTP-интерфейс на ClickHouse сервер.
Проблемы: недолетело, как контролировать. Долетело но что то пошло не так и данные трасформировались, и вставка прошла с ошибками…
Решение проблемы: на ClickHouse сервере сделать небольшой php прокси, кторый будет стоять перед входом в ClickHouse HTTP-интерфейсом и брать два поля: хешь строки кторуюя я буду передвать и саму строку. Все принимаем дальше локально вставляем. Но тоже криво ка кто.
- Просто пушить по одной строке, но долго
Есть ли рашение проблемы моей с очередью.
Спасибо! -
Все что вы пишите после VALUE в INSERT не имеет значения
-
это я уже понял а что писать вместо валью ?
-
-
здесь пишут
-
и ничего
-
INSERT INTO test VALUES (1464364942,1464364942);
-
Примерно по этой причине LightHouse и был написан :).
-
Ничего можно не писать и pq уберите еще
-
а оно по партициям дропает?
-
clickhouse-client разбирает запрос и пишет как надо, гошные клиенты нет )
-
UserHosts: []string{},
-
ща опять ошибк абудет лезть что не может распарсить масив )
-
Нет. типа мутирует.
-
ух, это ж дорого не?
-
Да.
-
а нету ишуя что бы килять тупо партиции там где можно? у меня часовые партиции, храню данные 12 часов, я ожидал что оно просто старые партиции мне по таймеру убьет и ня
-
Скрипт из трех строк на баше
-
я ленивы 😑
-
Наймите программистов
-
( toDate('2019-06-05'), '9b196164-baa3-4e9d-9213-38570f46bca2', '', '5c2cc12a96e0af27db36870f', '5a69e8952c30531d56f36d31', '305146268183', '5b4375a4b0ee6b000e6. Expected one of: FORMAT, VALUES, SELECT'
-
и мне кажется это хорошая оптимизация для хорошей фичи
-
я вроде как и есть програмист 😂
-
😂
-
-
Add MergeTree Option to automaticly drop old partition · Issue #4119 · yandex/ClickHouse
while be useful to add MergeTree engine option to automatically drop old partition based on criteria on the partition key. in that way table are automaticly purged without extrenal script/program...
-
о!
-
Я не понимаю что вы делаете, приведите весь код что вы понаписали )
-
The Go Play Space
Alternative Go (Golang) Playground with syntax highlighting, turtle graphics and more
-
планируем следующий митап в Санкт-Петербурге через две недели, есть желающие выступить?
-
Господа, подскажите, пожалуйста, как использовать ASOF join? пример из документации не работает
-
как именно не работает?
-
секунду
-
Добрый день
Имеется группировка на postgres
"week" => "to_char(to_timestamp(created_at),'YYYY-WW')",
"month" => "to_char(to_timestamp(created_at),'YYYY-MM')",
"quarter" => "to_char(to_timestamp(created_at),'YYYY-Q')",
"year" => "to_char(to_timestamp(created_at),'YYYY')",
не подскажите, как можно то же самое написать для clickhouse? спасибо -
смотри на функции toStartOfInterval и компанию (toYYYYMM, ...)
-
select entity_id, cur_state, cur_timestamp, db.location_states.timestamp
from db.entity_states asof join db.location_states using (entity_id, timestamp)
limit 1;
Code: 10, e.displayText() = DB::Exception: Not found column timestamp in block. There are only columns: entity_id, cur_state, cur_timestamp (version 19.9.3.31 (official build)) -
"to_char(to_timestamp(created_at),'YYYY-WW')"
-
а можно пример для этого выражения?
-
выглядит как-будто в db.entity_states колонка называется cur_timestamp вместо timestamp, т.е. надо на ON вместо USING переписать
-
судя по доке обязательно должно быть using, чтобы asof колонка последней была в данной секции
-
toYearWeek()
-
если правда так, то в подзапросе переименовывать чтобы одинаково назывались
-
ок попробую спасибо
-
DB::Exception: Unknown function toYearWeek, e.what() = DB::Exception
-
старая версия КХ судя по всему
-
Connected to ClickHouse server version 1.1.54380
-
Старый. Хотя и в моем 19.9 тоже этой функции еще нет.
Можешь попробовать toStartOfWeek() по сути это то же самое -
там нет года
-
Оно возвращает полную дату с округлением до недели вниз
-
к нашим костылям придумали вот что. Поднимаем локальную базу ClickHouse на сервере с CRM, и настриваем репликацию ее с сторонним сервером. Тем самым убираем все свои костыли, что придумали. НО вопрос. КОгда идет инсерт в основную базу, паралельно идет репликация? Потмоу что я вставляю данные при рендирнге страницы, когда собираю стату, и будет ли это являеться задержкой рендринга. Может кто то помочь с этим вопросом?
спасибо! -
-
What is Kafka Retention Period? - CloudKarafka, Apache Kafka Message streaming as a Service
Frequently Asked Apache Kafka Question: What is Apache Kafka retention period? This article explains what the Apache Kafka Retention Period is and how it can be adjusted.
-
Поделитесь опытом, как вы храните источники сессий в клике и кто как по ним строит аналитику в клике?
Вопрос вот в чем: Клик используется как хранилище событий (date,user_id, event_id, url, etc).
Допустим я могу взять из первого события в сессии url и распарсить его на метки, в итоге получу date,user_id - utm1, utm2.
Как мне дальше лучше использовать эти данные, через join? Это нормальная практика или есть вариант по изящнее? -
сначала редис и джава, потом попадает в кассандру и джаву, потом КХ as datalake, потом джава, спарк, джава, го, и вот тут уже попадает в КХ в готовом виде со всеми атрибутами подклеенными из предыдущих ивентов.
-
То есть в итоговом варианте для аналитиокв на каждом эвенте уже есть источники(utm), так?
-
да. КХ не key/value стор. Нельзя оттуда выбрать все предыдущие ивенты юзера, чтобы обогатить новый, это надо делать до КХ
-
-
-
-
да, только так
-
-
-
вчера как раз тот же самый вопрос задавали в en чате и в итоге https://github.com/yandex/ClickHouse/issues/5984
-
select a.1,a.2 from (select [(1,'a'),(2,'b'),(3,'c')] a) array join a
-
-
добрый день, drop database зависает и через какое-то время происходит "cancelling query".
как можно принудительно удалить базу данных с большим количеством данных? -
а сообщение об ошибке полностью? какая причина cancelling query. И база наверное все равно дропнется
-
в кликхаусе можно базу переименовать?
-
-
-
-
-
-
@den_crane извините за беспокойство. была проблема с сервером.