- 01 April 2022 (329 messages)
-
Иногда для работы с clickhouse надо иметь нормальное психическое здоровье. Может это джун?
-
Прошло больше суток, без optimize final никаких неожиданностей.
Данные старше 30 дней пишутся в arch00 с дефолтным кодеком, пережимаются и остаются на месте.
Часть данных сделал move partition в arch00, пережались и остались там же.
В общем, резюмируя, работает.
TTL toDate(start_time) + toIntervalDay(1) RECOMPRESS CODEC(ZSTD(6)), toDate(start_time) + toIntervalDay(30) TO VOLUME 'arch00'
SETTINGS storage_policy = 'tiered00'
select version();
21.11.5.33 -
💸ОБУЧАЮ ЗАРАБОТКУ ОТ 100К В МЕСЯЦ💸
🏆РАБОТАЕМ с Партнеркой Перфлюенс
🏆ОБУЧАЮ полностью работе на пп, все способы заработка
✅В наличии ВСЕ пруфы(выплат на пп, зачислений на карту)
💎МОЯ Помощь по всем вопросам💎
💰СТОИМОСТЬ 7500₽
❗ПУСТОСЛОВЫ, БЕЗ ДЕНЕГ НЕ ПИСАТЬ❗
📝 Связь: @Mantekaccc
🎩 Гарант: @scrooge_garantbot -
Мне набери - +74999937334
-
-
Ага в час
-
Ну как-то 100к рублей в месяц это вроде не много совсем
-
Для регионов - космические зарплаты
-
это стартовая цена, видать :)
-
Ну справедливости ради там ОТ. Может таки 400-500 будет.
-
Для регионов? Рязань, программисты 100+ еще в 2003-2004 в паре местных контор. Не понимала смысла уезжать в мск на 80, получать проблемы со съемной квартирой из своей зп, если тут можно зарабатывать. Правда 1 выходной в неделю, работа 24/7 и подработки только из рук шефа с % ему
-
Сейчас в этой конторе в Рязани говорят топы из 1000 выходят ) И в мск полно хороших пацанов из техсаппорта, которые могут быть админами вполне, и сидят в пределах 150
-
В Московской области в 2008 получал примерно 35-40. Работа не то что бы была 8*5, скорее 12*5...
-
Оффтоп либо опасная ссылка
-
-
запустить клиент с ключом -m
https://clickhouse.com/docs/ru/interfaces/cli/#command-line-options -
два чая этому господину!
-
Всем привет. Обновили кластер CH с версии 20.12 до 22.01. При этом заметил странное поведение консьмеров Kafka. Мы используем MV и Kafka таблицы для чтения данных в Protobuf формате. Ничего не меняли, при этом скорость чтения топиков стала неравномерной какой то, красным подеркнут на скрине график количества прочитанных сообщений до обновления. Далее после, куда копать не пойму, так как ошибок ни в кафке ни в CH нет. Подскажите может кто сталкивался
-
Создать файл с текстом запроса и с ключем --queries-file или -qf выполнять
-
У нас после обновления с 20.8 на 21.11 сильно упала скорость вычитки из кафки. После всех раскопок выяснилось, что кафка-таблицы с параметром kafka_thread_per_consumer = 0 (по умолчанию) стали читать всегда со скоростью одного консьюмера вне зависимости от значения параметра kafka_num_consumers.
Немного не ваша ситуация, но вдруг поможет. -
ENGINE = Kafka
SETTINGS kafka_broker_list = 'убрал', kafka_topic_list = 'prod.Trackers_s01_v1', kafka_group_name = 'TrackersGroup_s01_v1', kafka_format = 'Protobuf', kafka_schema = 'logentries_v1:TrackerLogRecord', kafka_max_block_size = 1048576, kafka_num_consumers = 5
Вполне возможно у нас до этого было было в каждом топике 9 партиций и два CH в кластере (с одним шардом и репликами) каждый читал один топик с одной и той же консьюмер группой у одного kafka_num_consumers = 5 у другого kafka_num_consumers = 4 Всем все хватает аттачится и активный консьмер потребляет -
Думаешь kafka_thread_per_consumer поставить = 1 ? Или сделать теперь kafka_num_consumers а потоков по 5?
-
Добрый день. подскажите пожалуйста, в system.replicas кластера время от времени получаю ошибку типа
Code: 999. Coordination::Exception: Session expired (Session expired). (KEEPER_EXCEPTION) (version 21.11.4.14 (official build))
в какую сторону можно посмотреть? -
Возможно ZK и коннекты с ним. Посмотри что в его логаг, нет ли проблем с выбором лидера.
-
За репликацию именно он отвечает.
-
Ставьте kafka_thread_per_consumer = 1 и kafka_num_consumers равное числу партиций в топике. Возможно ещё background_message_broker_schedule_pool_size надо увеличить, если суммарное число консюмеров во всех кафка таблицах больше пула
-
Спасибо, уже наблюдаю за эффектом. А где глянуть текущее суммарное число консьюмеров ?
-
текущее значение
select * from system.metrics where metric = 'BackgroundMessageBrokerSchedulePoolTask'
system.metric_log - история
Но вообще просто суммируете kafka_num_consumers из каждой Kafka таблицы и получаете значение ниже которого пул лучше не ставить -
Принял, спасибо огромное. Благодарю. 👍
-
И вам спасибо огромное. Благодарю. 👍
-
Привет, всем
Можете, пожалуйста, описать работу скрипта?
clickhouse-client --format=TSVRaw -q"select 'ALTER TABLE ' || database || '.' || table || ' ATTACH PARTITION '|| partition_id ||' ;\n' from system.detached_parts group by database, table, partition_id order by database, table, partition_id;" | clickhouse-client -mn
Не могу понять часть запроса:
"select 'ALTER TABLE ' || database || '.' || table || ' ATTACH PARTITION '|| partition_id ||' ;\n'
Что означает || и как сущности внутри || работают -
спасибо
-
отвечаю на свой же вопрос (может кому полезно будет): set optimize_aggregation_in_order = 1 вроде помогло
https://clickhouse.com/docs/en/operations/settings/settings/#optimize_aggregation_in_orderSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
|| - это конкатенация строк. https://clickhouse.com/docs/en/sql-reference/operators/#concatenation-operator
сначала исполняется запрос чтобы сделать результирующий запрос, который передаётся на исполнениеOperators | ClickHouse DocumentationOperators ClickHouse transforms operators to their corresponding functions at the query parsing stage according to their
-
спасибо
-
-
или как такое после кривого дропа побороть можно? REPLICA_IS_ALREADY_EXIST
-
коллеги, вопрос по обновлению ch в кластере
согласно документации, достаточно сделать
$ sudo apt-get update
$ sudo apt-get install clickhouse-client clickhouse-server
$ sudo service clickhouse-server restart
это можно сделать последовательно на всех нодах кластера? или планировать downtime все таки? Кластер из 3х нод -
Можно последовательно
-
-
Главное не с 19 версии до 22
-
-
По идее не должно быть проблем
-
-
Всем привет! Правильно ли я понимаю, что в КликХауз нет триггеров нет и нет возможности что-то запускать по расписанию и например инсертить из хайвтаблицы в локальную таблицу. И ещё вопрос распространяется ли материализация постгри на гринплам (скорее всего нет, но лучше уточнить 😁)
-
в клике есть MV https://clickhouse.com/docs/en/engines/table-engines/special/materializedview/ это вполне себе триггер, крутить вертеть это можно по разному с разными движками для достижения нужных результатов. для запуска по расписанию - пишите скрипты, кидайте в крон)MaterializedView | ClickHouse Documentation
MaterializedView Table Engine Used for implementing materialized views (for more information, see CREATE VIEW). For stor
-
ну и по традиции
-
🤣🤣
-
👍
-
вопрос снят
-
Привет! Нужен совет...
Есть запрос условно на подсчет уникальных значений и там есть несколько условий. Но нужно сделать этот запрос с болшим кол-вом разных временных промежутков таймстэмпов. Все таймстэмпы есть в экселе, могу из них сделать отделную таблицу в клике.
Кто знает, как перебрать все промежутки таймстэмпов автоматически, а не руками каждый раз менять запрос? Условие таймстэмпа пишу так: where ts berween 1 and 2. Можно ли, как то это быстро сделать в клике? куда смотреть что читать.. -
А сколько промежутков времени ?
-
-
Нету такого функционала, если вы конечно руками не пропишите для каждого столбца условиями. Но лучше бы это реализовать через python и pandas
-
uniqIf(user_id, c_date = '21323')
-
Например как то так
-
-
всем привет, может кто сталкивался - обновили clickhouse c версии 20.3 до 21.10 и очень выросла нагрузка на диск, с чем может быть связано?
в клике консьюмеры, которые читают кафку, обрабатываются в матвью и пишутся в таргет-табличку -
-
Это все читал и смотрел, mv вроде не может триггериться на вставку в хайв например из спарка или я что-то пропустил? А крон для моей задачи не вариант, либо нативно либо что-то типа dbt
-
Всем привет!
Может кто сталкивался, делаю вью для вставки в таблицу, и есть там поле с типом Array(String), а сама вью делает этот массив из строки.
пытаюсь так:
cast(coalesce(splitByString('", "', replaceRegexpAll(некое_строковае_поле, '\[\"|\"\]', '')), []) as Array(String))
и даже так не хочет - пишет Nested type Array(String) cannot be inside Nullable type
хотя Nullable здесь ну никак не может получиться.
как побороть? -
-
что в строке?
-
а "некое строковое поле" у вас типа String или Nullable(String)? я сейчас воспроизвел ошибку для nullable типа
-
Всем привет!
Есть запрос, получаю график из топ пяти пар общающихся адресов. Как мне добавить ещё пару other, где будет сумма всех остальных значений заданного интервала?
SELECT
toStartOfInterval(toDateTime(TimeReceived), INTERVAL 5 second) as time,
SrcIP,
DstIP,
sum(Bytes * SamplingRate) AS Bytes
FROM flows
WHERE TimeReceived >= '1648808461' AND TimeReceived <= '1648819261'
GROUP BY time, SrcIP, DstIP
ORDER BY Bytes DESC
LIMIT 5 -
можно и не пару, достаточно будет и запроса по одному srcip, например
-
-
типа такого '["1","2","3"]'
-
Nullable
-
вернее, еще пробелы после запятых есть '["1", "2", "3"]'
-
спасибо!
-
вот на это, похоже, и ругается: не на Null значение, а на то, что получаемое Not Null значение имеет тип Nullable(String). потому что с типом просто String код работает
-
да, похоже
-
SELECT flatten(extractAllGroupsVertical(ifNull(a, ''), '"(\\d+)"'))
FROM
(
SELECT arrayJoin([CAST(NULL, 'Nullable(String)'), '["1", "2", "3"]']) AS a
)
Query id: 1f7bb473-98ab-406e-95bf-3202df2d0458
┌─arrayFlatten(extractAllGroupsVertical(ifNull(a, ''), '"(\\d+)"'))─┐
│ [] │
│ ['1','2','3'] │
└───────────────────────────────────────────────────────────────────┘ -
спасибо, подумаю как выкрутиться
-
Кликхаус — классная база данных и главный опенсорс проект родом из Яндекса выпустил зявление о войне.
Они «осуждают агрессивную войну с Украиной, которую ведет Путин».
Говорят, что ничего с Россией их не связывает, кроме русских инженеров, которые сидят в Амстердаме. Публикуют обращение сейчас, когда закончили эвакуацию инженеров и их семей из России.
Такие дела.
https://clickhouse.com/blog/we-stand-with-ukraine/ -
-
-
да удалят данные и будут просить биткоины
-
причем здесь политика, сейчас либо ты осуждаешь кровавуюбаню, либо закрываешься, никто у тебя ничего покупать не будет
-
А это случаем не политизированное заявление?
-
Повестка именно такая, как вы говорите, однако я предпочитаю лозунг “работаем дальше”
-
не я вкинул сообщение, вообще могу вернутся в админы и устроить бан всем
-
Демократично устроить бан всем, кто не осуждает? :) Давайте работать дальше, Кликхаус-чатики вне политики.
-
-
-
Пи*дец
-
?
-
Почему?
-
Они в мозг долбятся ?
Нормально же всё было, чё произошло я ни пойму(((( -
аргументация 🔥
-
Согласен
-
-
-
я без идей как вам помочь с вашей проблемой ¯\_(ツ)_/¯
-
вам кто-то мешает?
-
А мне интересно, ребята которые родом из России и являются разработчиками\соавторами ClickHouse тоже разделяют эту точку зрения ?
Или это в очередной раз попытка "пройтись по верхам" и выдать мнение меньшинства за мнение большинства ? -
Наличие разума в организме.
-
у вас серьёзно чатов для вот этого всего недостаточно?
-
это "ку" пацаков на планете чатлан
-
Не заметно, раз вы думаете что они сделали что-то плохое) У них не будет клиентов если не сделать такое заявление
-
Не понимаю надрыва и проблемы, clickhouse.com выразил позицию компании. Все несогласные с ней могут найти другого работодателя согласно убеждениям.
-
а кого кто кинул?
-
Да мы как раз здесь недавно обсуждали политизированную рекламу площадки на которой размещался сайт документации python clickhouse_driver'а, и Костя кстати как я понял проплатил (нашёл как это сделать в условиях отключённого Visa\MC), как раз что-бы этой рекламы не было, и это по крайней мере в меня вселило уверенность, что хотя-бы ClickHouse не будет политизирован...
А тут вон какая новость, да ещё и на сайте clickhouse.com... Сказать, что я в шоке - ничего не сказать. -
А что у них с поддержкой случилось?
-
Ну санкции это не шуточки, нарушить их - нарушить закон.
-
Ну просите манибек
Не ясно как это связано с позицией компании по данному вопросу -
Санкции -- это экономика, а не политика. Мы бесплатно поможем тут
-
Чуть наверное не так.
Санкции - это реакция цивилизованного мира. А экономика - следствие. Или нет? -
А политика, как завещал Ленин, есть концентрированное выражение экономики. :)
Но вообще вроде всем понятно, что будь ты хоть тысячу раз аполитичен, живём и работаем мы не в сферическом вакууме. В этом плане спасибо КХ, что ограничились просто заявлением. -
-
ботоферму и сюда запустили...
-
Александр, как я помню один из основателей Altinity :)
-
Если у Альтинити есть юрист, то контракт на поддержку обязательно включает пункт о непреодолимой силе. Да и в любом случае это обычные коммерческие отношения.
-
@den_crane Почисти пожалуйста
-
китайские товарищи не в счёт?
-
@orantius бан?
-
они под санкциями уже много лет
-
уровень дискурса в чатике резко
-
-
Ага, вне политики)))) Вон одного уже похоже забанили, кто следующий "не согласный" на очереди
-
Добрый день, каким образом можно в кх реализовать подобие
https://support.google.com/docs/answer/3094249
этой фукцнии? simpleLinearRegression не подходит, интересует 6ти мерная (к примеру)LINEST - Docs Editors HelpGiven partial data about a linear trend, calculates various parameters about the ideal linear trend using the least-squares method. Sample Usage LINEST(B2:B10, A2:A10) LINEST(B2:B10, A2:A10, FALSE,
-
Получилось?
-
После обновления ClickHouse с 20.12 версии до 22.12 получаем такую ошибку [1002] ClickHouse exception, message: Code: 271. DB::Exception: Data compressed with different methods, given method byte 0x3d, previous method byte 0x82: (while reading column user_keywords): (while reading from part /home/clickhouse/data/data/develop/Impressions/20220401-14_1483_2232_4/ from mark 1516 with max_rows_to_read = 752): While executing MergeTreeReverse. (CANNOT_DECOMPRESS) (version 22.1.3.7 (official build))
-
Вы очень смелый на два года прыгать )
-
22.12 ?
-
Извиняюсь 22.1.3.7
-
-
Может issue про вас ? https://github.com/ClickHouse/ClickHouse/issues/35181Data compressed with different methods (CANNOT_DECOMPRESS) · Issue #35181 · ClickHouse/ClickHouse
I have 3 ch servers with replication (without sharding) - 2 main ch servers + 1 for experiments with encryption. Main servers 22.2.2.1, encrypted 22.2.3.1. Storage config for encrypted server &...
-
Ещё это issue https://github.com/ClickHouse/ClickHouse/issues/34647
-
Похоже, но мы не отписывали. Подключусь к обсуждению там. Спасибо
-
не надо.
открывайте свое ишью, у вас абсолютно другое -
Их позиция давно была всем понятна. Так что ничего нового.
-
Правильно я понимаю, что идиоматически правильно вставлять значения типа столбца по умолчанию, вместо null?
т.е. если где-то из внешней системы приходит null, то лучше вставлять через toInt32OrDefault чем toInt32OrNull ? -
да. Избегайте Nullable типов, они занимают больше места и медленее работают
-
Лучше проектировать таблицы с типом default '' или default 0 и т.д., чем потом с Nullable разбираться. Как исключение - даты, там это бывает необходимо...
-
даты не проблема, положить 1970-01-01
-
вот температура например уже сложнее, приходилось -10000 градусов хранить
-
а что делать, если в БД тысячи дней рождения с такой датой? :)
-
дни рождения не надо хранить датой, зачем они, строка и все
-
ну это в случае с кликом и его ограничениями с датами в 1970 и 1925 есть такие нюансы. В других то БД таких нюансов нет.
-
в других базах и с null проблем нет
-
Ну тоже верно )
-
вон оракл вообще не хранит null если колонки в конце таблицы
-
чтобы потом не было возможности, например, удобно найти тех, у кого ДР на предстоящей неделе?
-
нахер это надо в КХ ? CRM нету?
-
Намечается баттл? :)
-
то есть вы сразу отсекаете от КХ его потенциальное применение, где такое может понадобиться?
-
Дата это дата. Не надо её приводить в тонну разных типов, если есть возможность этого не делать. С каждым типом данных удобно работать в зависимости от его типа.
-
Ну, могу сходу придумать кейс, компания, которая юзерам скидки на др делает или рассылку какую то. Им, думаю, может такое потребоваться и встречается нередко
-
просто смешно слышать нытье про 1925, как дети, рассказывают бред про математику с датами и про 1925 год
-
да
-
Хотя другой вопрос, зачем это хранить именно в клике
-
При чем тут нытье то? Нормальный разговор про типы данных :)
-
ну вы упомянули 1925, не я
-
я лишь привел пример, что приведение к 1970-* не самый лучший вариант. :)
-
и мне иногда лучше иметь null в дате, чем 1970. Так надежней. Да, чуть медленней, но надежней.
-
ну отлично у вас куча людей родилось 01 01 1970. Вы не можете использовать эту дату, расскажите что вы делаете с теми кто родился 1969
-
И это касается только дат. В остальных случаях Null всегда можно заменить на default что то там.
-
Всем привет. Извините за нубский вопрос, в доке не смог найти четкий ответ
Работает ли функция uniqExact в связке с оконной функцией? -
да
-
Да что ж вы так нервничаете то :) Я же предложил вариант, а не говорил, что мое решение априори единственное верное )
-
Ну как минимум DateTime64. Тут уже 1925 год.
-
Спасибо!
-
create table data (user int, items int) Engine = Memory;
insert into data values (1, 9)(2, 8)(3, 7)(4, 2);
insert into data values (11, 9)(12, 8)(13, 7)(14, 2);
insert into data values (111, 9)(112, 8);
--slow
SELECT
items,
uniqExactMerge(s) OVER (ORDER BY items DESC Rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS _uniq
FROM
(
SELECT
items,
uniqExactState(user) AS s
FROM data
GROUP BY items
)
┌─items─┬─_uniq─┐
│ 9 │ 3 │
│ 8 │ 6 │
│ 7 │ 8 │
│ 2 │ 10 │
└───────┴───────┘ -
я вам больше скажу есть Date32
-
я не нервничаю, просто говорю что Nullable можно избежать, и для дат предлагается использовать 1970
-
это OLTP / CRM , ну никак не аналитика
или это анализ сколько человек получат скидку? -
-
это инсерт, в одной презентации говорили что можно, я не проверял
-
В Delphi нулевой датой в своё время взяли 30-12-1899, и люди натыкались на проблемы с ДР людей, родившихся в 19 веке. Как вообще после всех этих проблем Y2K, 32 битных таймеров с 01-01-1970, и прочих подобных, можно было в новой СУБД брать за нулевую дату менее чем 120 лет назад?
-
для того что бы поместиться в int32 и в int16 , таким образом яндекс съекономил десятки или сотни тысяч долларов
для кликстрима int16 вполне достаточно -
В MS SQL самая маленькая дата - где-то в 1500х годах. Попался когда переливали с ms sql в клику
-
Речь не про экономическую выгоду, а про реальные методы выхода из ситуации, когда нельзя применять не Nullable значения. :)
-
если не получается не использовать Nullable, используйте
-
-
1925 это глупость, надо было брать пролептический календарь
-
А что мешает хранить 3 колонки: год, день, месяц в виде интов и потом группировать и трансформировать как вам удобно?
-
Можно в UInt32 хранить дату либо в виде количества дней с выбранной даты в 19 веке, либо сдвигами или умножением складывать YYYYMMDD в число.
-
Дата рождения не нуждается в часах
-
Да можно тонну кейсов придумать с датой. Но это как танец с бубном. Речь о том, что гораздо проще использовать дату по назначению, чем танцевать с кучей доп. столбцов, приводя их к ДД ММ ГГГГ и так далее.
-
Если вы используете ch, значит вы принимаете парадигму «всё ради скорости» и готовы мириться с кастылями.
-
Для всех остальных случаев есть другие бд
-
Ну ради честности, в 80% случаев расширение памяти хранения дат в привычном для всех виде, то есть менее 1970 или 1925 - не сильно то и уменьшило бы скорость...
-
Ну это уже внедрение нового формата хранения, который не считатется в секундах с момента начала эпохи unix
-
А например в днях
-
Готовы ли на это разработчики? Как это будет совместимо в системами, получающими данные от кх?
-
Или введение формата datetime 128 или 256
-
-
Ну скажем так, ограничение с датами, было введено именно в клике. Все остальные БД тоже имели ограничения с датами, но они были очень отдаленными, типа 1900 года, и не было проблем с датами рождения тех людей, что до сих пор живы с 1925-го и тем более с 1970-го...
-
т.е. вы не в курсе почему именно 1925 год?
и что календарь в КХ это статическая таблица рассчитанная на каждый день -
Меня мало волнует статистика, когда мои данные в работе используют даты, где дата меньше 1925 используется очень часто.....
-
Кстати, не всегда удобно хранить дату 1970-01-0 вместо null. Например, есть дата действия какого-то значения в пределах dateFrom и dateTo. Если dateTo не задано, это подразумевает отсутствие даты окончания. И логично хранить в этом случае в виде null. Если же там будет не null, а 1970-01-01, то нужно будет учитывать это. С другой стороны between также между датой и null вернет null, а не 1, как бы хотелось. То есть тогда нужно будет явно смотреть на значение. А вот в MySQL можно использовать 9999-12-31 и спокойно использовать between без лишних телодвижений.
-
все ради быстрого between хранят спец. даты для начала и конца.
-
Denny, я уже понял, что у вас есть своя точка зрения, которая не меняется ни при каком раскладе. Попробуйте посмотреть на разные вариации, возникающие у специалистов :)
-
Да. Можно хранить просто максимально возможное значение. Но очень хочется эффективный null :))
-
нет. Я же говорю избегайте Nullable типов пока это возможно
-
Так я же с этого и начал ))
-
И уточнил, что именно в датах это наиболее часто нужно )
-
у меня проблема с температурой, с датами проблем нет
-
Так расскажите, в чем проблема, попробуем подумать и решить
-
что использовать в поле Float когда температура неизвестна 🙂
-
а хотя Nan есть
-
default -1000.000 ?
-
про Nan я забыл
-
уж -1000 точно не будет ) Ну или nan )))
-
C Nan придется отдельно обрабатывать при агрегации
SELECT sum(arrayJoin([nan, 0.1]))
Query id: 7edf06dd-71c1-4af2-9c4a-54acefc5e487
┌─sum(arrayJoin([nan, 0.1]))─┐
│ nan │
└────────────────────────────┘ -
Если уж на то пошло, то можно в default задать температуру абсолютного минимума в -273,16 по Кельвину как константу. И дальше все как обычно.. Не вижу проблем с температурой....
-
ну с -1000 складывать тоже смысла нет и с Null тоже
-
а ешё на них sparse_serialization фича не работает.
Это задумано или не доделано? -
я думаю забыли
-
Ну с Null агрегатные работают
-
Забыли да
-
извините не сдержался 😉
A chemist froze himself at -273.15°C, everyone said he was crazy but he was 0K. -
:)))))))))))))))
-
без нуллабл плохо когда надо avg считать, avgIf будет давать NaN если везде default значение, и очень много геморроя хватали уже
-
Очень большое и важное дело сделали ребята из Clickhouse — написали свою позицию по поводу Украины. И я уверен, им было очень сложно, потому что половина компании — россияне, потому что важнейшая часть продукта была создана еще в Яндексе. Но посмотрите, как кристально четко и честно они написали. Большое спасибо вам, ребята, я даже что-то расчувствовался.
https://clickhouse.com/blog/we-stand-with-ukraine/ClickHouse - We Stand With UkraineClickHouse is vehemently opposed to and condemns the war of aggression in Ukraine waged by Vladimir Putin and his regime.…
-
Можно и в закреп,одно не понятно какие отношение дальше будут у CH c Yandex. Я конечно понимаю что от него отошли, но не будет ли попыток давить на яндекс чтобы давить на CH
-
Я не в России, и у нас с беспокойством смотрят на CH
-
а какая причина?
-
-
Давить на CH чтобы что?
-
И за-то знают что CH родом из яндекса, и знают что яндекс подвержен влиянию гос структур.
-
мммм, вроде бы в блоге они указали на то, что КХ контингент был вывезен из России. Втоорое, - если их смущают корни CH, то тогда стоит направить письмо или в альтинити, или в кх от бизнеса с вопросом более политкорректным относительно того, будут ли данные safe'n'sound, имхо
-
Тут никто не гадает, беспокойства бывает достаточно чтобы пересесть. Как минимум у нас в компании ведется секьюрити аудит отдельной компанией, кторой это может не понравится.
-
Всем привет! Кто может помочь создать пару табличек в КХ и посчитать несколько элементов за ₽?
-
и необходимо, чтобы письмо направила отдельная компания, ИМХО
-
-
Я обычный разраб, меня никто не спросит
-
доведите это до вашего топа
-
-
что ему нужно написать письмо?
-
Так и не надо голову себе забивать ненужными вопросами. Для этого есть другие люди с большими головами - они пусть и думают
-
а то что туда китайцы много коммитят это ок?
-
да, ему необходимо будет обратиться в компанию, проводящую аудит, на мой взгляд, запрос на то, чтобы именно ОНИ (помимо него), удостоверились в целостности данных в случае использования КХ
-
-
Пока это не на слуху да
-
Каскадные мВ перестали работать с 19 версии примерно, где то даже был issue на гитхабе
-
К сожалению тут проще сменитьтехнологию чем кому-то чтото доказывать.
-
вам не надо доказывать, вам надо лишь проявить инициативу и узнать о дальнейших действиях EM и аудит-компании
-
Я все к тому-что чем большая ясность в том что нет влияния яндекса и тем меньше вероятность что кто-то скажет свое фи
-
здесь не в фи дело, а дело в том, что они не знают, стоит ли доверять компании, чьи корни лежат в компании, чья часть активов (?) принадлежит госу
-
-
Это не понял к чему, но похоже на перевод на русский моих слов.
-
Заранее точно этого не хочу, тогда можно вообще обратить их внимание на это лишний раз
-
они не перестали, просто поменялось поведение как их создавать.
и materializedpostgresql это не matview -
@den_crane @alexanderzaitsev @milovidov_an я понимаю, что я немного DBA и не имею никакого отношения к вашим компаниям, но может, вы поможете человеку прояснить ситуацию?
-
Infinite ещё можно
-
там нет влияния яндекса, голандский яндекс там просто акционер
на сайте же видно кто CEO, кто президент и можно погуглить где они и где яндекс -
Просветите как сделать мв поверх мв? Можно ссылку на Доку?
-
Кстати по датам - можно ещё хранить в виде Int64
-
никто не ставил ещё 22.3ЛТС? насколько он забагован пока ещё? а то из-за этого бага неясно что ставить на он-премис...
https://t.me/clickhouse_ru/262997【D】【J】 in ClickHouse не тормозитhttps://github.com/ClickHouse/ClickHouse/issues/35709 в общем как-то так, если у кого подобные проблемы просим поддержать )
-
-
у меня стейджах стоит, проблем нет, у клиентов Альтинити есть и в стейджах и в проде.
-
прямо вот так 22.3.2 и работает?
-
-
на самом деле CI с каждым днем все больше и больше случаев покрывает тестами, поэтому каждый новый релиз получается стабильнее
-
-
То есть делаю таблицу, указываю в матвью to table, и следующую матвью вешаю на эту таблицу? Круто, попробую
-
вообще если вы никогда не видели этот документ и не смотрели видео, то рекомендую посмотреть
-
Вот только прочитал
-
в общем-то тоже самое что и pdf https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
-
но на русском
-
только надо читать changelog там backward incompatible дофига между 21.3 и 22.3
в 21.6 поменяли uniq(от UIID) и сломали всем агрегаты -
Спасибо большое, я смутно догадывался что примерно так нужно))
-
Building a Paste Service With ClickHouse
https://clickhouse.com/blog/building-a-paste-service-with-clickhouse/ClickHouse - Building a Paste Service With ClickHouseBuilding a paste service with ClickHouse - or exploring “anti-patterns” in building and deploying a user facing service
-
может есть исходники на гитхабе в открытом доступе?) Было бы удобно в одном месте всё посмотреть
-
дальше ClickGram или ClickTube? )
-
GitHub - ClickHouse/pastila: Paste toy-service on top of ClickHouse
Paste toy-service on top of ClickHouse. Contribute to ClickHouse/pastila development by creating an account on GitHub.
-
ClickChan
-
очередной тупой вопрос: берем CH последней GA-версии с коробочными конфигами, пытаемся влить три терабайта данных, и он в логах пишет что нужно еще 2 петабайта памяти. читаем в коммьюнити, что нужно понижать дефолтные max_block_size/max_threads/min_insert_block_size_rows с 10^60 до 2*10^3, и действительно, вливается гораздо больше до одиозных заявлений что 64 гигов памяти недостаточно. а вот теперь сам вопрос - это нужно на клиенте править, или на сервере ? потому что остаётся призрачная надежда, что если поправить на клиенте, то, возможно, при каких-то условиях без жёстких лимитов память имеет шансы расходоваться эффективнее, но формальная логика говорит о том, что править нужно таки на сервере.
-
Вы неправильно держите
-
-
clarify пытаемся влить три терабайта данных
-
т.е. clickhouse способен все делать в stream manner, памяти много для инсертов не нужно, если не делать 50 тыс. колонок.
-
а все просто, у меня есть Yandex managed CH, который тюнили бойцы вон г-на Миловидова, там хранится десяток терабайт данных, и я пытаюсь отъехать в Хэтцнер, а как мы все тут знаем, ООО NDA не позволяет вставить репликой внешний кластер. поэтому я тупо выгрузил эти данные и пытаюсь влить в CPE-кластер что я поставил самостоятельно
-
выгрузил во что? в файл? TSV ?
-
-
- Неправильно: вставлять три терабайта данных одним INSERT'ом
- Правильно: вставлять батчами по ~1 миллиону строк, не забывая про существование партиций (желательно чтобы каждый батч затрагивал мало партиций, например одну) -
и как грузите эти CSV ?
-
я понимаю (примерно, если честно) о чем Вы, но с этого места нужен пример
-
с чего-бы ? и так получится по миллиону max_insert_block_size
-
не буду делать умное лицо - вот прямо беру и pv ${table}.csv.gz | gzcat | clickhouse-client --query="INSERT INTO ${table} FORMAT CSV"
-
-
Ну я утрированный пример привел, как я себе представляю, как можно делать совсем неправильно и совсем хорошо
-
попробуйте выключить input_format_parallel_parsing возможно баг, с проездом по памяти
pv ${table}.csv.gz | gzcat | clickhouse-client --query="INSERT INTO ${table} FORMAT CSV" --input_format_parallel_parsing=0 -
-
Если этот CSV это и есть все 3 Тб, то наверное по-другому и не получится :)
-
Но я бы вставлял по возможности в одну партицию за раз
-
он и есть. спасибо (ну мало ли, я когда не знаю, так и говорю что "не знаю" :))
-
а в чем проблема с 3TB файлом?
-
Если вставятся первые 2.5 Тб и отвалится что-нибудь (например, сеть, или место там от мержей временно закончится), то не перезалить только нужную часть
-
Вернее, можно, но тяжко
-
спасибо, я попробую осмыслить
-
это понятно, я про то что с памятью проблем быть не должно
-
Аналогично с партициями: вставка в одну партицию требует от сервера минимум усилий
-
ну вот так и происходит, да.
-
ошибку лучше покажите
-
Когда льем очень очень много, то это становится важно для стабильности и предсказуемости результата
-
и версию КХ
-
ClickHouse server version 22.1.3 revision 54455.
2022.03.29 22:40:24.999821 [ 235764 ] {} <Error> void DB::MergeTreeBackgroundExecutor<DB::MergeMutateRuntimeQueue>::routine(DB::TaskRuntimeDataPtr) [Queue = DB::MergeMutateRuntimeQueue]: Code: 241. DB::Exception: Memory limit (total) exceeded: would use 133.45 TiB (attempt to allocate chunk of 4291680 bytes), maximum: 64.00 GiB. (MEMORY_LIMIT_EXCEEDED), Stack trace (when copying this message, always include the lines below): (а дальше бинарь пострипанный, только смещения показывает, и bt бессмысленен без символов) -
>а дальше бинарь пострипанный, только смещения показывает, и bt бессмысленен без символов)
что? у вас КХ неофициальный?
там должен быть нормальный стектейс -
-
а ну все ясно. расходимся
-
-
-
[PATCH] MemoryTracking FreeBSD support · Issue #13859 · ClickHouse/ClickHouse
Clickhouse for FreeBSD updating no memory usage stats. In the case build without NDEBUG, allocator use 4KB chunk, those dont account when freeing and MemoryTracking metric grow up to ~6TB, after th...
-
-
да не работает оно на FreeBSD
-
-
-
и что вы думаете оно само заработало что ли?
-
-
-
-
давайте вы попробуете залить в линксе и потом мы поговорим
-
@milovidov_an а нельзя ли пожалуйста попросить пролить свет на то как там нынче в FreeBSD дела и по реабилитирующим основаниям или нет был закрыт этот тикет ? :)
-
очень сложно заливать три терабайта в консольный браузер
-
-
-
-
Объяснение очень простое. Для линукс и интел и арм есть тесты которые миллионы cpu часов накручивают, для фри нету.
-
-
-
-
-
-
Для FreeBSD более-менее нормальная сборка:
fetch 'https://builds.clickhouse.com/master/freebsd/clickhouse'
chmod a+x ./clickhouse
su -m root -c './clickhouse install'
(Quick Start на https://clickhouse.com/)
В ней не должно быть таких ужасных проблем, как у сборки из портов.ClickHouse - Fast Open-Source OLAP DBMSClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
огромное спасибо
- 02 April 2022 (170 messages)
-
ClickChain
-
Вам не стыдно вообще такие заявления делать, вы конечно против режима и все такое , но лично Вы Алексей подписались под этим заявлением о том, что оказывается вы в Нидерландская фирма и оказывается вообще никакого отношения к РФ не имеете. И ладно бы вы сделали пресс релиз , но вы на офф сайт это все сделали, и ваше имя там стоит из тех кто подписался. Вы можете быть против режима и всей ситуации , но выждать месяц и только потом уже учесть интересы - обычная проституция. Программирование не место политике, но в заявлении ваше имя стоит. Лично вы получите и доход и все остальное , и даже ваши ведущие разработчики тоже, но компания Яндекс выжила только благодаря протекционизму режима. Идите вы в хуй с такими заявлениями, что вы к РФ никакого отношения не имеете, богатым проще и комфортным, но вы безродные. Вы даж какфка коннектор с бесплатной версии поправить не можете , а с тех 250 миллионов половину походу на штаб квартиру потратили
https://clickhouse.com/blog/we-stand-with-ukraine/ClickHouse - We Stand With UkraineClickHouse is vehemently opposed to and condemns the war of aggression in Ukraine waged by Vladimir Putin and his regime.…
-
Больше не комментирую, но про кенсел калчар Я понимаю
-
чисто исследовательские вопросы. вы в коде/запросе:
- тоже фигачите где-то одинарные, а где-то двойные пробелы?
- операторы (в данном случае запятая) иногда оформляете спереди пробелами, а иногда нет? -
У меня просто тройка по русскому была , и ещё обидно , что нет пробела перед запятой , словно не самостоятельная единица
-
Но спасибо за замечание
-
Поправка от Дэниел Крейга ⬇, изменился тип взаимодействия с ними
-
Нахуй кх. Го все в гринплам.
-
We have no infrastructure, servers or people in Russia. The original engineering team successfully moved out of Russia and are now working in our Amsterdam office.
Чет противненько после таких заявлений. -
-
-
Дима, чего ты завелся-то? Коллеги сделали то, что формально должны были сделать. Inc для того видимо и выделяли в отдельную компанию и рубили все юридические связи с РФ, чтобы она могла нормально развиваться на международном рынке без рисков санкций.
Есть формальные приседания, которые должны быть сделаны, в независимости от того, кто что думает на самом деле. Не надо все воспринимать буквально и дословно, особенно из официальных пресс-релизов -
Вы прямо сегодня можете удалить у себя все инсталляции КХ, тем самым проявив гражданскую позицию. В противном случае вы идете по пути экономической целесообразности за счет своих убеждений и не вам кого-то после этого осуждать.
-
Хочется верить, что это искренняя позиция, а не продиктованная бизнесом необходимость.
Спасибо команде Clickhouse за позицию и смелость заявить обе этом -
-
Иногда можно просто поиметь яйца и просто промолчать
-
Вот как просто попасть в палачи,
вот как просто попасть в первачи,
вот как просто попасть в богачи:
Промолчи, Промолчи, Промолчи (с) -
Очень странно, почему они про это написали только 31.03.2022🤔
-
В тексте объясняется почему
-
Так себе отговорка😐
-
Послушайте, вы сейчас разводите горячую дискуссию на пустом месте по причине, что заявление было сделано вчера, а не раньше. Вот факт, - заявление сделано. Давайте мы оставим словесные баталии и займемся уже тем, что получается в этом чате лучше всего, - поддержкой пользователей, где и при каких бы обстоятельствах они не находились.
-
-
-
А давайте
-
Здравствуйте, это канал о кликхаусе?)
-
-
Как пропатчить KDE2 под FreeBSD?
-
-
-
да
-
зумерский вариант будет)
-
Есть вопрос как раз по теме канала. Периодически падает 1001 ошибка, когда делаю запросы из Postgres движка. Может кто сталкивался и знает как лечить?
-
переиграем давайте
-
Без понятия, я не админ, а всего лишь разработчик
-
эххх... старики мы, получается. те, кто поняли. пойду за пенсией схожу
-
Не флудите.😒
-
ься
-
Ошибка какая, конвертации типов?
-
Нет, просто кх говорит, что удаленный сервер недоступен
-
И так через один запрос
-
Думали, что пгбаунсер шалит, но бнз него всё тоже самое
-
Даже пропатчились до версии, в которой есть переподключение в случае разрыва соединения с пг
-
А можно полный текст ошибки?
-
Code: 1001.
DB::Exception: pqxx::broken_connection: Lost connection to the database server.. Stack trace:
0. std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x1b4107cd in ?
1. pqxx::connection::make_result(pg_result*, std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >) @ 0x1b190575 in /usr/bin/clickhouse
2. pqxx::connection::exec(std::__1::shared_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::basic_string_view<char, std::__1::char_traits<char> >) @ 0x1b1936b2 in /usr/bin/clickhouse -
Простите
-
Алексей между прочим для таких целей запилил https://pastila.nl/
-
Бывает. Попробуйте сделать в pg простую таблицу с 2-3 столбцами и простыми типами наподобие текст, число. И посмотрите будет ли падать, у меня было похожее что-то на типах данных int2[], КХ не мог преобразовать.
-
Есть отдельная бд, где нет массивов и я сам все настраиваю. Там всё окей. Но продовскую бд не могу трогать.
-
Получается проблема в ПГ
-
Погодите, есть ещё лайфхак, не знаю поможет ли.
-
PostgreSQL | Документация ClickHouse
https://clickhouse.com/docs/ru/engines/table-engines/integrations/postgresql/PostgreSQL | Документация ClickHousePostgreSQL Движок PostgreSQL позволяет выполнять запросы SELECT и INSERT для таблиц на удаленном сервере PostgreSQL. Соз
-
Попробуйте создать в КХ таблицу с движком PostgreSQL
-
Да, хорошая первоапрельская статья получилась. И красивый минималистичный сервис. Не хватает только R/O режима, чтобы после публикации текстик не завандалили. Наверное надо добавить установку и проверку куки владельца :)
-
Так я этой штукой и пользуюсь
-
Через нее и падает ошибка
-
Аааа, я же бд создаю, понял/принял. Спасибо за совет!
-
Отпишитесь помогло или нет :)
-
Возможно не сегодня, но обязательно!
-
Удачи)
-
🤝
-
Всмысле, если изменяешь текст, то новая ссылка уже
-
с хтмл, кстати прикольно, можно свои мини прилажки хостить
https://pastila.nl/?034f252e/2b083ebec0e7cf2edc890448ae700687.html
https://pastila.nl/?019ef7d4/2c9feca200eb2d5a24136b36bf5c8071.html
https://pastila.nl/?02327033/51170b4af71835aec13d19b5e8c70c80.html -
Это заявление чревато тем, что КХ не зайдет в те места, где мог бы занять свою нишу. Я до прошлого года не использовал КХ, до сих пор сторонник PG и транзакций, но необходимо заметить, что КХ в некоторых случаях весьма и весьма к месту.
-
На рынке уже есть немало форков ClickHouse
Даже в РФ есть аренадата с ее QuickMarts и думаю кол-во будет расти.
Плюс экспертиза по кликхаусу в РФ достаточно сильная, так что почему не зайдет? -
Если на это так смотреть, то зайдёт туда, куда не зашёл бы без чёткой позиции
-
Потому что. ClickHouse Inc. мимо пройдет однозначно, форки - это здорово до определенного момента. Сколько у них дивизий?
-
Я так понимаю, что потому и было сделано.
-
Вполне себе достаточно, внешние контрибьютеры принесли немало функционала в 2021 году.
Китайцы еще активно контрибьютят. -
Я бы еще по поводу экспертизы уточнил, что Вы под экспертизой понимаете. Одно дело - налить в БД петабайт и называть себя экспертом, другое - с той же ESB обеспечить интеграцию.
-
Китайцы - это вообще отдельная тема, с GaussDB не сталкивались? Huawei ее пользует, не особо известна, наверное, но местами интересна.
-
> другое - с той же ESB обеспечить интеграцию.
ClickHouse Inc строит ClickFlake, платного саппорта у них емнип пока еще нет.
Так в чем вопрос?
По поводу всяких ESB и интеграций, думаю у ареныдаты как интегратора с этим опыта будет побольше -
Я к тому, что у ClickHouse достаточно большое и международное коммьюнити, а не только одна ClickHouse Inc
-
Возможно, что Вы правы. Однако, стоить отметить, что кровавый ентерпрайз ищет в первую очередь саппорт, который много кто чего ентерпрайзу показал, во вторую специалистов с опытом и хоть какими-то бумажками а-ля сертификатов.
-
А о чем спор, собственно? Я так понимаю, в современных реалиях западные компании будут выбирать поддержку у западных компаний, а российские компании будут выбирать поддержку у российских компаний. Контрибьютить, скорее всего, будут все подряд. Да, со временем образуются устойчивые форки со своим комьюнити, контрибьютерами и компаниями поддержки, а-ля MariaDB и Percona та же.
Про сотрудничество западных компаний с российскими на ближайшее время можем забыть, так как в любом случае будет с обеих сторон давление (с западной больше). Для госкомпаний КХ прямо вряд ли будет использоваться даже с платной поддержкой, так как им нужна надежность и безопасность, которую может обеспечить только форк с соответствующей сертификацией и "правильной" компанией поддержки.
Помешает ли это развитию КХ? Скорее нет, чем да. -
Да никак это не повлияет. КХ уже давно и успешно используется и в кровавом энтерпрайсе и госухе и поддерживает его там далеко не Яндекс или тем более Inc. Тут ситуация ничем принципиально не отличается от того же Хадупа. Большинство сервисов развивает в основном Клаудера, но это же никак не влияет на степень его распространения в РФ.
Так что не надо заниматься гаданиями на кофейной гуще. По факту вся эта история яйца выеденного не стоит. Лучше вернуться к обсуждению самого продукта. -
Привет. В версии 22.3 обещали полноценную поддержку ARM. Можно ли уже как-то установить CH на ARM-сервер через apt get?
-
Не совсем так, примите, что "наше" теперь превалирует над "не наше". В универы, вроде как уже ушел заказ на... .
-
Нельзя жить в обществе и быть оторваным от общества. (С)
-
Заказ на что?
Если postgresql (pro) считается импортозамещением, то что говорить о ClickHouse где корней российских больше. -
Во-во! Это точно! 👍
-
Кстати, про универы и студентов. Немало фичей в кх запилены этими самыми студентами в рамках дипломов или курсовых.
Некоторые из них доводились до финала кор тимой, но тем не менее. -
Ой-вэй, в ПГ есть CoC, изгоним? Вот как раз пгпро есть, чем хвостом вильнуть.
А кто такие разрабы кроме Миловидова и компании? Я, честно, не в курсе, если есть что, расскажите. -
Как минимум arenadata что втащила авторизацию связанную с хадупом и еще было что то
-
Да, я читал пару работ, хз, не впечатлен, но даже абзац скопировал себе, на предмет то ли dremio, то ли чего-то подобного.
-
Constraints for optimization by nikvas0 · Pull Request #18787 · ClickHouse/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
Я когда это читаю, музыка их Hacker с молодой Анжелкой в голове.
-
Так же бессмысленно, на первый взгляд, как включение противопожарной системы.
-
Ну вот вы как, а я вижу решение очень большой головной боли с написанием сложного оптимизатора запросов.
Убер вот статью написали, как решали эту проблему
https://eng.uber.com/logging/Fast and Reliable Schema-Agnostic Log Analytics PlatformAt Uber, we provide a centralized, reliable, and interactive logging platform that empowers engineers to work quickly and confidently at scale. The logs are tag
-
Ок, 5 сек.
-
explain analyze select * from siebel.control_load order by index_date desc limit 10;
QUERY PLAN
════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Limit (cost=0.28..0.56 rows=10 width=24) (actual time=0.017..0.022 rows=10 loops=1)
-> Index Scan Backward using control_load_pkey on control_load (cost=0.28..27.63 rows=945 width=24) (actual time=0.016..0.020 rows=10 loops=1)
Planning Time: 0.074 ms
Execution Time: 0.036 ms
камрад, это ACID -
свежий запрос
2022-04-02 15:51:00 127.0.0.1:5432 postgres@mqr=# explain analyze select * from siebel.control_load order by index_date desc limit 10;
QUERY PLAN
═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Limit (cost=0.28..0.54 rows=10 width=24) (actual time=0.028..0.032 rows=10 loops=1)
-> Index Scan Backward using control_load_pkey on control_load (cost=0.28..55.87 rows=2179 width=24) (actual time=0.026..0.029 rows=10 loops=1)
Planning Time: 0.116 ms
Execution Time: 0.051 ms
(4 rows) -
В чем вопрос?
-
Вопрос в КХ, он всегда вычитывает данные целиком.
-
У меня такой же кх и он не вычитывает? Может не в кх проблема?
-
Само собой, про индексы я хнаю и умею применять.
-
Может быть.
-
Я даже допускаю возможность случая, когда нам источник данных дал неверную информацию о том, как данные будут организованы.
Соответственно, мы хотим и данные сколько-то там десятков ТБ сохранить, и на новую схему перейти. -
они просто не публикуются, не доделано
wget https://s3.amazonaws.com/clickhouse-builds/22.3/89a621679c69f94e04d1d24559adb62b2676abd9/package_aarch64/clickhouse-common-static_22.3.2.2_arm64.deb https://s3.amazonaws.com/clickhouse-builds/22.3/89a621679c69f94e04d1d24559adb62b2676abd9/package_aarch64/clickhouse-client_22.3.2.2_all.deb https://s3.amazonaws.com/clickhouse-builds/22.3/89a621679c69f94e04d1d24559adb62b2676abd9/package_aarch64/clickhouse-server_22.3.2.2_all.deb
dpkg -i *22.3* -
стрес и фаззи тесты много часов тестируют почти каждый пул реквест
-
а сколько латенси до pg и сколько времени запрос в pg выполняется?
-
там мне кажется на каждое изменение новый урл
-
на oracle cloud дают always free ARM размером 4CPU 24Gb RAM 150Gb . Clickhouse ставится без проблем и довольно шустро работает. А на стартовые $250 можно и нехилый кластер запустить.
-
русским больше не дают)
-
Я там и использую. Только хотелось бы обновлять цивилизованно.
-
вы ещё не сделали себе пластиковую карточку белого человека? В Москве уже во всю продают недорогие туры в солнечный узбекистан. С пловом, архитектурой и заходом в банк.
-
я жду чью-нибудь саксесс стори в этом вопросе) продают сейчас много чего это правда
но оракл не по карточкам блочил, а по стране, тут другой картой не обойтись -
Так даже тур не нужен.
Телефон с esim и симка через приложение теле2 казахстан -
А там киви кошелек на эту симку
-
Запрос происходит минут 5 и это разные датаценнтры.
-
Думаете, что КХ не может дождаться ответа?
-
так а через psql нормально без ошибок работает с КХ сервера?
может просто сеть рвется за 5 минут? -
в целом да, у КХ могут маленькие receive timeout
-
Проверю, спасибо за наводку!
-
По умолчанию 50 ms
-
Есть какая-то наводка, где этот параметр искать? Гугл не помогает.
-
http_receive_timeout?
-
Мде, то, что тут некоторые из ОПСОС, пофиг.
-
Нифига непонятно, Вы получали массив в строку, еще и меня спросили, это будет отдельно стоить
-
Откуда инфа?
-
В запросах не было задействованно ни одной колонки с массивами.
-
Всем привет!
Подскажите, а как вы решили\решаете случай, когда надо делать часто мутацию таблицы ( alter table delete where ) … на огромных таблицах ( под сотню гб ) ? может какой-то уровень абстракции-таблицы в которую вносятся “исключения” и уже при выборке из большой таблицы делается WHERE ‘date’ NOT IN (…) ? -
А зачем вы делаете delete? Какой в этом бизнес смысл?
Можно делать update колонки типа uint8 is_deleted. И скрыть удаленные записи либо прямо в селект в where либо через row policy. И например раз в неделю делать delete where is_deleted -
на тему колонки - хорошая мысль, мне казалось что это тоже мутации.
про row policy - не знаю, буду читать сейчас.
—
Зачем просят удалять — ну например, производят удаление ошибочной истории по контрагенту … что-то там такое далеко менеджерское, чтобы там ноль с единицей сошлись и получились красивые циферки — удаляют неактуальную\мертвую информацию -
и раньше раз в месяц такое было, что больновато выходило.. то сейчас чуть ли не каждый день, и конечно можно было сказать: “мы это не делаем, вот вам счёты, считайте сами”, но надо искать решение прежде всего
-
Я спрашиваю потому что хочу подобрать наилучшее решение. Вариантов море.
-
да я понимаю, да)
-
короче, для подвода статистики… удаление просходит за опр. день и по ID клиента, записей под удаление - десяток лямов
-
Update тоже мутация, но есть нюанс. Delete перезаписывает весь парт все колонки, это могут гигабайты, update uint8 перезаписывает микроскопическую колонку которая может весить меньше мегабайта
-
Л - логично, да. А потом с TTL эти записи удалятся через месяц
-
Update проще, чем delete ?
-
ну delete как минимум связан с освобождением места, а значит надо пустоты заполнять
-
что непонятно во втором предложении?
-
легко весные delete которые сейчас в разработке, тоже будут помечать удаленные записи, но в невидимой колонке
-
Да, забыл сказать: Спасибо! буду думать)
-
какие еще пустоты. Просто все записи из парта читаются и записываются в новый парт, кроме удаленных.
если парт размером 100ГБ, значит надо прочитать 100ГБ, декомпрессировать, зажать, записать -
Из-за колоночной архитектуры и блочной компресии по другому никак.
-
Ну чтобы быстро работал поиск по новой колонки разве её не надо будет в order by ?. А если её добавят, то будет пересортировка по логике, нет ?
-
нет, нет.
-
я могу ошибаться)
Просто представил как в ЯП производить удаление элемента из списка\массива) -
А если колонка находится в ORDER BY при UPDATE, разве не происходит пересортировка ?
-
хаха. Нет, в колоночных базах все совсем не так. Нету доступа к одной записи.
-
а какая колонка находится в ORDER BY?
-
Я уже не про пример Андрея, а вообще
-
нельзя колонки в order апдейтить
-
вообще нельзя, никак.
-
😂, я просто не использовал UPDATE никогда ещё в Clickhouse
-
Проводили кучу экспериментов, как обновлять данные и удалять. Решили, что ничего не удаляем и не апдейтим - просто перешли на ReplacingMergeTree, как тип движка для нас по умолчанию. А в ордер запихнули побольше колонок для уникальности, так как нет уникального идентификатора строки.
-
Просто что надо обновить инсертиш и наслождаешься.
-
ReplacingMergeTree или CollapsingMergeTree естественное и более надежное решение для модификации данных.
Но по сути update маленькой колонки должен быть легче чем мержи. -
У вас бесконечные диски, с которых вообще никогда ничего не надо удалять? У нас ради скорости далеко не бесконечные NVME SSD, так что приходится и TTL и мутации для удаления использовать в разных таблицах, например, есть как раз ReplacingMergeTree с TTL, из которых в довольно ленивом режиме удаляются данные, которые несколько месяцев не обновлялись, а потому считаются более не актуальными.
-
У нас такие же диски, но с запасом лет на 5. Потом старые партиции будем или удалять (GDPR), или сэплировать.
-
Удалить целую партицию - но проблем
-
А почему просто не добавить обычные диски ? И скидывать данные которые старше 90 дней например на них ?
-
Тоже идея
-
Зависит от специфики задач. У меня в проекте, например, такие старые данные в одних случаях вообще не нужны, потеряв актуальность, а в других нужны с тем же временем доступа, что и свежие, т.к. критерием их ненужности является вовсе не время.
-
Насчёт времени доступа с хардов - можно компенсировать процессорами и сильным сжатием (подбирать индивидуально к вашим данным)
-
-
Всем привет!
Тестирую скорость выполнения запросов к кликхаусу синхронно и асинхронно. Если выполнять простой запрос, то скорость выполнения асинхронно ожидаемо гораздо быстрее. Если выполняю тяжелый запрос с джоинами и тд, то скорость выполнения запросов асинхронно процентов на 40% больше чем синхронно, в чем может быть проблема? -
На чтении нет ;)
Запись, как я понимаю, тоже не сильно отличается от обычной (MergeTree): вся магия происходит при merge, а это отделено по времени и в любом случае необходимо. -
-
Если много партов и частые вставки/мерджи влияет, так как каждый раз надо ходить в зк.
-
Фу таким быть. Если меньше десятков миллионов, не нужен КХ.
-
Впрочем, могу поделиться деталями. Сейчас стоит задача 300-350-400 тысяч записей в секундц обогащать
-
А что-то я не подумавши сказал, у мну задача стоит на КХ это перевести попробовать, второй и далее джойн КХ раком ставит...
-
КХ не умеет асинхронно выполнять запросы, вы про какую-то либу javascript спрашиваете?
-
С aiochclient питоновской тестил
-
Ого :) я тут со своими 5к рпс совсем дитё
-
😳😳
-
нихрена себе) прсоитет
-
я конечно читал про badoo с их 2млн, н овсе таки Not bad
- 03 April 2022 (147 messages)
-
-
Ну это OLAP база вообще-то
-
-
BНИМAHИЕ ΓEЙMΕРЫ И MAЙHЕPЫ!!!
Чёpный pынoⲕ κитайсⲕиⲭ видеoκарт
- Рабoта нaпрямyю с фaбpиⲕoй ⲃ Γуанчжoy
- Зaводсⲕo𝚎 ⲕaчecтⲃо
- Оригинaльный GPU
- Никaких ƃ/У κарт
- Bозможнocть н𝚎лeгально вын𝚎сти любyю видeокapтy
- Шиpoкий аcсоpтимент под закaз
- Дocтaⲃκа пo ⲃc𝚎й Рoccии и СHГ
- Цены в paзы ниже любoго pесypca ⲃ Китaе
📝 Cⲃязь: @ChinaGPU_manager
🎩 ƃoт для поκупκи @ChinaGPU_bot -
Всём доброе утро, день, вечер ) коллеги подскажите что можно сделать: есть относительно небольшая таблица 100+ млн строк, 30-40 столбцов. В ней нужно удалять раз в сутки старые записи, ttl не подходит поскольку то что нужно удалить - вычисляемое множество. Иногда выдаёт memory limit error - видно в логах мутаций. Что можно сделать, мб уменьшить кол-во обработчиков фоновых процессов?
-
Если вычисляемое множество, то и выборка мутации подозреваю тоже по нему работает рассчитывая на лету. Соответственно по памяти падает потому что запрос слишком сложный/долгий. И ответ из этого, материализуейте вычисляемое множество в реальную колонку, и удаляйте по ней хоть в ttl
-
По ttl всё равно не получится. Может я не точно выразился, попробую перефразировать: из таблицы выбираются те id, что уже неактуальны и это не критерий времени, далее удаляются всё эти id. Запрос там достаточно простой, без джойнов. Потому могу предположить что просто выборка не влезает в память, хм, может выборку тупо лимитом ограничить
-
покажите запрос.
сколько мутаций одновременно запускается? -
Alter table... Delete where id in (select id from... Where...) ;
Падало на 1 мутации с количеством parts_to_do 300+ -
Привет. Подскажите по репликации и detach/attach, есть сомнения и я делаю что-то незаконное
Есть шардированная таблица, допустим 2 шарда, на серверах А и В, шард по rand. Хочу сделать реплицированную на тех же серверах, чтобы было 2 реплики, и на A и B лежали копии
Создаю новую реплицированную таблицу с такими же полями в кластере
На старой таблице делаю детач всех партов
Потом перемещаю файлы из detached старой в detached новой
И делаю аттач
На тестовых данных выглядит что все ок, с сервера А все реплицируется на сервер В, с В реплицируется на А. В итоге получается, что на каждом сервере лежит копия соседнего. Причем "сумма" данных обоих шардов
Но мне непонятен механизм, как кликхаус различает, что партиции с одинаковым неймингом (к примеру 202203_0_0_0 при партиционировании по дате), которые были на А и на В на самом деле содержат разные данные (в каждой грубо половина данных) и объединяет их, поэтому реальные данные переносить как-то побаиваюсь
Или не объединяет и у меня тест случайно показал что все ок? -
речь про запись, и не в секунду, а про пакетную, и 400к - это средняя, а не пиковая
-
Нет, не может. Рассматривайте ее как OLAP - запросов в час.
-
Я бы на дверь показал, а когда пришел разбираться тот, кто на работу взял, СБ вызвал.
-
-
Борис, ты крепись!
-
Теоретически можно сделать, но придётся тюнить.
1. Оптимизация схемы и запросов, смотрите clickhouse in the storm, тюнинг конфигурации КХ
2. Высокий фактор репликации для увеличения qps
3. Шардирование данных по ключу, выполнение запроса в пределах шарда как идеал
Ну и конечно много хорошего железа под это дело -
Давайте посчитаем, допустим мы делаем 10 шардов с прицелом на 5к QPS на шард. В пределах шарда сделаем фактор репликации 10, т.е. 500 запросов на ноду. Если нормальный сервер, то у него будет порядка 48 виртуальных ядер/потоков. Т.к. объем данных мал, то при условии одного потока на запрос, он должен выполнятся за ~100ms, чтобы нода смогла держать 500 запросов в секунду.
-
Первое, что приходит в голову, это делать delete in partition - находишь партиции, которые будут изменены, и по ним по отдельности делаешь удаление
Ещё можешь найти партиции, которые будешь менять, создать временную таблицу (полноценную копию оригинала), через insert вставить в неё строки из изменяемых партиций с фильтром и потом через replace partition вставить в оригинальную таблицу -
спасибо
-
если запросы не тяжелые. ограничить запросы max_threads=1 и много ядер. Просто в КХ нет кеша запросов/statement cache и прочего, поэтому наверное не стоит. если есть повторяющиеся запросы лучше сделать свой кеш. Прямо вот полный ad-hoc с высоким qps будет сложно.
-
50k rps в КХ? Хорошая тема для первоапрельской статьи про антипаттерны. Оно и для mysql/postgress уже как-то на грани получается.
Там у вас большое разнообразие запросов? Может закешировать получится? Redis? -
Реалистично больше пары тысяч QPS (с учетом max_threads=1 на запрос и прочих приседаний) я бы не расчитывал. Все-таки ClickHouse предназначен больше для того, чтобы пару миллиардов строк за запрос прошерстить и как-нибудь по-хитрому сгруппировать, чем для точечных запросов
-
спасибо
-
Я бы на меньше 1к реально смотрел. Пробуйте.
-
Вы о чем вообще?
-
Я о ДБА, для них КХ - очередная БД, со своими шахматами и поетэссами.
-
Конечно все можно, я думаю в Яндекс метрики и больше запросов, только сколько миллиардов уйдет 👍
-
Я бы переформулировал, "сколько Вы готовы заплатить, что бы БД без транзакций начала себя вести именно так, как Вы хотите?"
-
Можно попробовать, спасибо
-
Что-то вы какой-то раздражённый, всем едкие комментарии раздаёте... Есть что по существу сказать - хорошо, а если нет то лучше промолчите
-
раз в день удалять надо именно через мутации (желательно IN PARTITION но автоматический прунинг тоже есть давно уже).
мутации по памяти вообще не должны падать. у вас какие-то сложные условия в where? -
мутации могут падать, если их не через словарь делают а через сложный запрос
-
-
В условии отобрать все id которых нет в словаре, словарь содержит актуальные записи. Словарь 30+ млн строк и 2 столбца. В памяти занимает 4 Гб.
-
Спасибо почитаю
-
ну, поэтому и спросил про "что там в WHERE"
коллега удаляет, не обновляет... но мало ли что там в WHERE -
WHERE dictHas() ?
-
Вообще, это не самое правильное использование кликхауса, удаление данных мутациями, это последнее что надо делать. Это не MySQL, и для ваших данных возможно правильнее использовать его, а для аналитики уже переливать из MySQL в кликхаус (есть даже движок подходящий)
Прочитайте про разницу между OLAP и OLTP.
С таким подходом и количеством обрабатываемых партиций, проблема будет расти как снежный ком с ростом количества данных. У вас после удаления данных все эти партиции должны будут перестроиться и смержиться под новые индексы, и так каждый раз, пока вы не столкнетесь с тем что будет недостаточно и места для выполнения операции.
Я бы пересмотрел архитектуру и способ хранения данных. Или как другую костыльную альтернативу использовал VersionedCollapsingMergeTree или ReplacingMergeTree для "обнуления" нужных вам строк, а не удаления -
если дело не в том, что критически нужно высвобождать место, а просто "отключать" ненужные id, для меня выглядит логичнее сделать это через колонку is_active или is_deleted (на ваш вкус) и поверх таблицы просто прикрутить вью, которая по этой колонке фильтрует. потом на старых cold партициях где-нибудь в 3 утра запускать физическое удаление таких строк.
-
и даже в system.mutations не появляется?
на тест скорее всего просто данных нет которые вам нужны -
-
Толка нет
-
Понял. Спасибо. Значит ковыряем дальше
-
Приветствую! Подскажите... Если ли возможность при INSERT или MATERIALIZED VIEW c ENGINE = Kafka указать KEY или PARTITION? Я так понимаю, что виртуальные столбцы _key, _partition только для чтения. Clickhouse крайне не равномерно распределяет сообщения по портициям.
-
Не логичней, ведь тогда придётся делать апдейт этой колонки, когда id станет неактуальным - что тоже будет тяжело для КХ.
-
бесспорно, но вроде как апдейты по логике должны быть гораздо легче "физически" для системы, чем удаления
-
Where dictGet(dictionary, dict. Attribute, table.Key) = table. Attribute что-то вроде латерального запроса к справочнику в памяти
-
как минимум если колонок в таблице больше, чем одна)
-
Почему? И там и там насколько я понял читая статью на Хабре происходит клонирование куска, вычищение лишнего из куска или обновление в нём данных и потом замена новым куском - старого?
-
нет такого...
-
-
-
так как система колоночная, то (как я понимаю), чтобы сделать апдейт нужно обработать один "файл-колонку", а для удаления — столько же, сколько столбцов в таблице
-
Апдейт по логике как раз тяжелее, ведь он затрагивает может больше 1 столбца, а удаление просто удаляет всю строку при нахождении?
-
у вас перебор, так нельзя
вы удаляете по двум полям? если так делайте словарь с композитным ключем на два поля... -
так вы перезапишете все столбца при удалении
-
но данные лежат не строками)
"вся строка" — это много колоночных файлов на диске -
Всё осознал
-
Почему нельзя? Работает же, и причём быстро достаточно...
-
хотя да, так тоже будет быстро... но память есть не должен совсем. может память кто-то другой съедает? у вас словарь не автообновляемый?
-
-
-
Вы либо обновляете минимальный файл с uint8 изменяя 0 или 1. Либо удаляет и пересобираете парт в партиции по всем столбцам, вроде вывод очевиден
-
complex_key_hashed
-
Авто обновляемый, может кто то другой - этот вариант я тоже прорабатываю
-
Примерно 60 Гб
-
-
словарь перед началом работы уже LOADED в system.dictionaries? может он пытается загрузиться и умирает.
-
Loaded, тут всё норм
-
В понедельник посмотрю)
-
Добрый день! Вопрос)
У меня time-series таблица
Я беру остатки товаров, после чего по динамике остатков вычисляю заказы
Проблема этого запроса в том, что не учитывается разница остатков между днями, хотя это необходимо
Я бы хотел как-то модифицировать запрос таким образом, чтобы у каждого дня была колонка с последним значением остатка за прошлый день - так смогу учесть дополнительные заказы
Но, к сожалению, не очень понимаю, как это сделать
Как-то это возможно? -
То есть у вас есть остатки за каждый день ?
-
да
-
за один день много записей об остатке товара
-
Я бы отсортировал по времени и товару и брал бы neigbor -1
-
Например
-
SELECT _key as pk …. PARTITION BY pk на сколько помню
-
а внутри одного дня тут возможны multiple записи, как я вижу?
-
и для обеих записей внутри одного дня должно стоять одинаковое значение из прошлого дня?
-
-
вот так это выглядит
-
строчки 1 и 2 должны в новой колонке иметь значение 5869 из строчки 0?
-
а что за нули, может знаете?
-
верно
-
Ну если был бы один 0
-
То сказал бы
-
А 2 не знаю
-
тогда neighbor не подходит, он считает на уровне строки, а не на уровне дня в вашем случае
-
мне кажется, что это связано с партициями
-
взял neighbor из подзапроса и нолики ушли, остался только первый ноль
-
-
спасибо, о функции neighbor не знал)
-
Ещё с помощью оконных функций можно это делать, но я не знаю. Clickhouse полностью поддерживает весь синтаксис их из других БД.
-
neighbor на уровне блоков работает (например по 65к строк). между блоками данные будут неправильные, имейте ввиду...
если надо правильно то вам оконки -
нужно что-то типа новой calculated колонки toDate( ваш dateTime) as tdate, и поверх всего этого argMax(stockSum, dateTime) over (order by date range unbounded preceding)
не факт, что правильно, нет под рукой компа, чтобы проверить) -
это про запрос или про DDL?
-
про select запрос
-
Я не про выборку а про вставку данных в kafka таблицу. Что-то должно было бы получиться INSERT INTO kafkatable (_key, payload) VALUES ...
-
то есть весь список отсортируется по дням, потом для каждой строки построится окно из всех строк, в которых день был меньше текущего (поэтому нужен range вместо rows) и в этом окне возьмется значение для максимального (последнего) dateTime
-
но это надо проверять)
-
есть пока что вот такая рабочая реализация
-
попробую еще вот это проверить
-
запрос просто исключает строки, где нули
значит точность не стопроцентная -
Вставка данных в кафка таблицу идет из кафки. И никак иначе. Дальше с помощью матвью оно попадает в другие таблицы
-
Привет. подскажите пожалуйста, можно ли как-то одним запросом решить такую проблему: рисую чарт в metabase на основании селекта типа
SELECT
Value,
Timestamp
FROM table
но на чарт мне надо нанести еще квантили
quantileExact(0.07)(Value) as lowerQuantile,
quantileExact(0.93)(Value) as higherQuantile
как это провернуть одним запросом? -
SELECT
Value,
Timestamp,
quantileExact(0.07)(Value) as lowerQuantile,
quantileExact(0.93)(Value) as higherQuantile
FROM table
Ну так сделайте так, в чём проблема ? -
а по какому признаку вы группируете? квантиль каких значений будет считаться?
-
там без группировки. рисуется линия цены. и я хочу считать квантили и рисовать по ним коридор, типа такого (там руками просто указаны значения для горизонтальных линий коридора):
-
Clickhouse поддерживает вставку в таблицу на движке Kafka. Сейчас у меня так и работает. Две таблицы на движке Kafka и матвью берет данные из одной и пишет в другую. Некий такой ETL. Так вот продюсеры изначально пишут с key и Kafka разделяет соответсвенно на партиции. А вот clickhouse пишет в партиции random. И это ломает дальнейшую обработку сообщений. Я пытаюсь выяснить как можно повлиять на запись данных в Kafka в Clickhouse.
-
в том что Code: 215. DB::Exception: Column Timestamp is not under aggregate function and not in GROUP BY
-
А зачем так усложнять? Есть же Kafka streams или KSQL
-
Я думаю тут врятли у вас что либо выйдет нормального. Попробуйте ksqldb или kafka streams
-
До этого использовали siddhi.io.
-
Сохранил, почитаю. Спасибо
-
Там проблема. Они перестали поддерживать open sources проект. И весь проект ушёл в WSO2. Поэтому было решено обрабатывать в Clickhouse.
-
А вам просто перекладывать надо данные и менять их формат/содержание? Или вы как то с кх еще докидываете данных?
-
Ну значит для общего развития :)
-
-
Много данных?
-
-
Я имею ввиду которыми вы дополняете сообщения
-
Сейчас 306 записей. В дальнейшем около 20000
-
Ksqldb. Там есть таблицы тоже, наполняйте их через кафку и допинывайте данные там. Партицирование на выходе так же управляемое
-
-
значит группировка всех данных в таблице. Тогда так:
with (SELECT (quantileExact(0.07)(Value),quantileExact(0.93)(Value)) from table) as q
SELECT Value, Timestamp,
q.1 as lowerQuantile,
q.2 as higherQuantile
FROM table -
С KTable единственное - на больших таблицах не пробовал. Когда прям много данных очень. Не знаю потяни ли
-
WITH (SELECT quantileExact(0.5)(number) as qy FROM numbers(10)) as quan
SELECT number, quan from numbers(10) -
Они по кластеру размазываются тоже. В принципе решаемо (кэш там на rocksdb и на ссд летает хорошо)
-
Второй вариант. Идёт донасыщение из других таблиц. С применением словарей.
-
Да. Рассматривал KSQL. Вероятно придётся использовать тоже.
-
Хотя думали что отделаемся Clickhouse )
-
🚨 Surfshark изменит ваш IP-адрес, защитит вас от общедоступного Wi-Fi и многое другое.
🔹https://bit.ly/3qksEis
🔹https://t.me/surfsharkapp -
Всем привет. Подскажите, пожалуйста, как дополнять вложенные таблицы по мат. вью при добавлении строк в таблице-источнике, чтобы в итоге получилась таблица с несколькими ключевыми полями и полем - вложенной таблице с остальными данными для этих ключевых полей?
-
значения надо суммировать или конкатенировать?
sumMap или groupArrayArray
SimpleAggregateFunction/AggregateFunction groupArrayArray / groupUniqArray. -
не надо суммировать, просто увеличивать кол-во строк во вложенной таблице
-
SimpleAggregateFunction/AggregateFunction groupArrayArray / groupUniqArray.
могу написать пример или дать ссылку, если вы предоставите create table из трех полей, + insert, + и что нужно на выходе -
вот я с AggregateFunction щас эксперементирую, я полагаю должно быть поле nested_fied Nested (field1 AggregateFunction(groupArrayArray))?
-
так это же замечательно, отделаемся от КХ, одним головняком меньше
-
Nested это бесмысленный syntax sugar, который мешает в этом случае
-
то есть проще просто поля массивы создавать? а потом работать, как-будто с вложенной структурой?
-
нет никакой вложенной структуры. Есть только массивы.
Nested это syntax sugar, который существует только в момент create_table (почти, не будем упомимать flatten_nested). -
А выборку потом как делать, она же с nested через array join делается?
-
А тут, если без структуры как равномерно развернуть все массивы в строки, когда это понадобится?
-
-
Понял, попробую, всем спасибо.
-
могу написать пример или дать ссылку, если вы предоставите create table из трех полей, + insert, + и что нужно на выходе
-
У меня, вроде, получилось, как мне надо без Nested, просто поля SimpleFunction(grouparrayarray). И select выдал, что нужно, завтра всю структуру замучу с мат вью. Если будут еще вопросы, предоставлю пример. Спасибо!)
- 04 April 2022 (102 messages)
-
Всем спасибо за помощь в вопросе, в итоге переспал) с вашими идеями ночь и придумал свой вариант.
- удаляю материализованный столбец если он есть is_actual - 9 секунд. (alter table ... drop column if exists)
- Создаю материализованный столбец в основной таблице is_actual в котором из словаря сразу рассчитываю его актуальность. 1-3 секунды (alter table ... add column if not exists ...)
- далее делаю alter table ... delete where is_actual = 0 and date_modify < today() — чтобы не зацепить те данные что в процессе укладки (допущение, но не планируется запускать такую чистку сразу в начале дня, часа в 3 ночи - там уже все будет уложено точно. date_modify - дата вставки строки в таблицу - дефолт на стороне КХ)
- жду 15-30 секунд - мутация успешно завершена.
- профит. -
Доброе утро. Подскажите пожалуйста по настройкам clickhouse-copier. При копировании некоторых партиций упераюсь в лимит по памяти и партиция не может приатачится и соответсвенно помечается как dirty. Не пойму что нужно подкрутить, чтобы не было этих ошибок:
https://pastebin.com/1kKT36MQ<Error> Application: An error occurred during copying, partition will be marked - Pastebin.comPastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
-
Коллеги, вопрос касательно агрегации.
У меня есть две таблицы, в одной хранятся временные ряды (product_id, timecode, value), в другой ключ-значение (product_id, agg_time) - значение требуемой гранулярности для конкретного продукта.
Я хочу сделать запрос, который возьмет все данные из таблицы с рядами, съагрегирует данные по каждому продукту с требуемой гранулярностью. Типа у продукта 1 гранулярность 5 минут, у продукта 2 гранулярность 30 минут и т.д.
Похожий запрос должен выполнять требуемое
SELECT product_id,
toStartOfInterval(timecode, INTERVAL agg_time MINUTE) as timecode,
avg(value) as value
FROM timeseries ts
JOIN (
SELECT product_id, agg_time
FROM keyvalue
) kv ON ts.product_id = kv.product_id
GROUP BY product_id, timecode;
Но есть ограничение Argument at index 1 for function toStartOfInterval must be constant.
Подскажите, как его обойти, пожалуйста. -
если набор гранулярностей финальный и известный, то можно попробовать рассчитать все возможные варианты, а потом достать нужный через multiIf(agg_time = , ...)
-
не очень красивое решение, но рабочее, спасибо
-
думаю, стоит подождать, сейчас народ проснется, и может, предложит что-то более изящное. потому что да, это костыль, который сломается, как только в keyvalue прилетит что-то неожиданное)
-
А вторая часть , та что в join - больших размеров? Надо учитывать, что она будет разворачиваться в памяти полностью, не будет ли out of memory в итоге?
-
Это все таки, как мне кажется, задача больше для БД наподобие Postgres, нет?
-
подскажите, пожалуйста, попытались перевести словари на DDL (server 21.11.8.4), отказывается работать без явного указания бд. как то можно глобально задать, чтобы не переписывать скрипты?
сейчас приходится писать SELECT dictGet('db_name.dict_name',...), а хочется как раньше SELECT dictGet('dict_name',...) -
А вы указываете БД по умолчанию про коннекте?
-
обычно это default, но могут быть и другие схемы при подключении
-
-
если в той же схеме будет работать ок.
-
в той же схеме да, но получается что через DDL добиться такого же поведения как раньше нельзя?
-
как по вашему оно должно работать если в разных схемах создать словари с одинаковым именем
-
я надеялся что можно например указать параметр схемы для словарей по дефолту, чтобы если база не указана то идет искать туда
-
небольшая 8-12 значений
-
Сделайте константу с типом map, вместо джойнов или словарей
-
Прошу прощения, я неправильно понял слова Алексея. Эта таблица keyvalue в действительности представляет собой view, которая при обращении формирует пары key-value. Количество этих пар может быть как 0 так и тысячи, зависит от количества продуктов. Поэтому map не подходит.
Значений аргумента agg_time 8-12 штук. -
Ну тогда словарь сделайте, ключ то уникален хоть? Value Сагрегируйте если там многие к одному
-
Ребят всем привет, может кто-то сталкивался
Есть таблица, партиции по createdAt (datetime без указания таймзоны), сейчас нужно явно указать UTC (т.к. берёт серверное по умолчанию), но выдаёт ошибку
Code: 44, e.displayText() = DB::Exception: Trying to ALTER key column createdAt (version 20.3.21.2 (official build))
Кто-то менял partition based поля? -
Похоже что поле в ключе сортировки и поменять можно только переливкой данных в новую таблицу
-
привет, кто-нибудь делал SYSTEM DROP REPLICA 'replica_name' FROM DATABASE database; ?
https://clickhouse.com/docs/en/sql-reference/statements/system/#query_language-system-drop-replicaSYSTEM | ClickHouse DocumentationSYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
-
-
Коллеги, кто успешно переехал на CH поделитесь опытом. Мне нужно расходы из директа и конверсии из метрики соединить на одном дашборде. И что-то начал настраивать ClickHouse и что-то поник. Какая-то сложная схема выстраивается для передачи данных.
Может я что-то неверное делаю?
Прокомментируйте схему, пожалуйста -
💸ОБУЧАЮ ЗАРАБОТКУ ОТ 100К В МЕСЯЦ💸
🏆РАБОТАЕМ с Партнеркой Перфлюенс
🏆ОБУЧАЮ полностью работе на пп, все способы заработка
✅В наличии ВСЕ пруфы(выплат на пп, зачислений на карту)
💎МОЯ Помощь по всем вопросам💎
💰СТОИМОСТЬ 7500₽
❗ПУСТОСЛОВЫ, БЕЗ ДЕНЕГ НЕ ПИСАТЬ❗
📝 Связь: @Mantekaccc
🎩 Гарант: @scrooge_garantbot -
-
Я думаю, что почти все в этом чате получают > 100 R
-
-
кто-нибудь знает чем можно заменить ClickHouseExternalData? Из старого jdbc-драйвера (ru.yandex.clickhouse.jdbc) в новом (com.clickhouse.jdbc)? почему-то удалили этот тип.
-
Есть ли какая-то разница в производительности между использованием ExternalData и прямым запихиванием огромной строки в IN-предикат?
-
Никто не отменяет размер запроса + скорее всего ExternalData сжимается на клиенте
-
Коллеги, подскажите:
SHOW CREATE TABLE mydb.mytable;
показывает запрос создания таблицы в одну строку, можно ли как-то вывести этот запрос в человеко-читаемом виде с отступами? -
всем привет! а кто-нибудь знает, почему при попытке написать show processlist вылезает вот такое сообщение про ipv6 и сервер бросает соединение (просит заново ввести пароль):
-
ipv6 при подключении не задействован. Подключаюсь указывая ipv4 обычный
-
проверил на 21.12 - выводит отформатированно. Какая версия КХ/клиента?
-
Версия клиента с сервером не различается случайно? Выглядит как будто клиент не поддерживает тип, который ему вернул сервер?
-
ой старая) 19.чего-то там…
-
Оооо ) да, различается ) клиент 18.16.1 (через apt-get скорее всего ставилась), а сервер 21.9.2 revision 54449.
Для меня было очень не очевидно подумать в эту сторону ) Спасибо огромное!!!! -
Установка | Документация ClickHouse
Установка Системные требования ClickHouse может работать на любой операционной системе Linux, FreeBSD или Mac OS X с арх
-
Думаю это было одно из улучшений - выводить в отформатированном виде. Поэтому врядли чем-то можно помочь (можно посоветовать только использовать какой-нибудь DataGrip/DBeaver , etc. У них есть функция форматирования.
-
все не JDBC штуки переехали в java clickhouse-client
-
есть, иногда большая, зависит от размера external data
-
я вроде нашел что-то подобное, кажется то, что нужно?
try (ClickHouseConnection conn = newConnection(new Properties());
PreparedStatement stmt = conn.prepareStatement(
"SELECT bitmapContains(my_bitmap, toUInt32(1)) as v1, bitmapContains(my_bitmap, toUInt32(2)) as v2 from {tt 'ext_table'}")) {
stmt.setObject(1, ClickHouseExternalTable.builder().name("ext_table")
.columns("my_bitmap AggregateFunction(groupBitmap,UInt32)").format(ClickHouseFormat.RowBinary)
.content(new ByteArrayInputStream(ClickHouseBitmap.wrap(1, 3, 5).toBytes()))
.asTempTable()
.build());
ResultSet rs = stmt.executeQuery();
}
Извините за джаву тут) -
Видимо сейчас нужно создавать как темповую табличку явно, а не прозрачно, как раньше через ExtrernalData
-
Или лучше такие "не-стандартные-для-jdbc" запросы делать через ClickHouseClient в стиле:
ClickHouseNode server = getServer(ClickHouseProtocol.HTTP);
try (ClickHouseClient client = ClickHouseClient.newInstance();
ClickHouseResponse resp = client.connect(server).format(ClickHouseFormat.RowBinaryWithNamesAndTypes)
.query("select toString(number) as query_id from numbers(100) where query_id not in (select query_id from ext_table) limit 10")
.external(ClickHouseExternalTable.builder().name("ext_table")
.columns("query_id String, a_num Nullable(Int32)").format(ClickHouseFormat.CSV)
.content(new ByteArrayInputStream("\"1,2,3\",\\N\n2,333".getBytes())).build())
.execute().get()) {
for (ClickHouseRecord r : resp.records()) {
Assert.assertNotNull(r);
}
} -
-
если записи в одном из ДЦ, держать ЗК кластер в нем
-
между океанами норм вроде, главное не делать слишком частых вставок/мерджей
-
какая задержка вообще в первую очередь имеет значение? между КХ и ZK или между нодами ZK ?
-
между нодами ЗК, и между пишущими нодами КХ к ЗК
-
а если всё же вставка довольно иненсивная, есть ещё какие-нибудь типовые советы? Про весь ЗК в "пишущем" ДЦ понял.
-
ну в главном ДЦ вставляйте на здоровье...
-
-
А если дц с зукипером придёт пушистый зверёк?
-
там похоже баг сейчас в jdbc. Я завел issue
-
да, этот же вопрос вертится
-
read only станут таблицы
-
Как это всё восстанавливать, если он с концами ушёл? Просто новый кластер зукипера поднять, что-то мне подсказывает, не подойдёт
-
почему? просто потом SYSTEM restore replica
-
и можно иметь observer в далеком ДЦ
-
А вы хотите именно все данные реплецировать? Может рассмотреть варианты держать два кластера не зависимо со своим ZK и писать и читать локально сырые данные, а агрегированные через дистребьютед таблицы держать в двух копиях?
-
а вот это уже интересно. пасибо
-
можно сделать обсервер кластер в удаленном - но вставлять вы туда все равно не сможете без ручного фейловера.
если нужен ручной фейловер - делаете обсервер кластер. и после зверька меняете на не обсервер. -
observer надо будет промоутить после потери основного кластера, но я бы не стал даже обсервер делать,
SYSTEM restore replica -
то есть переключить запасной КХ на локальный чистый зукипер?
-
-
ух ты, все так просто оказывается
-
Кстати, а как дела с этим у clickhouse keeper? Его вообще уже стоит в прод ставить?
-
на митапе сказали что можно.
observer режима в конфигах не наблюдается -
да, создает всю инфу в голом зукипере
-
-
clickhouse keeper ничем в этом плане не отличается от ЗК
-
Да, я тоже воспроизвел Ваш код из issue, думал небольшое исправление поможет, но нет. Больше всего меня удивляет, что это код из тестов самого репозитория clickhouse-jdbc, который по идее должен запускаться регулярно и проходить...
-
а Кликхаусная дока развалилась чтоли?
https://clickhouse.com/en/sql-reference/ -
What Is ClickHouse? | ClickHouse Docs
ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).
-
-
в Сафари весь css развалился, да и свою ссылку я нашел с этой страницы
-
-
там пробел надо убрать оказывается {tt 'table1' }
-
Ага, и нигде не описано, что tt - это особый плейсхолдер типа ? для парсера.
-
на русском доку тоже потеряли походу
-
и поиск не работает
-
Поиск вроде норм
-
судя по нетворку перед тем как поиск заработает, он делает запрос на https://clickhouse.com/docs/lunr-index-1649086858170.json который мне отдавался 2 минуты
-
-
походу он это грузит и потом поиск локальный
-
у меня 2.7 МЬ
-
и перерисовали все в хипстерском скетч стиле ... капитализм победил =)
теперь нельзя перейти в исходники хелпа ((( -
-
всем привет, как в кх работает row_number() over mycolumn? Я что-то делаю не так?
-
over чта?
-
Ну произвольная колонка
-
а что вы делаете?
-
Денис, доброй ночи. Подскажите пожалуйста вы когда вычитываете kafka через CH сильно тюните от дефолтных настроек и кафку и CH если нагрузка на кафку примерно такая по трем основным топикам:
сообщений в минуту. Суть проблемы в том, что случается иногда ребалансировка топиков и в сообщениях CH вижу ворнинги что он не может приасайнится к партиции либо такой
Consumer group session timed out (in join-state steady) after 312742 ms without a successful response from the group coordinator (broker 2, last error was Broker: Unknown member): revoking assignment and rejoining group -
select x, number, row_number() over ( partition by x ) from (select number%3 x, number from numbers(10));
┌─x─┬─number─┬─row_number() OVER (PARTITION BY x)─┐
│ 0 │ 0 │ 1 │
│ 0 │ 3 │ 2 │
│ 0 │ 6 │ 3 │
│ 0 │ 9 │ 4 │
│ 1 │ 1 │ 1 │
│ 1 │ 4 │ 2 │
│ 1 │ 7 │ 3 │
│ 2 │ 2 │ 1 │
│ 2 │ 5 │ 2 │
│ 2 │ 8 │ 3 │
└───┴────────┴────────────────────────────────────┘ -
select x, number, row_number() over ( partition by x order by number) from (select number%3 x, number from numbers(10)) order by x, number desc;
┌─x─┬─number─┬─row_number() OVER (PARTITION BY x ORDER BY number ASC)─┐
│ 0 │ 9 │ 4 │
│ 0 │ 6 │ 3 │
│ 0 │ 3 │ 2 │
│ 0 │ 0 │ 1 │
│ 1 │ 7 │ 3 │
│ 1 │ 4 │ 2 │
│ 1 │ 1 │ 1 │
│ 2 │ 8 │ 3 │
│ 2 │ 5 │ 2 │
│ 2 │ 2 │ 1 │
└───┴────────┴────────────────────────────────────────────────────────┘ -
зависит от жирности сообщений, сообщения бывают 3 поля, а бывают 600 полей.
у вас либо летенси до брокера, либо брокеры тормозят. -
Ну да вот не понятно, может сетка в ДЦ полагала, и сейчас отпустило
-
- 05 April 2022 (205 messages)
-
А что с русской документацией на офф сайте, кто-нибудь в курсе?
-
Вчера всё сломали
-
А починят?
-
Я думаю, это переход на новый дизайн документации, и кажись будет только английский язык
-
Не знаю, люди опен сорсили 5-6 языков док, думаю добавят. Новая документация очень шустро работает кстати, lunrjs ок. Надеюсь документацию по сборке документ сервера тоже выложат.
-
Поиск по слову "русский" не выдает ничего, по "russian" - аж 5 вхождений, одно из них - "chilled 100° Russian vodka". Поиск пока там не шибко работает.
-
Обзор | Документация ClickHouse
Что такое ClickHouse ClickHouse - столбцовая система управления базами данных (СУБД) для онлайн обработки аналитических
-
Так языки остальные еще не подъехали. Французского, китайского и всех остальных тоже нет
-
Подождем.
-
-
Но переключателя уже нет.
-
Впрочем, у меня en_US раньше ru_RU запрашивается, я не сильно много потерял 😂
-
-
Да, кстати, у меня где-то валяется в виде pdf.
-
-
С какой скоростью фичи добавляются, документировать некогда :)
-
-
Общий синтаксис - Документация ClickHouse
https://test.clickhouse.tech/docs/ru/query_language/syntax/ -
Тут осталось что-то)
-
От 20.1 😂
Старовато -
https://github.com/ClickHouse/ClickHouse/tree/master/docs/tools
ну можно самому сгенерить себе html... если оно ещё работаетClickHouse/docs/tools at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
У меня свалилось с ошибкой, но может это я криворук, ещё смотрю
-
Коллеги, "у вас вся спина белая" : с прошедшим 1 апреля
ВОПРОС к ГУРУ: правильно я догадываюсь, что ? :
1) поиск по 3-м полям таблицы МОЖЕТ (при наличии ресурсов) делаться 3-мя потоками
2) поиск по Array-полю с 3-мя элементами БУДЕТ делаться 1-м потоком
даже скорее вопрос не о поиске, а об извлечении данных -
Как я знаю, clickhouse по умолчанию читает и пишит в 8 потоков.
-
спс
т.е. 1 поле может читаться в 8 потоков ? -
А какая разница сколько полей искать? 1 или 100? Всегда будет мнонопоточно искать, каждый поток будет искать по своей части данных. Обычно число потоков = половине ядер
-
спс
Вы проверяли это в исходниках ? -
Нет, только на практике
-
гут - это и хотел узнать
еще раз спс -
в продолжение - еще вопрос, если позволите
после поиска : сбор данных и простое агрегирование (sum, avg ... ) на 1-м единственном сервере (нет шардинга) идет тоже многопоточно ?
т.е. типа агрегация по 1-му полю = 1 поток ?
если нужно агрегировать 3 поля - 3 потока ... -
Да, агрегация тоже многопоточна, КХ MPP система, почти все операции кроме финального слияния результатов делаются многопоточно
-
еще минутку внимания
из-за чего увеличение числа argMax() в запросе по 1-й таблице драматически увеличивает время его выполнения ,
в то время как число sum() и т.п. - не увеличивает ? -
Ребята, подскажите по условиям в JSON_QUERY? Есть вообще такая функциональность у этой функции?
-
Всем привет! В логах есть повторяющая ошибка вида
<Error> db.table.DirectoryMonitor .. DB::Exception: Column date is not under aggregate function and not in GROUP BY
Но запросы в приложении не падают, как на вставку, так и на чтение. Есть мат вью, но они также отрабатывают и туда пишутся данные. Да и блин полный запрос не отображается в логах.
Хочу спросить, может ли быть так, что КХ (версия 22.1.3.7) в логах крутит какие-то старые ошибки постоянно, или это исключено? Или может есть советы, куда можно также посмотреть? -
Я бы наверное для начала посмотрел сколько памяти уходит, не начинает ли использоваться диск
-
В query_log не смотрели? Там должна быть сохранена эта ошибка
-
Да пока даже запросов не уходит в кластер, а ошибка эта постоянно появляется. В query_log посмотрю, спс
-
initial_query_start_time: 2022-01-31 10:24:07
initial_query_start_time_microseconds: 2022-01-31 10:24:07.613998
вот что в логах. Все таки получается запрос был очень давно инициирован и КХ его сам переотправляет? Такое может как-то регулируется в настройках? -
После небольших тестов выяснилось: Clickhouse работает с виртуальными полями _key, _partition
По крайне мере с движком Kafka в них можно писать. Есть только один недостаток: при объявлении таблицы нужно явно указывать эти поля (например _key) и они потом обязательно попадут в сообщение. Для сериализации в JSON все работает корректно.
У нас же использовался protobuf - уже требуется изменить схему.
Пример:
CREATE DATABASE sandbox;
CREATE TABLE sandbox.sandbox_data
(
payload String,
_key String
) ENGINE = Kafka()
SETTINGS
kafka_broker_list = 'kafka:9092',
kafka_topic_list = 'sandbox_data',
kafka_group_name = 'clickdec-101',
kafka_format = 'RawBLOB',
kafka_num_consumers = 1,
kafka_commit_every_batch = 1,
kafka_thread_per_consumer = 1;
INSERT INTO sandbox.sandbox_data (payload,_key) VALUES ('go','ok1');
Сообщение Kafka
{"topic":"sandbox_data","payload":"gook1","_kafka":{"offset":12,"partition":0,"highWaterOffset":13,"key":"ok1"},"_msgid":"dc833e08f6401f05"} -
1) нет, может делаться хоть 100 потоками (max_threads). Нет привязки. Они там по блокам компрессии и дальше блокам данных обрабатываются...
2) нет, если строк много будет хоть 100 потоками (max_threads). Конкретный массив будет обрабатываться одним потоком -
нет такого... settings max_threads=x
x потоков -
-
Я не нашёл в гугле, чтобы JSON_QUERY имеел такую возможность в SQL, но нашёл что он умеет так делать в JS. Скорей всего вы не туда смотрите.
-
SELECT * FROM system.settings
WHERE name like '%max_threads%' -
да, можно задать на запрос, на сессию, как угодно.
цифра 8 это если стоит по умолчанию и на ноде 16 cpu/vcpu -
Понял, спасибо
-
Так а запрос сам как выглядит?) Случайно не мутация?
-
INSERT там, то есть на мат вью ругался. Но суть в том, что это было раньше, 3 месяца назад и сейчас это не актуально, а вот в логи срет. Что-то с этим можно сделать?
-
у вас где то по пути distributed скорее всего. удалите кривую вставку...
-
в том и вопрос, что это уже не воспроизвоится, но в логах ошибки есть и постоянно появляются. initial_query_start_time как раз и говорит о том, что ошибка была еще 3 месяца назад
-
Вопрос как КХ хранит данные одинаковые данные в партах.
У него же есть оптимизация, что дублирующиеся значения хранятся как одно (100 одинаковы строк будут весить как одна)
Это работает с value-type по типу int8, int16, int32?
Делаю две таблицы Marker1 и Marker2.
Что выгоднее две таблы или одну но партом по MarkerId будет одно то же по месту на диске?
или в одной таблице они будут чуть экономнее храниться? -
Konstantin Ilchenko in ClickHouse не тормозит
Вставка в distributed идёт асинхронно, на ноде через которую была вставка в папке с дистрибьютед таблицой создаются bin файлы с данными, они потом пытаются отправиться на нужный шард. Из-за того что ошибка в данных они не могут отправиться и пытаются заново отправиться, можете их удалить чтобы в логах не было ошибок в /var/lib/clickhouse/data/db_name/distributed_table_name/...shardN/*.bin если база атомик то путь будет немного другой
-
файл у вас в дистрибютед папке... он будет пытаться вставиться до бесконечности
-
Всем привет!
Подскажите по переименованию реплицируемой таблицы, возможно ли и как правильно выполнить.
Есть таблица, создавалась с использованием макросов в пути ZK (в том числе и имя таблицы). Сейчас возникла необходимость переименовать таблицу. Но в этом случае получится, что Clickhouse, после переименования таблицы, начнет искать метаданные таблицы в ZK по новому пути, которого не существует. Что приведет к ее неработоспособности. Поправьте, если что-то неверно.
Сам вопрос - возможно ли как-то выполнить переименование таблицы в такой ситуации, не нарушив ее работоспособности? -
не будет, путь ZK остается навечно.
что кстати рождает сложности при попытке создания со старым именем, приходится изворачиваться.
но у вас проблем не будет. -
Но дока говорит обратное:
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication -
-
https://github.com/ClickHouse/ClickHouse/issues/6917
Дока устарела{table} and {database} macro in ReplicatedMergeTree vs RENAME TABLE · Issue #6917 · ClickHouse/ClickHouseIf table was created with {database} and {table} macros in zookeeper path, then RENAME operation makes it stop working. Probably those macros should be unfold at the moment of table creation.
-
Долго это сколько?
Вообще вам такое может помочь
https://github.com/ClickHouse/ClickHouse/pull/32928Speed up parts loading process of MergeTree by metadata cache by taiyang-li · Pull Request #32928 · ClickHouse/ClickHouseChangelog category (leave one): Performance Improvement Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Speed up parts loading process of MergeTree t...
-
до 10 мин
-
Многовато, у вас медленные диски?
-
зависит не от размера, зависит от кол-ва таблиц x партов
-
китайцы молодцы, наконец...
-
ага
-
этого ещё нет в релизах получается?
-
SATA WD 14 TB, 7200 оборотов. Медленные, но неужели настолько?
-
Кликхаус трогает все файлы партов при загрузке, что бы метадату подтянуть, так что вполне
-
поглядел. я не очень смыслю в цикле разработке. Этот коммит уже приняли в мастер, как я понял? То есть будет в одном из следующих релизов?
-
Да, в 22.4 думаю
-
Всем привет. Документация не раскрывает ответы на вопросы, мб кто-то сможет подсказать:
Вопросы про команду ALTER ... MOVE PARTITION TO TABLE
1. Правда ли, что она работает на уровне метаданных и не может привести к копированию данных?
2. Правда ли, что она применяется на всем кластере? Нужно ли по аналогии с DETACH PARTITION применять ее обязательно на leader replica или можно на любой?
3. Правда ли, что если я указываю партицию по ID и у нескольких партиций в system.parts одинаковое значение partition_id - перенесутся только активные? -
Также есть вопрос про движки: если планируется один раз залить данные в таблицу, дедуплицировать их и использовать без последующего долива - есть ли смысл использовать ReplacingMergeTree? Или в таком сценарии разницы (например по скорости заливки) с обычным MergeTree + OPTIMIZE ... FINAL DEDUPLICATE BY.. по окончанию заливки не будет? Дубликатов на входе - не более 10%.
-
Если вдруг кому то надо - сделал докерфайл для сборки документации на русском
FROM ubuntu:latest as base
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y git npm pip
RUN TZ=Etc/UTC apt-get -y install tzdata
RUN npm install -g purify-css amphtml-validator
RUN git clone --branch 22.3 https://github.com/ClickHouse/ClickHouse.git
WORKDIR /ClickHouse/docs/tools
RUN sed -i s/^pymdown-extensions==.*/pymdown-extensions==9.0/ requirements.txt
RUN sed -i s/^MarkupSafe==.*/MarkupSafe==2.0/ requirements.txt
RUN sed -i s/^mkdocs==.*/mkdocs==1.2.4/ requirements.txt
RUN echo "mkdocs-material==8.2.6" >> requirements.txt
RUN pip install -r requirements.txt
RUN ./build.py --lang=ru,en --skip-amp --skip-single-page --output-dir=/docs
FROM nginx:latest
COPY --from=base /docs/ /usr/share/nginx/html/ -
-
Осталось заргрузить это в https://pastila.nl/
-
1. правда, причем почти во всех ДБ.
2. должно реплицироваться но не пробовал. (мы всегда тупо пишем ON CLUSTER если много шардов)
3. непонятно как вы добились duplicate ID в пределах одной таблицы... -
можно mergetree + optimize
-
А локализацию доков-то на сайте зачем убрали? Балин. Мешала?
-
новый фреймворк же явно, SPA, красиво, стильно, молодежно. языки думаю позже подъедут
-
может санкции, может ошибка.
-
Спасибо.
Насчет 3. Создаю ReplacingMergeTree без явного ключа партиционирования, делаю 2 вставки. Получаю два активных парта с partition_id=all у обоих. Если выполнить optimize - эти два станут неактивными, появится третий активный c id=all -
это парты. в одном партишне может быть n партов. перенесутся все.
-
это ожидаемое поведение, id=all это не id это префикс партиции в названии каталога парта, если PARTITION BY нет, то он просто all по умолчанию и как выше заметили перенесутся все парты в партишене, партишен у вас один
-
Спасибо!
-
-
лучше AS any_B
и что то не помню откуда взялась функция any
вроде была только anyLast
SELECT * FROM system.functions
посмотрите? -
В документации есть функция такая - https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference/anyany | ClickHouse Docs
agg_function-any}
-
а версия какая? раньше было подобное, но очень давно
-
Не могу посмотреть, база не моя
-
Да, с другим названием прокатывает. Ладно, обходным путем решу, всем спасибо )
-
Видимо тогда из-за старой версии БД
-
добрый день. у меня бекап из google cloud storage в формате parquet в архиве gzip
данный бекап загружен в яндекс сторадж. как мне из этих файлов развернуть таблицу в клик хаусе?
что-то вроде этого - https://clickhouse.com/docs/en/engines/table-engines/integrations/s3/S3 Table Engine | ClickHouse Docstable-engine-s3}
-
Всем привет! Ситуация: обращаюсь в кх из графаны через grafana-clickhouse-datasource. Поставил таймаут 180 секунд. Почему-то долгие запросы прерываются ровно через 30 секунд с ошибкой - "driver: bad connection: Could not process SQL results". Может уже кто-то наступал на такие грабли?
-
select version()
-
-
Всем привет... Столкнулся с проблемой. не пойму в чем дело...
Добавляю колонку:
ALTER TABLE test.user_counter ADD COLUMN `n` UInt64 DEFAULT (row_number() OVER (PARTITION BY uid ORDER BY d ASC)) AFTER oid
При этом возникает ошибка:
Code: 47. DB::Exception: Unknown identifier: row_number() OVER (PARTITION BY uid ORDER BY d ASC); there are columns: uid, d: While processing _CAST(row_number() OVER (PARTITION BY uid ORDER BY d ASC) AS n_tmp_alter2331953492248545715, 'UInt64') AS n: default expression and column type are incompatible. (UNKNOWN_IDENTIFIER)
В чем может быть дело? -
а как это вообще должно работать? на каждую вставку должна пересчитываться вся таблица?
-
ну было бы здорово)
-
https://t.me/clickhouse_ru/263835
ну например вотDenny Crane [Starship Captain at Altinity (NB,Canada)] in ClickHouse не тормозиттолько надо читать changelog там backward incompatible дофига между 21.3 и 22.3 в 21.6 поменяли uniq(от UIID) и сломали всем агрегаты
-
есть у нас баг в 21.8, но вы через него "перепрыгнете", поэтому ок
-
-
-
-
Удалили :)
-
-
внезапно)
-
Утром писали
-
Новый движок
-
Языки пропали
-
Добавят потом
-
А так пусть что угодно делают, чтобы кх жил)
-
-
ну молодцы, что смогли вывезти команду. Вполне ожидаемо)
-
Всем привет!
Есть табличка ReplicatedReplacingMergeTree которая содержит примерно 100 лярдов событий.
События могут обновляться в течении 2х последних месяцев.
Для исключения дубликатов мы используем запросы с агрегацией и функцией argMax().
Если не использовать argMax() то запросы отрабатывают примерно в 5 раз быстрее, но содержат не верный результат из-за дублей.
Собственно вопрос, можно как-то оптимизировать запросы, убрать дубли и функцию argMax? ) -
можно сторнировать если колонки тривиальные.
-
Добрый день! Подскажите, пожалуйста, можно ли как-то указать имена столбцов для untuple?
-
можно пример?)
-
LIMIT 1 BY <поля в ORDER BY>
-
-
Спасибо! Покурю этот вариант
-
-
Это довольно неожиданно (для меня), но может у вас данные такие особенные :)
-
-
Да, уже смотрю. Спасибо за наводку!
-
-
правильно понимаю, что этот метод не гарантирует, что будет выбрана именно последняя вставленная строка для значения ключа ORDER BY?
-
-
https://t.me/clickhouse_ru/217761
только вставку надо менять... можно без replacing, это больше для коллапсинг (но можно и два раза replace-нуть)Denny Crane [Starship Captain at Altinity (NB,Canada)] in ClickHouse не тормозитну никак не сделать с mv. Либо посылать значения сначала с минусом (сторнировать) Первый инсерт 10 Надо обновить пишем -10. Пишем новое значение 11
-
Понял, спасибо!
-
Приветствую, а кто сможет пояснить, почему тут есть деб пакетики с последним v22.3.2.2-lts
https://github.com/ClickHouse/ClickHouse/releases
а тут нет
https://repo.yandex.ru/clickhouse/deb/stable/main/Releases · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
репозиторий переехал:
deb https://packages.clickhouse.com/deb stable main -
оу. спасиб
-
DirectoryMonitor это монитор Distributed db.table таблицы, там завис инсерт который не может протолкнутся в шард.
ошибка странная, скорее всего в mat view причина
можно просто удалить этот инсерт (файл.bin) -
-
а, вот оно что, застряло там, это похоже на правду, можно просто удалить файлик получается?
/data/clickhouse/store/cc7/cc704f24-3ca1-4d39-a1d4-aa867605bc37/shard2_all_replicas/1.bin
не поломается ж продакшн? :) Это вот в логе такое:
: While sending /data/clickhouse/store/cc7/cc704f24-3ca1-4d39-a1d4-aa867605bc37/shard2_all_replicas/1.bin. (NOT_AN_AGGREGATE), Stack trace (when copying this message, always include the lines below): -
просто удалить, ничего не сломается
-
Спасибо большое!
-
-
можно очень широко трактовать термин получен. Получен из S3? Из шардов? Из диска? Из финальной группировки?
смотрите в profile events в system.processes или в query_log -
а где ключик gpg для него взять подскажите ?
-
ClickHouse - Fast Open-Source OLAP DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Installation | ClickHouse Documentation
Installation System Requirements ClickHouse can run on any Linux, FreeBSD, or Mac OS X with x86_64, AArch64, or PowerPC6
-
это старое
-
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
-
по ссылк от Ивана выше
-
Кхм, в старой версии было новое на русском,а в новой всё плохо
-
вот здесь норм. спасибо.. как-то бы выравнять все эти туториалы
-
Кто бы вернул нормальную доку 🤔
-
Aleksey Barabanov in ClickHouse не тормозит
Если вдруг кому то надо - сделал докерфайл для сборки документации на русском FROM ubuntu:latest as base ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y git npm pip RUN TZ=Etc/UTC apt-get -y install tzdata RUN npm install -g purify-css amphtml-validator RUN git clone --branch 22.3 https://github.com/ClickHouse/ClickHouse.git WORKDIR /ClickHouse/docs/tools RUN sed -i s/^pymdown-extensions==.*/pymdown-extensions==9.0/ requirements.txt RUN sed -i s/^MarkupSafe==.*/MarkupSafe==2.0/ requirements.txt RUN sed -i s/^mkdocs==.*/mkdocs==1.2.4/ requirements.txt RUN echo "mkdocs-material==8.2.6" >> requirements.txt RUN pip install -r requirements.txt RUN ./build.py --lang=ru,en --skip-amp --skip-single-page --output-dir=/docs FROM nginx:latest COPY --from=base /docs/ /usr/share/nginx/html/
-
Есть кластер из двух шардов по 2 реплики, базы - атомик. Настроили сегодня выгрузку кучи данных из кафки средствами KafkaEngine + MV в Distributed таблицы.
И тут заметил, что в какой-то момент на двух серверах одного шарда уверенно стала расти метрика DistributedFilesToInsert (уже под 5000), хотя на втором - по нулям.
В доке про метрику написано: shows the total number of files in filesystem that are selected to send to remote servers by Distributed tables.
Где-то криво настроены распределённые таблицы? Что это может быть? Куда смотреть? -
system.distribution_queue
-
Table is in readonly mode на одном из серверов второго кластера (где очереди нет)
-
select FQDN() h, count() from clusterAllReplicas('', system.replicas) where is_readonly group by h
-
Пусто (имя кластера подставил). На всякий случай проверил system.replicas локально на каждом сервере - нигде нет ничего в ридонли.
-
Всем привет, копаюсь в доке и не понимаю вот этого примера, кто нибудь может объяснить почему так?
arrayReduce('maxIf', [3, 5], [1, 0]) == 3
почему?
https://clickhouse.com/docs/en/sql-reference/functions/array-functions#arrayreduceArrays | ClickHouse DocumentationArray Functions empty Checks whether the input array is empty. Syntax empty([x]) An array is considered empty if it does
-
условием If из maxIf выступает второй массив [1,0] в котором удовлетворяющим условию является 1, которая находится на позиции 1, а позиции 1 из целевого массива [3,5] будет 3, а max(3) = 3
-
-
здесь будет 5, так ведь?
-
-
-
а в arrayReduce('maxIf', [3, 5, 4], [1, 0, 1]) результат соответственно 4
-
понял, спасибо большое!
-
ver 21.11.4.14
;
--таблица источник для мат. вью - компании
CREATE OR REPLACE TABLE Test.Company
(
concern String,
branch Int32,
company String,
inn String
)
ENGINE = MergeTree
ORDER BY (concern, branch)
;
--таблица, аггрегирующая данные компаний по концернам и веткам во вложенную структуру
CREATE OR REPLACE TABLE Test.Concern
(
concern String,
branch Int32,
company SimpleAggregateFunction(groupArrayArray, Array(String)),
inn SimpleAggregateFunction(groupArrayArray, Array(String))
)
ENGINE = AggregatingMergeTree
ORDER BY (concern, branch)
;
INSERT INTO Test.Company (concern, branch, company, inn)
VALUES('concern1', 1, 'company1', '1234')
;
INSERT INTO Test.Company (concern, branch, company, inn)
VALUES('concern1', 1, 'company2', '2345')
;
--при прямой вставке данных в аггрегирующую таблицу Test.Company из Test.Company массивы заполняются, как надо
INSERT INTO Test.Concern (concern, branch, company, inn)
SELECT concern, branch, array(company), array(inn)
FROM Test.Company
;
concern branch company inn
concern1 1 ['company1','company2'] ['1234','2345']
;
SELECT concern, branch, company, inn FROM Test.Company
;
SELECT concern, branch, company, inn FROM Test.Concern
;
SELECT concern, branch, company, inn, inn_dif FROM Test.Concern ARRAY JOIN inn as inn_dif
;
DROP TABLE Test.mv_Concern
;
------ИСПОЛЬЗОВАНИЕ МАТ. ВЬЮ
--мат. вью вариант 1
CREATE MATERIALIZED VIEW Test.mv_Concern TO Test.Concern
AS
SELECT concern, branch, array(company), array(inn)
FROM Test.Company
;
--мат. вью вариант 2
CREATE MATERIALIZED VIEW Test.mv_Concern TO Test.Concern
AS
SELECT concern, branch, groupArray(company), groupArray(inn)
FROM Test.Company
GROUP BY concern, branch
;
-- при вставке данных в таблицу - источник для мат. вью Test.Company, массивы в Test.Concern пустые
concern branch company inn
concern1 1 [] []
concern1 1 [] [] -
в общем, с мат.вью, почему-то не получилось, в коде выше все описано
-
Я бы сказал, что это ожидаемое поведение. И почему это не выходит на первом слайде https://www.youtube.com/watch?v=1LVJ_WcLgF8&list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597s
-
получилось выяснить в чем была проблема?
-
Нет, вроде как само исчезло
-
Коллеги, а кто знает как зашейпить и ограничить скорость у kafka engine? Чтобы не весь vpn туннель ел
-
я понимаю, что вставляются в указанную в мат.вью не из таблицы источника, а вставляется блок и в целевую таблицу и в мат. вью, но он же содержит нужные данные, но я, все равно не поняла, почему он эти данные не может превратить в массив, можно для идиотов на пальцах? о_О
и, есть ли, все-таки, вариант накапливать данные во вложенных структурах внутри Clickhouse, без работы внешних сервисов? -
Ещё раз посмотрите видео, вы не поняли. Каждая вставка разбивается на несколько десятков потоков, и каждый поток отдельно обрабатывает MV
-
Честно, я не знаю как это решить в Clickhouse, но у Denny гораздо больше опыта и возможно он предложит решение
-
а где вы нашли Table is in readonly mode тогда ? покажите
-
я идиота кусок, дело в алиасах в запросе в мат. вью, вопрос снимается, но если есть предложения сделать это лучше, буду рада!
-
дело в алиасах было
-
лучше не сделать.
вариант мат вью без групбай вставляет больше строк, но optimize_on_insert включен по дефолту поэтому это не важно, AggregatingMergeTree само сделает групбай в момент инсерта.
вариант мат вью с групбай вставляет меньше строк, но ест больше памяти.
наверное надо тестировать какой вариант быстрее -
понял, я просто еще думала, может с Nested удасться это провернуть, чтобы потом в select делать array join с одним полем - вложенная структура, а не с каждым, которое просто массив
-
в любом случае, спасибо, буду тестировать оба варианта мат.вью
-
У кого-то была проблема, что на больших объемах строки на вставку клик теряет строки?
-
то есть вставил X строк, сохранилось Y, при этом X > Y и проблем с дубликатами нет
-
В таблицу с каким движком вставляете? Какой клиент? Завершается ли вставка успехом?
-
Я сделал
select FQDN(), * from clusterAllReplicas('fdp-cluster', system.distribution_queue) t where t.data_files > 0;
И увидел две ноды из второго шарда, у которых для распределённой таблицы Events data_files под 7000 и в поле last_exception написано:
Code: 242. DB::Exception: Received from chi-clickhouse-replicated-0-0:9000. DB::Exception: Table is in readonly mode (zookeeper path: /clickhouse/tables/fdp/Events_local/shard1).
Значения в data_files медленно растут, в system.replicas с признаком is_readonly=1 по-прежнему ничего нет.
В какой-то момент мониторинг показал событие init ZK, после чего график по метрике DistributedFilesToInsert пошёл вниз, но вскоре снова начал расти. -
Добрый день, при подключении к кликхаусу питоном 3.8. выдает ошибку NetworkError: Code: 210. [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131) (10.52.119.36:8123)
Библиотеки подключила вот такие
from clickhouse_driver import Client, connection
import clickhouse_driver
import clickhouse_sqlalchemy
Надо еще такие подключить или не из-за этого?
import socket, ssl, time, select
from OpenSSL import SSL
? -
Failed to connect to xx.xx.xx.xx:8123
Traceback (most recent call last):
File "/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/connection.py", line 325, in connect
return self._init_connection(host, port)
File "/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/connection.py", line 289, in _init_connection
self.socket = self._create_socket(host, port)
File "/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/connection.py", line 261, in _create_socket
raise err
File "/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/connection.py", line 252, in _create_socket
sock.connect(sa)
File "/usr/lib/python3.8/ssl.py", line 1342, in connect
self._real_connect(addr, False)
File "/usr/lib/python3.8/ssl.py", line 1333, in _real_connect
self.do_handshake()
File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131)
---------------------------------------------------------------------------
NetworkError Traceback (most recent call last)
/tmp/ipykernel_2239789/373079967.py in <module>
10 print("не получилось")
11
---> 12 result1 = client.execute("SELECT * from d_division")
/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/client.py in execute(self, query, params, with_column_types, external_tables, query_id, settings, types_check, columnar)
282 start_time = time()
283
--> 284 with self.disconnect_on_error(query, settings):
285 # INSERT queries can use list/tuple/generator of list/tuples/dicts.
286 # For SELECT parameters can be passed in only in dict right now.
/usr/lib/python3.8/contextlib.py in __enter__(self)
111 del self.args, self.kwds, self.func
112 try:
--> 113 return next(self.gen)
114 except StopIteration:
115 raise RuntimeError("generator didn't yield") from None
/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/client.py in disconnect_on_error(self, query, settings)
225
226 try:
--> 227 self.connection.force_connect()
228 self.last_query = QueryInfo()
229
/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/connection.py in force_connect(self)
217
218 if not self.connected:
--> 219 self.connect()
220
221 elif not self.ping():
/home/idi/jupyter/environment/lib/python3.8/site-packages/clickhouse_driver/connection.py in connect(self)
344
345 if err is not None:
--> 346 raise err
347
348 def reset_state(self):
NetworkError: Code: 210. [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131) (10.52.119.36:8123) -
еще вопрос
можно ли создать таблицу, у которой первичный ключ содержит больше колонок, чем order by? -
например, primary key brand, supplier, article, size
order by article, date -
Нельзя, primary key это префикс от order by. Например
Primary key article, date order by article, date, brand, supplier -
а что делать, если нужно задать уникальность для большего количества колонок, чем в order by?
-
только расширять order by?
-
Первичный ключ не гарантирует уникальность
-
Да, можно добавлять колонки в конец order by если добавляется новая колонка. Если колонка уже есть в таблице то её нельзя будет добавить. Ну и уникальность работает для Replacingmergetree, не для обычных mergetree
-
-
да, просто у меня есть колонка товар и колонка размер
если добавить размеры товару, то при текущем ключе order by размеры дедублицируются -
заменяются
-
то есть вставил 5 строк, осталась одна)
-
а при добавлении размера в order by скорость запросов сильно проседает
-
чтож вы все никак не хотите понять про синтаксический сахар.
Там же просто колонки в таблице надо с точкой назвать типа A.a, A.b это тоже самое что и A Nested (a .., b..) -
в логе КХ того который chi-clickhouse-replicated-0-0 надо смотреть
-
первое: 8123 это HTTP не секурный
второе: clickhouse_driver работает через TCP
третье: TCP бывает секурный и нет.
четвертое: когда подключаетесь надо указывать в свойствах коннекта secure=1 -
Спасибо большое!
-
что? как это?
типа запрос с final? -
у меня таблица с названиями с точкой f.concern, f.branch не создается - ошибка
-
мне из канады не видно ошибку, очень далеко.
подозреваю что вы не указываете кавычки вокруг имен, либо двойные ", либо бэктики `
типа
`A.a` Int64,
`A.b` String -
CREATE OR REPLACE TABLE Test.Concern
(
concern String,
branch Int32,
f.company SimpleAggregateFunction(groupArrayArray, Array(String)),
f.inn SimpleAggregateFunction(groupArrayArray, Array(String))
)
ENGINE = AggregatingMergeTree
ORDER BY (concern, branch)
Code: 62. DB::Exception: Syntax error: failed at position 237 ('.') (line 6, col 3): .company SimpleAggregateFunction(groupArrayArray, Array(String)),
f.inn SimpleAggregateFunction(groupArrayArray, Array(String))
)
ENGINE = AggregatingMer. Expected one of: nested table, ALIAS, identifier, DEFAULT, data type, MATERIALIZED. (SYNTAX_ERROR) (version 21.11.4.14 (official build)) -
все, через "" получилось, и работает, спасибо!
-
FYI Мы сделали ошибку при выкладке документации, из-за чего последние полтора дня была сломана русская и китайская документация, а также страницы с бенчмарками.
Сейчас я откатил все изменения до исправления ошибок. Если что-то не отображается, нажмите Ctrl+F5 в браузере. -
None
- 06 April 2022 (204 messages)
-
-
-
-
-
блин у уменя собралось лучше через докер =) даже сайт работает
может вамшему девопсу помощь нужна?
https://t.me/clickhouse_ru/264447Aleksey Barabanov in ClickHouse не тормозитЕсли вдруг кому то надо - сделал докерфайл для сборки документации на русском FROM ubuntu:latest as base ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y git npm pip RUN TZ=Etc/UTC apt-get -y install tzdata RUN npm install -g purify-css amphtml-validator RUN git clone --branch 22.3 https://github.com/ClickHouse/ClickHouse.git WORKDIR /ClickHouse/docs/tools RUN sed -i s/^pymdown-extensions==.*/pymdown-extensions==9.0/ requirements.txt RUN sed -i s/^MarkupSafe==.*/MarkupSafe==2.0/ requirements.txt RUN sed -i s/^mkdocs==.*/mkdocs==1.2.4/ requirements.txt RUN echo "mkdocs-material==8.2.6" >> requirements.txt RUN pip install -r requirements.txt RUN ./build.py --lang=ru,en --skip-amp --skip-single-page --output-dir=/docs FROM nginx:latest COPY --from=base /docs/ /usr/share/nginx/html/
-
а как под винду в докере это собрать? создаёшь пустой докер и вводишь эти команды?
-
да там всё само собирается, просто в репе неактуальные зависимости, ощущение что собирают не из репы билдом а гдето на ноуте чьемто
-
это докерфайл) создайте файл Dockerfile с таким содержимым, затем в этой папке запустите
docker build . -t clickdoc
после сборки (у меня гдето пара минут) запустите контейнер
docker run -d -p 9999:80 clickdoc:latest
ну и через браузер заходите на http://localhost:9999
на винде не проверял, но проблем не вижу -
Собирают по памяти :)))
-
Чёт вспомнил это сообщение из канала Алексея)
-
3.3. Исправить идиотский поиск по документации.
Не делает Иван Б., и есть подозрения, что он не в состоянии выполнить эту задачу. Сам сайт документации основан на треш-технологиях, которые трудно исправить. -
Видимо, технологии прям действительно полный треш
-
-
А какие свежие тулзы для документации рекомендуете?
-
зпасисбо, вот этого в инструкции и не хватало, про билд )))
-
только непонятно, почему так называется докер. вроде в тексте докерфайла нет ничего подобного. откуда подтянулось?
-
Докер сам сгенерил, это нормально
-
-
-
аллах акбар =)
-
ммм, исламская доктрина, звучит как какая-то этническая ORM
-
Если из бесплатных - bookstack ничего так
-
Она удалит нечестивые файлы с твоего компьютера
-
Думается мне, что с naughty_kalam все наоборот)
-
-
в incognito зайдите, все ок
-
а нет, главная в жопе в инкогнито тоже, ходите по самим страницам... бывает
-
-
Ctrl+shift+R помогает?
-
-
-
да как то так
-
-
если заходить непосредственно с корня... при открытии напрямую страниц дальше навигация ок
-
https://clickhouse.com/docs/en/
в сафари вот так -
https://clickhouse.com/docs/ru/ Ру топчик :)Обзор | Документация ClickHouse
Что такое ClickHouse ClickHouse - столбцовая система управления базами данных (СУБД) для онлайн обработки аналитических
-
отрисовка разная, с русского IP - ломается вёрстка, с немецкого - всё нормально
-
-
-
-
думаю у вас кеш, после рефреша или инкогнито у меня 404
-
таки да. ctrl+shift+R вылечил
-
саммари:
https://clickhouse.com/docs/ru/ - 404
https://clickhouse.com/docs/ru/whats-new/changelog/ redirecting to https://clickhouse.com/docs/en/whats-new/changelog/
- все работает (на англ JS SPA)
https://clickhouse.com/docs/en/ - битая верстка
прямые ссылки на анг документацию + интро (https://clickhouse.com/docs/intro/ ) ок.
из плюсов - в этом английском СПА поиск человеческий и релевантный, мне очень зашел... предыдущий был убогим. -
навегда выпилили русскую документацию?
-
доброго утра. Делаю по вашей рекомендации и возник вопрос: а если мне не важен дифф последних N минут данных, можно обойтись без остановки живого КХ? Или данные, по которым долго делается рсинк с живого будут в неконсистентном состоянии и доливка после остановки обязательна?
-
Alexey Milovidov in ClickHouse не тормозит
FYI Мы сделали ошибку при выкладке документации, из-за чего последние полтора дня была сломана русская и китайская документация, а также страницы с бенчмарками. Сейчас я откатил все изменения до исправления ошибок. Если что-то не отображается, нажмите Ctrl+F5 в браузере.
-
-
можно на expression/tuple делать
-
спасибо, не заметил сообщение
-
но если ваш запрос не такой же, например,
вместо
where (a,b) in (3,4)
будет
where a=3 and b=4
, есть вероятность что использоваться индекс не будет -
Только что сломали по второму разу, сейчас верну, как было.
-
Привет, подскажите какие настройки кликов можно поправить, чтобы снизить iowait сейчас скачет, из-за этого чтение периодически тормозит?
-
-
до загрузки проверяйте файлы ge, потом грузите
-
диверсанты?
-
так а как сделать подключение
-
глянь цей PR
https://github.com/great-expectations/great_expectations/pull/4389[BUGFIX] Fix clickhouse same-alias issue by serg-music · Pull Request #4389 · great-expectations/great_expectationsPlease annotate your PR title to describe what the PR does, then give a brief bulleted description of your PR below. PR titles should begin with [BUGFIX], [FEATURE], [DOCS], or [MAINTENANCE]. If a...
-
Привет!
Можете скинуть какой-нибудь онлайн-компилятор для ClickHouse, чтобы тестить функционал
Не смог в сети найти -
-
Не понимаю, откуда здесь авторизация, нет без паролей ничего?
-
здесь только пользователь, без пароля
-
По дефолту не правильный пользователь, стоит. Я исправил ссылку
-
Playground | Документация ClickHouse
ClickHouse Playground ClickHouse Playground allows people to experiment with ClickHouse by running queries instantly, wi
-
Спасибо!
-
Спасибо!
-
Привет, подскажите какие настройки кликов можно поправить, чтобы снизить iowait ?
-
Всем привет, ловлю странный баг, движок RabbitMQ, при чтении не читает последний символ, у меня там обычно скобочка ] или } и вот её пропускает... кто тосталкивался с этим?
Код создания таблицы
create table rabbitmq
(
json String
)
engine = RabbitMQ SETTINGS rabbitmq_host_port = 'rabbitmq:5672', rabbitmq_exchange_name = 'clickhouse', rabbitmq_queue_base = 'stream', rabbitmq_format = 'LineAsString', rabbitmq_num_consumers = 1, rabbitmq_exchange_type = 'fanout'; -
LineAsString раньше работал плохо, надо обновить до 22.3.
-
спасибо
-
можно ли в arrayMap как-то работать с индексами элементов?
-
-
arrayEnumerate(поле)
-
а как передать?
-
-
понял
-
arrayMap может работать с двумя массивами одновременно
-
Через запятую их передавать
-
понял
-
Добрый день. Подскажите: В поле нужно хранить направление ( прямой или обратное), никак не могу определиться с типом. Какое будет эффективнее : Uint8 -> писать 0 или 1, или же FixedString(1). Ну или извратиться и Lowcardinality(String) ???
-
Я бы выбрал Uint8
-
почему не enum?
-
доливка обязательна
-
принял. спасибо
-
будет
-
возможно ли как-то такую структуру привести к виду
строка = article, sizeOrigName, data, inderDaysOrder, dayOrder? -
ARRAY JOIN ?
-
bloom filter же не совсем minmax, он разве не хеширует весь expression несколько раз? или КХ оптимизирует where a=3 and b=4 ?
-
а как сделать arrayjoin для тупла?
-
Вы можете взять только один элемент из tuple. Например так array.1
-
Все равно е получается client = Client('xx.xx.xx.xx', user='dev', password='1', secure=1, verify=True, database='dwh_dev', port='9000')
ругается, что не та версия ssl NetworkError: Code: 210. [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131) (xx.xx.xxx.xx:9000) -
Всем доброго дня. Подскажите, у меня сомнения. Пишем данные в ch через спарк, в 4 потока в таблицу. Данных много. Насколько это скажется на производительности ch? Сдается мне, писать в параллель - не верное решение.
-
не нужно указывать порт, если он не менялся в настройках сервера. драйвер сам знает нужный. вы же говорите ему идти на обычный 9000, который без шифрования, с шифрованием
-
Добрый вечер
Не подскажете как можно группировать данные по изменениям в Speed поле?
Т.е. должно получиться 4 куска (1-2, 3-5, 6-8, 9-10) -
Ура, заработало!!!!🥰
-
Без джойнов?)
-
Желательно)
Вообще цель - получать периоды в которые машина двигалась, а в какие нет (соответствеено время начала и конца движения) -
А данных много?
-
Товарищи, ку! есть внешняя база Mysql примонтированная в клик. в ней делаются долгие запросы и коннект бывает отваливается, подскажите пжл, какой из таймаутов лучше подкрутить ? смотрю на external_storage_rw_timeout_sec ...
-
Сколько ни крути - всегда будет возникать "а вот надо ещё покрутить". Имхо надо решать задачу подругому. А синхронно какнибудь.
-
самое главное - какнибудь ))
-
Этим какнибудь дойдёт до часовых таймаутов. Боюсь воркфлоу себе сломаете.:) Всетаки советую пересмотреть подход.)
-
Много
-
идём к реорганизации, но пока нужно перелить данные.
-
Для перелить надо етльтулзы юзать, а не БД насиловать. Имхо.
-
Без джойнов вряд ли обойдётся. С джойнами легко.
-
базовый insert/select , просто и сердито
-
Пачками забирайте.
-
Тоже просто и сердито.
-
Хреново
А на джойнах это примерно как выглядеть может? -
это понятно, так и забираю
-
Джойнить боижайшую справа топ 1 строку где спиды не равны. Это для нулей. Для отличных от нулей соответственно искать справа ноль. Со строки берете дату. По ней группируете. Для последней группы можно текущую заюзать.
-
Вообще правильнее конечно искать строку перед той в которой изменилс спд.
-
Вот по её дате и производить дальнейшие операции.
-
Спасибо, подумаю
Может через оконные функции ещё чё получится -
WITH prev AS
(
SELECT
time,
speed,
lagInFrame(speed) OVER (ORDER BY time) AS prev_speed
FROM t
)
SELECT
time,
speed,
sum(abs(speed - prev_speed)) OVER (ORDER BY time) AS group
FROM prev;
┌────────────────time─┬─speed─┬─group─┐
│ 2022-04-06 16:22:44 │ 1 │ 1 │
│ 2022-04-06 16:22:45 │ 1 │ 1 │
│ 2022-04-06 16:22:46 │ 0 │ 2 │
│ 2022-04-06 16:22:47 │ 0 │ 2 │
│ 2022-04-06 16:22:48 │ 0 │ 2 │
│ 2022-04-06 16:22:49 │ 1 │ 3 │
│ 2022-04-06 16:22:50 │ 1 │ 3 │
│ 2022-04-06 16:22:51 │ 1 │ 3 │
│ 2022-04-06 16:22:52 │ 0 │ 4 │
│ 2022-04-06 16:22:53 │ 0 │ 4 │
└─────────────────────┴───────┴───────┘ -
Тоесть на этом примере идентификатор групп будут 29:15,30:45,32:15,now()
-
КМК в skip индексах все поля отдельно кодируются. Т.е. фактически skip индекс по двум полям равен двум скип индексам. Но есть ньюанс https://github.com/ClickHouse/ClickHouse/issues/8168#issuecomment-574385187
-
верное если у вас достаточно CPU
-
на stack overflow множество примеров в разделе КХ, искать по gaps and islands
-
Спасибо
-
на самом деле это надо делать до заливки в КХ.
КХ это MPP у вас задача не решается в параллель, надо последовательно строки обрабатывать -
через 5 минут отваливается? или все время разный таймаут?
-
Там прикол в том что телематика вразнобой приходит
Тут или из бд на уровне запроса это делать, или при обработке постоянно ходить в бд и смотреть нужно ли границы периода раздвигать -
ну а зачем вам заливать половину данных в КХ?
ну задержите заливку на час в ETL -
5 мин , не меньше,. Думаю вставить в лог время и сравнить с значениями, чтобы понять в какой упирается. Скрипт пока работает)
-
Данные могут приходить вразнобой вплоть до недели (тут не предскажешь)
-
ну если часть данных задержалась на неделю как вы доверяете резултатам запросов? Они же по части данных работают?
-
На неделю - редко, разве что если машина в гараже стояла.
В основном в течении дня всё прилетает. -
в общем быстрее всего работает вариант с arraysplit
https://stackoverflow.com/search?q=%5Bclickhouse%5DarraysplitHuman verificationStack Overflow | The World’s Largest Online Community for Developers
-
groupArray положить все массив, arrayDifference найти границы переходов состояний, arraysplit порезать по границам
-
-
таблица replicated ?
возможно merge идет и блокирует
select * from system.merges -
Добрый день, после удаления все равно вот такие ошибки есть в логах "<Error> executeQuery: Code: 215. DB::Exception: Column date is not under aggregate function and not in GROUP BY:", правда ошибки про файлик .bin пропали, может стоит еще бутнуть ноды или еще откуда-то вычистить старые данные, которые не могут протолкнуться?
В логах c "initial_query_start_time=today() AND type='ExceptionBeforeStart'" пусто, хотя в clickhouse-server.err.log продолжается то, что выше :( -
а полностью ошибку, целиком со стеком покажите
-
всем привет! а есть ли возможность в ClickHouse создавать вьюху с CTE внутри? У меня при создании такой вьюхи ошибку пишет Table default.web_stat doesn't exist
-
может от версии зависеть, я сам когда то заводил ишьюсы для create statements с cte, один давно, другой недавно но там были create table и create mat view, они их фиксили, но с обычными вьюхами вроде работало на последней версии
-
Подкажите пожалуйста.
Почему
SELECT toDateTime('0') падает с ошибкой парсинга
SELECT toDateTime(0) не падает? -
Во втором выходит 1970-01-01 ?
-
да
-
Всем привет, есть такой вопрос с кликом:
Ессли выбираю с вьюхи все поля (select * from table) то показывает все, если выбираю поля атрибут | метрика (0) то нифига не показывает -
Тогда при получение int считает, что это время в unix timestamp
-
Не replicated, MergeTree
-
SELECT toDateTime('10000') вот так не падает и тоже считает что unix timestamp
-
Мб встречался кто с таким мракобесием?
-
при чем SELECT toDateTime('9999') упадет. А 5 символов уже работает. Но суть понятна, буду кастовать к int'у
-
Ну кстати, возможно за 4 символа считает, как год, а дальше понимает, что unix
-
тоже так подумал, но SELECT toDateTime('2001') не работает
-
потому что ожидается строка в формате yyyy-mm-dd hh:mi:ss
-
да, был такой баг. Во вьюхе у вас есть union/ distinct ?
-
так и есть
-
так и не должно. На самом деле, вы делаете какую фигню, если надо чтобы КХ при SELECT func('2001') делал 2001-01-01 00:00:00 то есть такая функция parseDateTimeBestEffort
-
SELECT parseDateTimeBestEffort('2001')
─parseDateTimeBestEffort('2001')─┐
│ 2001-01-01 00:00:00 │
└─────────────────────────────────┘ -
это я экспериментировал, что бы понять как работает функция. Но вопрос решил явным кастом к UInt'у
Спасибо за ответы -
Вот create table точно работает, а create view чет не хочет)
-
а какая версия?
у меня на 22.3.2.1 работает:
create view v as
with cte as (select * from numbers(10))
select * from cte;
select * from v;
┌─number─┐
│ 0 │
│ 1 │
│ 2 │
│ 3 │
│ 4 │
│ 5 │
│ 6 │
│ 7 │
│ 8 │
│ 9 │
└────────┘ -
Всем привет, кто ставил ODBC для ClickHouse чтобы к PostgreSQL коннектится. На одном сервере поставил все как описано в доке, вроде работает, на другом выдает ошибку что файла нет.
Code: 86. DB::Exception: Received error from remote server /schema_allowed?connection_string=DSN%3Dhprofits_prod. HTTP status code: 500 Internal Server Error, body: Error getting schema usage from ODBC 'std::exception. Code: 1001, type: nanodbc::database_error, e.what() = ../contrib/nanodbc/nanodbc/nanodbc.cpp:1046: 0100: [unixODBC][Driver Manager]Can't open lib '/usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so' : file not found (version 22.1.3.7 (official build))' . (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER) (version 22.1.3.7 (official build)) Хотя лежит на файловой системе -
Кхм, а зачем ODBC, если сам Clickhouse поддерживает подключение к PG ?
-
Linux - SO file not found
I have a program which requires liblog4cpp installed to run. Now, I want the program to run on another machine without liblog4cpp. So I just find the log4cpp.so and move it to the same directory ...
-
Может мы отстали в этом вопросе, используем для DSN подключений словарей, которые лежат в PG
-
GitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouse
ODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Я тестил недавно словари от PG, и даже в доке было написано, что не работает с PG, по итогу работал. Мне кажется работа напрямую из Clickhouse, будет быстрей чем через ODBC
-
подскажите, у кого-нить еще datagrip так медленно простые запросы выполняет? причем вот справа видно, что они вроде как быстрее выполняются, чем показывает бегущий таймер слева, хотя и 100ms для таких запросов как-то долговато. ну т.е. в clickhouse-client оно мгновенно все.
-
https://pastebin.com/nn2EE0BX вот, там много, выложил отдельно
-
Не, нет такого. Ток group by есть
-
Скорей всего у вас пинг до сервера большой
-
вроде не настолько
-
Не знаю почему именно в этом примере так, но импорт данных датагрип идёт через одиночные инсерты в КХ :(
-
когда вы ставили pg odbc драйвер, вы использовали какую команду? (скорее всего не стоит либа icu)
-
Named connections | ClickHouse Documentation
Storing details for connecting to external sources in configuration files Details for connecting to external sources (di
-
летенси? vpn
-
Из PhpStorm работает медленно. Даже с локальными ресурсами.
-
а греп лога по d1ffe709-029d-4a50-9082-19504a8ce1f7 что выдает?
-
ну я вот скинул выше, пинг в среднем 80ms. коннекчусь через ssh tunnel, http интерфейс
-
Попробуйте с курлом сравнить
-
можно кстати одним инсертом все строки вставить
-
ну эт я понимаю, это для демонстрации
-
Действительно она не поставилась
-
-
https://pastebin.com/ZA8YTzsT две строчки только. Но блин, это старые запросы, они просто в логах сыпяться и все
-
у меня с пингом 4-5, этот же пример за ~8ms вставляет.
У вас пинг 80+ и вставка 160
Выглядит как будто так и должно быть -
да, все из-за этого, она нужна. Что за дистрибутив ? debian 11 ?
кстати вам верно говорят, что odbc не нужен -
ну вот я из браузера пробую через ...:8123/play
получается похоже на те цифры что справа (100-200мс), хотя через раз получается и меньше 100 мс, что я бы и ожидал при пинге 80мс -
так это посылает 10.164.0.28
там тоже файлик в Distributed таблице поди -
Лучше использовать то что вы посоветовали? По ссылке https://clickhouse.com/docs/en/operations/named-collections/#named-connections-for-accessing-postgresql-databaseNamed connections | ClickHouse Documentation
Storing details for connecting to external sources in configuration files Details for connecting to external sources (di
-
я советую потому что вы упомянули DSN
named-collections это просто путь как скрыть пароли -
Хранение реквизитов для подключения к внешним источникам в конфигурационных файлах
Реквизиты для подключения к внешним источникам (словарям, таблицам, табличным функциям) можно сохранить
в конфигурационных файлах и таким образом упростить создание объектов и скрыть реквизиты (пароли)
от пользователей, имеющих только SQL доступ. -
пинг 80мс - это же туда и обратно, правильно? почему получается в 2 раза больше? но это бы еще ладно, на самом деле в реальности (таймер слева) получается чуть ли не по секунде на каждый запрос)
-
А словари смогут использовать это подключение?
-
Дистрибутив Ubuntu 20.04
-
да
source/>
<postgresql>
<name>mypg -
вот блин, спасибо. Логи читать надо уметь 😔
-
Спасибо, пробую.
-
Надо ли рестартить сервер после создания named_collections в config.xml?
-
Подскажите, в чём проблема? err.log сервера забит вот такими ошибками:
2022.04.06 21:22:15.398114 [ 100597 ] {} <Error> void DB::SystemLog<DB::QueryLogElement>::flushImpl(const std::vector<LogElement> &, uint64_t) [LogElement = DB::QueryLogElement]: Code: 49. DB::Exception: Invalid number of columns in chunk pushed to OutputPort. Expected 44, found 65
Header: - дальше идёт перечисление типов колонок -
Да
-
Rename table system.query_log to system.query_log_old
-
я пробовал. создалась новая, но ошибки продолжают сыпаться в логе
-
вернее, я её дропал
-
А сколько колонок в ней?
-
69
-
и записи новые в ней постоянно появляются
-
Сейчас попробовал rename на другой ноде, там новая таблица создалась с 46-ю колонками. Версия 21.12.4.1 везде.
-
Привет ребята, хочу поделиться классным сервисом (http://jobs.talentservice.com/?utm_source=tg_free&utm_medium=relocate) по трудоустройству IT-специалистов. Там публикуются вакансии от Американских и Европейских компаний и есть программа по релокации. Можете не благодарить 🙌Open jobs for software developers, QA engineers, and data scientists
Work for an American or European company remotely or relocate to work abroad! Find your perfect job match with Talent Service
-
𝙔𝙤𝙪 𝙘𝙖𝙣 𝙞𝙣𝙫𝙚𝙨𝙩 𝙖𝙣𝙙 𝙢𝙖𝙠𝙚 𝙞𝙣𝙘𝙤𝙢𝙚 𝙖𝙨𝙞𝙙𝙚 𝙥𝙖𝙮𝙘𝙝𝙚𝙘𝙠 𝙬𝙞𝙩𝙝 𝙚𝙭𝙥𝙚𝙧𝙩 𝙜𝙪𝙞𝙙𝙚 𝙄 𝙝𝙖𝙫𝙚 𝙚𝙖𝙧𝙣𝙚𝙙 $98,000 𝙨𝙤 𝙛𝙖𝙧 𝙛𝙧𝙤𝙢 𝙢𝙮 $6000 𝙞𝙣𝙫𝙚𝙨𝙩𝙢𝙚𝙣𝙩 𝙞𝙣 𝙁𝙤𝙧𝙚𝙭 𝙩𝙧𝙖𝙙𝙚. 𝘾𝙤𝙣𝙩𝙖𝙘𝙩 𝙝𝙞𝙢, 𝙞𝙛 𝙮𝙤𝙪'𝙧𝙚 𝙞𝙣𝙩𝙚𝙧𝙚𝙨𝙩𝙚𝙙 𝙖𝙣𝙙 𝙨𝙩𝙖𝙧𝙩 𝙢𝙖𝙠𝙞𝙣𝙜 𝙖𝙢𝙖𝙯𝙞𝙣𝙜 𝙛𝙞𝙜𝙪𝙧𝙚𝙨 𝙬𝙚𝙚𝙠𝙡𝙮
👇👇👇
https://t.me/joinchat/9QTYf9xzwUIwNjhh - 07 April 2022 (113 messages)
-
-
У вас логика такая:
если минимальное время, то удали
То есть нужно удалить все строчки где время минимально ? Но оно же будет изменяться, то есть вы удалили например все строчки со временем 2001-01-01, то потом минимальным станет 2001-01-02 и т.д. -
-
-
-
Можно скопировать в другую таблицу данные при этом поменяв ключ, clickhouse-copier умеет это
-
-
Всем привет!
Пытаемся добавить колонку к Tuple:
column Tuple(a1 string, a2 UInt32)
ALTER TABLE table MODIFY COLUMN column Tuple(a1 string, a2 UInt32, a3 string) /// error, not allowed
получаем ошибку:
DB::Exception: CAST AS Tuple can only be performed between tuple types with the same number of elements or from String
Существует ли какая-нибудь возможность добавить поле в Tuple? Или тут только пересоздание таблицы и перезаливка данных? -
Привет! Не возвращает строки через функцию remote с сервера А на сервер В. remote из соседней таблички с идентичной структурой сервера В работает(то есть права на remote у юзера есть). Как можно узнать ограничения для remote для таблички?
-
То есть у вас есть 3 колонки уже ? И вы хотите чтобы они были в Tuple ?
-
Спасибо за отклик,
У нас есть колонка, которая объявлена как Tuple, там несколько полей, мы хотим добавить к этому Tuple еще одно поле типа String -
добрый день всем, есть ли возможность помочь с синтаксисом в config.xml....
Первый вариант
<yandex>
<query_log>
<database>system</database>
<table>query_log</table>
<engine>ENGINE = MergeTree PARTITION BY (event_date)
ORDER BY (event_time)
TTL event_date + INTERVAL 14 DAY DELETE
SETTINGS ttl_only_drop_parts=1
</engine>
Второй вариант
<yandex>
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<ttl>event_date + INTERVAL 14 DAY DELETE</ttl>
Вопрос у меня в том - можно ли в таком же формате задать настройку:
<settings>ttl_only_drop_parts=1</settings>
или параметр ttl_only_drop_parts=1 можно задать только как в первом варианте через секцию <engine>, спасибо..... -
-
-
CREATE AS SELECT?
-
insert from select же
-
insert куда from откуда select *?
-
insert into db.table select * from db.table
-
-
Придумал только так
CREATE TABLE test_tuple
(
t1 Tuple(a1 String,a2 UInt32),
asdad UInt8
)
ENGINE = MergeTree()
ORDER BY tuple()
;
INSERT INTO test_tuple VALUES (('asdadsa',1),12);
INSERT INTO test_tuple VALUES (('asdad',2),13);
INSERT INTO test_tuple VALUES (('asdaasddsa',3),21);
INSERT INTO test_tuple VALUES (('asdasdas',14),12);
INSERT INTO test_tuple VALUES (('asdaasdasddsa',5),12);
ALTER TABLE test_tuple MODIFY COLUMN t1 String;
ALTER TABLE test_tuple UPDATE t1 = tuple(untuple(CAST(t1,'Tuple(a1 String,a2 UInt32)')),'') WHERE 1
ALTER TABLE test_tuple MODIFY COLUMN t1 Tuple(a1 String,a2 UInt32,a3 String); -
А есть какая нибудь интерактивная обучалка по кликхаусу?
-
Не видел
-
Там есть конструкция экспорта insert multirow
-
Я про импорт. Не вижу там настроек таких
-
Импорт сделайте через insert - размер батча регулируйте сами. Ну или через клиента и там любые удобные форматы используйте
-
Я именно про дефолтную функцию datagrip "Import data from File"
-
Добрый день, коллеги. Подскажите, пожалуйста, можно ли в ClickHouseInstallation (Altinity clickhouse-operator) описать дополнения в макросы индивидуально для каждой реплики. Например, для реплики s01 мне необходимо добавить <new_cluster_shard>01</new_cluster_shard>, для реплики s02 - <new_cluster_shard>02</new_cluster_shard> и т.п.
-
создаёте новую колонку в нужном формате и заполняете данными из старой, дальше дроп старой и переименование
-
Спасибо, сейчас попробую
-
Тоже вариант, а как перенести одну колонку в другую?
-
Можно например через default, когда данные заполнятся убрать его
ADD COLUMN col2 Tuple(…) DEFAULT CAST((col1.1, col1.2, ‘asd’), ‘Tuple(…)’)
MATERIALIZE COLUMN
MODIFY COLUMN REMOVE DEFAULT -
-
Не надо кидать сюда пароли
-
"А я не видел 😢" (С)
Может, человек хотел, что бы добрые люди зашли, сделали, сами себе благодарность выписали? -
Всем добрый день. У меня при помощи Debezium данные с Postgres грузятся в топики Kafka. И мне нужно эти данные выгрузить в Clickhouse при помощи jdbc. Но как бы я не закидывал jar-ник и какой-бы sink не прописывал, итог один (см. фото). Заранее спасибо
-
А почему стандартным путем не пойти, через движок таблицы Kafka ?
-
а почему jdbc?
-
-
Ну если вы кладете Json в String то ему без разнице
-
JSONEachRow, наверное?
-
предлагаете передавать строку, а потом ее парсить? Или к чему это
-
КХ умеет сам из кафки данные читать во множестве форматов, найди совместимый
-
-
Это как граблями яму копать ....
-
здесь - это где? в чате? спрашивают, отвечают.
как подмена движка кафка - да, не стоит -
-
Choosing an option | ClickHouse Docs
The most common approaches for integrating Kafka with ClickHouse
-
Kafka | ClickHouse Documentation
Kafka This engine works with Apache Kafka. Kafka lets you: Publish or subscribe to data flows. Organize fault-tolerant s
-
От Миловидова смотрите сообщения, что-то они там переработали
-
с мимнимальной защитой от куки/js/прочей хрени это не работает
-
Это немного не то, там именно были расписаны все способы коннекта с kafka и по-моему даже на русском
-
-
ClickHouse Kafka Engine Tutorial
Our colleague Mikhail Filimonov just published an excellent ClickHouse Kafka Engine FAQ. It provides users with answers to common questions about using stable versions, configuration parameters, standard SQL definitions, and many other topics. Even experienced users are likely to learn something new. But what if you are getting started and need help setting up Kafka and ClickHouse for the first time? Good news! This article is for you.
-
-
Да, нужен materialized view
-
-
kafka_reader => mv => table
-
-
Судя по вопросу, сразу вряд ли, но да.
-
Там во вьюхе еже можете поменять структуру данных вставляемых
-
Извините, не удержался. А можете менять 😂
-
а дока кликхауса в Safari все так же переломана?
-
а не, после рефреша заработало
-
может кому будет полезно, разобрался в чем проблема. оказывается на каждый мой запрос DataGrip неявно отсылает еще пачку, в сумме получается 6 запросов, ну и набегает та самая секунда. я тут в тикете описал детали https://youtrack.jetbrains.com/issue/DBE-15125, ну и еще похожий тикет 2 месяца назад созданный https://youtrack.jetbrains.com/issue/DBE-15015
и спасибо @RaBiDka за полезные советы в поиске причины )datagrip queries are very, very slow : DBE-15125The total query took nearly 9 seconds, but the actual execution time of clickhouse's server was only 80ms. Compared with dbeaver, the speed difference is also very obvious. dbeaver returned the result in 162ms, but datagrip takes 9 seconds. By the way, the database connection method uses ssh to connect, not a direct connection. 优效截图20220302112611.png…
-
Как выполнить system restart replica db.table на всем кластере?
-
system restart replica ... on cluster '{cluster}'
-
system restart replica on cluster 'data'
Syntax error: failed at position 28 ('cluster'):
system restart replica on cluster 'data'
21.3.13.9 -
две команды разные
system restart replicas
system restart replica db.table -
>system restart replica ... on cluster '{cluster}'
предполагалось что ... будут заменены на имя таблицы
system restart replica db.table on cluster 'data' -
Я тоже пробовал, не работало.
-
system restart replicas on cluster 'data'
Syntax error: failed at position 26 ('on'):
system restart replicas on cluster 'data'
Expected one of: START TTL MERGES, RELOAD CONFIG, RELOAD DICTIONARY, STOP FETCHES, end of query, FLUSH LOGS, RELOAD EMBEDDED DICTIONARIES, STOP DISTRIBUTED SENDS, STOP TTL MERGES, STOP REPLICATED SENDS, RELOAD SYMBOLS, STOP MOVES, START MOVES, STOP REPLICATION QUEUES, RESTART REPLICA, START DISTRIBUTED SENDS, SYNC REPLICA, STOP MERGES, START REPLICATED SENDS, START MERGES, DROP REPLICA, START FETCHES, START REPLICATION QUEUES, FLUSH DISTRIBUTED, RELOAD DICTIONARIES -
ну может и не было 21.3
-
Столкнулась с такой же проблемой. Раньше с такими симптомами бывало, что закрался косяк в определение локальных таблиц - перепутаны зеркала и реплики на нодах, поэтому результат возвращается с первой доступной реплики и потому нестабильный.
Но сейчас все ddl корректны, а ситуация максимально загадочна. Вам удалось разобраться в чем причина?
На версии КХ 21.3.4.25 всё отрабатывает корректно, а при переносе DDL на 22.2.2.1 - поломалось. -
-
-
можно. так как вы написали
-
case when row_number() OVER (ORDER BY xxx ASC) >4 then 344 end
-
А я ошибку получаю "Unknown identifier"
-
-
у нас по неизвестной причине со второго шарда читались только данные за один час (почему именно час, непонятно, партиции-то по дням)
опытным путем было выявлено, что баг возникал из-за использования в where выражения с multiIf (один из фильтров для наших репортов). переписал его через CASE WHEN, и засунул как вычисляемую колонку в код самой вьюхи, баг исчез. но на всякий случай прикрутил alert, который сравнивает количество строк в таблице и вьюхе) -
а ну КХ переделывает кейс в multiIf, а там нельзя, вообще это б надо починить
-
If, multiIf
-
походу подзапрос...
-
-
Denny Crane [Starship Captain at Altinity (NB,Canada)] in ClickHouse не тормозит
https://github.com/ClickHouse/ClickHouse/issues/32513 SQL Compatibility Improvements / Allow to use window functions inside expressions.
-
попробуйте сделать row_number в подзапросе
-
или подзапрос, или ждите
-
Так и придётся делать видимо.
-
в гитхаб, ишью
-
не кеширует. Диск кешируется файловым кешем линукса.
-
не доделано, только оборачивать в еще один запрос
-
Что не доделано?)?
-
SUM(col) / SUM(SUM(col)) OVER (PARTITION BY col2) aggregate function over WINDOW is not supported. · Issue #19857 · ClickHouse/ClickHouse
How to reproduce SELECT sum(number) / sum(sum(number)) OVER (PARTITION BY (number % 10)) FROM numbers(10000) GROUP BY number % 10 Query id: 76ed1093-b378-45c2-b644-1de44783734a 0 rows in set. Elaps...
-
Около 10 колонок, ORDER BY включает 8 колонок, кроме двух, по которым собирается аггрегация. PRIMARY KEY строю по DateTime и IPv4 (тип колонки).
Исходные данные забираю из "большой" таблицы на 35 колонок, которая MergeTree. -
т.е. вы выстрелили себе в ногу положив DateTime первым в индекс?
-
Спасибо! Попробовал, все получилось!
-
И этот тоже способ работает. Спасибо!
-
Приветствую.
Можно ли на ОДНУ таблицу DB3 навешивать несколько MV ?
Чтобы инсерты в DB3 сразу по разным параметрам улетали в нужные таблицы.
CREATE MATERIALIZED VIEW default.BD1 TO default.logs_to_DB2
... FROM BD3
CREATE MATERIALIZED VIEW default.BD1_1 TO default.logs_to_DB3
... FROM BD3 -
Ну конечно можно
-
Всем привет, имеется бд кликхауса, куда сливаются ивенты и много ещё каких сырых данных, сейчас приходится считать по сырым данным , запросы иногда выполняются минуты. Попросил создать матвью, скинул запросы разрабам 2 недели назад , они только сегодня сделали, от них требовалось просто запустить код в ide. Мне никто не дает(и не даст) права на create. Ждать каждый раз по тыщу лет не хочется, поэтому у меня такой вопрос . Могу ли я развернуть у себя кликхаус, и сделать средствами кликхауса чтобы все ивенты и транзакции из оригинального кликхауса летели и ко мне сразу Чтобы я там был царь и бог , и мог создавать что хочу
-
Доступ к Зукиперу есть со своего компа? Доступ к кластеру КХ есть? Это конечно пи-ц с точки зрения организации процессов, но работать будет 😄 Более того, ты сможешь у себя вставлять и реплицировать в прод.
-
Надо только схему создать правильно, но вроде такой проблемы нету 😄
-
-
-
Блуждающая реплика.
-
А нет возможности заполучить поток этих сырых данных в параллели с продом?
-
С юзерами/паролями может быть проблема, если там не default.
-
можно
-
а вот как бы сделать обновление внешней таблицы для разных полей по одному ключу?
-
А то какая то коллизия не понятно где.. эти MV идут в одну таблицу на remote_host в таблицу SummingMergeTree
-
Вы бы показали, что не работает
-
а есть какая-то возможность выполнить запросы с proto под win10 и в C#?
пробовал хотя бы в power shell и curl вытащить, но файл пустой
curl -o proto.bin 'http://clickhouse.com/' --data-binary "SELECT * FROM test FORMAT Protobuf SETTINGS format_schema = 'schema:test'" -
всем привет
- 08 April 2022 (160 messages)
-
нет, только в WSL2, КХ проверяет наличие /bin/sh и в случае отсутствия все файлы будут пустыми 😂😜🙈
-
/@milovidov_an кстати, а поддержка schema registry для kafka protobuf и json фоматов планируется?
-
фак, короче, Миловидову вопрос, надеюсь, увидит
-
Курлом можно конечно. В винде вроде синтаксис был другой, точно не понмю. Проверьте что вы и как отправляете, csv работает или нет? где то ошибка.
-
Wsl не причем. вопрос про курл, ps или c# вообще...
-
Иногда сарказм...
-
Тут весь смысл скрывается в format_schema = 'schema:test'
-
🔥🔥Πлaчy 3000₽ за каждогo пpиведённогo ⲃaми ч𝚎лoⲃеⲕа, котоpый устpoится кyрьеpoм в Delivery. 🔥🔥
⚡𝖮плaтa послe 10 выпoлненныⲭ закaзoⲃ!⚡
(Oбязательно ⲃ тeчeнии 30 дней. Можнo сделать и зa oдин д𝚎нь)
🎁Зa вторoго пpиⲃeдённoго денежные бoнуcы! 🎁 -
для HTTP протокола, вам надо на сервере иметь схему... с клиента не получиться отдать
Если для ввода/вывода данных используется HTTP-интерфейс, то файл со схемой должен располагаться на сервере в каталоге,
указанном в параметре format_schema_path конфигурации сервера.
https://clickhouse.com/docs/ru/interfaces/formats/#formatschemaФорматы входных и выходных данных | Документация ClickHouseФорматы входных и выходных данных ClickHouse может принимать (INSERT) и отдавать (SELECT) данные в различных форматах. П
-
А можно утром деньги, а человеки вечером? Завтра.
-
Коллеги, всем бодрого пятничного утра!
Подскажите, пожалуйста, немолодому и неопытному, могу я решить вот такую задачку в одно действие в CH?
В BQ я такое через last_value(col IGNORE NULLS) делал. А тут не могу найти решения -
lagInFrame ?
-
Скорей всего тут найдёте ответ https://kb.altinity.com/altinity-kb-queries-and-syntax/lag-lead/
-
Посмотрю, спасибо!
-
Всем привет!
Хочу сделать подобный запрос, но использовать where in ((), (), ())
SELECT *
FROM table
WHERE filename = '{filename}' and
partner = {partner} and
upload_start > '{value1}' and
upload_start < '{value2}'
не пойму как указать с > и <
SELECT *
FROM table
WHERE (filename, partner) in {tuples}
как оставшиеся 2 поля туда включить с их условиями?
помогите плз -
вы хотите передавать несколько периодов для выборок ?
-
список например из 1000 кортежей в которых передам эти 4 значения
-
чтоб не делать 1000 запросов, а сделать одним
-
нет, так не получится. Для оператора IN строится хеш, а потом проверяется на вхождение в него. <> тут некуда применять. Поэтому filename/partner - можно, а время (или что у вас там) - нет. Если границы интервалов относительно стабильные (или их можно предсказать заранее), то можно попробовать применить range_hashed словарь.
-
спасибо, сейчас почитаю
-
Коллеги из yandex | altinity , привествую
Есть в планах добавить упрощение синтакса типа
AND -> &&
OR -> ||
типа как в mariadb ? -
Всем привет!
У меня есть таблица со стадиями продажи различных продуктов (у каждого продукта свой id). Мне нужно отобрать такие id_продукта, у которых не было некоторых стадий (1,2,29), но была 3 стадия.
Простой фильтр where тут не поможет явно.
Благодарю за любую помощь! -
первое, что пришло в голову
через
groupArray(<стадия>) AS arr создать массив для каждого id, в котором лежат все его стадии, естественно GROUP BY id
, тут же написать
HAVING NOT hasAny(groupArray(<стадия>), Array(<стадии, которых быть не должно>)) AND has(groupArray(<стадия>) ,3) -
|| это уже оператор конкатенации, имхо это только усложнит (мимокрокодил)
-
на мой взгляд значки кванторов ( a-la C ) смотрятся в выражении лучше чем слова
-
когда пришел со своим уставом в монастырь SQL )
-
любой [sq]L в конечном итоге - C :)
-
😂😂😂😂 Императивный vs декларативный.
-
спс - буду пробовать
-
кстати, || уже занят, это конкатенация
-
Схему положил, куда надо место
-
ну и все будет работать...
-
Такой вопрос по интеграции с Кафкой.
Есть MV, которая разбирает данные в формате JSONAsString. В структуру этого json добавляют новое поле, соответственно, надо поменять MV. Но в DDL для MV отсутствует конструкция OR REPLACE.
Можно только так:
DROP TABLE my_mv;
CREATE MATERIALIZED VIEW my_mv ...
Как правильно поменять MV под новую структуру без потери данных? -
Тоже вопрос волнует, exchange по документации работает для table|dictionary
-
всем привет! а кто какую BI использует для отображения данных из ClickHouse? сейчас используем DataLens, но хочется другие решения узнать, где больше сорсов есть и можно джоинить разные сорсы друг с другом. Пробовали superset, но он не работает с replacing* движком.
-
-
а что значит не работает?) какая ему разница?
-
у нас вполне работает. а как именно у вас проблема проявляется?
-
поскольку только что кто-то спасибо сказал, тему продолжу
<tiered00>
<volumes>
<fast00>
<disk>fast00</disk>
</fast00>
<arch00>
<disk>arch00</disk>
</arch00>
<default>
<disk>default</disk>
</default>
</volumes>
<move_factor>0.01</move_factor>
</tiered00>
наличие volume default позволяет делать для существующих таблиц
alter table db.table modify settings storage_policy = 'tiered00';
писал по памяти, прошу больно не тыкать
select version();
22.2.2.1 -
мы вот эти ошибки ловим
https://github.com/apache/superset/issues/16982
https://github.com/xzkostyan/clickhouse-sqlalchemy/issues/164Does not work with clickhouse source. Cannot create a dataset · Issue #16982 · apache/supersetUpdated as stated here https://superset.apache.org/docs/databases/clickhouse How to reproduce the bug Followed instructions. Connected to database succesfully Was able to connect and get dataset fr...
-
Да что же повадились сегодня пароли выкладывать?
-
а если сделать Virtual dataset вместо Physical?
-
что выдает curl?
"http://127.0.0.1:53755/tablemodelview/list/?pageIndex=0&sortColumn=changed_on_delta_humanized&sortOrder=desc" -
и второе: как я вижу, падает на get_column_type? у вас там есть LowCardinality типы колонок?
-
500 Internal Server Error, судя по тикету?
-
Invalid enum member name: 127.0.0.1
-
а если использовать SQLAlchemy URI просто clickhouse:// без native?
-
всем привет. юзаю clickhouse_driver и когда коннекшусь к локальной бд все норм и отвечает на запросы, а когда к серваку и прошу SHOW DATABASES он просто не отвечает ничего не выдает.
как быть? -
Хотя бы пример привести заполнения вами Client
-
client = Client(host='<ip>', port='<port>', user='<юзернейм>', password='<пароль>')
-
смотреть права пользователя, с которым вы подключаетесь к серверу. по моим наблюдениям, show databases показывает только список баз, на таблицы из которых у вас есть право хотя бы на select
-
Сделайте select 1
-
тоже самое
-
да вроде мне доступ дали только на одну таблицу, щас чекну
-
блин когда через tabix делаю все норм а здесь ничего может я экзекьют неправильно делаю?
client.execute("""SELECT item_id,sentiment,created_at
FROM project_items
WHERE type = 1
AND project_id =10051
AND created_at >= '2022-04-06 00:00:00'
AND date>='2022-04-06 00:00:00'
ORDER BY created_at ASC limit 10""") -
у вас стандартный порт ? 9000 ?
-
нет
-
8123 ?
-
да
-
Вместо 8123 -> 9000
-
о, щас хотяб ошибки выдает
-
спасибо всем!
-
А можете уточнить, чем это плохо?
-
-
Тем, что у вас идёт фулл скан таблицы при любом запросе
-
либо явно указывать рамки, чтобы сканил только одну партицию?
-
Я ошибся, фулл скан партиций в которые попадает WHERE dateTime
-
а это будет в свежих версиях КХ поправлено? 😱
-
Это не проблема КХ, это проблема тех людей кто ставить DateTime первой в PK и ORDER BY
-
спс, кое где накосячили. сейчас спасаемся, что сканим явно одну партицию
-
Лучше DateTime ставить в конец
-
у нас запросы в основном на время заточены. Но есть нюанс, такая таблица была создана, чтобы на нее повешать кучу MV, напрямую к табле приложение не обращается. все в MV на основе нее
-
Нужно соблюсти грань использования в WHERE и кардинальности данных и тогда будет работать всё быстро
-
Если у Вас в пределах одной даты-время огромное количество записей, то имеет смысл добавлять в индекс DateTime первым или где-то в начале. Если же Вы в выборке используете какие-то другие критерии, которые объединяют множество записей с одинаковым DateTime, то DateTime лучше уносить в конец, если вообще использовать в PK или ORDER BY. Если используются партиции по датам, то они и без PK и ORDER BY будут подтягиваться по используемым датам.
А в общем случае нужно всегда идти от большего к меньшему. То есть, например, сначала <clientId>, затем <resourceId>, затем <eventType> и так далее. Порядок можно менять, это просто пример, если у клиента есть много ресурсов, содержащих много записей с разными типами событий.
А вот в пределах одной секунды вряд ли у Вас будет много записей. В итоге просто теряется смысл в упорядочивании хранения, так как для выборки нужных значений по периоду будут выбираться почти все записи из партиции за этот период, а затем будут практически прямым перебором выбираться записи по другим критериям. Вот и получился фулскан партиции. -
Каким преобразованием возможно достать время из бд в формате 24 часа ? если в клике оно хранится с форматом AM/PM
-
toHour
-
всёровно возьмет 10 вместо 22
-
Какая версия кликхауса ?
-
Попробуйте сначала перевести в 24 часа время - parseDateTimeBestEffort , а потом взять часы
-
Доброго дня, какое ограничение на длинну скл запроса в байтах или символах?
-
select * from system.settings where name like 'max_query_size';
set max_query_size=xxxxxx; -
Спасибо!
-
привет! у меня такая проблема: фильтрую данные через where ... in и подзапрос, выдает пустой результат, а если делать через global inner join аналогичную операцию, то все нормально, не empty. что может быть не так ?
случилось после обновления кликхауса, раньше все нормально работало -
может там settings какой-нибудь есть чтобы добавить и все было окей ?
-
Таблица distributed ?
-
global in?
-
тоже пустой результат дает (
-
да
-
Обращаетесь в эту же таблицу или в другую ?
-
Вообщем, скорей всего таблицы в которых данные совпадают лежат на разных шардах
-
Вот и всё
-
глобал должен был бы решить эту проблему
-
по факту global join и global in одинаковые операции
-
в этом кейсе
-
-
другую, да
-
Запросы не видели, может проблема в них
-
А так создавайте issue описывайте проблему.
-
Всем привет, если я создам MV TO, как данные из исходной таблицы быстро в таблицу которая под MV положить ?
-
Ну тем же запросом, что и в MV
-
Insert делать в mv?
-
Делать в таблицу TO
-
Окау, спасибо. Попробую
-
Я в mv пробовал, ошибка была с какой то настройкой
-
-
А там DateTime с 10-минутными интервалами, то есть в одно такое значение DateTime мы получаем несколько млн строк, поэтому он и в индексе.
Я не пойму, почему кликхаус в выборку берёт слишком много строк, индекс по DateTime-то есть. -
Привет!
Подскажите, пожалуйста, по какой причине 2 одинаковых числа воспринимаются как разные?
При селекете использую округление:
round(li.found_quantity, 3) = round(fli.quantity, 3) as is_equal,
round(li.found_quantity, 3) - round(fli.quantity, 3) as diff -
почитайте про Float vs Decimal
-
"не совсем", у вас числа в Decimal?
-
там все очень тупо и надежно работает и там все очевидно.
но всплепую, без конкретики это не объяснить -
Хотел написать, что не совсем понял
-
Потом решил почитать
И теперь точно не понял😅 -
Перевел в Decimal64, ничего не изменилось
-
вы оригинальные числа перевели или результат округления в Decimal64(3)?
-
Реальные
-
а scale какой?
-
3
-
Поменял на 10, заработало
Но смущает, что только сейчас вылезла подобная ошибка
Ранее не сталкивался с подобным -
Хотя на 3 тоже работает
-
например
select sum(0.2) from numbers_mt(100000000);
--
20000000.00000213
0.2 это бесконечная периодическая дробь в 2й системе
select sum(0.2::Decimal64(3)) from numbers_mt(100000000);
--
20000000 -
60 cекунд ? или 180,
-
через 1 секунду отваливается
-
-
скорее всего http_connection_timeout
но применяется при перезагрузке из-за пула коннектов
а почему у вас 1 секунда таймаутит? Через спутник коннект? По оптике вокруг земли 1 сек латенси тяжело получить. -
под сотню шардов и все одновременно идут в словарь. запросы попадают в tcp listen queue похоже. это тоже ковыряю
-
А где можно почитать про работу индексов подробнее?
-
Доброго времени суток, коллеги. Есть таблица 100м записей. В нее нужно добавить колонку и перенести данные из легаси MySQL таблицы. Какие есть варианты?
-
* перенести только данные этой колонки. Остальные уже есть
-
-
Как это сделать не прерывая продакшн?
-
Всем привет!
А кто-то уже пробовал поработать с Object('JSON') ?
Пробую прогнать тест:
CREATE TABLE t_json_2(id UInt64, data Object('JSON'))
ENGINE = MergeTree ORDER BY tuple()
SETTINGS min_bytes_for_wide_part = 0;
INSERT INTO t_json_2 FORMAT JSONEachRow {"id": 1, "data": {"k1": 1, "k2" : 2}} {"id": 2, "data": {"k2": 3, "k3" : 4}};
SELECT id, data.k1, data.k2, data.k3 FROM t_json_2 ORDER BY id;
Select падает с ошибкой:
Missing columns: 'data.k2' 'data.k3' 'data.k1' while processing query: 'SELECT id, data.k1, data.k2, data.k3 FROM t_json_2 ORDER BY id ASC', required columns: 'id' 'data.k1' 'data.k3' 'data.k2', maybe you meant: ['id']. (UNKNOWN_IDENTIFIER) (version 22.3.3.44 (official build)) -
Это нужно как-то сделать без потери данных.
Пока мы только придумали запихнуть колонку во временную джоин таблицу, и ALTER TABLE UPDATE -
Ну вы так спрашиваете...)) сдедайте ренейм, лейте прод в другую таблицу, поднимите другой кх, создайте другую таблицу а потом подмените
-
-
Если у вас туда нонстопом льётся то я хз сколько будет выполняться апдейт на 100млн
-
Мы не пробовали такой апдейт еще на боевых таблицах... есть опыт в этом*
-
?
-
если например кусками апдейтить
-
У нас нет таблиц с непрерывной заливкой, мы архитектурно можем остановить вставку на любое время. Мб кто ещё подскажет
-
А для чего вы, если не секрет, используете CH? Думалось, что основной юзкейс это как раз лить туда данные нон-стоп
-
работает ваш пример, какая версия клиента у вас?
SELECT
id,
data.k1,
data.k2,
data.k3
FROM t_json_2
ORDER BY id ASC
Query id: 81e0a14f-1cc6-4bdf-a6c7-f798438f82e6
┌─id─┬─data.k1─┬─data.k2─┬─data.k3─┐
│ 1 │ 1 │ 2 │ 0 │
│ 2 │ 0 │ 3 │ 4 │
└────┴─────────┴─────────┴─────────┘ -
Для аналитики всего) льем кликстрим и хиты видеосмотрения. В моем опыте довольно необычно делать без предварительного накопителя в виде кафки или файлов хотябы
-
22.3.3.44
-
Оно у нас в редисе хранится, так что вы правы, теоретически мы можем остановить это временно.
-
дополнительные данные в словарь -> alter table ... add column col default dictGet(...) -> alter table ... materialize column col -> alter table ... MODIFY col REMOVE DEFAULT
-
Спасибо!
Маленький вопрос
А если колонка уже есть и там есть какие-то данные для новых записей. А старые нужно залить -
Вы сможете отличить старые данные от новых? Если сможете, то можно DEFAULT выражение с if написать
-
возможно, что придётся новую колонку сделать, а потом старую дропнуть
-
т.е. я могу просто скопировать колонку и сделать default который проверяет
-
да
-
да, в default берёте либо из колонки, либо из словаря через if
-
шикарно, спасибо
-
А у вас какая?
-
тоже самое
ClickHouse client version 22.3.3.44 (official build).
Connected to ClickHouse server version 22.3.3 revision 54455. -
Всем привет! ✋
Пробую в ClickHouse (развернут в облаке) выполнить простой запрос вставки данные из одной таблицы ClickHouse в другую таблицу ClickHouse:
у каждой ENGINE = MergeTree(date, date, 8192)
insert into data.table1 select * from data.table2
Периодически всплывает ошибка DB::Exception: ServerException: Code: 241. Memory limit (total) exceeded <число>: While executing MergeTreeInOrder
Подскажите, пожалуйста, какой наилучший способ выполнить запрос, чтобы избежать этой ошибки. Возможно, есть стримминг, который память не нагружает (пробовал через python
from clickhouse_driver import Client через client.execute_iter с settings = {'max_block_size': iter_size} - работает, но не помогло - периодически тоже ошибка вылетает). Конкретного решения пока не обнаружил.
Если нужно что-то на сервере выставить, то что именно поможет? Вот параметры:
https://clickhouse.com/docs/ru/operations/server-configuration-parameters/settings/#max_server_memory_usage_to_ram_ratio
Заранее большое спасибо🙏Конфигурационные параметры сервера | Документация ClickHouseКонфигурационные параметры сервера builtin_dictionaries_reload_interval Интервал (в секундах) перезагрузки встроенных сл
-
а сколько памяти? <число> ?
insert into data.table1 select * from data.table2
Этот запрос и так стримается и батчит и ипользует лимитированное кол-во памяти, но можно подкрутить -
Сократил немного для наглядности:
Memory limit (total) exceeded: would use 3.02 GiB
(attempt to allocate chunk of 4446613 bytes),
maximum: 3.00 GiB:
(while reading column category_name):
(while reading from part /var/lib/clickhouse/store/.../
from mark 0 with max_rows_to_read = 212407): While executing MergeTreeInOrder. -
3.00 GiB
тут надо понимать что чудес ждать не стоит https://clickhouse.com/docs/en/operations/tips/#ram
изначально никто не рассчитывал что КХ будут запускать на железках с меньше чем 32ГБ
и соответвенно КХ хавает память гигабайтами.
попробуйте
insert into data.table1 select * from data.table2 settings max_threads=1, max_block_size=10000, max_insert_block_size=10000, min_insert_block_size_rows=10000 -
Спасибо вам большое, попробую 🍀
-
Как сделать так, чтобы запрос INSERT INTO SELECT _ FROM не падал по памяти?
- 09 April 2022 (25 messages)
-
Смотреть сколько ест селект через трейс
-
max_threads=1
max_block_size/max_insert_block_size уменьшить. -
На пару сообщений выше пример есть, кстати
-
Есть кейсы работы кликхауса с реббитом?
Не понимаю вот что
Клик в принципе может работать с большим количеством простых запросов
У меня такой кейс
Кубер 20 подов, каждый из которых параллельно обрабатывает 50 задач, в которой происходят запросы в клик
Задача перебрать 60 млн строк из одной таблицы, для каждой строки дополнительные запросы из других таблиц клика и вставлять 60 млн дополненных строк в другую таблицу клика
Со вставкой проблем нет
Проблема в том, что такая конфигурация упирается во что-то и запросы, которые выполняются за 50-150мс выполняются за 1-1,5с, иногда запросы ловят таймаут и иногда клик сам дропает запросы
В связи с вводными такой вопрос. Как заставить клик обрабатывать много маленьких запросов параллельно, чтобы он не захлебывался?
Клик работает с таким железом: 8 ядерный проц, 32гб оперативы и ssd -
Я не сильно в курсе, наш програмер на кролика жаловался, есть там где-то затык
-
Попробуй создать буферную таблицу и вставлять в неё
https://clickhouse.com/docs/en/engines/table-engines/special/buffer/Buffer | ClickHouse DocumentationBuffer Table Engine Buffers the data to write in RAM, periodically flushing it to another table. During the read operati
-
А вот фиг там, именно работа с параллельной обработкой очередей
-
проблема в запросах на чтение
-
-
у нас, кажется, с записью проблемы были
я попробую спросить, но выходной... -
у нас супер распараллеленная архитектура и клик в стоке не справляется с объемом запросов, но при этом нагрузка на проц не очень большая)
-
спасибо)
-
Нифига я неправильно помню, проблема в развалах кластера. Теоретических. Хз. В общем, мы сейчас nats пробуем, хз, что это.
-
>Как заставить клик обрабатывать много маленьких запросов параллельно
мухаха,
как заставить карьерный экскаватор делать маленькие ямки быстро
посмотрите на зукипер, скорее у вас зукипер упирается в диски -
Что-то вы не то делаете. Вам скорее всего нужно найти способ сагрегировать запросы, со сложными групбаями. А не 60миллионгв маленьких делать
-
Помните про гранулярность данных. Он у вас 8000 раз повторяет чтение одних и тех же данных, и скорее всего вразнобой. Поэтому приходится перечитывать с диска
-
исходная таблица состоит из данных с dateTime
есть колонка, у которой 800_000 уникальных значений
я с помощью стрима получаю список этих значений и после с помощью дополнительных индексов получаю данные отдельно для этого ключа сортировки
повторений быть не должно
клик должен по насечкам быстро такие запросы резолвить -
А что вам мешает пачками данные получать?
-
Кхм, поймите что индекс в кликхаусе, и индексы в OLTP базах, это абсолютно разные вещи. Как вам уже ответили, кликхаус это вещь которая перерабатывает 1 огромный запрос с миллиардами строк, а не миллиард запрос с 1 строкой. Он просто не предназначен для этого
-
-
Нет
-
покажите что ли свои запросы и индексы, наверняка можно сделать лучше, ну и для таблиц с меньше чем 10млрд. строк наверное можно уменьшить index_granularity чтобы ускорить/уменьшить стоимость для мелких запросов
-
да, если partition by и order by не меняются, то движок поменять можно, способ зависит от того Replicated таблица или нет.
в общем случае есть способ attach partition from
парты устроены одинаково во всех движках MergeTree и вообще все MergeTree движки это один движок/единый код, различается только код мержа. -
да всегда был.
create table S (A Int64, D date) Engine=MergeTree partition by D order by A;
insert into S values(1, '2020-01-01');
create table D (A Int64, D date) Engine=ReplacingMergeTree partition by D order by A;
alter table D attach partition '2020-01-01' from S;
select * from D
┌─A─┬──────────D─┐
│ 1 │ 2020-01-01 │
└───┴────────────┘
rename table S to old_s, D to S;
show create table S;
....
ENGINE = ReplacingMergeTree -
Добрый вечер.
Попробовал эти настройки. Плюс менял их по разному - в большую и меньшую сторону. Результат всегда один:
DB::Exception: Memory limit (total) exceeded.
Решил проблему через python, используя в clickhouse_driver для insert обертку backoff - для восстановления подключения с места raise exception.
Лог выглядит так, когда появляется ошибка:
09.04.22 23:01:01 - [INFO] - __main__ - (clickhouse_defs.py).clickhouse_count_rows(8) - Количество строк для обновления: 1318903
09.04.22 23:01:04 - [INFO] - __main__ - (clickhouse_defs.py).clickhouse_insert_internal_data(49) - DB::Exception: Memory limit (total) exceeded
09.04.22 23:01:04 - [INFO] - __main__ - (backoff.py).retry_connect(30) - Попытка подключения...
09.04.22 23:01:07 - [INFO] - __main__ - (clickhouse_defs.py).clickhouse_insert_internal_data(49) - DB::Exception: Memory limit (total) exceeded
09.04.22 23:01:07 - [INFO] - __main__ - (backoff.py).sleep_func(17) - Ожидание подключения: 0.8
09.04.22 23:01:08 - [INFO] - __main__ - (backoff.py).retry_connect(30) - Попытка подключения...
09.04.22 23:01:16 - [INFO] - __main__ - (clickhouse_defs.py).clickhouse_insert_internal_data(47) - Затраченное время на вставку данных, сек.: 8.803952693939209
09.04.22 23:01:18 - [INFO] - __main__ - (start_clickhouse.py).<module>(55) - Итого затраченное время, сек.: 18.04178261756897
В итоге, все ОК👍 - 10 April 2022 (377 messages)
-
Всем привет!
Подскажите почему может такое быть
Делаю запрос
ALTER TABLE events ADD COLUMN traf UInt8 DEFAULT 0 AFTER traf_test;
Получаю следующее:
0 rows in set. Elapsed: 0.002 sec.
Received exception from server (version 21.4.3):
Code: 47. DB::Exception: Received from localhost:9000. DB::Exception: Missing columns: 'traf' while processing query:
Что можно сделать, что получилось добавить столбец? -
-
нет возможности бд обновить(
-
почему при выполнении запроса на добавление столбца появляется ошибка по совершенно другому запросу? Там вообще SELECT в эксепшене.
SHOW PROCESSLIST ничего не показывает. Где-то селект привис в котором как раз не хватает этого столбца, да? -
решил сам, переименовал таблицу и в ней получилось создать столбец. потом вернул все обратно)
-
вот есть у КХ одна проблема. Отсутствие толковой документации и комьюнити с опытом. Что бы начать использовать storage_policies нужно всякие телодвижения делать, что как бы не есть хорошо. И нифига непотнятно местами.
-
Я с КХ меньше года, опыт использования того же BRIN индекса играет злую шутку иногда. Это же минмакс? Да. Наверное, если отбросить предвзятость, оно как-то так же работает. Индейское народное жилище.
-
Где-то (кроме как в исходниках) можно почитать про различия работы в движках Dictionary и Memory с точки зрения последовательного чтения (типа select * from dict/memory)
Суть нашего кейса -- есть кластер на 40 нод, на которых создается словарь
Этот словарь пробуем заполнять с одной другой ноды NODE1 (то есть на 40 нодах создается словарь с SOURCE(CLICKHOUSE(NODE1))). сам источник для словарей на 40 нодах находится на NODE1 и
- если таблица с движком на NODE1 Memory все отлично отрабатывает
- если же эти данные положить в Dictionary с COMPLEX_KEY_HASHED_ARRAY layout, то NODE1 (на ней 64гб RAM) падает с OOM при обновлении словаря одновременно на 40 нодах
данных не так много -- всего 300к записей и сами данные занимают 2гб в Memory движке
данные для словаря собираются достаточно долго и дорого, поэтому и хотелось его один раз создать на NODE1 и чтобы остальные ноды периодически опрашивали словарь на NODE1 и забирали с него данные
в моем понимании Dictionary это по сути дела тот же HashMap, который должен быстро обходиться и отдаваться тому, кто запрашивает из него все данные, но, похоже, КХ пытается его сначала весь к себе в память прочитать, а потом уже отдать по сети (поэтому и ООМ)
Спасибо -
Это одна из проблем КХ, одновременное чтение из 2ГБ таблицы потребует x*2ГБ оперативы
-
+ накладные расходы
-
Dictionary это по сути дела тот же HashMap
учитывайте, что можно неудачно HashMap создать и потерять часть данных 😜 -
А я тут при чем? Я контрибучу в документацию по мере сил, в свое личное время.
-
Словарь не предназначен для select. Каждый атрибут лежит в своей хештаблице. Читать это селектами супермедленно и суперзтратно. Я как-то показывал тест что словарь на селект в 5000 раз медленее чем mergetree.
Мы для этой задачи используем ReplicatedReplacingMergeTree, просто создаете таблицу без макроса shard, получаете 100 копий, менять можно на любой ноде, словари читают локальный источник. -
спасибо большое
я просто думал, что COMPLEX_KEY_HASHED_ARRAY фактически содержит одну HashMap для всех аттрибутов (то есть образно говоря key -> List<fields>), т.к. как понимаю раньше в обычном (COMPLEX_KEY_HASHED) был как раз List<key -> field>
ReplicatedReplacingMergeTree, просто создаете таблицу без макроса shard
хитро 😁
и фактически вставляя всего лишь на одной ноде в эту таблицу данные будут обновлены на всех нодах через репликацию? -
в яндексе любят скорость, поэтому словари сделали множеством хештаблиц. Каждый атрибут словваря отдельно, или отдельный хеш или массив.
-
>и фактически вставляя всего лишь на одной ноде
> в эту таблицу данные будут обновлены на всех
>нодах через репликацию?
Да. -
-
Я использую этот трюк и для маленьких агрегатов (получаается что часть запросов можно обслуживать любой одной нодой кх)
и для маленьких таблиц-дименшинов с которыми делается джойн (если словарь не подходит).
(кстати мопед не мой, придумали это все мои предшественники еще лет шесть назад) -
Доброго времени суток, поскажите пожалуйста по небольшому вопросу -
Есть несколько кластеров, у которых разная директория в зукипере (зукипер один), и для каждого свой ACL, есть потребность делать запросы ON CLUSTER с одного кластера на другой, соответственно нужна одна директория ddl_path, но с ACL будет проблема, при создании подобного запроса будет проблема с доступом к зноде(запросу он кластер), у кластера принимающего запрос. Кто как выходил из такой ситуации, неужели у всех должен быть один ACL? -
А к Вам претензий нет, я просто в сообщении выразил свое мнение, если на свой счет восприняли, прошу прощения.
-
а что Вам мешает начать контрибутить в документацию?
-
Я весьма критично отношусь к себе. Думаю, не дорос пока.
-
Ох уж этот синдром самозванца. Можешь кому-то дать полезную информацию - значит дорос же?)
-
ХЗ, завтра собеседование , чисто себя проверить. Может и правда что-то их себя представляю.
-
А может быть и правда, 400тыр - это 400тыр.
-
-
-
Мне вот rsync нравится. Каков вопрос, таков ответ.
-
-
-
-
-
-
-
-
-
-
-
Возможно неправильно сформировал вопрос. Как лучше снять дамп с кликхауса и развернуть его на другом хосте?
Или же просто в архив все внутренности и всё?)) -
clickhouse-copier - возможно то что Вам надо
-
1ТБ - это не так уж и много, если таблиц не много, быстрее через пайп селект и инсерт
-
таблиц немного. Объемных буквально 2, остальные мелкие
-
вот и сравните время изучения сторонних механизмов vs скорость чтения/вставки
-
или clickhouse-copier, или руками через скрипт, или через buffer+distributed попробовать.
-
Подскажите Clickhouse-client — secure, автоматически будет стучаться на https port стучаться, при раскомментированной строке в конфиге?
-
Клиент работает по нативному протоколу, а не по http(s). По умолчанию порт 9440 для SSL режима.
-
Малость перепутал. Я к тому что команда clickhouse-client — secure, ломится на 9000 порт. А я не понимаю, надо какие то ещё доп настройки произвести или что то сломалось.
-
-
всем привет!
переехал с 19.x на ласт версию (22.3.3.44)
использую аккамулятор в роли https://github.com/nikepan/clickhouse-bulk
встречаю следующее:
DynamicQueryHandler: Code: 27. DB::ParsingException: Cannot parse input: expected 'eof' before: '{"fingerId":"XXX","userId":"XX","url":"","referrer":"XXX","ip":"XXX","userAgent":"XXX': While executing ParallelParsingBlockInputFormat. (CANNOT_PARSE_INPUT_ASSERTION_FAILED), Stack trace (when copying this message, always include the lines below)
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0xb3712fa in /usr/bin/clickhouse
1. DB::throwAtAssertionFailed(char const*, DB::ReadBuffer&) @ 0xb3c718d in /usr/bin/clickhouse
2. DB::JSONEachRowRowInputFormat::readSuffix() @ 0x169ca284 in /usr/bin/clickhouse
3. DB::IRowInputFormat::generate() @ 0x1696ccce in /usr/bin/clickhouse
4. DB::ISource::tryGenerate() @ 0x168fc2b5 in /usr/bin/clickhouse
5. DB::ISource::work() @ 0x168fbe7a in /usr/bin/clickhouse
6. DB::ParallelParsingInputFormat::InternalParser::getChunk() @ 0x169f1aac in /usr/bin/clickhouse
7. DB::ParallelParsingInputFormat::parserThreadFunction(std::__1::shared_ptr<DB::ThreadGroupStatus>, unsigned long) @ 0x169f108b in /usr/bin/clickhouse
8. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0xb41b38a in /usr/bin/clickhouse
9. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()&&...)::'lambda'()::operator()() @ 0xb41d524 in /usr/bin/clickhouse
10. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xb418757 in /usr/bin/clickhouse
11. ? @ 0xb41c2dd in /usr/bin/clickhouse
12. ? @ 0x7f44afc4e609 in ?
13. __clone @ 0x7f44afb75293 in ?
(version 22.3.3.44 (official build))
не нашел решения
в какую сторону глядеть?
опыт с КХ достаточно малGitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big insertsCollects many small inserts to ClickHouse and send in big inserts - GitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big inserts
-
https://clickhouse.com/company/events/getting-started-with-clickhouse-webinar/ 404 выдает, надо как-то регистрироваться? На ютуб тоже не нашел записи вебинара. Есть какие то хорошие курсы для быстрого вхождения в тему? посоветуйте пожалуйста.
-
'{"fingerId":"XXX","userId":"XX","url":"","referrer":"XXX","ip":"XXX","userAgent":"XXX': While executing
Тут, кмк, не совсем корректный JSON -
об этом также думал
думал может просто лог урезан
возможно проблема у сервиса https://github.com/nikepan/clickhouse-bulk
но там также ласт версия
и никаких issue по моей темеGitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big insertsCollects many small inserts to ClickHouse and send in big inserts - GitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big inserts
-
Видел в логах офигеть какие длинные запросы, типа in ( bla-bla-bla ). Сомневаюсь. Я бы предположил, что Вы вместо запроса JSON пытаетесь обработать, то, что он некорректный - это вопрос уже другой.
-
Вопрос по частым инсертам. В доках указано что рекомендуется не чаще чем 1 раз в секунду, это для каждого сервера или для каждой таблицы?
-
Свежая установка последней stable версии. вот результат.
user@node1:~$ clickhouse-client --secure
ClickHouse client version 22.2.2.1.
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: SSL Exception: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER (localhost:9000). (NETWORK_ERROR) -
фигасе, это что было? какой-то массовый лайк?
-
-
@milovidov_an а можно опять отключить реакции в группе? а то нет возможности игнорировать уведомления в ТГ пока что...
выше люди тож просили...
https://t.me/clickhouse_ru/263114
https://t.me/clickhouse_ru/262275Ivan Terekhov in ClickHouse не тормозитА реально ли забанить в этом чате бота этого? Постоянные висящие непрочитанные реакции раздражают. Телега ещё плохо обрабатывает лайки на старые сообщения
-
Присоединяюсь к просьбе
-
Света, звезда м-а?
-
Давайте не отклоняться от темы :)
-
Ну, с учетом того, как клиент тормозить иногда начинает, вролне себе тема для обсуждения.
-
Не вижу, как предполагаемые навыки предполагаемой светы могут в этом помочь
-
а по поводу банов - да, пожалуйста, кого попросить нужно?
-
бан само собой, но он не сразу прилетает. А вот реакции все это время раздражают... так как ТГ дает уведомление..
-
Да, и притормаживает
-
А, сорян, прошу не обращать внимания.
-
да не особо, Read all reactions - и все ок
-
request: "INSERT INTO logsFpPair FORMAT JSONEachRow\n{\"userId\":\"userId_6\",\"fingerId\":\"fingerId_6\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_2\",\"fingerId\":\"fingerId_2\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_5\",\"fingerId\":\"fingerId_5\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_3\",\"fingerId\":\"fingerId_3\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_8\",\"fingerId\":\"fingerId_8\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_0\",\"fingerId\":\"fingerId_0\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_9\",\"fingerId\":\"fingerId_9\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_7\",\"fingerId\":\"fingerId_7\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_1\",\"fingerId\":\"fingerId_1\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};\n{\"userId\":\"userId_4\",\"fingerId\":\"fingerId_4\",\"date\":\"2022-04-10\",\"dateTime\":\"2022-04-10 15:03:50\"};"; response Code: 27. DB::ParsingException: Cannot parse input: expected 'eof' before: '{"userId":"userId_2","fingerId":"fingerId_2","date":"2022-04-10","dateTime":"2022-04-10 15:03:50"};\n{"userId":"userId_5","fingerId":"fingerId_5","date":"2022-04': While executing JSONEachRowRowInputFormat. (CANNOT_PARSE_INPUT_ASSERTION_FAILED) (version 22.3.3.44 (official build))
-
уже что-то
видимо есть проблемы с eof (\n) -
eol тогда уж
-
Думаю, что там дело в ;
-
видимо она терминирует парсинг
-
да, очень похоже
"};\n{\" -
вопрос как решается данная проблема
в сети ничего
в issue у clickhouse-bulk (https://github.com/nikepan/clickhouse-bulk) ничего ровным счетом
в старой версии 19.x проблема отсутствует
в новой 22.3.3.44 проблема есть
возможно есть параметры какие-нибудь?GitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big insertsCollects many small inserts to ClickHouse and send in big inserts - GitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big inserts
-
Коллеги, общий вопрос.
Как бы вы решали и какими движками момент, когда ваши данные должны требовать обновления/удаления за любой промежуток времени? Допустим, что размер таблицы не превышает 1 млрд. строк.
Необходимо - обеспечить максимальную производительность запросов (выбрать всё, сделать какую либо агрегацию и т.д.) и более-менее допустимую актуальность данных? -
Я бы постарался выяснить откуда такое требование
-
про удаление понятно
-
а вот обновления рандомных данных в миллиарте строк - это странно
-
Можете CollapsingMergeTree попробовать
-
Но про обновление - тут что-то очень странное
-
Ну такая бизнес логика, что поделать...
-
Еще раз пообщаться с продакт менеджером?
-
можете юзкейс описать?
-
Почему вы в сторону CH смотрете?
-
А не Postgress например?
-
разбить на партиции по какому нибудь признаку чтобы группировать обновления, и обновлять спокойно через collapsingMT
-
Чтобы было понятней - есть, к примеру, мед. карта, наша с вами. Приходит пакет данных, в котором описано всё, имеющее отношение к пациенту. Пакет занимает, например, 10 записей. Через день приходит новый пакет, который уточняет сведения. Следовательно, предыдущие данные надо обновить.
-
-
Потому что PG на select count (distinct ...) просто умирает на таких объъемах
-
Значит храните count distinct отдельно?
-
а когда надо сделать помимо отбора уникальных значений, еще и доп. агрегации, то PG нервно курит
-
Ну тогда то, что вам посоветовали
-
или хитрый финт с argMax
-
и не делать никаки апдейтов
-
Выборки слишком разнообразные..... В этом вся беда...
-
Вы точно не любите кошек? Может быть Вы их просто готовить не умеете?
-
Если вы сможете сделать count distinct на postgres на 150 000 000 данных за 1 секунду, то подскажите )))
-
это же лишь 1 пример )
-
Точно не умеете.
-
ну так я и говорю, подскажите )
-
Даже вопрос задать нормально не можете.
-
На каких типах вы хотите 150 миллионов дистинкта почситать?
-
На разных. От UInt 16 до строки. Все зависит от задачи.
-
Начнем с того, что ПГ не умеет в unsigned из коробки.
-
Я задал общий вопрос, и вроде бы даже обозначил это в вопросе.
-
Я про КХ.
-
КХ - это вообще отдельная тема, можно, например, количество шардов в кластере упомянуть.
-
Я понимаю, что у вас может быть более богатый опыт. Но я для того и задал вопрос в этом чате, чтобы мне подсказали направление...
-
несколько разных БД с асинхронной репликацией между ними. постгрес для мастер данных и клик для аналитических запросов, например.
-
При чем тут шарды, кластеры? Представим, что у нас 1 сервер без кластеризации и прочее. ПРосто тупо 1 сервер и описанная выше задача.
-
Именно для аналитики КХ и используется.
-
так у вас есть технические констрейнты?
-
то, что вы описали
-
это не аналитика
-
звучит, как будто атрибуты пациента нужно вынести в отдельную таблицу, и ее поддерживать через scd 1 / scd 2, а в таблицу метрик просто добавлять новые строки с нужным id пациента
-
Тут попытка решить две задачи одной таблицей
-
чего делать не стоит
-
Вам нужно
1) Хранить данные пациентов (видимо в нескольки таблицах)
2) Хранить OLAP данные для аналитики -
это могут быт ьразные сервера, и разные базы данных
-
как вариант PG + CH
-
Ну, Вы понимаете, что для UInt16 и String со средней длинной в пару сотен байт потребуются совершенно разные объемы памяти?
-
И в CH - String не такой как у остальных
-
вам нужно понимать кардинальность самому
-
@Alexey_037 вам, наверное, нужно уточнить вопрос
-
Еще есть Redis - если совсем не получается через базу, именно, чтобы считать
-
Изначально так и есть, данные хранятся в PG в куче таблиц. Затем они сливаются в 1 таблицу в КХ по некоторым алгоритмам. В итоге получаем широкую таблицу, позволяющую производить вычисления в разных разрезах, не прибегая к JOIN разных справочников и других таблиц.
-
так подождите, если у вас оно уже есть, в чем вопрос?
-
Кому бот полайкал посты легче всего выйти войти
-
Вопрос в скорости. Сейчас, чтобы обеспечить актуальность данных + реализовать псевдо операции с удалением/изменением, используется придуманная схема. ЧТо то вроде такого.
-
-
Long tap на лайк и прочитать всё
-
Вы очень абстрактно задаете вопрос. Нужны более конкретные запросы с более конкретной структурой данных
-
Скорость чего? uniq()? uniqExact()? Какие требования к точности? к лагу в данных?
-
можно ли ждать Collapse или нет?
-
если это для аналитики - то подразумевается, что вам не нужна 100% точность, и если что, можно подождать пока данные схлопнутся
-
Именно. Это и было посылом к вопросу. Попробую сейчас расписать более конкретно.
-
Вводные данные:
1 сервер. Без реплик, шардов и т.д.
Таблица примерно на 150-200 млн. записей (пока). Около 200 столбцов.
Запросы - самые разнообразные, по любому набору столбцов. Отсюда минус - сложное партиционирование, не всегда возможно сделать оптимальное.
Требования - выводить результаты агрегационных запросов (sum, uniqExact) в нужных разрезах и, самое главное, за время, не превышающее 1-3 секунд.
Дополнительный минус - данные требуют обновлений/удалений. Удаления редки, но обновления могут быть частыми.
В итоге требуется - иметь более-менее приемлемую актуальность данных в каждый момент времени + указанную выше скорость выполнения запросов. -
Кто нибудь работает с object(json)? Можно ли динамическую колонку сделать nullable?
-
ну, уже хорошо, что о милисекундах речь не идет
-
не не, речь не про милисекунды. Допустимо отставание вплоть до часа/дня.
-
а как же 1-3 секунды?
-
я про лаги в актуальности данных, не про время запроса )
-
а, так Вам еще и из пг в кх надо в рилтайме передавать?
-
не, про передачу из ПГ в КХ речь не идет, считаем по умолчанию, что данные поступают нормально.
-
Не понимаю, так о какой задержке мы говорим?
-
Там целая система обработки данных в ПГ/Kafka и т.п. и потом система укладывает данные в клик батчами.
-
Ну вообщем делайте Collapsing Merge tree и радуйтесь
-
Вероятно, можно применить projections. Но точного ответа никто не даст, поскольку непонятно, что именно вы делаете и где проблема.
-
Проекции пробовали. Увы, прироста скорости не дало...
-
А какая сейчас скорость?
-
и можете дать пример запроса?
-
Тоже пробовали. Получаем очень плохую актуальность данных. Пока идут мержи, прям совсем неактуально получается :(
-
Минуту
-
Так, мы ж про это говорили, что если аналитика - то терпимо
-
Можете сделать крон который форсит коллапс
-
Если совсем тяжко - SELECT FINAL
-
но это прям безысходность когда
-
FINAL сильно сервер грузит. крон помогает, но опять же дикая нагрузка...
-
Так вы хотите, чтобы сервер простаивал и при этом быстро отрабатывал?
-
Так может быть запретить мержи после определенного объема? Или СХД другую выбрать?
-
горизонтально масштабируйте, репликация, кэш, предаггрегация, в конце концов :)
-
Покажите хоть один запрос :)
-
Сдается мне, что троллинг это :(
-
Запросы примерно такие
-
-
Быстро, качественно, недорого.
-
Алексей, я не потроллить пришел, а спросить совета. Может, вы мне тупо ткнете в какое то место и я увижу причину своих проблем. На троллинг у меня нет времени.
-
А вы уверены, что вам uniqExact нужен?
-
какой развал схождение без него?
-
да
-
это был риторический вопрос, ответ скорее всего "нет"
-
если у вас лаг в данных
-
Вам же предложили горизонтальное масштабирование и про смену СХД подумать.
-
о каком экзакте может идти речь?
-
огромный. Таблицы денормализованы, и дублей строк в определенных разрезах очень много
-
Коллеги, если бы всё было так просто, я бы не обратился в сообщество за советом )
-
Слуашйте, а вы их всегда одним запросом получаете?
-
или отдельно тестировали?
-
Прежде чем делать масштабирование, надо изучить проблему от и до. Можно любую проблему размазать по куче серверов и получить хорошее время отклика запросов. Но надо сначала на минимуме выжать максимум производительности и потом уже расширяться...
-
Вот только не нужно меня в этом убеждать, я вообще сторонник выжать все до процента производительности. А потом мне рассказывают о том, что нагрузка выше 60% есть следствие неверного выбора КТС.
-
как у вас GROUP By выглядит
-
Вы что-то явно не то делаете, судя по запросу
-
-
Это как раз пример предагрегата, весь запрос выполняется примерно за 15 секунд...
-
А что такое vmcl_array?
-
Так я и не убеждаю же ) Я пытаюсь найти решение проблемы, не уходя в сторону масштабирования серверов. Возможно, есть ошибки, их то я и пытаюсь найти..
-
вы можете методом исключение определить какая колонка в groupBY больше всех проблем создает?
-
Это одно из полей (Array(UInt32)), по которому нужна группировка.
-
Да, это требуется для вывода неких "счетчиков" на экран..
-
А чей-то у вас where нету?
-
они в IF условиях в uniqExact
-
т.е. вы сделали 15 запросов в одном и удивляетесь почему он отрабатывает 15 секунд?
-
Беда в том, что даже 1 запрос вида
uniqExactIf(sender_message_id, ((sender_message_vmcl = 1))) AND (sender_message_client_datetime IS NOT NULL))
отрабатывает за 4 секунды.
И я пытаюсь найти проблему, из-за чего это может быть. -
тут грустный ответ - изза всего. Array поля чего только стоят
-
проблема в uniqExact) используйте uniq и будет вам счастье
-
Матвьюхи
-
У вас индексы есть?
-
uniq это слишком приближенно, к сожалению...
-
Тот факт, что вы пересчитываете все каждый раз, нет никаких границ по дате и все одним запросом, с группировкой по Array полю...
-
Что там с индексами?
-
обычно точность в районе 99.5%
-
Есть. Как те, что в order by таблицы, так и доп. созданные.
-
сейчас проверю скорость запрос и результаты с uniqExact и просто uniq... Минутку
-
Вообще, конечно, есть вариант решения - выбрать массивы айдишников по каждому отдельному условию, и посчитать arrayUniq по их пересечениям и объединениям поубирав ваши AND и OR
-
с uniqExact вам проекции/мат вью особо не помогут, надо будет в любом случае хранить все данные.
-
Не особо помогает...
-
-
как можно быстро вытягивать данные из КХ если идет обращение к одной той же таблице?
есть таблица на 500 миллионов, нужно вытянуть с нее кусками данные по 10
SELECT * FROM aggregation
ORDER BY id, type, offer, codes
LIMIT 10_000_000 OFFSET 10_000_000;
на графике трафик с БД. Видно, что ждем данные из-за выполнения запроса
в DDL таблице ORDER BY на эти же поля есть
Уточнение, данные хочу получить в C#. Net Framework 4.8 -
Падаждите, а айдишниуки у вас строки чтоли?
-
UUID
-
вам наверное хоть что-то скрывать, что у вас на скринах
вдруг что-то от Минздрава увидим -
Не увидите, не переживайте ))
-
а запросы всегда по полной таблице? Без фильтров?
-
Увы. Но так....
-
3 гига - это только массив айдишников
-
show create table покажете?
-
Столбцы показывать?
-
там просто их тонна
-
Просто интересно, скольку у Вас nullable столбцов
-
если кратко то так
-
-
nullable Только даты
-
CREATE TABLE pg_analitic.semd_connection_vimis
(
`sender_message_vmcl_array` Array(UInt16) DEFAULT [] COMMENT 'Направления оказания медицинской помощи в сообщении',
`sender_nmrc` UInt8 COMMENT 'Признак контрагентов являющихся НМИЦ',
`sender_message_id` UUID COMMENT 'Уникальный идентификатор принятого сообщения',
`sender_system_code` String COMMENT 'Код контрагента',
`sender_system_name` String COMMENT 'Наименование контрагента',
`sender_territory_tree_id` LowCardinality(String) COMMENT 'Текущая иерархия территории контрагента',
`sender_territory_tree_name` LowCardinality(String) COMMENT 'Наименование территории контрагента',
`sender_doc_type_code` UInt16 COMMENT 'Код типа документа в сообщение',
`sender_doc_type_name` LowCardinality(String) COMMENT 'Наименование типа документа в сообщении',
`sender_message_client_datetime` DateTime64(3) COMMENT 'Дата и время приема сообщения в UTC',
`sender_message_status` Enum8('Receive_Ok' = 1, 'XSD_Ok' = 2, 'FLK_Ok' = 3, 'SaveToDB_Ok' = 4, 'XSD_Err' = 5, 'FLK_Err' = 6, 'SaveToDB_Err' = 7) COMMENT 'Состояние обработки сообщения',
`sender_stage_description` String DEFAULT '' COMMENT 'Детализация по состоянию обработки сообщения',
`sender_stage_description_alias` String DEFAULT '' COMMENT 'Детализация по состоянию обработки сообщения (алиас)',
`sender_mo_id` UInt64 DEFAULT 0 COMMENT 'ID МО в СЭМД из EHR',
`sender_mo_oid` String DEFAULT '' COMMENT 'OID МО из sms_log.income_message',
`sender_mo_name_short` String DEFAULT '' COMMENT 'Cокращенное наименование МО в СЭМД из EHR',
`sender_mo_delete_date` Nullable(DateTime64(3)) COMMENT 'Дата удаления МО в ФРМО',
`sender_mo_mcl` Array(UInt16) DEFAULT [] COMMENT 'Признак профиля',
`sender_mo_mcl_subline` Array(UInt16) DEFAULT [] COMMENT 'Код профиля ОПМ',
`sender_mo_mcl_subline_name` LowCardinality(String) DEFAULT '' COMMENT 'Ключ - код профиля ОМП, значение - наименование',
`sender_mo_mcl_subline_filter_code` Array(Array(UInt16)) DEFAULT [] COMMENT 'Код фильтра профиля ОПМ',
`sender_mo_territory_tree_id` LowCardinality(String) DEFAULT '' COMMENT 'Иерархия территории МО',
`sender_mo_region_territory_tree_id` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор региона МО',
`sender_mo_region_territory_tree_code` LowCardinality(String) DEFAULT '' COMMENT 'Код региона МО',
`sender_mo_region_territory_tree_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование региона МО',
`sender_mo_fd_territory_tree_id` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор федерального округа МО',
`sender_mo_fd_territory_tree_code` LowCardinality(String) DEFAULT '' COMMENT 'Код федерального округа МО',
`sender_mo_fd_territory_tree_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование федерального округа МО',
`semd_doc_ehr_id` UInt64 DEFAULT 0 COMMENT 'Уникальный идентификатор СЭМД из EHR',
`semd_doc_type_code` UInt64 DEFAULT 0 COMMENT 'Код типа документа СЭМД из EHR',
`semd_doc_type_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование типа документа СЭМД из EHR',
`semd_mo_id` UInt64 DEFAULT 0 COMMENT 'ID МО в СЭМД из EHR',
`semd_mo_oid` String DEFAULT '' COMMENT 'OID МО в СЭМД из EHR',
`semd_mo_name_short` String DEFAULT '' COMMENT 'Cокращенное наименование МО в СЭМД из EHR',
`semd_mo_delete_date` DateTime64(3) COMMENT 'Дата удаления МО в ФРМО',
`semd_mo_mcl` Array(UInt16) DEFAULT [] COMMENT 'Признак профиля',
`semd_mo_mcl_subline` Array(UInt16) DEFAULT [] COMMENT 'Код профиля ОПМ',
`semd_mo_mcl_subline_name` LowCardinality(String) DEFAULT '' COMMENT 'Ключ - код профиля ОМП, значение - наименование',
`semd_mo_mcl_subline_filter_code` Array(Array(UInt16)) DEFAULT [] COMMENT 'Код фильтра профиля ОПМ',
`semd_mo_territory_tree_id` LowCardinality(String) DEFAULT '' COMMENT 'Иерархия территории МО',
`semd_mo_region_territory_tree_id` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор региона МО', -
`semd_mo_region_territory_tree_code` LowCardinality(String) DEFAULT '' COMMENT 'Код региона МО',
`semd_mo_region_territory_tree_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование региона МО',
`semd_mo_fd_territory_tree_id` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор федерального округа МО',
`semd_mo_fd_territory_tree_code` LowCardinality(String) DEFAULT '' COMMENT 'Код федерального округа МО',
`semd_mo_fd_territory_tree_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование федерального округа МО',
`semd_first_mo` UInt8 DEFAULT 0 COMMENT 'Признак первого сообщения от МО в EHR (СЭМД успешно принят)',
`semd_first_version` UInt8 DEFAULT 0 COMMENT 'Признак первой версии сообщения в EHR (СЭМД успешно принят)',
`semd_version` String DEFAULT '' COMMENT 'Версия СЭМД в EHR',
`semd_date` Nullable(DateTime64(3)) COMMENT 'Дата и время СЭМД в ВИМИС в EHR',
`semd_patient_id` UInt64 DEFAULT 0 COMMENT 'ID пациента в СЭМД в EHR',
`semd_patient_info_id` UInt64 DEFAULT 0 COMMENT 'ID пациента из МП',
`semd_first_patient` UInt8 DEFAULT 0 COMMENT 'Признак первого СЭМД по пациенту в EHR (СЭМД успешно принят)',
`semd_patient_status_mcl` Array(UInt16) DEFAULT [] COMMENT 'Направление ВИМИС для пациента',
`semd_patient_status_mcl_name` Array(LowCardinality(String)) DEFAULT [] COMMENT 'Наименование направления ВИМИС для пациента',
`semd_patient_status_submcl` Array(Array(LowCardinality(UInt16))) DEFAULT [] COMMENT 'Профиль ОМП ВИМИС для пациента',
`semd_patient_status_submcl_name` Array(Array(LowCardinality(String))) DEFAULT [] COMMENT 'Наименование профиля ОМП ВИМИС для пациента',
`semd_patient_status_submcl_date_begin` Nullable(DateTime64(3)) COMMENT 'Дата начала действия профиля ОМП ВИМИС для пациента',
`semd_patient_status_submcl_date_end` Nullable(DateTime64(3)) COMMENT 'Дата окончания действия профиля ОМП ВИМИС для пациента',
`semd_patient_registration_tree_id_code` LowCardinality(String) DEFAULT '' COMMENT 'Иерархия территории постоянной регистрации',
`semd_patient_registration_tree_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование территории постоянной регистрации',
`sender_message_vmcl` UInt16 DEFAULT 0 COMMENT 'Направления оказания медицинской помощи в сообщении (одно значение)',
`tx_id` UInt64 DEFAULT toUInt64(now64()) COMMENT 'Столбец с ID транзакции, ссылка на pg_analitic.onko_construct_disease_events',
`raw_id` UUID MATERIALIZED generateUUIDv4() COMMENT 'Идентификатор строки',
`date_modify` DateTime64(3) MATERIALIZED now64() COMMENT 'Дата создания или изменения записи',
`hash_date` String DEFAULT '' COMMENT 'Хэш даты',
`sender_mo_mcl_subline_filter_name` Array(Array(LowCardinality(String))) DEFAULT [] COMMENT 'Ключ - код фильтра профиля ОМП, значение - наименование',
`semd_mo_mcl_subline_filter_name` Array(Array(LowCardinality(String))) DEFAULT [] COMMENT 'Ключ - код фильтра профиля ОМП, значение - наименование',
`semd_mo_dept_code` LowCardinality(String) DEFAULT '' COMMENT 'Код ведомственной принадлежности МО',
`semd_mo_dept_name` LowCardinality(String) DEFAULT '' COMMENT 'Ведомственная принадлежность МО',
`semd_mo_organization_type_code` LowCardinality(String) DEFAULT '' COMMENT 'Код типа МО',
`semd_mo_organization_type_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование типа МО',
`semd_mo_agency_kind_code` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор вида деятельности МО',
`semd_mo_agency_kind_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование вида деятельности МО',
`semd_mo_agency_kind_code_spec` String DEFAULT '' COMMENT 'Идентификатор вида деятельности МО по спецгруппировке',
`semd_mo_agency_kind_name_spec` String DEFAULT '' COMMENT 'Наименование вида деятельности МО по спецгруппировке',
`semd_mo_agency_profile_code` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор профиля деятельности МО',
`semd_mo_agency_profile_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование профиля деятельности МО', -
`semd_mo_level_code` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор уровня МО',
`semd_mo_level_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование уровня МО',
`semd_mo_territory_code` LowCardinality(String) DEFAULT '' COMMENT 'Идентификатор территориального признака МО',
`semd_mo_territory_name` LowCardinality(String) DEFAULT '' COMMENT 'Наименование территориального признака МО',
`semd_ehr_vmcl_array` Array(UInt16) DEFAULT [] COMMENT 'Направление определенное в EHR ВИМИС',
`error_code_materialized` String MATERIALIZED multiIf((sender_message_status IN (5)) AND sender_nmrc AND (semd_doc_ehr_id = 0), 'XSD_NMIC', (sender_message_status IN (6, 7)) AND sender_nmrc AND (semd_doc_ehr_id = 0), 'FLK_NMIC', (sender_message_status IN (5)) AND (NOT sender_nmrc) AND (semd_doc_ehr_id = 0), 'XSD', (sender_message_status IN (6, 7)) AND (NOT sender_nmrc) AND (semd_doc_ehr_id = 0), 'FLK', ''),
`error_name_materialized` String MATERIALIZED multiIf((sender_message_status IN (5)) AND sender_nmrc AND (semd_doc_ehr_id = 0), 'Ошибка валидации по XSD схеме переданных НМИЦ', (sender_message_status IN (6, 7)) AND sender_nmrc AND (semd_doc_ehr_id = 0), 'Форматно-логический контроль переданных НМИЦ', (sender_message_status IN (5)) AND (NOT sender_nmrc) AND (semd_doc_ehr_id = 0), 'Ошибка валидации по XSD схеме переданных регионами', (sender_message_status IN (6, 7)) AND (NOT sender_nmrc) AND (semd_doc_ehr_id = 0), 'Форматно-логический контроль переданных регионами', '')
)
ENGINE = MergeTree
PARTITION BY sender_territory_tree_id
ORDER BY (sender_mo_fd_territory_tree_id, sender_territory_tree_id, sender_mo_territory_tree_id, semd_mo_territory_tree_id, semd_patient_id, sender_message_id)
SETTINGS index_granularity = 8192 -
заспамил чат...
-
Как часто этот запрос отрабатывает?
-
в максимальном варианте - хоть ежесекундно... Зависит от количества пользователей..
-
А Array(Array(LowCardinality(String))) как работает? Реально как LowCardinality?
-
сорян, но я не верю в ваш юзкейс. Не вижу как такой групбай может где-то понядобится, еще и одним запросом
-
либо вы хотите все приложение в один запрос захреначить
-
либо я че-то не понимаю
-
Отсутствие возможности по дате фильтровать тоже как-то совсем странно выглядит.
-
Да. В LowCardinality участвуют данные, не имеющие более 100 уникальных значений
-
Вся история напоминает "я хочу странного, у меня не получается, помогите" или качественный троллинг.
-
да, согласен
-
чем дальше - тем больше это на троллинг похоже
-
или где-то дырка между бизнесом и разработкой
-
и кто-то чего-то не понял
-
или не решился возразить ввиду хорошего финансирования :)
-
юскейс непонятен от слова совсем
-
вообще это странное требование "потребность делать запросы ON CLUSTER с одного кластера на другой"
но в принципе в чем проблема выдать права двум ACL на одну и туже ноду? -
и главное - он сем дальше. тем меньше похож на юзкейс для CH
-
бекап - рестор?
-
@Alexey_037 Если вы все-таки не тролль, то уберите UUID - и замените н аром айдишники
-
если будет мало - просто поставьте Redis - загоните все в битмапы
-
и получите производительность меньше секунды
-
Блин, да что ж вы меня троллем то считаете )
Есть глобальная всероссийская система. Она шлет в нашу систему XML документы. У нее в качестве ID используется UUID - уникальный идентификатор документа. Таких документов сотни миллионов и более. Физически невозможно присвоить им иные идентификаторы в виде простых числовых... -
Мы обязаны хранить и использовать эти идентификаторы...
-
Ничего подобного - сделайте словарь между UUID
-
пока у вас там UUID - чуда не будет
-
постгрес вам с удовольствием заменит эту приблуду на айдишники
-
на этапе запихивания данных - подменяйте
-
или вообще доверьте это кафке
-
today_date, today_date + toIntervalDay(-1)
-
ага
-
улыбнуло
-
Так, ладно, с UUID я принял в оборот, завтра будет обсуждать. Но что делать с кучей апдейтов? Брать CollapsingMergeTree и забить на актуальность данных?
-
Да, тут требуется вычислить данные за сегодня + вчера.
-
У меня тоже куча вопросов к разработчикам СМЭВ, только я это не тащу на всеобщее обозрение.
-
А при чем здесь это?
-
Здесь не всеобщее обозрение, а просьба помочь в решении проблемы. Часть я уже увидел, за что большое спасибо.
-
глобальная всероссийская система
XML документы
ID используется UUID -
Стоп, так у вас есть поле по дате?
-
Это не СМЭВ )) Я с ней тоже работал, но это не оно.
-
Так а почему оно у вас не в Where?
-
Я в курсе
-
И почему не под order by
-
Есть. Но в 99% случаев нужен отбор за все данные в БД.
-
Добавлял в order by - разницы в скорости выполнении запросов - 0.
-
Какая-то трипота грибная, если честно. :)
-
я бы начал с отключения фичи
input_format_parallel_parsing arg Enable parallel parsing for some data formats. -
Не спорю )
-
Хорошо, по самому UUID есть индекс?
-
Попробуйте ради хохмы - сделать этот запрос только на половине айдищников
-
и посмотрите - если прирост скоросе больше чем в 2 раза (а так должно быть), значит два запроса отдельно - быстрее чем один большой
-
@TGtraffic2022 забаньте плиз
-
делим на два до получения максимального эффекта
-
Индекс есть
-
-
последняя stable 23.3
это какой баг у вас, возможно 22.2 сломана
clickhouse-client -s
Connection refused (localhost:9440)
кстати у клиента и сервера абсолютно разные конфиги, то что вы меняете конфиг сервера никак не влияет на клиент.
в конфиге клиента можно задать порт -
От такого индеса толку мало. Сколько реально уникальных пациентов?
-
-
Более 50%
-
При установке v21 clickhouse-client — secure идет корректно на 9440
-
replacingMergeTree + принудительный optimize + все запросы с final +optimize_skip_merged_partitions do_not_merge_across_partitions_select_final
-
а не будет final давать чрезмерную нагрузку, в случае ежесекундных обращений? КХ вроде как не рекомендует его использовать на больших таблицах...
-
а я правлильно понимаю у вас есть возможность данные заливать раз в час или раз в сутки, потом делать optimize final и после этого запросы без final?
--do_not_merge_across_partitions_select_final arg Merge parts only in one partition in select final -
Да, раз в час - допустимо вполне
-
Так а зачем вам тогда запросы раз в секунду, если данные раз в час обновляются
-
Ну точнее как - данные то заливаются постоянно. Но иметь временной лаг в актуальности из-за мутаций при мержах - допустимо.
-
-
Выше ответил
-
Наверное я пропустил,
-
не вижу где
-
вот
-
Непонятно... а в чем отличается лаг в заливке от лага в коллапсе?
-
в итоге у вас каунты
-
не все ли равно по какой причине они неточные
-
-
Кидали выше
-
а точно "SELECT *" нужен?
просто так как система колоночная, то если нужно вытащить три-четыре колонки в таблице из 100 колонок, то лучше их явно указать -
Там всего 5 колонок, нужны все
-
вы их для чего вытаскиваете?
-
Это одноразовая акция, или вы хотите это дело регулярно повторять?
-
Нужно потом сделать групп бай на колонки search, type, offer, codes
Получить словарь key (search, type, offer, codes), value (agency, rule_id)[]
Или массив search, type, offer, codes, (agency, rule_id)[]
Это сериализовать и в редиску
Акция 3-4 раза в день, когда исходная таблица полностью обновляется -
/stat@combot
-
-
Привет
-
Лохи
-
Долго пупсы
-
-
Посоветуйте легкий батчинг в клик. Данных приростает примерно 500 млн строк за месяц.
-
Сейчас юзается ассинхронная всавка.
-
Текущий процесс
1. Тянем все данные в не отсортированном виде List<(search, type, offer, codes, agency, rule_Id)>
2. Создаем из этого в Dictionary<(search, type, offer, codes), (agency, rule_id)[]>
3. Словарь кастим в List<(search, type, offer, codes, (agency, rule_id)[]>.
4. Лист сериализуем кусками и в редиску
Хочу поменять на
1. Тянем данные кусками отсортированные по ключу (search, type, offer, codes)
2. Т.к. данные отсортированы, складываем сразу в List<(search, type, offer, codes, (agency, rule_id)[]>
Если прочитанная строка равна предыдущей, то нужно добавить значение в (agency, rule_id)[]
Иначе добавялем в лист новую запись (search, type, offer, codes, (agency, rule_id)[]
3. Когда прочитали какое-то заданное кол-во строк, то сериализуем весь List, кроме последнего элемента -
так.... а зачем?
-
-
Это больше хотелка, для удобства, в случае добавления на ноду прав, один кластер будет создавать запрос со своим acl, а у другого кластера на запрос не будет прав, то есть создавать on cluster запросы смогут все, но прочитать не получится
-
+ приложение может упасть или деплой идет.
оно эти бинарные куски потом локально хранит -
не нужно пользоваться LIMIT/OFFSET. Нужно пользоваться where id between 10000 and 10100. При условии что у вас order by id
-
Добрый день. Существуют ли какие-то подводные камни при обновлении с 21.3 на 22.3?
-
с ORDER BY rule_id проблем нет.
немного не корректно написал исходный вопрос.
SQL правильный так выглядит, нужно 4 полям ордер
SELECT * FROM aggregation
ORDER BY search, type, offer, codes
LIMIT 10_000_000 OFFSET 10_000_000; -
можно в чейнжлоге посмотреть под заголовками Backward Incompatible Change
-
я имел в виду order by/primary key таблицы - её первичный индекс. limit/offset вам не поможет, он фильтрует на выходе, после того как данные уже прочитаны (по крайней мере их начало). У вас каждый раз считывается вся таблица с начала, какой бы offset вы не поставили. Отсюда и такой профиль нагрузки
-
DLL таблицы
engine = MergeTree ORDER BY (search, type, offer, codes)
если делать селект на кусок данных через LIMIT OFFSET без order by (search, type, offer, codes),
то данные могут прийти не сортированные
Это не подходит
where id between 10000 and 10100. -
search строковый что-ли? Тогда можно фрагменты для выборки и по буквам сформировать.
order by (search, type, offer, codes) в запросе - оставляйте, если хотите чтобы сортировку делал КХ (но может и память сожрать свех меры)
там при таком подходе иная проблема - пока вы частями вычитываете, могут прийти новые данные, и вы их не получите.
Но все равно не очень понятно - для чего вы делите запрос на фрагменты, а не получаете его целиком?
Если памяти хватает отсортировать все, то выгребайте целиком, без лимита. КХ будет вам стримить - только принимайте. -
не заметил сразу, что у вас order by таблицы и запроса совпадают. Тогда проблемы с сортировкой нет вобще - КХ все отсортирует на вставках/мерджах. Вам нужен сеттинг правильный - https://clickhouse.com/docs/en/sql-reference/statements/select/order-by/#optimize_read_in_order
Будет работать быстро - читать с диска и кормить ваше приложение. Главное чтобы оно приняло. Не нужен вам limit/offset - забудьте про него. Он тут почти не работает при несовпадении order by. Но у вас совпадает. -
У хоста есть 64 ГБ оперативы, но я пытаюсь сделать потоковое формирование бинарников
Хост за раз не справляется, там до 500 миллионов исходных правил.
Типы (search, type, offer, codes) short, byte, short, string
Поглядываю также в сторону Nested -
какая версия КХ? Почитайте changelog про этот optimize_read_in_order. Там пишут что что-то меняли в 22.2, и у меня есть воспоминание, что раньше оно было выключено.
Но если вы сможете добиться, чтобы КХ не сортировал все в памяти, а стримил вам напрямую с диска, то ваше приложение может само делить на удобные вам батчи и распределять по многочисленным редисам. -
Оставить реакции в группе или отключить?
Оставить - ставьте реакцию 👍
Отключить - ставьте реакцию 😢 -
None
-
-
Отключение реакций победило.
-
-
-
-
-
Эту бы демократию да на рассмотр FRов )))
-
настолько же быструю? Так она есть. Ты просто не успеваешь заметить)
-
А у вас запросы идут во время 100%нагрузки? Просто кх заточен на то чтоб все сожрать, и если у вас 2 параллельных запроса, при настройках по умолчанию - будет 100% cpu.
-
Настолько же демократичную, голосовалкой ) я не могу быть настолько слоупоком
-
да, запросы вне зависимости от нагрузки идут каждые 5 минут
-
-
очень грустно такую нагрузку видеть (кликхаус не отключался), стата за 12 часов
-
-
Добрый вечер!
Подскажите, при использовании Object(JSON) есть ли какие-то ограничения на количество ключей? -
а логи-метрики вы ведь уже отключили? https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-settings-to-adjust/
-
Вам стоит посмотреть, может запросы не оптимизированы
-
optimize_read_in_order включено по умолчанию после 19.16
-
-
перепроверю и отвечу
-
-
запросы INSERT?
-
-
Тогда прочерьте парт лог. Может у вас слишком мнлкие вставки
-
-
-
-
-
10к записей каждые 5 минут примерно
-
-
Матвью
-
-
Сколько партов в секунду появляется?
-
как посмотреть?
-
-
-
по нему ориентируюсь
-
Ну и сколько партов новых? Сколько мерджей? В среднем?
-
-
Yandex Cloud 🥺
Не совсем Европа, правда) -
мало за день то. проверьте в system.merges, system.mutations, system.processes
-
ну и сколько процессоров в системе, и какие настройки пулов
ну и метрики (system.asynchronous_metrics)
BackgroundPoolTask
BackgroundMovePoolTask
BackgroundSchedulePoolTask
BackgroundBufferFlushSchedulePoolTask
BackgroundDistributedSchedulePoolTask -
Сейчас окажется что там виртуалка на пару ядер с кучей дисков 😂
-
спойлеры!
-
Altinity.Cloud
A fully-managed ClickHouse service, Altinity.Cloud runs in any AWS and GCP region. Sign up and launch production-ready ClickHouse clusters today!
- 11 April 2022 (136 messages)
-
Из-за чего может появляться ошибка хоста?
Клик дропает входящие tcp реквесты?
Как можно лечить? -
Еще вопрос
request duration: 61ms
getArticleUrlTrees { elapsed: 0.000937145, rows_read: 8192, bytes_read: 369965 }
Неужели tcp съедает так много времени от запроса?)
1мс работы базы превращается в 61мс запроса -
Скорее TLS. Далеко клиент от сервера?
-
это не клик дропает это у вас DNS не резолвит endpoint яндекса
-
ping до сервера какой?
TCP syn / ack + TLS (если есть) + передача 300 килобайт по сети
протокол какой ? Native или HTTP?
если HTTP формат передачи данных какой? -
привет! долгий запрос вылетает после пяти минут работы. как мне заставить дождаться его окончания? receive_timeout ставлю 900, всё равно ругается на таймаут через 300 секунд
-
выглядит вот так:
e1fb58c47b4e :) SELECT * FROM system.settings WHERE name ='receive_timeout'
SELECT *
FROM system.settings
WHERE name = 'receive_timeout'
Query id: b657e911-83f8-4099-bb06-66b31a8864c7
┌─name────────────┬─value─┬─changed─┬─description─┬─min──┬─max──┬─readonly─┬─type────┐
│ receive_timeout │ 900 │ 1 │ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Seconds │
└─────────────────┴───────┴─────────┴─────────────┴──────┴──────┴──────────┴─────────┘
1 rows in set. Elapsed: 0.006 sec.
e1fb58c47b4e :) ALTER TABLE sometable MODIFY TTL somecolumn + INTERVAL 2 MONTH;
ALTER TABLE sometable
MODIFY TTL somecolumn + toIntervalMonth(2)
Query id: 29506dce-de17-4b64-829d-67b7edf9bd4b
Timeout exceeded while receiving data from server. Waited for 300 seconds, timeout is 300 seconds.
Cancelling query. -
Ну так он не отменяется на стороне кликхауса ( как я помню). А настройка на время ожидание ответа устанавливается на клиенте вроде как
-
clickhouse-client --receive_timeout=3600 -q "SELECT .. " если из CLI запускаете
в других клиентах тоже timeout настройте -
вот так работает, да, спасибо!
clickhouse-client --receive_timeout 3600 --host db -q 'ALTER TABLE somtable MODIFY TTL somecolumn + INTERVAL 2 MONTH'
а через SET внутри клиента, получается, этот параметр не задаётся? -
Салют!
Подскажите пожалуйста а есть инструкция как из 1 нодовой сделать, кластер?
Как я понимаю установку нужно clichousekeeper
Нашел только такую инструкцию
https://cloud.yandex.ru/docs/managed-clickhouse/operations/cluster-createДокументация Yandex Cloud | Yandex Managed Service for ClickHouse | Создание ClickHouse-кластераClickHouse-кластер — это один или несколько хостов базы данных, между которыми можно настроить репликацию.
-
Уточните, что такое кластер в вашем понимании.
Если вам нужно просто несколько шард, то clickhouse keeper для этого не необходим, например. -
Коллеги, добрый день. Есть 2 кликхауса:
1) Один шард одна реплика
2) Кластер из двух шардов по одной реплике на каждом.
Задача: джойнить данные из второго кликхауса с данными с первого. Пытался сделать это через remote. Но именно из той таблицы, откуда необходима информация с первого кликхауса не возвращает строки, совсем. Думаю, что там слишком много строк для функции remote (30 млрд). Это моё предположение. Есть ещё какие-то способы взять данные с двух кликхаусов. Может существует более эффективное решение, чем использование remote? -
3 шарда 3 реплики как в хадупе )
-
Если у вас join простой (определенно inner), то можно смотреть сюда https://clickhouse.com/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-clickhouse
Ну а если сложный, то вам вообще мало что поможет. Разве что репликация этой таблицы из второго кликхауса в первый.Источники внешних словарей | Документация ClickHouseИсточники внешних словарей Внешний словарь можно подключить из множества источников. Общий вид XML-конфигурации: <clickh
-
Не знаю текста, который покрывает ваш вопрос, но вот сюда посмотрите https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-converting-mergetree-to-replicated/ , например.
-
спасибо. посмотрю
-
Ок, если на пальцах )
Есть у меня клоудера. Там есть консолька, я говорю вот тебе 10 нод, 1,2 мастер ,3-9 дата
В кх я поднимаю серевер кх на 10 нодах? А потом как их подружить? -
я правильно понимаю, что вы пытаетесь через select * вытянуть 30B записей с другого сервера и как-то их поджойнить? Нет, так оно не работает. Нужно эти 30B сгрупировать до 1M и вот этот миллион уже можно переслать. Покажите лучше свои селекты, без особой детализации колонок.
-
Идея рассказать клоудере (кто бы это ни был) про наличие в CH мастер- и дата- нод выглядит подозрительно, потому что в самом CH таикх понятий нет, хотя они могут появляться на каком-то логическом уровне.
Почитайте про кластеры и про репликацию в официальной доке и на сайте Альтинити, посмотрите какие-нибудь видео про то же. Скорее всего, станет понятно, что такое кластер в CH. -
в КХ кластер "одноранговый", вся метадата должна быть сконфигурирована на серверах используется зукипер для синхронизации и репликации.
т.е. вы можете сами сказать, 4 шарда каждый по 2 реплики - 8 нод.
и в каждом сконфигурировать информацию о кластере.
Потом надо переделать merge tree в replicated merge tree.
есть куча скриптов как переделать merge tree в replicated merge tree... -
А это в писать конфигах каждой ноды?
-
да.
https://kb.altinity.com/altinity-kb-setup-and-maintenance/cluster-production-configuration-guide/cluster-configuration-process/ -
еще недавно сделали автодискавери, но я не пробовал
https://github.com/ClickHouse/ClickHouse/pull/31442Cluster discovery via Zoo/Keeper by vdimir · Pull Request #31442 · ClickHouse/ClickHouseChangelog category (leave one): New Feature Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Automatic cluster discovery via Zoo/Keeper Detailed: Cl...
-
ни в коем случае не собирался тянуть 30B строк. запросы будут иметь подобный вид:
select *
from remote('host.clickhouse.com', database.table, 'user', 'password')
where 1=1
and app_id = 'some_app_id'
and user_id = '1642101002427-9134274996651573612'
and toDate(event_time) = '2022-01-15';
вот такой запрос непосредственно на host.clickhouse.com занимает секунду и возвращает 15 строк. но через remote возвращает 0 строк. на host.clickhouse.com есть таблица database.table_1 , в которой 9B строк и там находятся частично строки из основной таблицы. оттуда без проблем возвращает нужные 15 строк. быть может где-то сидит ограничение для remote функции? мой юзер в row policy точно имеет доступ к этим строкам -
Странно, что не работает remote. Вроде нет квот, в которые здесь можно было бы упереться. Но совет все равно один - почитайте логи. Скорее на host.clickhouse.com.
Можно попробовать использовать таблицу Distributed, это чуть правильнее, чем remote. -
ну это по идее параметр соединения, он до передачи самой query должен быть известен, чтобы параметры сокета задать, не знаю попробуйте
-
пробовал, не работает. с этого вопрос и начался
-
Всем добрый день. Делаю insert select по ODBC. 18 млн строк, 5 Гб. Оперативки, судя по графикам более чем достаточно. Но получаю ошибку:
DB::Exception: Attempt to read after eof: While executing BinaryRowInputFormat: While executing ODBC.
В чем может быть проблема? -
-
Похоже на таймаут.
-
проблема в ODBC source
SELECT ... FROM odbc(...) LIMIT 10
нормально работает?
какая субд в качестве источника?
max_insert_threads это паралельность вставок -
MSSQL
-
драйвера какие FreeTDS или официальные драйвера?
-
-
Добрый день.
Странный баг. В ю таблице atable есть 2 колонки X,Y UInt64.
Делаю запрос вида INSERT INTO btable SELECT X, Y, ... WHERE...
Работает нормально.
Делаю запрос вида INSERT INTO btable SELECT X, X, ... WHERE...
Т.е. вставляю в 2 колонки того же типа одно значение - выполняется в 10-15 раз дольше.
Отчего так? -
можете дать доку на такое использование? или пример? хочу изучить. пока мои знания distributed ограничиваются созданием таблички с таким движком на шардированном кликхаусе для распределения данных по ключу шардирования. было бы круто это использовать и для извлечения данных с двух хостов кликхауса. заранее спасибо
-
-
стектрейс надо бы посмотреть
какая версия clickhouse? -
Добрый день! Нет ли функции для совмещения like и in?
-
22.3.2.1
А вот со стек-трейсами не помогу(( -
multiSearchAny ?
-
а не multiMatchAny?
-
match это re2 выражения
-
-
да просто вместо Name like ‘Вас%’ or Name like ‘Пет%’
-
это можно через arrayFirst и startsWith/like/match/position или через multiMatchAny, в зависимости от объёмов можно попробовать разные варианты на скорость
-
ну найдите того кто поможет
/var/log/clickhouse-server/clickhouse-server.err.log
вот в этот файл надо смотреть
или в
SELECT * FROM system.query_log WHERE query NOT IN ('QueryStart','QueryFinish') AND event_date=today() AND query ILIKE 'odbc' FORMAT Vertical
еще можно вместо табличной функции odbc
пробовать табличку ENGINE=ODBC(...) или VIEW SELECT ... FROM odbc(...) сделать -
Похоже это очередной фуфломицин от ClickHouse.
Поле типа Date может хранить только с 1970-01-01, и только до 2106 года. Типы данных Date32, DateTime, DateTime64 - примерно тоже самое.
https://clickhouse.com/docs/ru/sql-reference/data-types/date/
Так что, видимо, придется Вам делать колонку типа целое число, как бывает принять в аналитических базах: просто число 19460805. Поиск по дате, за период дат работает как с датами, но придется отдельно самому писать функции для определения года, месяца, дня недели, разница между датами в днях и т.п. Это будет весьма непросто, так как придется самому учитывать високосные даты.Date | Документация ClickHouseDate Дата. Хранится в двух байтах в виде (беззнакового) числа дней, прошедших от 1970-01-01. Позволяет хранить значения
-
Спасибо!
-
Сейчас сделал на стороне MSSQL представление, в котором все поля перегнал в varchar. На стороне Кликхауса все заработало. Видимо есть какой-то косяк парсинга в дровах.
-
-
Добрый день! Подскажите, пожалуйста, из-за чего периодически может зависать clickhouse-odbc-bridge, помогает только киляние процесса
-
Около 8 минут должно пройти, как удалятся данные физически
-
Всем привет, вижу вот в логах, что ошибки ExceptionBeforeStart идут только на дефолтную БД, current_database=default, хотя в DSN при вставке мы прописываем все.
Может кто-нибудь с таким сталкивался? Просто ошибка возникает Column date is not under aggregate function and not in GROUP BY в мат вьюхах, хотя запросы верные, группировка отдельно отрабатывает, странная хрень 🧐 Версия 22.1 -
Вы при подключение указываете БД ?
-
вот такая стринга
tcp://ch1sh1r1:9000,ch1sh1r2:9000,ch1sh2r1:9000,ch1sh2r2:9000,ch1sh3r1:9000,ch1sh3r2:9000/statistics
драйвер вот этот https://github.com/ClickHouse/clickhouse-go#dsn
Причем некоторые то данные вставляются, не все идут с такими ошибками. Магия какая-то -
Как понять в какое место файла нужно помещать данный конфиг?
-
-
либо в дровах либо в том как из clickhouse вычитываются данные из того что возвращает ODBC, как нибудь не так приведение типов на низком уровне работает или еще чего...
будет круто если поропбуете по одному поля убирать
и понять на каком именно столбце ошибка -
у вас Native или HTTP протокол?
это настройки профиля
можно в /etc/clickhouse-server/users.d/avod.xml
<yandex><profiles><default><format_avro_schema_registry_url>...</format_avro_schema_registry_url></default></profiles></yandex>
для Native
можно через SETTINGS format_avro_schema_registry_url=...
для HTTP
через query string
?format_avro_schema_registry_url= -
/stat@combot
-
-
Нет такой доки (или я ее не знаю).
Ну и не очень понятно, что в ней можно написать, потому что в CH понятие "cluster" эфемерное и мало к чему обязывающее.
Никто не мешает для некоторых Distributed таблиц описать отдельный, только им одним ведомый кластер, состоящий из части нод.
Типичный паттерн - наряду с "настоящим" кластером, в котором есть шарды, описать кластер, в котором все ноды кластера описаны как реплики; это позволяет иметь какие-то данные на всех узлах кластера.
Ну а ключ шардирования не нужен, если таблицы используются для чтения. По умолчанию Distributed не полагается на знание, где что лежит, а обращается ко всем таблицам, над которыми она создана. -
спасибо
-
Добрый день! Очень хочется разобраться, возможно ли как-нибудь задать счётчик квот на весь кластер? Создаю квоту на чтение только 2 строк в минуту, для пользователя, у которого есть права только на чтение. Делаю запрос из двух нод на чтение из-под пользователя с правами только на чтение. Квоту read_rows установил на 3. Делаю запрос в первой ноды, читаю 2 строки, затем делаю запрос из второй ноды и тоже читаю 2 строки и запрос успешно выполняется. Делаю запрос в Distributed таблице.
create quota test on cluster test for interval 60 second max read_rows = 2 to user_reader;
Подскажите пожалуйста, возможно что-то неправильно сконфигурировано или неправильно создана квота? -
Подскажите, пожалуйста, а как можно почистить очередь system.distribution_queue?
Одна нода кластера не успевает мерджить всё что к ней прилетает. Отключили все прямые вставки и вставки в распределённые таблицы, чтобы пришла в себя, но там ещё 250к вставок в очереди distribution_queue. Хочется их тоже удалить. -
Здравствуйте, возникла проблема с фильтрацией. Требуется агрегировать у юзеров определенные поля вместе с фильтрацией. Проблема в том, что если ни один из юзеров не попал под фильтры. то агрегация становится невозможной даже null-данными, т.к. нету колонки для агрегация.. Есть ли возможность агрегировать юзеров null данными, если ни один юзер не попал под фильтры по дате?
сам кейс:
юзеры фильтруется по определенным действиям за промежуток времени и если хотя бы один юзер делал действия в этот промежуток, то остальные агрегируются null-данными, если ни один не попал под фильтр, то квери пустой
sql: https://pastebin.com/M7RTbERa -
во-первых вам там distinct не нужен
во-вторых: среднее по процентам не так считается - вам нужно сумму делителей на сумму знаменателей делить (если я правильно понял, что вы делаете)
в-третьих: чтобы сделать что вы хотите нужен хитрый кроссджоин со списком юзеров -
Всем привет, а я правильно понимаю что для обновления данных доступны следующие варианты:
1. Мутации ALTER UPDATE и ALTER DELETE - нежелательны для регулярного обновления
2. Replacing(/Collapsing)MergeTree + вызывать OPTIMIZE (долго) и/или делать view со словом FINAL (запросы выполняются дольше)
3. ALTER TABLE DROP PARTITION + вставка новых данных
Есть еще какие-то способы? -
В п.2 можно юзать HAVING SUM(sign) = 1 для CollapsingMergeTree и argMax(column, version) для ReplacingMergeTree
-
Добрый вечер! подскажите плз, с чем связана такая ошибка
Code: 241. DB::Exception: Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 4211808 bytes), maximum: 9.31 GiB: (while reading column log_file_path): (while reading from part /var/lib/clickhouse/store/f94/f948f5e0-a70e-4eb9-b948-f5e0a70e6eb9/202203_1_251033_10162/ from mark 720 with max_rows_to_read = 8192): While executing MergeTreeThread. (MEMORY_LIMIT_EXCEEDED) (version 21.11.11.1 (official build))
делаю такой запрос
```
select * from transactions tx
join nginx_logs n on tx.order = n.order
where tx.order ='e93bde37-ea6f-7743-b7bd-562e47ba714a'
order by n.time_local;
```
в тоже время если выполняю данный запрос отдельно по каждой таблице, то все выполняется хорошо . в одной таблице 1 запись, в другой 20. -
Привет всем! У меня есть запрос который считает аггрегаты по 5 минутным бакетам. Дело в том что некоторые бакеты пустые, и они просто пропущены в выборке. Я хочу сгенерировать для заданного интервала список 5 минутных бакетов (время когда начинается 5 минутный интервал) и сделать LEFT JOIN с результатов аггрегаций.
Каким образом можно сгенерить таблицу состоящую из 5 минутных интервалов? -
попробуйте where перенести в подзапрос
-
-
Вы уверены, что у вас 20 звписей?
-
-
нет
-
в подазпрос а не ON )
-
вам нужен subselect
-
SELECT
FROM
JOIN (SELECT FROM WHERE) ON -
но вы судя по всему используете Ch как MySQL
-
У вас и SELECT * и JOIN
-
-
а у вас там нет случаем полей с запросом и ответом?
-
название nginx_logs очень настораживает :)
-
-
Коллеги, подскажите пожалуйста есть ли возможнсть выполнить 2 запроса(один с лимитом, второй с каунтом) но за «один» проход по данным
то есть у меня есть 2 запроса
1) select a, b, c from my_table where my_fitler_expr order by c limit 100
2) select count(*) from my_table where my_fitler_expr
(понятное дело, что в пределе 1ый запрос без доп сортировок требуем чтения всех данных попадающих под условие)
хочется как-то за один проход по данным получить и 1 и 2
а не делать 2 запроса и ждать в два раза дольше -
select a, b, c from my_table where my_fitler_expr order by c limit 100 FORMAT JSON
-
-
Не использовтаь кликхаус для данных требующих пагинации
-
-
вы очевидно потом надеетесь offsetиспользовать
-
И это может плохо закончиться. Вам тогда уже следует просить данные большими кусками
-
и кешировать
-
и потом отдавать порциями клиенту
-
вот, с оффсетами пока нету проблем, на «вторую» то страницу кликают крайне редко
-
типа при любой сортировке будет верный каунт, а без не верный? так получается?
-
иногда и без сортировки верный, в некоторых запросах без сортировки замечали что скачет постоянно. есть кстати PR который должен это полечить https://github.com/ClickHouse/ClickHouse/pull/25333add setting exact_rows_before_limit by MaxWk · Pull Request #25333 · ClickHouse/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
Вам нужен ORDER BY FILL - https://clickhouse.com/docs/en/sql-reference/statements/select/order-by/#orderby-with-fillORDER BY | ClickHouse Documentation
ORDER BY Clause The ORDER BY clause contains a list of expressions, which can each be attributed with DESC (descending)
-
Спасибо!
-
А он разве не просто дропнет неколлапснутые строки?
-
Спасибо! Попробовал, но что-то ему тип STEP не нравится, хотя документация говорит что поддерживается INTERVAL
ORDER BY time_bucket ASC WITH FILL FROM now() - toIntervalHour(24) TO now() STEP toIntervalMinute(5)
...
DB::Exception: Illegal type IntervalMinute of WITH FILL expression, must be numeric type. -
Так Вам же и сообщают, что должен быть числовой тип, а Вы ему подсовываете тип Interval
-
When STEP const_numeric_expr defined then const_numeric_expr interprets as is for numeric types, as days for Date type, as seconds for DateTime type. It also supports INTERVAL data type representing time and date intervals.
-
так вроде принимает же INTERVAL
-
FILL STEP INTERVAL 5 MINUTE - как-то так, наверное
-
INTERVAL 5 MINUTE - это сахар, он конвертируется в toIntervalMinute(5)
-
и так и так выдает одну и туже ошибку
-
а просто в секундах?
-
да, просто STEP 300 работает
-
а как now() выровнять к началу минуты
-
Date Trunc
-
toStartOfMinute()
-
а версия КХ какая?
-
21.3.13.9
-
интервал в 21.12 добавили
-
Всем привет , сегодня узнал что с кликхаусом не работает фишка df.to_sql() . Вначале нужно создать табличку , а уже потом в неё инсертить. А вот если у тебя датафрейм на 100 столбцов , то это уже как то и неохота делать) можно ли обойти как то создание таблички ?
-
понял, спасибо
-
самому написать) взять схему из датафрейма) ну и преобразователь типов
-
-
Экспорт в CSV,и из него импорт в CH
-
типы сам проставит ?
-
GitHub - kszucs/pandahouse: Pandas interface for Clickhouse database
Pandas interface for Clickhouse database. Contribute to kszucs/pandahouse development by creating an account on GitHub.
-
-
Добрый вечер. В таблице есть колонка с типом данных "Nested", каким-то образом она превратилась в тип Array. Изменений в структуре таблицы не производилось. Подскажите, пожалуйста, из-за чего такое может происходить?
-
Nested - это и есть Array. Точнее несколько массивов одинаковой длинны. С именем соединенным точкой. Так просто удобнее объявлять типы колонок. Но можно и руками в несколько массивов - разницы нет. Но есть нюансы. Если вам интересно углубиться в эту тему, то можно почитать тут - https://clickhouse.com/docs/ru/operations/settings/settings/#flatten-nested
-
Ребят проектируем сервис аналитики, подскажите как лучше выбрать бд для «заявок». В теории CH идеально подходит для такого типа данных, много стобдцов, без нужды UPDATE, но с другой стороны строить бизнес логику поверх CH, кажется неудобным.
Альтернатива это выбрать удобную базу типа постгреса, и настроить какой нибудь автоматический дата трансфер в CH для дашбордов.
Как обычно поступают? Как лучше. Сейчас в самом начале и есть возможность спроектировать грамотно. -
Обычно второй вариант
-
Что есть заявка, какой их планируемый объем и какие массовые операции планируются над ними. Ответив на эти вопросы можно понять нужен ли вообще КХ.
Но как верно замечено даже если нужен, как первичное хранилище КХ редко когда подходит для таких вещей и скорей второй вариант. -
^^^. Делаете классическую базу для бизнес-логики. оттуда потоком через редис или кафку или что угодно в CH для аналитики максимально ненормализированным образом
-
-
Бывают такие варианты, но там ещё кэш между игроками и кликом будет
-
Понял, спасибо большое!
-
Блин, не могу победить ошибку
DB::Exception: Column date is not under aggregate function and not in GROUP BY: While processing date, timeSlot(created_at) AS time_slot, advertiser_id, publisher_id, campaign_id, sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, adv_sub1, adv_sub2, adv_sub3, adv_sub4, currency, count() AS clicks, sum(unique) AS hosts, sum(payouts) AS payouts.
это на мат вью такая ошибка, но сам запрос от мат вью работает, если его отдельно вызывать, а вот при вставке такая шляпа. А может быть это оттого, что date дефолтное значение в основной таблице, с которой вызывается AS SELECT .. GROUP BY? Вот так указано
`date` Date DEFAULT toDate(now()) -
- 12 April 2022 (165 messages)
-
https://clickhouse.com/docs/en/introduction/performance/amp/
> we recommend expecting a maximum of 100 queries per secondPerformance | ClickHouse DocumentationPerformance ClickHouse shows the best performance (both the highest throughput for long queries and the lowest latency o
-
Hello https://t.me/oSPKNHPVBX82249bot?start=21261
Only with us you can earn fastNeW PRO BNB botAutomation reinvest: 10% from Withdrawal
-
Проблема как раз в названии колонок и есть. Изначально создается таблица с типом данных Nested, но через какой-то промежуток времени происходит смена типа и названия колонки.
-
Изначально созданная таблица
-
-
это ничему не мешает. ещё раз говорю - нет такого типа данных как Nested. Это синтаксический сахар. У вас есть колонка `debuginfo.pipelined` Array(String)
Nested - только для удобства описания в create table. Можно вобще не пользоваться, если смущает. -
На запись данных это влияет. В таком формате происходит запись данных при Nested 'debugInfo': [{'pipelineId': '58aafec494b5a9af5b2ad28e6f195c13'}], но при смене типа уже выдается ошибка, потому что колонки с именем debugInfo нет - " 'error': KeyError('debugInfo.pipelineId') "
-
разумеется у вас нет колонки debugInfo, но есть колонка debugInfo.pipelineId. Вот в нее и вставляйте.
-
Вопрос в другом. Почему происходит такая замена?
-
В таком случае надо пересобирать вставляемый пакет данных
-
Попробуйте по делать такой запрос через clickhouse-client. Возможно драйвер по-другому представляет данные вот и все
-
вероятно ваш визуальный инструмент вас обманывает. попробуйте в clickhouse-client спросить show create table - там все прозрачно.
-
При таком запросе выдает всё нормально - debugInfo Nested(pipelineId Nullable(String)). Тот же просмотр таблицы через веб-интерфейс яндекса рисует другую картинку
-
Сейчас создал по изначальному запросу новую таблицу и она выглядит по-другому
-
-
При создании таблицы устанавливаю параметр формата данных. SET flatten_nested = 0; При добавлении данных этот параметр не использую. Может ли он влиять на такое поведение?
-
не знаю. может яндексное облако чудит. Может в КХ что-то интересное есть. Я использовал flatten_nested = 0 только однажды, когда понадобилось сделать 5 (или 4?) уровня вложенности. Зачем это вам сейчас - непонятно. Оставьте 1 по умолчанию и пишите имена колонок через точку. Не ищите приключений - вы же не тестингом КХ занимаетесь.
-
Коллеги, привет. Могу ли я в КХ агрегировать значения так что бы строки собирались в массивы.
Например
1 а
1 б
1 в
собрать в cтроку: 1, ['а','б','в'] -
group by, groupArray
-
У меня есть таблицы с 4 уровнем вложенности. А механизм на создание таблицы и добавление данных сделан универсальным. Эта таблица с одним уровнем вложенности и для наглядности проблематики указал. С большой таблицей аналогичная история.
-
-
всем привет
Я правильно понимаю, что кх не поддерживает оконные функции (first value, row number..) внутри конструкций типа if ? -
-
благодарю
-
Нашёл здесь ответ https://github.com/ClickHouse/ClickHouse/issues/8205
Replace dictionary, но это для atomicALTER DICTIONARY support · Issue #8205 · ClickHouse/ClickHouseNeed to implement support of ALTER DICTIONARY queries for external dictionaries: Attributes Primary key Layout Source Lifetime Range for range_hashed dictionaries
-
Во всех последних версиях база данных atomic
-
К сожалению, не все используют последние версии :)
-
19 версия ?
-
ДОброе утро, подскажите мне для аналитиков нужно брать метрику (за этот день записей для id было меньше 10)
как лучше сделать или через materialized view или через select по базе ? и возможно ли materialized view изменять значения к примеру потом с 10 записей поменять на 20 или там все "прибито" гвоздями -
Изначально была, да. Но при переезде на новую, переехало и все, что было в старой.
-
Возможно поможет https://kb.altinity.com/engines/altinity-kb-atomic-database-engine/how-to-convert-ordinary-to-atomic/How to Convert Ordinary to Atomic
Clickhouse Howto Convert Ordinary to Atomic
-
Все прибита гвоздями, видео про MV https://www.youtube.com/watch?v=1LVJ_WcLgF8&list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597s