- 01 April 2023 (98 messages)
-
-
Вопрос максимально странный, а как можно выгружать строки не эффективно ?
-
по сравнению с монго или постгрес
-
как я понял кликхаус хорошо суммирует по нескольким столбцам, выгружать всю строку это нетипичная для него нагрузка
-
Дак строка это тип данных String
-
А то что вы спрашиваете называется "выгружать все столбцы"
-
Теряется смысл кликхауса:) используйте PG :)
-
Row - строка, column - столбец. Просто контекст разный
-
На самой первой страничке показано преимущество кликхауса
-
Если выбрать абсолютно все столбцы, то выйдет то же самое, что и строка
-
там это преимущество если брать 3 столбца из 100, а мне нужно 100 из 100
-
Поэтому и говорю, всё преимущество растеряешь
-
ClickHouse was initially built as a prototype to do just a single task well: to filter and aggregate data as fast as possible. , в вашей задаче что-то про агрегацию есть?
-
будет агрегация(тут вопросов нет к кликхаусу), но есть и отчеты которые требуют почти все поля
-
отчет на 100 колонок? это в человеческих силах проанализировать глазами ?)
-
и скоро к 1кк строчек в экселе приблизимся) сомневаюсь что, кто-то их просматривает
-
Ну работать-то будет, просто может потребовать памяти и цпу больше чем вы ожидаете.
И за частую приходится писать странные подзапросы
select * from ...
where pk in (select pk from ... where ...order by ... limit)
and ...
order by ...
limit
Чтобы выбирать * по первичному ключу и уже после limit -
вроде индексы есть по любому столбцу? например: если нужно отфильтровать по 2 и 5 столбу, то необязательно использовать первичный индекс
-
Нет. И нет.
-
Delayed reading of columns · Issue #45868 · ClickHouse/ClickHouse
Given this query: SELECT id, view_count, like_count, dislike_count, title FROM youtube ORDER BY view_count DESC LIMIT 100 The column title is very large, and the query takes a long time: 100 rows i...
-
Всем привет! Храню в таблице векторы из 128 float. Стоит задача быстро найти N ближайших по L1Distance соседей. Смотрел в сторону ANNIndexes “Approximate Nearest Neighbor Search Indexes [experimental]” но вроде как пока поддерживается только cosineDistance и только с annoy. Получается эту задачу нужно решать вне Clickhouse? Или все-таки можно прикрутить ANNIndexes с L1Distance?
-
-
чем меньше байт читать тем быстрее запрос, десерилиазация массива строк вообще еще та задача, надо прочитать все данные и запроцессить в памяти целиком
-
добрый день!
не подскажите изза чего при попытке обновить КХ вываливается ошибка
Err:5 https://packages.clickhouse.com/deb stable InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3 -
А есть где нить инструкция как сконфигурировать кластер? Нужно 3 шарда без реплик
-
https://altinity.com/blog/how-to-set-up-a-clickhouse-cluster-with-zookeeper
вот тут есть но кажется это не совсем тоHow to Set Up a ClickHouse Cluster with ZookeeperLearn how to create a ClickHouse cluster with a few nodes using Zookeeper and Altinity Stable Build. No need for Kubernetes or Docker.
-
там шард 1 и 3 реплики
-
Ну так тебе зукипер не нужен
-
Только в конфигах как я помню прописать кластер
-
И дистрибьютер таблицу создать
-
Добрый день!
Консольный клиент то показывает затраченный объем памяти и загрузку процессора, то не.
Можно задать, чтобы всегда показывал? -
Всем привет. только подключился к клику и возможно вопрос из faq, но не нашел. ситуация: есть клиент, который пишет в кафку всего 3 поля для последующего сохранения в базе. сообщение выглядит так: std::string json = fmt::format("{{\"id\":{},\"ts\":{},\"value\":{}}}", m_kafka_id, p_time, p_value); есть возможность обойти сериализацию в json т.к. по профайлеру это самое горячее место. (платформа x86) а данных очень много
-
а при чем тут КХ ? и тем более faq ?
-
еще вопрос, можно ли изменить движок БД
сейчас
ENGINE = Ordinary -
у клика есть какой-то адаптер, который забирает данные из кафки и пишет в таблицу
-
можно, можно вручную,
https://kb.altinity.com/engines/altinity-kb-atomic-database-engine/how-to-convert-ordinary-to-atomic/
и КХ умеет конвертировать при старте
Implemented automatic conversion of database engine from Ordinary to Atomic. Create empty convert_ordinary_to_atomic file in flags directory and all Ordinary databases will be converted automatically on next server start. Resolves [#39546](https://github.com/ClickHouse/ClickHouse/issues/39546). [#39933](https://github.com/ClickHouse/ClickHouse/pull/39933) ([Alexander Tokmakov](https://github.com/tavplubix))How to Convert Ordinary to AtomicClickhouse Howto Convert Ordinary to Atomic
-
А в чём смысл полей? id можно использовать в качестве ключа, в качестве ts взять таймстамп самого сообщения в кафке, а в качестве значения отправлять собственно само value
-
спасибо!
-
а при чем тут тогда запись в кафку? и сериализация?
-
ок. вопрос - клик умеет забирать данные из кафки в другом формате (отличном от json) ?
-
-
вручную выглядит муторным, таблиц много )
-
Добрый день. Подскажите пожалуйста как правильно мигрировать данные из одного кластера в другой (Новый). Кластер состоит из одного шарда и трёх реплик в нём две базы данных.
Возможность остановить кластер имеется.
Версии КК совпадают, единственное различие в предыдущем кластере папка с хранением данных была дефолтная (/var/lib/clickhouse), на новом кластере примонтировал отдельный раздел (/data/clickhouse), погуглил говорят можно просто перенести данные, но смущают там симлинки на таблицы, ещё clickhouse-copier в документации, не знаю какой путь выбрать, первый раз переношу.
Заранее спасибо. -
нет. Ресурсы затраченные не на чтение и работу с MergeTree, не показываются (тяжело учесть ресурсы потраченные на анализ первичного или skip индекса).
-
тут как раз на MergeTree
-
спасибо. в случае клиента на С++ какой самый дешевый вариант бинарного формата порекомендуете?
-
ну т.е. скрипт SQL сгенерить с помощью select from tables это проблема. ОК.
Create empty convert_ordinary_to_atomic file in flags directory and all Ordinary databases will be converted automatically on next server start. -
Rowbinary
-
«SQL сгенерить» сори, туплю ))
-
"{\"id\":484448,\"ts\":1665847032604000,\"value\":0}" сообщение выглядит так
-
спасибо ушел в гугл )
-
Мы использовали clickhouse-copier, но в нашем случае его использование было продиктовано необходимостью решарда: расширение с 2-х до 3-х шародов.
-
> fmt::format("{{\"id\":{},\"ts\":{},\"value\":{}}}"
>это самое горячее место
вангую проблема вообще не в этом а где-нибудь в сериализации "ts\":{} -
почему ? ts - это int_64 template<typename T> std::string get_json(const T& p_value, int64_t p_time)
-
запускаем запрос
1. строится план
2. идет анализ partition
3. идет анализ pk
4. идет анализ skip
5. загружаем марки
>>> тут начинается показ CPU/RAM и УЧЕТ расходованных ресурсов <<<
6. процессится MergeTree блоки таблицы -
нужен бинарный проброс в клик. использовать нативный api клика нельзя - все должно идти через кафку
-
А в чем различия дистрибутивов Clickhouse от Яндекса и Altinity?
-
<yandex>
<macros>
<cluster>altinitydemo</cluster>
<shard>1</shard>
<replica>altinity1.test</replica>
</macros>
</yandex>
типа такого везже и все?
<yandex>
<clickhouse_remote_servers>
<cluster_1>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-01</host>
<port>9000</port>
</replica>
</shard> -
для профайлинга уберите format и просто обращайтесь к нужным переменным, таким образом, чтобы компайлер не смог заоптимизировать что вы их не используете
-
ИМХО не стоит смотреть в сторону ноды, насколько я знаю, там единственная приличная либа kafka.js, с которой, стоит вырасти нагрузке, можно поиметь массу проблем. Баги в ней есть, и они уже давно не фиксятся.
-
если че, макросы используются только движком Replicated.
-
<internal_replication>true</internal_replication> ==== движок Replicated
-
у Альтинити не православный, Алексей Миловидов считает что он ересь и мерзость.
-
еще раз спасибо за ваши конструктивные ответы! Все получилось!
-
понял, спс ) Мне для тестов репликейтед не нужен
-
Каким путём лучше пойти ? Просто скопировать файлы из папки store в другую папку store сделав аналогичные симлинки, но уже в другой директории ?
-
Парты в detached по причине clone разумно дропать? Читал:
parts are renamed to ‘cloned’ if ClickHouse have had some parts on local disk while repairing lost replica so already existed parts being renamed and put in detached directory.
Складывается ощущение, что потери данных быть не должно. -
Главное чтобы не форматом, как с json
-
я тупо rsync-м копирую (несколько раз подтягивая diff ), не останавливая источник
или КХ репликацией, если есть возможность.
clickhouse-copier убог и крив -
-
это форк или что? Какие например есть плюсы дистрибутива от Altinity?
-
Учитывая что директория источника и назначения разные останется только пересоздать симлинки на те же папки store в новой директории, верно ?
-
Не могу сказать за убогость, у нас он отработал прекрасно, правда мы это обернули в ансибл, чтобы руками команды/конфиги не генерить
-
-
по сути: вы почуствуете свою элитарность, вы не такой как все, на этом все (Я если че по должности starship captain в Альтинити)
-
зачем? вы всю папку clickhouse rsync-те, вместе со store и сохранением структуры симлинков (rsync умеет)
-
понятно, спасибо! )
-
там есть бекпорты фиксов, которые нужны клиентам Альтинити и Альтинити поддерживает дистрибутивы дольше (и бекпортит фиксы в очень старые релизы -- для клиентов)
-
На исходном сервере: /var/lib/clickhouse/store/
На новом: /data/clickhouse/store
Вот почему уточнил, симлинк же будет вести на старую директорию где данных нет. -
Привет всем!
Подскажите, есть сейчас какие-то бест практики по повышению предсказуемости времени выполнения запросов (кроме постоянной оптимизации и выделения части данных в отдельный шард, это мы и так делаем)?
Сталкиваемся регулярно со случаями, когда в целом запросы на репликах выполняются быстро, но если не повезло, и на одну из реплик шарда (в нашем случае их 5) прилетело случайно несколько тяжелых запросов и загрузило процессор (именно процессор, собрали статистику причин ожиданий по логам) - запросы на ней начинают тормозить, иногда значительно: запрос с временем выполнения менее 1 сек может и 30 сек скушать. Таких тормозных запросов - 0,01% от общего количества, но даже это портит жизнь.
Всё что могли придумать - затюнили, мержей в базе мало (пишем много но редко), версия клика - свежая (впрочем мы на разных смотрели).
Может есть какая-то интелектуальная балансировка (смотрю сейчас в сторону chproxy), или полезные параметры конфига, которые я мог пропустить? :) -
это не знаю, может rsync и умеет переделывать симлинки, там 100500 ключей.
если таблиц немного, то freeze , rsync, attach part ... -
Спасибо коллеги. Буду пробовать. Таблиц всего 5.
-
да можно смело удалять
-
А можно сделать кластер следующей конфигурации?
три хоста - три шарда и чтобы эти шарды еще и были репликами друг друга.
Такой сетап для прода норм? -
это странно с load_balacing=random такого статистически быть не должно
плюс сейчас в КХ включен use_hedged_requests (почитайте как оно работает) и запрос должен улететь на другую реплику.
но в принципе можно сделать load_balancing таким образом чтобы запрос выполнялся только на СВОИХ репликах, и балансировать инициаторами -
можно, это выстрел в оба своих колена, все кто так сделал, пожалели вспоследствии и зареклись так делать.
-
use_hedged_requests тут я думаю ни при чём - такое поведение мы ловим, самостоятельно балансируя запросы между репликами (round robin), без использования DDL движка. Для многих запросов мы заранее точно знаем, в какой шард надо сходить.
-
что такое "DDL движка" , DDL это data definition language -- create/alter
я про hedged_requests про наоборот, если distributed запрос hedged, и попал на реплику которая не отвечает, то он должен захеджироваться и перейти на другую реплику в этом шарде -
Я неверно выразился. Мы не используем distributed запросы, а сразу идем на одну из реплик нужного шарда. Похоже, стоит попробовать.
-
ну так в своем балансере просто раз в секунду собирайте стату насколько сервер загружен и ходите в пустые сервера.
стата - просто из system.processes , sum(elapsed) , sum(total_rows_approx), sum(ProfileEvents['UserTimeMicroseconds']) -- выберете по вкусу -
-
-
А конвертация через convert_ordinary_to_atomic на репликацию как-то может повлиять если одна реплика ещё ordinary а вторая уже atomic стала?
-
Жесть ... А картинки будет кликхаус генерировать 😏
-
Нет. Работает в любых сочетаниях. Изначальная идея была что конвертировать не надо и просто естественным путем со временем все новые реплики станут с atomic
-
Если ClickHouse начнёт генерировать картинки, то MJ закроется за ненадобностью.
-
И еду привозить
-
Самая главная киллер-фича любой СУБД.
- 02 April 2023 (45 messages)
-
В каких случаях в пути зноды таблицы добавляется юникс таймстемп?
Пример:
/clickhouse/tables/{shard}/db_name/tabl_name_1659037434_replication
Это регулируется каким-то параметром в конфиге или происходит для случая, когда путь зноды создаваемой таблицы дублирует уже существующий? -
само это не делается, это у вас где-то в коде
-
Добрый день.
Подскажите куда копать?
Имеется таблица 10 столбцов.
В одной из партиций скопилось более 6к партов, общим объемом 15гб
От такого количества серверу не очень хорошо.
Optimize никак не помогает. Лог в режиме дебаг - чисто.
Как заставить кх смержить парты? -
Denny [Altinity] in ClickHouse не тормозит
optimize table .... partition id '202302' settings optimize_throw_if_noop=1
-
Можно ли безопасно пересоздавать materialized view над kafka таблицей без пропуска или дублей данных?
-
Без шансов пропуска или дублей, кажется, вообще ничего нельзя сделать с движком кафки)
-
Ищите по истории чата MODIFY QUERY - тема уже обсуждалась несколько раз.
-
Можно. Помимо MODIFY QUERY никто вам не мешает сделать промежуточную Null таблицу и останавливать консьюмера (Kafka Engine) через DROP/DETACH
-
Есть ли рецепт заставить ReplacingMergeTree оставлять только самые старые записи? Сам ничего лучше не придумал кроме как завести колонку, значение которой уменьшается со временем, например version UInt32 materialized age('second', nowInBlock(), fromUnixTimestamp(4294967295))
-
timestamp * -1 в качестве ver
-
Мб проще проверять дубликаты при вставке?
-
Всем привет.
После прогона alter table на прочистуку колонок (через col=''), на реплики одного из шардов траффик улетел в потолок и в очереди system.replication_queue
более 300 записей (на реплике другого шарда все чисто)
в postpone_reason сообщения
Not executing log entry queue-0001179875 of type MUTATE_PART for part 20221212-200_6150_6850_4_39137 because source parts size (37.64 GiB) is greater than the current maximum (0.00 B).
в system.mutation все чисто, мутация на шардах завершилась.
Свободное место на севрере есть около 6TB
В какую сторону копать, чтобы прошли эти обновления? -
-
Коллеги, добрый день. Изучаю функциональность async_insert, не нашел информации о том, что будет в случае падения сервера. Данные из «буфера» потеряются?
-
Да. Но можно передать параметр при котором ack будет только поле того как батч флашнется в таблицу
-
-
Так этот параметр по дефолту стоит
-
Нет, не потеряются
-
А если я делаю с флагом чтоб не ожидал ответа? Всё равно все окей будет?
-
Оно на диск записывает получается?
-
Тогда потеряются.
Но в этом случае они потеряются даже если там опечатка, типа пропущенной кавычки, и вы даже не сможете этого узнать. -
Получается в такой функциональности нету смысла? 🥲
-
Добрый день! Просто уточнить: две мат вью смогут лить в одну таблицу без подводных коллизий?
-
Могут. И на одну и ту же таблицу можно несколько мат вьюх натравить.
-
Я это и имел ввиду. Одна вьюха льет покупки другая возвраты.
-
То что это допустимо - знаю. Вопрос скорее в том не вылезет ли сюрприз через месяц?
-
Я к тому, что можно сделать и схему Таблица Т1 -> Мат вьюха МВ1 -> Таблица Т3, Таблица Т2 -> Мат вьюха МВ2 -> Таблица Т3 и схему Таблица Т1 -> Мат вьюха МВ2 -> Таблица Т2, Таблица Т1 -> Мат вьюха МВ3 -> Таблица Т3.
Сюрпризы разве что как с обычными вставками, т.е. если будет очень много мелких вставок. -
Спасибо!
-
Мне просто t1 - mv - t2 + t3 - mv - t2
Все встречаются в t2 -
Коллеги, если можно, вопрос. Мне надо построить гистограмму по данным из таблицы. Понятно, что можно нагенерить скриптом массу SQL с пределами от и до и запустить их. А можно как-то поизящее, сделать цикл внутри самого SQL?
-
так просто еще один groupby
select count() users, y, weight, bar(users, 1,100, 50)
from (
SELECT user_id, toStartOfYear(toDateTime(created)) y, count(*) c,
multiIf( c > 500, 'w500+',
c > 200, 'w200-500',
c > 100, 'w100-200',
c > 50, 'w100-50',
'w0-50') weight
FROM ( SELECT
number AS user_id,
today() AS created,
arrayJoin(range(rand() % 1000))
FROM numbers(100) )
group by user_id, y
order by c
) group by y, weight
order by y, weight
┌─users─┬──────────y─┬─weight───┬─bar(count(), 1, 100, 50)──┐
│ 6 │ 2023-01-01 │ w0-50 │ ██▌ │
│ 6 │ 2023-01-01 │ w100-200 │ ██▌ │
│ 4 │ 2023-01-01 │ w100-50 │ █▌ │
│ 34 │ 2023-01-01 │ w200-500 │ ████████████████▋ │
│ 50 │ 2023-01-01 │ w500+ │ ████████████████████████▋ │
└───────┴────────────┴──────────┴───────────────────────────┘ -
Но здесь пределы-то заданы в самом тексте. А если их много? Сотня? Две?
-
select count() users, y, bucket, bar(users, 1,100, 50)
from (
SELECT user_id, toStartOfYear(toDateTime(created)) y, count(*) c,
intDiv(c,100) bucket
FROM ( SELECT
number AS user_id,
today() AS created,
arrayJoin(range(rand() % 1000))
FROM numbers(100) )
group by user_id, y
order by c
) group by y, bucket
order by y, bucket
┌─users─┬──────────y─┬─bucket─┬─bar(count(), 1, 100, 50)─┐
│ 11 │ 2023-01-01 │ 0 │ █████ │
│ 8 │ 2023-01-01 │ 1 │ ███▌ │
│ 17 │ 2023-01-01 │ 2 │ ████████ │
│ 18 │ 2023-01-01 │ 3 │ ████████▌ │
│ 11 │ 2023-01-01 │ 4 │ █████ │
│ 10 │ 2023-01-01 │ 5 │ ████▌ │
│ 6 │ 2023-01-01 │ 6 │ ██▌ │
│ 8 │ 2023-01-01 │ 7 │ ███▌ │
│ 6 │ 2023-01-01 │ 8 │ ██▌ │
│ 5 │ 2023-01-01 │ 9 │ ██ │
└───────┴────────────┴────────┴──────────────────────────┘ -
А, оно. Ушел грызть intDiv. Спасибо!!!!!
-
Доброго времени суток! Сегодня обнаружил что в таблице с движком ReplicatedReplacingMergeTree запустили мутации на удаление записей, разом, 15 штук. Они до сих пор выполняются. Хотел бы узнать насколько это опасно и безопасно ли будет убить мутацию?
-
-
кстати есть еще https://clickhouse.com/docs/ru/sql-reference/aggregate-functions/parametric-functions#histogramПараметрические агрегатные функции | ClickHouse Docs
aggregatefunctionsparametric}
-
То есть проблема с реплицировнием может быть связана, спасибо!
-
вот такой запрос возвращает что-нибудь?
select 'delete '||part_zoo
from (
select zoo.p_path as part_zoo, zoo.ctime, zoo.mtime, disk.p_path as part_disk
from
(
select concat(path,'/',name) as p_path, ctime, mtime
from system.zookeeper where path in (select concat(replica_path,'/parts') from system.replicas)
) zoo
left join
(
select concat(replica_path,'/parts/',name) as p_path
from system.parts inner join system.replicas using (database, table)
) disk on zoo.p_path = disk.p_path
where part_disk='' and zoo.mtime <= now() - interval 1 day
order by part_zoo) format TSVRaw;
https://kb.altinity.com/altinity-kb-useful-queries/parts-consistency/#compare-the-list-of-parts-in-zookeeper-with-the-list-of-parts-on-disk -
SQL Error [159] [07000]: connect timed out, server ClickHouseNode
-
Прошу прощения проблемы с подключением были, но запрос ничего не возвращает
-
подскажите, почему матвью не есть null as field
Data type Nullable(Nothing) cannot be used in tables -
Кх-зу тип надо знать. У Null тип неизвестен. Нужно кастить. Cast(Null as Nullable(String)) например
-
ок. спасибо!
-
думал достаточно того что он задан в целевой таблице
- 03 April 2023 (145 messages)
-
не очень понимаю из доки. какой параметр в кафка енжин может сказать "читай почаще и мелкими батчами"? главное почаще
-
kafka_poll_max_batch_size
-
?
-
хотя вероятно нет, как сказать "вставлять данные почаще" ?
-
-
Вам для креш-теста? Сломать КХ собираетесь? Но это слишком простой вариант. Если надо для дела, то лучше не уменьшать, а увеличивать.
kafka_flush_interval_ms=300000,
kafka_max_block_size=1048576, -
мне нужно уменьшить вот такие прямые линии
-
-
т.е. оно рисует их несколько секунда прямой, а потом появляются данные
-
И что в этом плохого?
-
секунд 7-10 могут данные не обновляться
-
И что? У меня как вы видите стоит аж 5 минут. Вы куда-то спешите? Тут все-таки OLAP система, не OLTP.
-
к сожалению да. спешим. ну т.е. ответ "не тот инструмент" понятен, но всё-таки уменьшить возможно или нет?
-
Уменьшить то несложно, сеттинги выше, но что потом? Не боитесь получить too many parts? инсерты остановятся и вы будете мучительно решать проблемы мерджей.
Может попробуете что-то более адекватное задаче? Если в рамках КХ, то я бы взглянул на LIVE VIEW or WINDOW VIEW, хоть они и экспериментальные. -
Данных не так уж много. За советы как всегда спасибо
-
Всем привет! Подскажите, пожалуйста, как починить. Не могу подключиться к клиенту через консоль, и бобром тоже не подключается.
clickhouse-client -u default --password
ClickHouse client version 23.2.1.92 (official build).
Password for user (default):
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000). (NETWORK_ERROR) -
Всем привет. Подскажите куда посмотреть. clickhouse в какой-то момент времени не принимает новые коннекты. Это длится буквально несколько секунд потом все нормализуется. Возможно есть параметр который отвечает за кол-во подключений и было бы хорошо наблюдать за кол-вом текущих соединений, может есть такой показатель.
-
clickhouse-jdbc-bridge is not running. Please, start it manually
Дык вот же -
Всем привет. Создал кастомные метрики, с локалки все ок. А с прометеуса [root@tadm-prom0 ~]# curl adm-test-ch1:8123/metrics
Code: 516. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.8.5.29)
Как сделать, что бы по данному пути не просил аутентификацию для определенных ip? -
Что-то не соображу, как он запускается.
clickhouse-jdbc-bridge: command not found -
Здравствуйте, может и тупая ошибка но не получается решить
Code: 27. DB::ParsingException: Cannot parse input: expected '|' at end of stream.: Buffer has gone, cannot extract information about what has been parsed.: While executing ParallelParsingBlockInputFormat: data for INSERT was parsed from query: (in query: INSERT INTO ser.mv_ul FORMAT CSV HEADER): (at row 1)
. (CANNOT_PARSE_INPUT_ASSERTION_FAILED)
Можете подсказать причину или же решения -
-
head -n 2 ser/mv_ul.csv
-
Возможно, дело не в jdbc-bridge.
У меня его и не было. При перезагрузке в сообщениях говорится, что config.xml не найден, хотя он точно есть.
Processing configuration file 'config.xml'.
There is no file 'config.xml', will use embedded config.
Вот, что выдаётся при перезагрузке КХ: https://pastebin.com/KpvqEqLA -
Скинуть первые 2строки?
-
-
а можно всё-таки поинтересоваться, kafka_flush_interval_ms - это понятно, но при этом возникает вопрос, а когда всё-таки данные окажутся в mergetree table?
-
Kafka Engine сформирует блок и отдаст его MV, MV отработает его синхронно и сделает парт. Достаточно быстро. Если Replicated, то на другие узлы кластера уедет чуть позже.
-
-
Добрый день!
в доках не нашел и лично пока не словил коллизий при использовании CREATE OR REPLACE TABLE
Может вообще быть момент, когда запрос пришел, а таблицы нет? -
Продолжаю попытки запустить КХ. Дал права rrr на config.xml. Теперь при перезагрузке КХ читает уже читает config.xml. Но теперь жалуется на то, что рут не является собственником данных:
<Error> Application: Code: 430. DB::Exception: Effective user of the process (root) does not match the owner of the data (clickhouse). Run under 'sudo -u clickhouse'. (MISMATCHING_USERS_FOR_PROCESS_AND_DATA), Stack trace (when copying this message, always include the lines below):
0. ./build_docker/../src/Common/Exception.cpp:91: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0xddb0855 in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, int, bool) @ 0x8bcbf4d in /usr/bin/clickhouse
2. ./build_docker/../programs/server/Server.cpp:949: DB::Server::main(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>> const&) @ 0xde3bda8 in /usr/bin/clickhouse
3. ./build_docker/../contrib/poco/Util/src/Application.cpp:0: Poco::Util::Application::run() @ 0x17554602 in /usr/bin/clickhouse
4. ./build_docker/../programs/server/Server.cpp:475: DB::Server::run() @ 0xde32bbc in /usr/bin/clickhouse
5. ./build_docker/../contrib/poco/Util/src/ServerApplication.cpp:612: Poco::Util::ServerApplication::run(int, char**) @ 0x1756895a in /usr/bin/clickhouse
6. ./build_docker/../programs/server/Server.cpp:0: mainEntryClickHouseServer(int, char**) @ 0xde2f5e6 in /usr/bin/clickhouse
7. ./build_docker/../programs/main.cpp:0: main @ 0x88369b3 in /usr/bin/clickhouse
8. __libc_start_main @ 0x7fdc14773083 in ?
9. _start @ 0x7e9f96e in /usr/bin/clickhouse -
И ещё вопрос: потеряются ли данные, если переустановить кликхаус?
-
Все привет. Кто-нибудь сталкивался, что после обновления ch кол-во транзакций до zk выросло в несколько раз? 22.6.3.35 -> 22.12.3.5
-
-
извиняюсь за глупый вопрос, но что такое транзакции в терминах CH?
-
сори не дописал, поправил, транзакции до zk имел ввиду
-
Привет. Словили такое при обновлении. В итоге победить не смогли, откатились на 22.9. В этой версии нет тех изменений что приводят к такому поведению.
Объяснение есть тут: https://github.com/ClickHouse/ClickHouse/issues/43647
Если есть способ обновиться до более свежей версии и не получить вышеописанных проблем, буду раз его узнать :)High amount of ZooKeeper requests/CPU Load after upgrade to 22.11.1 from 22.3 · Issue #43647 · ClickHouse/ClickHouseWe are using clickhouse-operator for our clickhouse cluster. We have 5 shards, 2 replicas each. Also we have one raw table and 5 MV (TO) with aggregation. Each table has no more than 10 columns. Af...
-
Добрый день!
Получаю ошибку если оборачиваю оконку anyLast в ifNull
Block structure mismatch in (columns with identical name must have identical structure) stream: different types:
cumulative_cnt UInt64 UInt64(size = 0)
cumulative_cnt Nullable(UInt64) Nullable(size = 0, UInt64(size = 0), UInt8(size = 0)). (AMBIGUOUS_COLUMN_NAME) (version 22.8.15.23 (official build))
Почему так и как победить? -
Приводите все поля явно к одному типу - Nullable(UInt64)
-
аммм,
то есть
anyLast(tsm.cumulative_cnt) over (partition by card_id order by transaction_date_m)
надо обернуть в cast а потому уже в ifNull? -
почему сразу то ifNull не работает?
-
Примерчик бы на fiddle, было бы проще понять, где ошибка )
-
попробую воспроизведется ли
-
Коллеги, привет!
У кого-нибудь есть опыт отправки данных из ClickHouse (в Yandex Cloud) в Kafka (вне облака), с помощью Kafka Engine?
Посмотрел этот туториал и честно говоря, не очень понял, можно ли вообще из облачного КХ лить куда-то в другую сеть?
Так же, можно ли модифицировать сообщения, отправляемые в кафку? (видимо, только добавляя промежуточные представления с логикой)
Если у кого-то есть открытая репа с примером подобного кода, то буду очень благодарен, если поделитесь.
С КХ до этого не работал, пока только въезжаю
Спасибо! -
не воспроизводится
https://fiddle.clickhouse.com/a1baa4de-f538-423b-9991-da1eb3bf935f -
свою версию выберите
-
тоже не воспроизводится
может потому, что в реальности там внутри подзапрос тоже с оконкой но суммой -
В целом должно сработать, но врайтер в кафку у кх паршивый
-
хм, кажется ошибку вызывало то, что результату оконки давал то же имя что использовал для ее построения
-
разнес имена и все работает
-
главное, проблема решена )))
-
Согласен! ✌️
-
Спасибо, будем смотреть, если что отпишусь
-
Всем привет, создал витрину, база храниться в кликхаус. Но сервер кликхаус очень нагруженный. Все нагрузка идет на процессоры. Кто сталкивался с такой проблемой?
-
Судя по тексту, вы не работали с кликом никогда. Смотрите логи, смотрите выполняющиеся запросы (system.processes), мержи (system.merges). Вопрос слишком общий, чтобы дать нормальный ответ.
-
Добрый день. Можете ткнуть, где в коде описан механизмы работы с зукипером, когда клик публикует в ЗК какие парты должны быть реплицированы и после всех процедур удалены из очереди на репликацию в ЗК. Может просто ссыли на сыми .cpp (StorageReplicatedMergeTree оно ?)
Спасибо -
А куда должна ещё идти нагрузка ? На видеокарту
-
Добавлен, их стало в разы меньше
-
Нет, за 2 запроса 16ГБ грузить
-
Clickhouse OLAP MPP Column-storage... Постоянно и везде так пишут ... Разбираетесь что такое MPP :) Тогда вопросы отпадут
-
Ок спасибо
-
Всем привет, ребят пытаюсь реализовать такую задачу:
Вытащить из БД запрос Sentry который измеряет TPM (transaction per minute)
Получилось достать общее количество транзакций
SELECT
COUNT(project_id = 2 AS reg_front),
transaction_name
FROM discover_local
WHERE (project_id = 2) = 1
GROUP BY transaction_name
как теперь сделать значение "per minute"? -
-
а что-то типа добавления в WHERE
AND time >= now() - 1m -
но так чёт не работает
-
-
Не совсем, чтобы это число постоянно обновлялось, в Sentry есть такой параметр, показывает среднее количество транзакций в минуту.
вот мне нужен такой запрос, чтобы его в Grafana добавить -
Сколько у вас таблиц.
select count() from system.replicas
select count() from system.parts -
У нас 3 калстера,
1. system.replicas: 404
system.parts: 227665
2. system.replicas: 340
system.parts: 680134
3. system.replicas: 10482
system.parts: 239945
Сейчас попробовали увеличить merge_selecting_sleep_ms с 50000(уже увеличивали) -> 600000. Выглядит что значительно уменьшилось кол-во транзакций, похоже будем везде кактить -
Еще cleanup_delay_period = 300
-
Да, это тоже уже выставлено у нас
-
10тыс. репликейтид таблиц и 700тыс. партов это неконвенционально
-
select * from system.metrics where metric ilike '%connection%';
-
так порт ведь не 8123
у прома 9363/metrics
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port> -
у вас почему-то КХ начал стартовать от рута вместо пользователя КХ
-
Да, я перезапускал от рута. Это имеет последствия?
-
не должно быть.
Atomic бд и exchange / replace table сделаны специально чтобы пользователь всегда видел таблицу или старую или новую -
спасбо!
-
что значит перезапускал это рута?
конкретно команду -
сlickhouse-server restart
-
Building a DIY Prometheus HTTP Endpoint in ClickHouse
Learn how to set up a Prometheus HTTP endpoint in ClickHouse that can export any metric in any format and mimic the Altinity clickhouse-operator behavior.
-
а какая версия КХ?
-
23.2.1.92
-
basic_auth:
username: 'username'
password: 'password' -
пробовал, пром ругается, хотя курлом все работает
-
завтра уже потыкаюсь, скорее всего дело всего в синтаксисе, благодарю
-
вы же только что показывали что курл выдает ошибку?
можно в общем добавить ip, чтобы и без пароля
cat /etc/clickhouse-server/users.d/user_default.xml
<?xml version="1.0" ?>
<yandex>
<users>
<default>
<networks>
<ip>::1</ip>
<ip>127.0.0.1</ip>
<ip>10.252.247.2</ip>
<ip>10.253.215.3</ip>
</networks>
</default>
</users>
</yandex>
(в смысле пользователь default с пустым паролем и ходит только с определенных ip) -
коллеги подскажите как лучше действовать, если разные запросы по одной и той же таблице используют разные поля для фильтров которые участвуют в ключе order by.делать под каждый запрос таблицу(mergetree) с нужным порядком order by? - много таблиц, есть какой то алгоритм или механизм как действовать.
-
Projections | ClickHouse Docs
Projections store data in a format that optimizes query execution, this feature is useful for:
-
а они на кластер делаются?
-
Смотрел, там максимум что видел было 3 :) не могу пока понять зависит моя проблема от коннектов или еще чего. Очень уж похоже но отловить не получается.
» Query error: Curl error: #7 - Failed to connect to [ip] port [port]: Connection refused
вот такую ошибку получаю, и обычно она появляется когда нагрузка возрастает идет больше келбеков со сторонних сервисов
и вот есть подозрение что не хватает коннектов, хотя там лимит по умолчанию в 4000 чет не верится что превышаем.
может еще что-то давать отлуп соединению? -
netstat -ant|grep 8123
смотрите в этот момент -
спасибо помониторю
-
Если есть желание, можно upvote: https://news.ycombinator.com/shownew - тема про NoiSQL
-
привет всем.
как подсказать file function как запакован файл, если у него неправильное расширение? есть csv файл пожатый zstd, но с именем 1.bin. хочу написать что-то типа select * from file('/var/lib/clickhouse/user_files/1.bin', 'CSV/zstd') есть какой-то подходящий синтакс? -
select * from file('/var/lib/clickhouse/user_files/1.bin', 'CSV', 'zstd')
https://clickhouse.com/docs/en/sql-reference/table-functions/file
file(path [,format] [,structure] [,compression])file | ClickHouse DocsCreates a table from a file. This table function is similar to url and hdfs ones.
-
cgfcb
-
спасибо! не понимаю, как я это пропустил...
-
всем привет) кто-нибудь знает наиболее простой способ разбить массив groupArray(value) на 3 равных по размеру части и вывести номера частей в массиве аналогично тому как работает NTILE в оконке (у меня кх старый и не поддерживается она..) или qcat в пандасе.
Т.е. для массива groupArray([1,2,3,4,5,6]) мы хотим получить при разбивке на 3 части массив groupArray([1,1,2,2,3,3]). -
А не точно не [[1, 2], [3,4], [5,6]]?
-
хм, ну да такое то же подойдёт) подскажете как проще получить такой рез-т ?
-
(Номер строки - 1) / (кол-во строк / 3) + 1 , если деление целочисленное, или ceil(номер строки / (кол-во строк / 3))
-
arrayslice / length ?
-
@den_crane https://kb.altinity.com/engines/mergetree-table-engine-family/merge-performance-final-optimize-by/
а имеет смысл тестировать отключение вертикальных мерджей в качестве буста мерджей? столкнулись с проблемой - мерджи на одной большой (140 млрд) и достаточно широкой (30 колонок) таблице стали генерить дикий iowait на серверах с HDDMerge performance and OPTIMIZE FINALMerge performance and OPTIMIZE FINAL DEDUPLICATE BY expr
-
вдруг все перестало работать, ищем проблему - оказывается один из словарей не загружен (status: NOT_LOADED) чинится легко, но вопрос, какого хрена это происходит рандомно?? уже второй раз из неоткуда. Кто-нибудь сталкивался?
-
не имеет, если все реплики одинаковые и вообще ничего не менялось, значит проблема в диске/дисках (диск сломался)
sudo dmesg - T| tail -100 -
эм? это нормальное состояние, словарь грузится при первом обращении
-
диски на ноде которой хуже всего было сегодня девопс тестировал - говорит все резво бегает. после рестарта эта нода не мерджит и iowait нету, остальные мерджат и у них все плохо.
/dev/sda:
Timing cached reads: 21968 MB in 2.00 seconds = 10995.01 MB/sec
Timing buffered disk reads: 780 MB in 3.01 seconds = 259.35 MB/sec
sdb
Device Model: ST16000NM003G-2KH113
Serial Number: ZL2F35YN
9 Power_On_Hours 0x0032 087 087 000 Old_age Always - 11845
/dev/sdb:
Timing cached reads: 23980 MB in 2.00 seconds = 12003.65 MB/sec
Timing buffered disk reads: 702 MB in 3.00 seconds = 233.72 MB/sec
sdc
Device Model: ST16000NM001J-2TW113
Serial Number: ZR701TDZ
9 Power_On_Hours 0x0032 089 089 000 Old_age Always - 10419
/dev/sdc:
Timing cached reads: 20338 MB in 2.00 seconds = 10178.31 MB/sec
Timing buffered disk reads: 778 MB in 3.00 seconds = 259.20 MB/sec
Все диски одинаковые.
И бодры. -
чет я не понял.
все реплики, мержат одно и тоже (по дефолту), т.е. либо у всех все плохо, либо наоборот -
спасибо!
-
спасибо! а вы имеете ввиду получить таким образом три массива по-отдельности ? а если их надо не 3 а 100?
-
@den_crane вот 3 шарда, реплики которые используем исключительно под запись. посередине нода - которой хуже остальных. её решили проверить на диски, вырубили клик, диски проверили - ок, врубили клик и она уже не мерджит. а остальные ноды (втч те которые под чтение) - мерджат и в iowaite
-
-
-
сейчас картинка такая на всех нодах, кроме той которую рестартанули
-
-
arraymap + arrayslice
чет я не понимаю зачем это надо, какая-то странная задача, может вам вообще другое нужно что-то в итоге, а вы пытаетесь странным способом туда придти? -
надо разбить по числу игровых баллов всех игроков на 3/5 групп одинакового размера. Ранее я делал через перцентили такое, но вот захотелось найти способ получше..)
-
select table, round(elapsed*(1/progress)-elapsed,2) estimate ,elapsed, progress, is_mutation,formatReadableSize(total_size_bytes_compressed) size, formatReadableSize(memory_usage) mem
from system.merges order by progress desc -
┌─table─────────┬─estimate─┬──────elapsed─┬─progress─┬─is_mutation─┬─size───────┬─mem──────┐
│ organic_local │ inf │ 28.709244996 │ 0 │ 1 │ 5.17 GiB │ 0.00 B │
│ organic_local │ inf │ 15.364185901 │ 0 │ 1 │ 886.69 MiB │ 0.00 B │
│ organic_local │ inf │ 2.918438487 │ 0 │ 1 │ 50.20 MiB │ 0.00 B │
│ organic_local │ inf │ 1.595400113 │ 0 │ 1 │ 4.53 MiB │ 0.00 B │
│ organic_local │ inf │ 0.706469745 │ 0 │ 1 │ 2.17 GiB │ 0.00 B │
│ organic_local │ inf │ 0.706438309 │ 0 │ 1 │ 73.51 KiB │ 8.52 MiB │
│ organic_local │ inf │ 0.168299317 │ 0 │ 1 │ 410.11 KiB │ 8.52 MiB │
│ organic_local │ inf │ 0.16828788 │ 0 │ 1 │ 6.91 GiB │ 0.00 B │
│ organic_local │ inf │ 0.168268778 │ 0 │ 1 │ 335.05 KiB │ 8.52 MiB │
│ organic_local │ inf │ 0.168209084 │ 0 │ 1 │ 135.26 KiB │ 8.52 MiB │
│ organic_local │ inf │ 0.16819166 │ 0 │ 1 │ 120.14 KiB │ 8.52 MiB │
└───────────────┴──────────┴──────────────┴──────────┴─────────────┴────────────┴──────────┘ -
так это мутации, не мержи
select * from system.mutations where not is_done -
их CLEAR COLUMN может вызывать?
-
-
-
-
-
нет
-
select * from system.mutations where not is_done
и читать лог, возможно там что-то заклинило и мутации до бесконечности не могут стартовать, и выполняются только в момент старта КХ, в момент attach table -
-
mq-deadline
-
Благодарю.
-
в несколько итераций KILL MUTATION сделал на всех нодах, до пустого селекта из system.mutations, но iowait все равно остался. в итоге всё же пришлось рестартовать все ноды - тогда полечилось
-
а есть какой-то опыт, как он по сравнению с cfq?
У нас достаточно старое ядро, любопытно есть ли надежда, что после его обновления что-нибудь улучшиться. Обычно когда смотрю на странички с настройками ядра/планировщика на stackoverflow у меня возникает чувство, что "работает, не трогай". -
нет, обычно нет никакого смысла и разницы,
бывает что у вас исключительное что-то типа супер NVME раид который выдает 30млн iops , и noop будет на 10% лучше чем cfq, обычно доли процента разница -
Part with name 20230313-2_3224_3224_0 is already written by concurrent request. It should not happen for non-duplicate data parts because unique names are assigned for them. It's a bug.
С подобными ошибками кто-нибудь сталкивался? Нашел по истории чата, что подобные ошибки могут быть связаны с работой зукипера. Несколько дней назад писал, что мы столкнулись с проблемой в метаданных в зукипере и делали массовый restart/restore replica для таблиц. В чем может быть проблема тогда? -
для номеров блоков используется автоинкремент, если зукипер восстановить из бекапа, и автоинкременты уменьшатся, то начнется подобная проблема
еще бывает что зукиперов больше чем один ансамбль (split brain), но там полная каша будет, когда реплика то к одному ходит то к другому. -
Наш случай с zk-copy предварительно мигрировали кластер зукипера с одного на другой, более производительный. Потом восстанавливали мету restart/restore. Потом удаляли дубли партов, т.к. их репликация съела место. В целом, все более-менее сейчас работает. Но вот такие ошибки периодически встречаются. А как лечить теперь?
-
Всем привет! Такая ситуация. Запускаю например ALTER TABLE table ON CLUSTER cluster MODIFY TTL ... или OPTIMIZE TABLE table ON CLUSTER cluster ... и пока на всех нодах не выполнятся мутации\мержи - любой запрос вида ... ON CLUSTER cluster ... бесконечно зависает, что это может быть?
-
-
ну просто не вижу связи, что должны зависать ЛЮБЫЕ ... ON CLUSTER cluster ..., например на создание таблицы
или все таки норма это? -
ON CLUSTER кладет задачу в зукипер
-
версия 21.11.6.7
-
-
-
есть логика, да
- 04 April 2023 (109 messages)
-
ну так естественно, ни в коем случае нельзя использовать zk-copy , в доке написано.
вообще не нужно было использовать zk-copy, нафига этот баян, не нужна старая база -
-
много таблиц ругаются?
-
-
на всех репликах таблицы делаете detach table
в зукипре удаляете полностью таблицу c ее корня deleteall ...
на первой реплике attach table .... она становится RO, system restore replica, потом на остальных тоже самое -
-
можно восстановить зукипер с нуля, используя system restore replica.
-
но я не понимаю зачем эта боль, зукипер супергибкая штука, я через океан базу зукипера перевозил, не выключая КХ и не гася саму базу зукипера.
можно добавлять фоловеров, гасить старых, т.о. переезжать добавляя новые сервера и убавляя старые -
-
так и задумано, все on cluster выполняются последовательно.
не надо такие долгоиграющие команды запускать on cluster, или запускать чтобы они сразу возвращали управление -
она скидывает автоинкременты в 0
-
https://clickhouse.com/docs/en/operations/tips#zookeeper
You should never use manually written scripts to transfer data between different ZooKeeper clusters, because the result will be incorrect for sequential nodes. Never use the “zkcopy” utility for the same reason: https://github.com/ksprojects/zkcopy/issues/15 -
Всем привет. А чтобы использовать clickhouse-benchmark мне нужна обязательно машина с кликом, или можно как - то отдельно установить утилиту?
-
все утилиты и Кх это один бинарник - clickhouse , его можно просто скопировать куда надо. И там запускать через пробел: clickhouse benchmark
-
-
Ищем в комaнду людeй заинтересованных в зapaботке на разницe куpcoв
Слoжного ничeго нeт, новичкoв oбучаем и полностью сопровождаем по всем вопросам
За одну сдeлку получаем примерно 2-4% чистoй прибыли
Работаете со своим бюджeтом самостоятельно
Подробнее в лс -
/report @caneventalkshit
-
Понял, спасибо!
-
скажите, а есть ли путь мигирровать standalone клик с десятокм merge tree tables в кластер архитектуру?
-
есть. https://kb.altinity.com/ -> Search -> Replicated
-
-
добрый день при создании проекции с полем которое формируется с использованием udf функции, мутация не может сделать файл с названием во всю длину тела функции, есть обиходной путь?
-
вы точно переименовали столбец или просто функцию вызываете? Покажите код
-
-
угу(, говорят как то можно сделать с помощью materialize
-
А там есть какая то активность? Может в логах что-то? Или высокое потребление CPU?
-
Привет!
Есть гео-распределенный кластер, несколько шардов, в двух репликах.
По реплике в каждом датацентре в DC1 и DC2.
Имеется ли принципиальная возможность ограничить зону (перечень нод) при SELECT, по распределенной таблице, репликами сугубо лишь одного датацентра, например DC2 ?
Запрос будит прилетать например на 01-ую ноду DC2 и нужно чтобы - эта нода "координатор" не шла на ноды DC1, ограничиваясь доступными данными на остальных нодах DC2. -
-
кассандре - это решается нампример через consistency LOCAL_QUORUM.
А в клике ну можно было бы создать в DC2 - еще один кластер - куда бы вошли лишь ноды из DC2.
И в запросе писать, например:
SELECT * FROM cluster('cluster_DC2', db.table);
- да только оно так по идее работать не будит , коль скоро бд db изначально создавали на cluster с отличным именем куда входили ноды из DC1 и DC2...
Т.е. надо еще мету в зоокипере для db.table для cluster_DC2 - получается "до-заполнить" ? -
А в клике ну можно было бы создать в DC2 - еще один кластер - куда бы вошли лишь ноды из DC2.
И в запросе писать, например:
SELECT * FROM cluster('cluster_DC2', db.table);
Так будет работать если вы создали изначально на всех нодах базу, на каком кластере вы создавали вообще не имеет значения. Главное на каких нодах
или попробуйте https://clickhouse.com/docs/en/operations/settings/settings#settings-load_balancingCore Settings | ClickHouse Docsadditionaltablefilters
-
cluster никак не относится к топологии репликации, вы там перечисляете список реплик которые вы хотите задействовать в запросе к этому кластеру.
Плюс, да можно посмотреть в сторону nearest_hostname для load_balancing -
Есть вопрос, несколько странный. Но всё же, может быть кто-то подскажет. Есть MergeTree вида
{
col1 String,
col2 domain(col1),
col3 query(col1)
}
И так далее. Можно как-то сделать так, чтобы col1 вообще не записывался, но только процессился для генерируемых col2 и col3 именно на уровне КХ ? -
CREATE TABLE | ClickHouse Docs
Creates a new table. This query can have various syntax forms depending on a use case.
-
Огонь, спасибо
-
Спасибо.
Но nearest_hostname поможет в локализации нод-обработчиков запроса, сугубо в случае если этот запрос "не приложит" ноды из DC2. Полагаю если в результате тяжелого не оптимального-прожорливого к ресурсам запроса частьреплик шардов в DC2 - прилягут, все равно последующие запросы пойдут на оставшиеся "в строю" ноды на DC1 и соответсвенно сможет "приложить" и их. Т.е. произойдет то чего изачально и хочется избежать, в принципе. -
Если вам нужна именно локализация, то нарисуйте себе кластер только из тех узлов, которые должны исполнять запрос, и обращайтесь именно к этому кластеру. Весь этот "cluster" просто конфигурация нод, нужная только для того чтобы Distributed таблица правильно проксировала запросы.
-
load_balancing = 'first_or_random', load_bancing_first_offset = 0/1
можно так например -
-
Приложит? О чем вы? Хеджированные запросы? Это отключается.
Годами геокластеры работают , один дц в usa, другой в eu, никто не ходит куда не надо при in_order. Точнее маленький процент запросов будет ходить но это такой механизм для проверки связности -
спасибо!
-
а buffer table будет работать в данной связке?
-
Наверное будет, какая ему разница. Да таким трюком вашу задачу можно решить - партов будет мало, но данные будут доступны для запроса раньше. Из минусов - вы можете потерять данные при неожиданном рестарте сервера (креш). Но если это вас не беспокоит....
-
Это нет. Спасибо
-
добрый день подскажите как будет вести себя ch, при повторном materialize проекции?
-
Всем привет!
Обновили КХ до 22.7 до 23.2
перестала работать функция catboostEvaluate()
Кто-то сталкивался м.б.?
валит такая ошибка:
DB::HTTPException. DB::HTTPException: Received error from remote server /catboost_request?version=1&method=catboost_GetTreeCount. HTTP status code: 500 Code: 375. DB::Exception: Cannot dlopen: (home/catboost/data/marvel_android_pay_31_03_model: invalid ELF header). (CANNOT_DLOPEN),. (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER) -
в конфиг КХ добавил такой
-
всем привет!
может, кто-нибудь использует clickhouse в связке с power bi через directQuery/live-подключение? не нашёл нормальный способ
или, может, используете обходные пути такой связки -
-
есть параметр куда складывать такие файлы, по дефолту это /var/lib/clickhouse/tmp/
т.е. надо смотреть и место и inode
df -h /var/lib/clickhouse/tmp/
df -hi /var/lib/clickhouse/tmp/ -
Привет! Подскажите как убрать distributed запросы на сервер? Удалил сервер из remote_servers, select перестали идти, но insert по-прежнему приходят с других нод кластера. Версия 21.12.4.1. В issues не нашёл ничего похожего, видимо мы что-то неправильно настроили
-
df -hi /var/lib/clickhouse-server/tmp/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/nvme1n1 197M 743K 196M 1% /var/lib/clickhouse-server
df -h /var/lib/clickhouse-server/tmp/
Filesystem Size Used Avail Use% Mounted on
/dev/nvme1n1 6.1T 5.0T 832G 86% /var/lib/clickhouse-server -
место есть
-
Добрый день!
Могли бы подсказать - планирую использовать ClickHouse для хранения версий для данных в строках в PostgreSQL.
Думал сделать триггер и повесить на свою таблицу в PG, чтобы при изменении сохранять и версионировать изменения в CH.
Но тут возник вопрос - окружений много, на каждом из них данные для доступа могут быть разные - как организовать взаимодействие между базами в таком сценарии?
Проблема в том, что в функцию надо запихать доступ к clickhouse, насколько я понимаю, а сама функция создается при миграции только. Вторым вариантом было хранить конфиг с доступом к ClickHouse в самом PG, но что-то этот вариант еще меньше нравится.
Или может лучше отказаться от идеи триггера на PG и дублировать запрос в CH из приложения напрямую? Кто может поделиться практикой использования такой связки или что можете порекомендовать почитать? (по прямым запросам не получается найти кейсов, за исключением того, когда CH читает из PG) -
-
отдельный вопрос - я правильно понял, что если на кластере из трех нод и с одним шардом падают 2 ноды (https://clickhouse.com/docs/ru/operations/clickhouse-keeper#восстановление-после-потери-кворума), то нет возможности добавить в кластер новые ноды ?ClickHouse Keeper | ClickHouse Docs
clickHouse-keeper}
-
-
а версии для данных вы понимаете как что?? любое изменение в базе любой сущности ?
-
если вы хотите из PG писать в КХ на каждый апдейт - это не рабочий вариант. КХ не живёт долго если в него делать инсерты по 1 записи. Почитайте что такое CDC, Debezium или MaterializedPostgreSQL движок в КХ
> и дублировать запрос в CH из приложения напрямую?
не севсем понятно что имеете ввиду -
У меня есть сущность Ячейка в которое есть значение Value - мне нужно сохранить какое значение было, какое стало, кто и когда изменил.
Фактическое (текущее значение) планирую оставить в PG, а вот историю думаю в CH перенести в связи с ростом объемов -
-
-
-
-
-
ну потому что условно разовое действие писать в CH это очень плохо, он под это не задумывался, у Алексея Миловидова есть статья где он расписывает почему )
-
-
-
движок Kafka конечно есть, но работает плохо. Если мы уже произнесли слово Debezium, то дальше надо смотреть в сторону Altinity Sink, без приключений с дубликатами в Kafka Engine @GrinRom
-
Ребят, вопрос
таблица ReplacingMergeTree
понятно что замена дупликатов не гарантируется и они всегда могут быть
есть ли какой-то трюк чтоб вытаскивать правильно из этой таблицы только самые новые записи?
чтоб будто их и нет дупликатов -
groupby по максимальной версии?
-
Можете показать как это выглядит?
-
Спасибо большое! Буду смотреть и думать
-
select ... table FINAL
но это медленнее, и вобще много нюансов.
Прочитайте внимательно - https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/
И далее по ссылкам. Похоже, что вы в начале большого пути. -
Вы имеете ввиду лимит?
-
спасибо!!
-
-
То что долго выполняется
KILL MUTATION это норм?
KILL MUTATION WHERE database = '' AND table = '' AND mutation_id = ''
на один id уходит примерно 30 сек. а их 173000. -
это норм. Он ждет кучу блокировок.
всех разом KILL MUTATION WHERE not is_done and database = '' AND table = '' -
вот этот дашбоард https://grafana.com/grafana/dashboards/13606-clickhouse-performance-monitor-xm-uat/
смотрит в query_log через clickhouse plugin
но там запросы надо допилить с clusterAllReplicas чтобы на весь кластер смотреть -
-
Благодарю
-
она использует хардлинки( почти не занимает место на сервере под бекап), а дальше надо его upload (она умеет)
Можно запускать как sidecar если это docker/k8s, но там диск получается расшарен, и sidecar просто имеет доступ к диску кх. -
Помогите пожалуйста, обновить запрос для загрузки данных из нового формата CSV файла. Запрос: INSERT INTO mytable SELECT rank, domain, \'' . $date . '\' FROM input('rank Int32, domain String') FORMAT CSV, где $date - это дата, которая подставляется руками, она не берется из файла, это не меняется. Пример старого формата(без названия колонок):
1,google.com
2,youtube.com
Пример нового формата(с названием колонок):
GlobalRank,TldRank,Domain,TLD,RefSubNets,RefIPs,IDN_Domain,IDN_TLD,PrevGlobalRank,PrevTldRank,PrevRefSubNets,PrevRefIPs
1,1,facebook.com,com,494001,2580144,facebook.com,com,1,1,493169,2571521
2,2,google.com,com,493890,2418063,google.com,com,2,2,493084,2410941
Маппинг старого формата на новый:
rank==>GlobalRank
domain==>Domain -
и получается надо заранее настроить директорию под бэкап как при при обычном бэкапировании руками?
-
колонки что-ли совпадают в таблице и файле? или в чем вопрос-то?
INSERT INTO mytable SELECT *, \'' . $date . '\' FROM input() FORMAT CSVWithNames -
зачем?
она создает /var/lib/clickhouse/backup -
в кубе нет ее. Используем альтинити оператор, надо в операторе чтото допом указывать тогда при настройке кластера для вклчюения бэкапирования7
-
колонки в таблице не совпадают. названий в оригинале небыло. структура таблицы:
CREATE TABLE IF NOT EXISTS mytable
(
rank UInt32,
domain String,
date Date
) ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMM(date)
ORDER BY (date,domain); -
INSERT INTO mytable SELECT TldRank,Domain, \'' . $date . '\' FROM input() FORMAT CSVWithNames
-
https://github.com/Altinity/clickhouse-backup/blob/master/Examples.md#how-to-use-clickhouse-backup-in-kubernetes
https://github.com/Altinity/clickhouse-operator/issues/862clickhouse-backup/Examples.md at master · Altinity/clickhouse-backupTool for easy ClickHouse backup and restore with cloud storages support - clickhouse-backup/Examples.md at master · Altinity/clickhouse-backup
-
-
-
нули получаются?
алиас в select в mv должен совпадать с именем колонки в to таблице -
-
-
как решить проблему с отсутствием /var/lib/clickhouse/backup/ в контейнере чтото ничего не могу найти ? нужно какойто другой образ использовать (сейчас docker.io/clickhouse/clickhouse-server:23.2.4.12) или какито доп параметры в операторе указать при разворачивании кластера?
-
походу понял
defaults:
templates:
podTemplate: clickhouse-backup
dataVolumeClaimTemplate: data-volume
с сайдкаром image: altinity/clickhouse-backup:master -
помогло, спасибо
-
ну возможно вы не понимаете что MV это триггер на инсерт и AMT(source table) никогда не читается
поэтому если вставлять 1 , то будет 1, а select будет показывать сумму sum(1) -
Всем привет! Подскажите пожалуйста, есть ли возможность преобразовать string в json?
Сразу скажу, функция JSONParse не работает -
str::JSON
-
мне бы в SQL запросе
-
который из JSON ? это тип поля в таблице?
-
в таблице тип поля string. Вопрос - как излечь данные
-
JSONExtract ?
-
пустые поля
-
одинарные кавычки, расходимся
-
там, увукс, достаем яйца)
-
не сдается )
- 05 April 2023 (117 messages)
-
Добрый день!
Может кто-то подскажет по проблеме - поднимаю свежую версию ClickHouse в виде Docker-контейнера, собранного из официального образа clickhouse/clickhouse-server:latest без каких-либо изменений. А подключиться к базе с указанием имени хоста не могу, база принимает только локальные подключения без имени хоста и с localhost, и на все попытки подключения с указанием имени хоста (кроме localhost) отвечает "Connection error: Connection refused, server ClickHouseNode ..."
В файле /config.d/docker_related_config.xml сервера стоит:
<listen_host>::</listen_host>
<listen_host>0.0.0.0</listen_host>
В config.xml -
<listen_host>::</listen_host>
<listen_host>0.0.0.0</listen_host>
Сам контейнер себя по имени хоста знает и нормально пингует.
Конечная цель у меня - подключиться к базе из соседнего контейнера -
-
А кто какие стратегии шардирования использует? Например есть таймсериез с составным первичным ключом и можно шардировать как минимкм двумя способами. Все записи с одним ключом на одной ноде или просто rand() и тогда в теории мы сможем распараллелить выполнение запроса по pk
-
Я шардировал по хэшу от user_id, потом делаю локально join если нужны по user_id
-
у меня джойнов нет и не будет ) Графана в целом всегда передает дату + условие по pk
-
Всем привет) Собираем данные по типу (source_id, object_id, date, count), где count целочисленная неубывающая метрика. Хотелось бы для ускорения запросов иметь еще таблицу, где будет лежать среднее значение метрики за период (между периодами сканирования). То есть Avg(t1, t2) = sum(diff(count))/N. Пытаюсь сделать через материализованное представление, использую таблицу с null engine, которая джоинит "новый блок данных" и уже имеющиеся данные. Но тогда мы получается работаем со всей исходной таблицей, а нужно по идее найти разницу текущего измерения и прошлого измерения и поеделить на количество object_id.
Как-то можно решить эту задачу через материализованные представления или тут только кроном?
Сори, если плохо описал, вот описание таблиц https://fiddle.clickhouse.com/013adc41-a05a-4b9a-9504-e12ef3ebf2b4 -
упс, не та ссылка
https://fiddle.clickhouse.com/b360cc08-d12a-433f-8c93-a39fcb748689 -
Мне кажется вам больше пожойдет https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/aggregatingmergetreeAggregatingMergeTree | ClickHouse Docs
The engine inherits from MergeTree, altering the logic for data parts merging. ClickHouse replaces all rows with the same primary key (or more accurately, with the same sorting key) with a single row (within a one data part) that stores a combination of states of aggregate functions.
-
Звучит достаточно логично, попробую с этим движком потыкаться, спасибо!)
-
мутации будут срабатывать только для первого materialize?
-
-
How to explore ClickHouse data via Excel PivotTable using Mondrian
ClickHouse is a very powerful OLAP engine. Microsoft Excel is one of the world's most popular and pow...
-
Спасибо!
-
Привет, это нормальное поведение, если удалить словарь (drop dictionary some_dict), и возникает ошибка HAVE_DEPENDENT_OBJECTS, то словарь пропадает из system.dictionaries, select * from some_dict -> Dictionary not found, а новый словарь с тем же именем не создать, ибо Dictionary some_dict already exists?
-
причём в show dictionaries словаря нет, но есть в show tables
-
Materialize projection действует на парты без проекций. Если проекция есть - парт пропускается
-
В докере это делается по другому (это не имеет отношения к кх). Надо создать network и контейнеры используя этот network.
-
Шардирование по ключу позволяет включить настройку которая отключает агрегацию на инициаторе и это ускоряет запросы в разы
-
о, а где про это почитать?
-
я думал что он так по дефолту работает
-
Петя создал таблицу Distributed( , rand() и залил данные
Вася подумал и решил: хм, зачем мы заливаем через Distributed, давайте лить в локал таблицы
Виталий подумал и пересоздал таблицу Distributed( , key_column)
но данные-то не перепрыгнут, и КХ не знает как они на самом деле лежат по шардам, поэтому естественно все ускорялки выключены по дефолту
--optimize_distributed_group_by_sharding_key arg Optimize GROUP BY sharding_key queries (by avoiding costly aggregation on the initiator server).
--optimize_skip_unused_shards_limit arg Limit for number of sharding key values, turns off optimize_skip_unused_shards if the limit is reached
--optimize_skip_unused_shards arg Assumes that data is distributed by sharding_key. Optimization to skip unused shards if SELECT query filters by sharding_key.
--optimize_skip_unused_shards_rewrite_in arg Rewrite IN in query for remote shards to exclude values that does not belong to the shard (requires optimize_skip_unused_shards)
--distributed_group_by_no_merge arg If 1, Do not merge aggregation states from different servers for distributed queries (shards will process query up to the Complete stage, initiator just proxies the data from the shards). If 2 the initiator will apply ORDER BY and LIMIT stages (it is not in case
when shard process query up to the Complete stage)
фактически надо использовать только 1-ю , optimize_distributed_group_by_sharding_key=1 -
потому что он не умеет нормально заливать, фактически кидает построчные инсерты
-
спасибо большущее
-
супер
-
аналитические функции если делать группировки по ключу шардирования тоже получается на шардах выполняются при такой настройке?
-
аналитические функции всегда выполняются на шардах.
вопрос надо ли их домерживать на инициаторе
если домерживать не надо, то uniq с шарда передается как финальное число (UInt64), если надо домерживать то передается преагрегированный стейт uniqState размером XXX0000 гигабайт. -
Привет!
Подскажите, как организовать вот такое поведение?
Есть таблица с продажами и view с маскированными данными из этих продаж, но view не работает если нет прав на основную таблицу. А если у пользователя права будут, то можно получить данные минуя маскирование.
Как-то можно ограничить пользователей, чтобы они видели данные из таблицы только через view, а напрямую нет?
Спасибо -
нет, нельзя, такая кривая модель в КХ для прав (нету владельцев у объектов, нету разделения definer / user)
можно только через row policy , но тогда и вью не нужен. Просто одни пользователи будут видеть одни строки, другие пользователи другие. -
это не нормально
-
только кроном
-
Правильно понимаю, что если таких view у меня 5 штук, все они с разными масками, то мне надо для каждого варианта держать копию таблицы для row policy?
-
> фактически надо использовать только 1-ю , optimize_distributed_group_by_sharding_key=1
емнип работает только если группировка производится по ключу шардирования.
для прочих случаев optimize_skip_unused_shards=1, distributed_group_by_no_merge=1
или я не прав? -
я же сказал, view не нужен.
зачэм пят? -
Нет, 5 копий строки
-
ну типа да, optimize_distributed_group_by_sharding_key для тех кто не хочет разбираться.
-
нет, одну и туже строку могут видеть разные пользователи, label security же не так работает
для строки вычисляется может видеть ее запрос или нет. -
Ок, спасибо большое Вы нам очень помогли!
-
Коллеги добрый вечер, подскажите пожалуйста, развернул 2 ноды клика, настроил репликацию, сделал балансировщик и раундробином в каждый идут запросы.
И вижу многие в рамках этих реплик делают дисрибьютед таблицы и на нее нее запросы пересылают и она по репликам уже сама балансит, я насколько знаю дистибьютед нужна в рамках шардирования, а вот в рамках одного шарда это делать не особо понимаю смысл, хотя каждый первый с статьях так делает) может я чего то не знаю и это правильный кейс, соориетируйте если не сложно) -
Привет! Подскажите, в чем может быть проблема
Создаю схему вида
syntax = "proto3";
import "google/protobuf/timestamp.proto";
message Test {
google.protobuf.Timestamp created_at = 4;
};
При попытке селекта с этой схемой получаю ошибку
SELECT today() AS created_at
FORMAT Protobuf
SETTINGS format_schema = 'test_dt:Test’
Code: 434. DB::Exception: Code: 434. DB::Exception: Cannot parse 'test_dt.proto' file, found an error at line -1, column 0, File recursively imports itself: test_dt.proto -> test_dt.proto. (CANNOT_PARSE_PROTOBUF_SCHEMA) (version 23.2.2.20 (official build)). (CANNOT_PARSE_PROTOBUF_SCHEMA)
С дефолтными полями, без импорта, ошибок нет
Версия 23.2.2.20 -
Добрый день!
Может ли не срабатывать при джойне условие в JOIN
SELECT t2.dt,
uniqExactMerge(uniqExactStateIf(t2.id)) OVER w
….
FROM t1
RIGHT JOIN t2 ON t2.id = t1.par_id AND has(t2.devices,1)
…
WINDOW w AS (ORDER BY t2.dt ASC) -
во первых писатели статей намекают что в будущем меньше переделывать когда станет 2 шарда.
во вторых дистрибьютид таблица имеет плюсы и минусы, плюс в том что она раутит запросы в реплики без ошибок и без лага репликации, например вы решили добавить 3ю реплику и там половины таблиц еще нет, половина наливается, запросы будут ходить в нормальные реплики (без ошибок table not found, и без лага репликации), даже если запрос выполняется на этой полу-готовой ноде.
про балансировку: это вообще не про то, и не так. -
Привет, есть кластер с одним шардом и N (пусть три) узла в этом шарде, в кластере создана таблица (ReplicatedMergeTree) в которую вставляются данные (по 100 000 - 200 000 строк). Все вставляемые данные гарантированно попадают в одну партицию (так как ключ партиционирования - время вставки).
Есть ли в этом случае выигрыш, если вставки равномерно разбрасывать между всеми хостами в шарде по сравнению со случаем, когда все вставки происходят в один хост, а на остальные реплицируются.
Из того, что я вижу, в случае вставок данные на разные хосты, они будут сортироваться на разных машинах и это будет чуть быстрее и меньше требования по оперативной памяти. Но, как я понимаю, это может замедлить репликацию.
В общем, есть тут какие то рекомендуемые подходы и общие соображения ? -
-
эм, и ошибки нет? должен кидать ошибку, что нельзя has(t2.devices,1) в ON
и RIGHT JOIN реализован с кучей багов, лучше никогда не использовать -
не не кидает
-
ужос
-
кстати да, были у меня уже проблемы с райтом
-
Понял спасибо, ну насколько я видел у нее есть алгоритм round robin и она может перебором реплики дергать
-
Добрый день.
Каким образом можно загрузить изображение в ячейку таблицы в ClickHouse?
Есть ли удобный вариант представления изображения в какой-либо кодировке (можно со сжатием), чтобы она отображалась при просмотре в веб интерфейсе ClickHouse?
Нужно передавать в INSERT не название изображения, а его представление в выбранной кодировке
UPD:
Тип поля должен быть blob, как я понял
INSERT INTO images (id, image) VALUES (1, loadFile('/path/to/image.jpg'))
loadFile('/path/to/image.jpg') возможно представить в кодировке? -
а почему нельзя
видимо просто игнорирует потому и не кидает -
load_balancing это про выбор реплики в другом шарде.
Если у вас один шард, то по дефолту load_balancing будет выполнять запрос локально, и никогда не уйдет на другую реплику
это сделано чтобы тупо экономить сетевой трафик -
аааа, понял, благодарю
-
переделал на LEFT
тоже не кидает ошибку но и похоже не использует никак -
какая версия КХ ?
-
22.8.15.23
-
можно, но не нужно. КХ не для хранения блобов.
тип String позволяет хранить любой стрим байтов -
А возможно ли сделать красивое отображение в SELECT запросе? Чтобы изображение было декодировано
UPD:
ChatGPT предлагает:
SELECT Base64Decode(image) -
конечно нельзя
-
в общем в итоге запихнул в подзапрос но вообще не понятно почему и не ругается и не использует словно и нет этого в ON
-
https://fiddle.clickhouse.com/
я неправильно прочитал похоже запрос, я там увидел (t2.devices,t1)
а оно не зависит от t1, т.е. это просто where, а не ON -
-
именно часть ОН
-
очень забавно, то есть он для того что не соответствует has соединение не делает но сами записи выводит
-
-
я видимо чего-то вообще не понимаю про условия в ON
https://fiddle.clickhouse.com/ad94507c-89d7-4a70-9b1d-893081bc6636 -
я понимаю что в ON запихали, и в КХ баг. Просто по идее это в where должно(могло бы) быть https://fiddle.clickhouse.com/5df47454-12ab-46e2-b4da-61b8bf263186
-
в данном случае да, в WHERE
но когда это в лефт джойне то зачем в WHERE тянуть -
но с лефтом вроде все корректно
https://fiddle.clickhouse.com/6b51f62e-7bfd-4282-81e7-aecd0cd64cce -
-
это логично
-
а вот это не логично
https://fiddle.clickhouse.com/bb4fa99c-8fa2-4e24-b192-79988fc89cc9 -
это одно и тоже, вот результат из PG
psql=> CREATE TABLE t1 (uid int, name char(6)) ;
CREATE TABLE
psql=> CREATE TABLE t2 (uid2 int, name2 char(6));;
CREATE TABLE
psql=> INSERT INTO t1 VALUES (1231, 'John');
INSERT 0 1
psql=> INSERT INTO t2 VALUES (1231, 'X');
INSERT 0 1
psql=> SELECT t1.*,t2.* FROM t1
psql-> RIGHT JOIN t2 ON (t2.uid2 = t1.uid and t2.name2='Alice');
uid | name | uid2 | name2
-----+------+------+--------
| | 1231 | X
(1 row) -
не понимаю
из t2 же ничего не должно выбраться -
а так как она справа то и общий результат должен быть пустым
-
left join и right join это одно и тоже если местами поменять таблицы
-
так я не меняю
я говорю, прицепи мне к t2 при том что t2.name2='Alice'
но такого там нет и я ожидаю видеть пустой результат -
имхо должен быть вот такой результат
https://fiddle.clickhouse.com/fdc74060-4e84-45d5-ad51-a3af78bac1d3
но в целом ладно, раз условие в ON влияет только на присоединение и никак не мешает «основной» таблице, то просто буду знать
Спасибо! -
Всем привет , подскажите
Если в order by указано (id,id_2)
И я делаю запрос select * from t where id_2 = 2
По сути произойдёт фулскан ? -
Как повезёт (зависит от однородности данных), но если индекс позволяет, то нет, не фулл скан
-
outer join возвращает все строки и не фильтрует, это просто условие как соединять
https://dataschool.com/how-to-teach-people-sql/difference-between-where-and-on-in-sql/
The join condition is different in this query. The LEFT JOIN brings in every row and the data that is JOINed in from linkedin only happens when facebook.name = linkedin.name AND facebook.city = ‘SF’. It does not filter out all of the rows that didn’t have facebook.city = ‘SF’ -
зависит от кардинальности id, если у вас там UUID, то да, считайте фулскан
-
именно)
-
Спасибо
я просто за всю свою практику не пихал в ON условий
во первый потому что в принципе предпочитал FROM t1,t2 а во вторых, это скорее КХ вынудил пытаться сначала ограничить явным образом а потом соединять, ну и от лени чтобы не писать подзапрос… -
Еще раз спасибо! Как всегда конструктивно и с пользой! )
-
в КХ все чуть сложнее и как бы нет table scan.
чтение всегда начинается из индекса.
если у id маленькая кардинальность, то можно будет найти гранулы где id_2 = 2
индекс:
гранула | id | id2
1 6 1
2 6 1
3 6 2
4 6 2
5 6 3
т.е. потому что id одинаковый в соседних гранулах, можно предполагать что id2=2 нету в 1,2 и 5-й гранулах
https://gist.github.com/den-crane/cbc6f0777d03a00417d70018378d360d -
Привет!
У меня проблема с rabbitmq engine на ch 23.2.4.12, консюмеры создают большую нагрузку на cpu.
Кто-нибудь сталкивался с таким?
Таблица с rabbitmq_num_consumers = 1, rabbitmq_num_queues = 1, rabbitmq_flush_interval_ms = 7500 через MaterializedView переливает данные в ReplicatedMergeTree, вроде все по документации.
Нагрузка есть даже тогда, когда очередь пустая -
200% constant CPU usage while using RabbitMQ intergation on 23.2.4 revision 54461 (docker image) · Issue #48103 · ClickHouse/ClickHouse
I reproduce the problem as follows. Start docker image (latest from here https://hub.docker.com/r/clickhouse/clickhouse-server) docker run -d --link rabbit1 --hostname clicktest1 clickhouse/clickho...
-
Почему мерж партов может идти медленно? Есть кластер из 3 КХ версии 22.4.5.9. Вставка идет только в 1 КХ.
На 2 накопилось большое количество партов и они не мержатся, либо мержатся очень медленно. Наблюдаю 80 активных партов и 6000 неактивных для таблицы, причем висит больше число партов за прошлые партиции. Optimize table не помогает.
Как можно подтолкнуть КХ сделать старые мержи? -
похоже на мою проблему, спасибо
-
это баг в 22.4
он забывал про неактивные парты https://github.com/ClickHouse/ClickHouse/issues/38807
обновитесь в 22.4.6.53
v22.4.6.53-stable.md:* Backported in [#38593](https://github.com/ClickHouse/ClickHouse/issues/38593): Fix parts removal (will be left forever if they had not been removed on server shutdown) after incorrect server shutdown. [#38486](https://github.com/ClickHouse/ClickHouse/pull/38486) ([Azat Khuzhin](https://github.com/azat)). -
Всем привет!
Нам приходят данные такого типа:
type_id transaction
1 'aaaaaaaaaa'
2 'bbbbbbbbbb'
1 'aaaaaaaaaa'
3 'aaaaaaaaaa'
1 'bbbbbbbbbb'
Необходимо, чтобы по точному списку типов возвращались транзакции с таким типом - т.е.:
запрос {1} ничего не вернёт
{1,2} вернёт 'bbbbbbbbbb'
{1,3} вернёт 'aaaaaaaaaa'
Как такое можно такое сделать без рекурсивного чтения всей таблицы? -
с такой схемой без полного чтения никак, непонятно что вы имеете ввиду под рекурсивным чтением, достаточно 1 раз прочитать
-
а как тогда искать транзакции, если нам приходит массив типов? например {1,1004, 10101, 8009, 400000} - получается надо либо список транзакции для конкретного массива хранить в матвью либо каждый раз под конкретный массив сканировать таблицу
-
Добрый день! Кто-нибудь знает какие-нибудь курсы по ClickHouse для команды разработки? Где можно узнать о лучших практиках при работе с ClickHouse и т.п.
-
Не делай JOIN, вставляй большими пачками .... Лучшие практики :)
-
Делайте плоские таблицы, не любите join, любите окна, выбирайте только нужные вам поля, а не *.
-
-
Точно, забыл, вставка и выгрузка блоками а не отдельными инсертами
-
Точняк, забудь про классику от id :)
-
получается так, и если у одной транзакции в среднем мало типов, то мат вью особо не поможет, так как записей сильно меньше не станет
передавайте сразу много массивов, чтобы за один раз прочитать всё что надо, а не дёргать запрос на каждую комбинацию -
Спасибо
-
Запрос наверное избитый. Но как не использовать JOIN, если требуется связать таблица фактов с рядом справочников?
-
Словари
-
Справочники в OLTP хранилище и всё, либо перед вставкой в CH ... Абсолютно пофигу CH сколько у вас одинаковых записей в колонке
-
вот скоро будет быстрый старт, говорят, что бесплатно https://clickhouse.com/company/events/clickhouse-workshopClickHouse Workshop
Apr 12 & 13 - You've heard about the power and performance of ClickHouse. Maybe you've even tried it yourself. In this 2-day (3 hrs per day) instructor-led workshop, you will learn what you need to be successful quickly.
-
спасибо
-
Если справочники маленькие и это не матрешка, то почему бы и не JOIN
-
Еще есть Join таблицы https://clickhouse.com/docs/en/sql-reference/functions/other-functions#joingetOther Functions | ClickHouse Docs
hostName()
-
сейчас попробовал на проде на настоящем запросе , справочник 150тыс. строк
3 dictGet Elapsed: 0.019 sec.
1 join (теже 3 поля) Elapsed: 0.058 sec. -
ну сложно представить, что словарь будет медленнее чем джоин, там же вопрос в памяти только
-
ну теоритически может, у меня есть словари на 40 атрибутов, если все атрибуты нужны, это 40 походов в 40 хеш-таблиц, джойн может быстрее, это будет одна хеш таблица
-
Если надо только по коду название то наверняка так
-
Вот я о таком
-
А есть вариант перевести такую структуру:
date, name, value
в
date, name_1, name_2, ..., name_n
..., value, value, ..., value
name_1, ..., name_n — уникальные значения из name? -
select date,
anyIf(value, name='name_1') as name_1,
anyIf(value, name='name_2') as name_2,
group by date
https://kb.altinity.com/altinity-kb-queries-and-syntax/pivot-unpivot/ -
Привет, Сергей! в итоге через tsv залилось, при этом как-то в 10 раз быстрее, чем через csv, типа 300к за секунд 20. То есть точно пачки
-
А теперь попробуйте через родного клиента и зальется за секунды
- 06 April 2023 (140 messages)
-
-
Nested УЖЕ Array.
99% вам надо
field1Nested(
id BIGINT,
name String
),
это два массива
values ( ...., [id, id1, id2], [name1,name2,name3], ...) -
это превращается в колонки field.id, field1.name
а мне нужен массив, а не 1 значение -
доку читайте
https://fiddle.clickhouse.com/f6a59d73-5de7-4df0-af2e-e695ada50c32 -
ссылку на доку подскажите
-
Доброе утро! Если честно, по доке не понял, как через родного клиента сделать с облаком, поэтому искал обходные пути, но не через INSERT.
-
Ну так вам же просто подключиться нужно, облако яндекса ?
-
Ага, облако Яндекса, в ограниченных сроках не сложилась картинка, как через клиента файл затянуть туда, файл же должен быть уже локально на сервере? а значит туда надо как-то попасть, где логопас на сервер не нашел =)
-
https://cloud.yandex.com/en-ru/docs/managed-clickhouse/operations/connect#clickhouse-client
+
https://clickhouse.com/docs/en/integrations/data-formats/csv-tsv -
Нет, не нужно ... Вам нужно файл иметь у себя на машине где есть clickhouse-client
-
HiPhi Z AT, 2023, 3 км
https://www.avito.ru/amurskaya_oblast_blagoveschensk/avtomobili/hiphi_z_2023_2745210572?utm_campaign=native&utm_medium=item_page_android&utm_source=soc_sharingHiPhi Z, 2023 купить в Благовещенске | Автомобили | АвитоHiPhi Z, 2023: объявление о продаже авто в Благовещенске на Авито. Цена указана с учетом всех затрат, таможенных этапов включая пакет документов для дальнейшего постановки на учет, по курсу валют на день опубликования объявления. Gaohe HiPhi Z Четырёхместная версия Январь 2023. Имеет 32 датчика: 1 LIDAR, 13 камер, 5 радаров, 12 ультразвуковых радаров, 1 датчик рулевого управления. Оснащён программируемыми матричными фарами с возможностью проецирования изображения на поверхности. Два электромотора выдают суммарную мощность в 672 л.с. и 820 Нм крутящего момента. Представленный на фото автомобиль...
-
Спасибо!
-
Всем привет! Подскажите, пожалуйста, хотим хранить в clickhouse данные обновления стаканов на биржах, 1 день одной биржи в csv - примерно 1 гб веса.
Безопасно ли их записывать в одну таблицу, например, orderbook или лучше сделать на каждый день и каждую биржу отдельную таблицу в формате orderbook_binance_06042023? -
-
1 гигабайт это разве много ?)
-
Запихивайте спокойно в одну таблицу :)
-
1гб * 5 бирж * 365 дней * 3 года = 5,47 тб
-
у нас 1 день таблички несколько террабайт и все работает
-
а данных за 5 лет
-
Короче вам кликхауса до скончания веков хватит ...
Вопрос, вы аналитику будете делать по каждой отдельной бирже или вместе ? -
Мы будем делать выборочные запросы, иногда взять 1 год, иногда 3, иногда 1 биржу, иногда все
-
Ну тогда кладите в одну таблицу всё
-
спасибо!
-
Добрый день.
Знающие люди, подскажите пожалуйста в чем может быть проблема.
Пытаемся перевести старые большие таблицы ClickHouse с движком MergeTree на движок ReplicatedMergeTree. Размер таблиц порядка 3 терабайт.
Действуем по инструкции из официальной документации: переименовываем старые таблицы, создаем новые с движком ReplicatedMergeTree с прежними именами. Далее переносим данные из старых таблиц в новые в папку detached и приаттачиваем ее к новой таблице:
SELECT DISTINCT partition_id FROM system.detached_parts WHERE table='metrics'
ALTER TABLE metrics ATTACH PARTITION 19700101 (partition_id из первого запроса)
Запрос ошибок не выдает, пишет ок, но ничего не происходит. В логах можно найти такое:
<Debug> executeQuery: (from 127.0.0.1:33210) ALTER TABLE metrics ATTACH PARTITION 19700101 (stage: Complete)
<Trace> ContextAccess (default): Access granted: INSERT ON graphite.metrics
<Debug> graphite.metrics: Looking for parts for partition 19700101 in detached/
<Debug> graphite.metrics: 0 of them are active
<Debug> graphite.metrics: Checking 0 parts
<Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.
<Debug> TCPHandler: Processed in 0.001350049 sec.
Самое странное, что на тестовом стенде все это прекрасно работает - отличие только в том, что на стенде таблицы заполнены только свежими данными и в гораздо меньшем объеме, но в остальном - ровно тоже самое... -
Спасибо про указание на баг старых неактивных партов.
Есть смежная проблема возможно связанная с мержами: метрики ClickHouseAsyncMetrics_ReplicasMaxAbsoluteDelay периодически стали подниматься выше 1 минуты. Подозревал что КХ мержит накопившиеся старые парты, но если баг в том, что КХ "забывал" про мержи, почему может расти метрика на сервере репликации? -
Всем привет! Хочу подключить кликхаус на локальной машине к datalens.yandex.com через https. Доменного имени нет. Сертификат самоподписанный. В настройках на сервере указаны сертификаты и всё что нужно для self-signed
<server>
<certificateFile>/etc/clickhouse-server/server.pem</certificateFile>
<privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
<verificationMode>none</verificationMode>
<loadDefaultCAFile>true</loadDefaultCAFile>
...
</server>
<client>
<loadDefaultCAFile>true</loadDefaultCAFile>
...
<invalidCertificateHandler>
<!-- Use for self-signed: <name>AcceptCertificateHandler</name> -->
<name>AcceptCertificateHandler</name>
</invalidCertificateHandler>
</client>
Попытка коннекта от даталенза заканчивается ошибкой
HTTPSConnectionPool(host='-', port=8443): Max retries exceeded
Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:996)'))
В логах сервера в момент запроса ошибка SSL BAD_PACKET_LENGTH
<Error> ServerErrorHandler: Code: 210. DB::NetException: SSL Exception: error:10000070:SSL routines:OPENSSL_internal:BAD_PACKET_LENGTH, while reading from socket (178.154.242.166:57330). (NETWORK_ERROR)
Подскажите плиз, что то не так с настройками или вообще с самоподписанным сертификатом не получится общаться с внешними сервисами с SSL? Пробовал также подписывать сертификат на сервере своим собственным CA и указывать в настройках <caConfig>/etc/clickhouse-server/ca.pem</caConfig> и <loadDefaultCAFile>false</loadDefaultCAFile> -
Дак обратитесь в поддержку яндекса
-
Я написал, но они там продвигают свои облачные БД, вряд ли будут помогать мне настроить мою бесплатную)
-
Доброго, дамы и господа!
Не могли бы проконсультировать по возможности по данному вопросу? (вопрос не я формулировал)
"грубо говоря вставляем записи в таблицу с движком mergetree, делаем optimize table, смотрим в system.parts - слишком долго лежат inactive parts, удаляются слишком долго, можно ли процесс удаления настроить"
Подробности по установленному ПО
ADQM 22.8.6.71_arenadata1_b1-1
ADQMDB 22.8.6.71_arenadata1
В сети находили, что нужно поправить строку max_part_removal_threads в config.xml - но там я эту сроку не вижу в упор.
Может кто с таким встречался? -
Если они используются,то они не удалятся :)
-
/stat@combot
-
-
Думаю стоит задать этот вопрос в саппорт datalens
-
коллеги добрый день, есть какие то системные таблички чтобы следить за проекциями, сколько они места занимают или что-то подобное, кроме просто посмотреть что они используются query_log и explain, и как можно оценить сколько партов засечек используется при запросе с проекцией?
-
всем привет. обновился до 23.3 (с 22.11), появилась ошибка:
2023.04.06 10:27:12.078214 [ 116 ] {} <Warning> myplant.idx_ts_data_double_monthly_bitmap (ReplicatedMergeTreeRestartingThread): Table was in readonly mode. Will try to activate it.
2023.04.06 10:27:12.090132 [ 116 ] {} <Error> myplant.idx_ts_data_double_monthly_bitmap (ReplicatedMergeTreeRestartingThread): Couldn't start replication (table will be in readonly mode): Transaction failed (No node): Op #1, path: /clickhouse/tables/d61c0c9f-3d00-441f-bd76-df3232d5b738/0/replicas/chi-clickhouse-myplant-0-1/parts/all_2486840_2486840_0. Code: 999. Coordination::Exception: Transaction failed (No node): Op #1, path: /clickhouse/tables/d61c0c9f-3d00-441f-bd76-df3232d5b738/0/replicas/chi-clickhouse-myplant-0-1/parts/all_2486840_2486840_0. (KEEPER_EXCEPTION), Stack trace (when copying this message, always include the lines below):
0. DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0xe18d895 in /usr/bin/clickhouse
1. Coordination::Exception::Exception(String const&, Coordination::Error, int) @ 0x14e9aeb0 in /usr/bin/clickhouse
2. Coordination::Exception::Exception(String const&, Coordination::Error) @ 0x14e9b1d8 in /usr/bin/clickhouse
3. zkutil::KeeperMultiException::KeeperMultiException(Coordination::Error, std::vector<std::shared_ptr<Coordination::Request>, std::allocator<std::shared_ptr<Coordination::Request>>> const&, std::vector<std::shared_ptr<Coordination::Response>, std::allocator<std::shared_ptr<Coordination::Response>>> const&) @ 0x14eb1904 in /usr/bin/clickhouse
4. zkutil::KeeperMultiException::check(Coordination::Error, std::vector<std::shared_ptr<Coordination::Request>, std::allocator<std::shared_ptr<Coordination::Request>>> const&, std::vector<std::shared_ptr<Coordination::Response>, std::allocator<std::shared_ptr<Coordination::Response>>> const&) @ 0x14ea6812 in /usr/bin/clickhouse
5. DB::StorageReplicatedMergeTree::removePartAndEnqueueFetch(String const&, bool) @ 0x13fe21cf in /usr/bin/clickhouse
6. DB::ReplicatedMergeTreeQueue::createLogEntriesToFetchBrokenParts() @ 0x146d9981 in /usr/bin/clickhouse
7. DB::ReplicatedMergeTreeRestartingThread::tryStartup() @ 0x14714e37 in /usr/bin/clickhouse
8. DB::ReplicatedMergeTreeRestartingThread::runImpl() @ 0x14713d96 in /usr/bin/clickhouse
9. DB::ReplicatedMergeTreeRestartingThread::run() @ 0x14712c7a in /usr/bin/clickhouse
10. DB::BackgroundSchedulePoolTaskInfo::execute() @ 0x126dfd86 in /usr/bin/clickhouse
11. DB::BackgroundSchedulePool::threadFunction() @ 0x126e2c6a in /usr/bin/clickhouse
12. ? @ 0x126e3aae in /usr/bin/clickhouse
13. ThreadPoolImpl<std::thread>::worker(std::__list_iterator<std::thread, void*>) @ 0xe25cc73 in /usr/bin/clickhouse
14. ? @ 0xe2628e1 in /usr/bin/clickhouse
15. ? @ 0x7f367f7eab43 in ?
16. ? @ 0x7f367f87ca00 in ?
(version 23.3.1.2823 (official build))
1 шард, 2 реплики. ошибка только на одной из реплик
это известная проблема? как решать? -
drop replica && restore replica?
-
А как можно вставить большой обьем данных через insert into select? Но есть ограничение по памяти 25гб , больше не могу использовать
-
разбить на несколько insert select поменьше?
-
Сортировать и запоминать последний id?
-
ну да
-
Такая же проблема
Загружаем по несколько дней за раз -
А как решили? )
-
Ну вот так и решили — данные в кх заливаем по несколько дней за операцию. Если таблица сильно жирная, то по одному дню
-
еще вопрос. после обновления до 23.3 в логе очень много сообщений:
2023.04.06 10:47:34.066610 [ 264 ] {2aaf9ef9-0719-45ce-b9e0-6a5db51a0012::201703_5085_15532_3508} <Information> myplant.ts_data_double_raw (2aaf9ef9-0719-45ce-b9e0-6a5db51a0012): The part /clickhouse/tables/2aaf9ef9-0719-45ce-b9e0-6a5db51a0012/0/replicas/chi-clickhouse-myplant-0-0/parts/201703_5085_15532_3508 on a replica suddenly appeared, will recheck checksums
кажется на каждый insert появляется. это норма? что вообще значит это сообщение? -
-
у меня просто и день не влазиет (( слишком много
-
-
Вам же уже говорили, что nested это уже массив и что дополнительно в массив оборачивать не надо. Если не устраивает, что оно преобразуется в набор связанных массивов field.name1 field.nam2 то установите настройку flatten_nested=0
-
спасибо
-
Добрый день!
Можно ли как-то поймать причину не переноса записи матвьюшкой? -
https://fiddle.clickhouse.com/0e135522-f535-449e-bfd8-5d6d711f74d6
nested это уже массив -
Привет! А подскажите, пожалуйста, почему CH (version 22.3) может упираться в полку по CPU (~16), если на системе ~60 ядер (HT vCore), а max_threads стоит 32?
CGroup контейра без лимитов, на сервере LA тоже в районе 16 (то есть "свободное" CPU время есть)
Подозреваю, что есть какая-то настройка которая лимитирует потребление CPU -
-
можно ли дропнуть все таблицы схемы не дропая саму схему?
-
Доброго времени суток. Подскажите, как можно дропнуть раздел таблицы, разбитой по колонке типа Int, используя номер раздела, который возвращает функция? Идея в том, чтобы использовать запрос типа ALTER TABLE schema.table DROP PARTITION get_part_number_to_drop();
-
ALTER TABLE schema.table DROP PARTITION tuple(get_part_number_to_drop());
-
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-server-config-files/
https://clickhouse.com/docs/en/operations/settings/merge-tree-settings#old-parts-lifetime -
Спасибо!
-
нет, настройки которая лимитирует hard
вот такой запрос сколько ядер использует?
select avg(number) from numbers_mt(10) settings max_threads = 32 -
system.parts
-
-
на самом деле нет.
system.projection_parts -
оооо супер, выручаете, спасибо большущее
-
вам зачем 22.4 ? это принципиально или просто так получилось?
-
привет всем!
подскажите, пожалуйста, как побороть недостаточное использование ресурсов машины кликхаусом?
использую k8s оператор, реквесты и лимиты пода одинаковые (60 CPU)
но кликхаус использует максимум 16 ядер (точнее ~15.9) даже на большом OPTIMIZE FINAL запросе
версия кликхауса 23.2 -
@lainwa6 ^
-
возвращает 4.5
независимо от числа max_threads
попробовал с max_threads=32, max_threads=1, max_threads=64 -
Давно не обновлял. За версию не держусь. Какую рекомендуете?
-
Все же как можно найти почему выпадают записи из мат вью?
-
может «не успевать» изза LEFT JOIN ов?
-
Привет! Для Clickhouse-backup, тот пользователь которым подключаемся к КХ, какие минимальные права нужны чтобы делать бэкапы?
SHOW, SELECT on db.*?
На базах которые хочу бэкапить? Не могу найти описания нормального. -
Проверьте связь ch и zk
-
Всем привет
Использует ли кто-нибудь клиентов отличных от бобра для работы с кликом? Если да, то какие самые распространенные?
Имеется ввиду GUI клиенты, для выполнения SQL аналитиками -
Сейчас наткнулись на багу в бобре довольно тупую
1. создаём любую distributed таблицу
2. заливаем данные в неё
3. создаём любую вьюху над таблицей из 1.
count(*) в таблице и вьюхе не совпадает
в консольном клиенте такого нет
из-за этого все вьюхи поломались -
Alter table freeze
Самое главное чтобы прошёл
И select из system таблиц -
Всем привет. Столнулся с тем, что CH ни в какую не хочет делать два arrayJoin-а на одно и то же выражение - i.e. "cartesian product". Выдаёт только пары где первый элемет равен второму. Кто-нибудь знает, как это обойти?
-
arraySort для второго
https://github.com/ClickHouse/ClickHouse/issues/24225Multiple arrayJoins with same expression being calculated only once. · Issue #24225 · ClickHouse/ClickHouseClickhouse replaces second arrayJoin with result of first, but most likely it's not what users want in this situation. How to reproduce clickhouse version 21.6 SELECT arrayJoin([1, 2, 3, 4]) AS...
-
Точно, оно! Спасибо большое!
-
Зря его закрыли, конечно. Ладно бы чёрным по белому в документации были упоминания
-
Привет! Подскажите, у меня серваки постоянно утилизированы на 100% по cpu. При этом все работает стабильно, без нареканий. Можно как то ограничить утилизацию через конфиги?
-
max_threads?
а что значит работает стабильно? Запросы не зависают и все быстро выполняются? -
Да
-
Нагрузка на чтение у нас небольшая
-
В основном запись Кафка энджин
-
а чем вы смотрите утилизацию?
https://clickhouse.com/docs/en/operations/settings/settings#settings-max_threadsCore Settings | ClickHouse Docsadditionaltablefilters
-
%cpu Zabbix
-
Grafana визуализация
-
да и вообще)
https://kb.altinity.com/altinity-kb-setup-and-maintenance/high-cpu-usage/ -
Спасибо
-
Понял, спасибо 🙏
-
Друзья, а где можно поучиться основам ClickHouse? Есть ли хорошие курсы?
-
У Arenadata 😂
-
Боюсь пойти по миру ))
-
Это будет SQL язык, или нет?
-
-
Больше построение базы, модели данных, оптимизация и тд
-
Неужели никто не знает куда копать почему в мат вью приезжают не все записи?
Из криминала есть left join ы. Но поток записей не большой. Максимум несколько в секунду.
Сейчас попробовал часть джойнов убрать.
Но без джойнов не понятно как делать денормализацию? Лить раздельно в разные колонки какой нибудь agrigationMT? -
сталкивался с проблемами в MV при использовании нескольких джоинов, но там был INNER, заменяемый на IN. так и решили заменой одного на другое
-
Мне Ин не подойдет, мне из джойнов данные нужны чтобы из чрезмерно нормализованных данных делать нормально для аналитики
-
Привет! Подскажите, пожалуйста.
У меня есть строка, в которой лежит массив сегментов, к которым подходит юзер '["seg1","seg2","seg3","seg4"]'. Но названия сегментов сложно читаемы, я бы хотел их назвать более человеческим языком
seg1 - new
seg2 - auth
seg4 - active
Но мне нужны не все сегменты, так как там их очень много, большая часть является технической информацией, которая мне не нужна. Я бы хотел вытащить часть сегментов, переназвать их, и создать массив. Но есть один момент: одному юзеру может отдаваться несколько сегментов. Еще мне может приходить противополный сегмент, который мне нужен, например, seg4 - это no_active, а мне нужен active, сегмента active нет, нужно просто вытащить юзеров, кому не приходит сегмент seg4
Я подумал, что можно это решить через IF, который нужно отдать внутрь функции ARRAY
array(
if(match(segments, '"seg1"'), 'new', null),
if(match(segments, '"seg2"'), 'auth', null),
if(match(segments, '"seg4"'), null, 'active') -- противополжный сегмент, если юзеру не приходит seg4 - считаем, что юзер входит в сегмент active
)
Для сегментов, которые указал в начале сообщения при выполнения этого запроса, я бы хотел получить ['new','auth’], но получаю ['new','auth',NULL], как мне не отдавать NULL в массив?
Пример: https://fiddle.clickhouse.com/168f0c58-3b9b-4ec3-a2c9-1ff8dcc19bba
Версия КХ: 22.8.12.45 -
-
Спасибо большое тебе
-
Я думаю, есть много способов убрать null, например arrayDistinct.
-
Кажется, что это не слишком оптимально, я боюсь, что по производительности это очень сильно проиграет, но спасибо все равно
-
-
Если вы потом по сегментам искать что-то будете, то это будет крайне медленно. Нормальный вариант - по Bool/UInt8 колонке на сегмент, а не массивы.
-
У меня может быть около 100 сегментов
-
Это немного
-
-
Возьму желающих на обучение заработку на криптовалюте.
Для начала торговли-арбитража необходим стартовый капитал.
Предоплаты и аккаунты меня не интересуют ,в конце сделки мы подытожим ваш профит со сделки ,и тогда мы обсудим мой процент
Вопросы на счет сотрудничества в личные сообщения
🇦🇲🇷🇺🇺🇿🇰🇬🇰🇿🇧🇾 -
Надо получить последнее значение параметров
выполняются несколько запросов
SELECT * FROM history.measures
WHERE unit_guid = ? AND tag = ? AND parameter = ?
ORDER BY timestamp DESC
LIMIT 1
по ощущениям очень долгие запросы (это и понятно, все надо перелопатить и отсортировать)
Можно как то оптимизировать этот запрос или в идиале сделать один запрос и получить все последние значения для unit_guid? -
Секция LIMIT BY | ClickHouse Docs
limit-by-clause}
-
argMax
Без сортировки -
kоги по работе матвью где-то есть?
-
я опечатался
сколько ядер жрет вот этот запрос
select avg(number) from numbers_mt(1e11) settings max_threads = 32; -
select * from system.settings where changed
-
allow_drop_detached
database_atomic_wait_for_drop_and_detach_synchronously
distributed_directory_monitor_batch_inserts
force_remove_data_recursively_on_drop
insert_distributed_sync
kafka_disable_num_consumers_limit
log_queries
log_queries_cut_to_length
max_concurrent_queries_for_user
max_result_rows
result_overflow_mode
s3_max_single_part_upload_size
s3_min_upload_part_size
timeout_before_checking_execution_speed -
max_result_rows
result_overflow_mode
https://github.com/ClickHouse/ClickHouse/issues/44161
https://github.com/ClickHouse/ClickHouse/issues/47257 -
помогите,плиз, с матвью
-
а смысл?
-
джойн в матвью это приговор
-
ну то есть пропуски записей - ожидаемо при наличии джойна?
-
нет
-
а во что нужно max_result_rows поставить?
чего-то не пойму по этим ишью и какой у него дефолт не найду -
тогда почему приговор?
какие альтернативы получения таблицы транзакций с добавленными данными? -
там больше чем словари, условно + точка транзакции + оборудование на точке… везде по 2-3 поля которые надо подклеить
-
транзакции вам не помогут
ну т.е. вы просто не осознаете race в вашей модели из-за паралльных вставок
>тогда почему приговор?
я 100 раз объяснял
тормозятся же инсерты
I don’t recommend using JOINs in MV because they slowdown inserts dramatically.
CH uses a HashJoin algorithm and it requires to build a hash table in memory for the
right table. And this hash table must be built for each block for every insert. It slows
down inserts and wastes memory in case of parallel inserts. -
да я это и перечитал и видео пересмотрел )
-
но тормозят ладно, пропадают почему?
-
┌─name─────────────────┬─value─┐
│ max_result_rows │ 0 │
│ result_overflow_mode │ throw │
└──────────────────────┴───────┘
там в бивере в настройках наверное, через число строк в результате -
вы просто не осознаете race в вашей модели из-за паралльных вставок
-
да, согласен
-
два паралеллельных инсерта не видят данных друг друга
-
есть рекомендации по получению денормализации?
-
ETL
-
вот это я опытнмм путем и интуитивно уже почти нашел ))
-
то есть либо до моей базы либо по крону CREATE OR REPLACE TABLE и внутри нужная склейка?
-
Посмотрите dbt
-
не очень понимаю чем он поможет
проблема то простая - денормализация
вопрос лишь в том как и чем ее делать -
к фреймворкам у меня врожденная неприязнь )
- 07 April 2023 (154 messages)
-
Доброго времени суток
а почему тут toDate(MAX(dt)) стоит 7ое число?
SELECT timeZone(), MAX(dt), toDate(MAX(dt)), toDate('2023-04-06 23:23:00') FROM ...
Europe/Moscow | 2023-04-06 23:23:00 | 2023-04-07 | 2023-04-06 -
А где вы делаете запрос ?
-
Попробуйте выполнить в clickhouse-client .... Скорей всего ваш датагрип или дбивер врут :)
-
Спасибо, попробую
Не ожидал от бобра такой подставы... -
сверьте через toUnixTimestamp
-
Тут скорей не подстава https://fiddle.clickhouse.com/78c61ce4-df66-49ce-9fec-dfa0a393c782 . А что то напутана (изменил запрос)
-
По дебиверу этот запрос отрабатывает быстрее
SELECT * FROM history.measures
WHERE unit_guid = ? AND tag = ? AND parameter = ?
ORDER BY timestamp DESC
LIMIT 1 -
Денормализация - проблема не простая, а распространенная. Что не одно и тоже.
Что делать "по простому", вы уже сами ответили - лить данные в AggMT. Только потом становится непонятно как оттуда быстро читать данные для отчетов. Неудобный ORDER BY и необходимость FINAL/GROUP BY сильно снижает применимость этого метода. Точечные запросы на 100-1000 строк работают более-менее, но сложные агрегации (среднее по какому-нибудь временному лагу за год) уже нет. Тем не менее этот метод можно использовать для небольших (до 100М строк) таблиц. У меня таким образом готовятся данные для словарей. Однако для миллиардных таблиц фактов ничего хорошего не получается.
Если вы сможете уговорить OLTP команду сделать вам хороший ID (какой-нибудь snowflake), то границы применимости этого метода несколько расширятся. Можно будет хотя бы выборку по дате ограничивать. И играться с PREWHERE between min and max.
> к фреймворкам у меня врожденная неприязнь
Есть такое. Меня тоже DBT не впечатлил совсем. Вся эта навороченная махина делает только очень простые вещи. Самого нужного - инкрементальных обновлений считай что и нет. В последней версии курам на смех сделали инкрементальные обновления через LWD (light-wight-deletes), которые не то чтобы совсем работают, а если и работают, то тоже не то чтобы быстро. Варианта с CollapsingMT я там не нашел.
Поэтому очевидный выход - пишите свой фреймворк. Внешний цикл, который делает ваш SELECT JOIN (по возможности не hash), а потом INSERT в таблицу фактов. В один тред. На одном сервере. Но можно миллионными блоками раз в минуту. Если поток ваших данных не такой большой, что этого миллиона в минуту хватает, то вам повезло, эта схема работает, дальше дело техники. Если же к вам прилетает несколько миллиардов строк в день/час, и вам надо паралелить потоки, то придется сделать полноценное шардирование - группы ID должны процессироваться от самого начала до самого конца ETL пайплайна совершенно независимо. И все компоненты вашего JOIN должны быть вовремя на месте, и еще куча приключений в паралельной среде с различными типами гонок.
Это ни разу не просто. И это совсем не SQL в том виде как он задумывался и развивался до современных стандартов. То, что мы тут пишем на "типа SQL" с JOIN and GROUP BY не означает что у нас реляционная база. Clickhouse - это NoSQL база, с довольно интересным функциональным языком, напоминающим SQL и паралельной средой выполнения. Можно писать что угодно, как на java, но все равно получается сложно.Snowflake IDunique identifier format used by various platforms
-
"Clickhouse - это NoSQL база" - вот это поворот :)))NoSQL
class of databases for storage and retrieval of modeled data other than relational databases
-
Были сомнения? Вы статью в вики прочитайте. И современную расшифровку - Not-Only-SQL
-
Дак я ж не спорю. Но прозвучало как! Обсуждение SQL, а потом бац, и объявляем, что в общем-то КХ и не SQL даже :)))
-
-
Из этого распространенного заблуждения вылезает много недопониманий. Если бы люди представляли, что им вместо сумасшедших конструкций на JS как в монге выдали более-менее нормальный SQL, оставив при этом всю парадигму написания кода на обычном языке программирования, с полной ответственностью разработчика за все, то многих дискуссий тут бы и не было.
-
Потому я всегда и не любил различные фреймворки, ОРМ и подобное. SQL вполне себе не плохой язык для формализации запросов. Конечно, его не всегда хватает, и в целом, если думать только реляционной моделью, то в современном мире далеко не уедешь. Но вообще современные СУБД в большинстве своем уже давно стали "Не только SQL", существенно расширив тот самый SQL.
-
Большое спасибо за развернутый ответ!
Сейчас у меня сделана внешняя функция, которая раз в 5 минут делает мне join-ы.
Но так как структуры пока не устаканились, выполняется полная перезаливать данных, что постепенно тяжелеет.
Думаю надо переделывать запросы на «доливку». Тут проблема с учетом изменений в словарях и то что исходные данные приносят яндексовый трансфер, который обновляемые записи приносит полагаясь на Replacing КХса. И разъезжаться данные стали из-за параллельности вставок/обновлений.
Матвею в КХ выходит применим только для копий и агрегаций.
Картина сложилась. Еще раз большое спасибо! -
Понятия не имею кто такой яндексовый трансфер, но сразу возникает вопрос про ошибки (по аналогии с Кафкой). Вот он пришел со своим блоком, но что-то случилось и инсерт сломался. Этот "трансфер" придет снова? С тем-же самым блоком или уже с другим, чуть побольше? Будут дубликаты, которые вы вероятно борете через ReplacingMT/FINAL.
И вот тут начинается самое интересное, когда вы попытаетесь сделать инкрементальные обновления. -
-
недоезжающих блоков пока за пол года не было
а вот дублей, которые могут очень долго висеть - в достатке. В рабочей базе создается запись с идентификатором и датой создания, он ее приносит, следом в эту запись дописываются значений и он приносит ее еще раз с новым ключем для Replacing. Но не смотря на этот ключ обе записи могут жить очень долго.
это еще одна причина переливки с дистинктом -
Не важно где, важно чтобы вместе.
Если вы выгребаете миллион строк, которые лежат вместе - where ts between min and max, то это одно, а если тот же миллион вразбивочку - where ts in (select ts from ... ) то совсем иное. -
«where ts in (select ts from ... )» - это как. Не могу представить пример
-
Ну да, как в кафке at-least-once, иначе по простому не получится. Трудно вам придется с ингрементальными обновлениями, не за что там ухватиться - натуральные таймстемпы не подходят.
-
я со стороны аналитики и на прод, у которого на все это ответ, что надо быстрее бежать, влияния не имею
но есть позитивный момент, я внешний и по опыту могу просто подождать, когда мои предупреждения сменятся реальной болью )) -
это имеется ввиду когда даты выбираем по их наличию в другой таблице?
-
Добрый день!
Вот так настраиваю клик в докере:
clickhouse: container_name: clickhouse
image: clickhouse/clickhouse-server:23-alpine environment:
- CLICKHOUSE_DB=qryn - CLICKHOUSE_USER=username
- CLICKHOUSE_PASSWORD=usersecret - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
с clickhouse-client по 127.0.0.1:19000 могу подключится, но внутри docker-compose файла есть еще сервис, которому клик отвечает уже отказом (connection refused) что надо прописать чтобы клик принимал все соединения по сети? -
Всем привет, по умолчанию JOIN отключен для соединения двух distributed таблиц, если я включу в настройках чтобы было можно, это как-то негативно повлияет на запрос? Почему по умолчанию это отключено?
-
внутри компоуза по имени сервиса, clickhouse:9000
-
это супер дорого, вам со всех шардов надо будет все данные в по сети переслать
-
Даже если условия будут которые сокращают выборку?
-
ну если у вас 2 записи остаётся, то конечно разницы не заметите, но потом кто-то напишет кривое условие и вы даже не узнаете. Поэтому обычно настройку не трогают, а пишут GLOBAL JOIN, чтобы все понимали при виде запроса что это узкое место и надо быть осторожным
Ну и делайте join подзапроса на подзапрос, это правильный способ делать join в КХ. Тогда результаты подзапросов будут джойниться на инициаторе. И вы можете например сделать group by в подзапросе чтобы меньше данных было -
-
Окей, спасибо!
-
Ну так все зависит от времени хранения
-
бобер точно врет с временем
-
Если уж тут пошла речь про глюки бобра, то тоже на днях столкнулась с этим. Датагрип нормально отображал.
PS: версия бобра последняя) -
Я бы иначе поставил вопрос - когда и почему надо НЕ делать партиционирование по дате, и даже более точно - по месяцам. Какие у вас есть основания и соображения, чтобы отойти от стандартного варианта?
-
Спасибо! Ошибок подключения больше не выдает, но и метрики не собирает ))) буду дальше копать
-
а метрики на 8123 собирайте по http
-
Я пытаюсь настроить qryn otlp exporter. Он их сам собирать должкн и трансформировать и на 9000 в базу передает инфу.
-
А все понял, пардон тред не читал
-
предлагаю дополнительный доход
-
А стандартный вариант это просто обычная таблица? Основания - пытаюсь понять, как сделать, чтобы было легко удалять старые данные, исправлять внутри одного дня данные
-
-
стандартный вариант это PARTITION BY toYYYYMM(ts).
> исправлять внутри одного дня данные
Clickhouse не самое хорошее место для исправлений данных внутри дня. Месячные партиции удалять будет просто и приятно, можно автоматически по TTL, можно руками. Но для модификаций внутри дня вам стоит применить что-то иное. Скажем CollapsingMergeTree -
Если вы хотите сделать дневные партиции, то ставьте TTL на 90 дней и менее. Не должно быть слишком много партиций
-
До 1000 партиций приемлимо же, мелькала часто эта цифра в вебинарах? 90 как-то слишком мало.
-
-
Вы перепутали парты и партиции
-
Это все довольно условные цифры зависящие от многих факторов. Реально важным является количество партов, а не партиций. Важно какие запросы, какой в них WHERE, итд. Но на первом уровне понимания я всем советую дневные партиции с TTL 90.
-
Никак. тупл не массив, а синтаксис для статической компиляции кода. Каждый элемент - это отдельная колонка. Что-то типа struct для C++.
Вот скажем какая длина у такой структуры:
struct StudentType {
int idNumber;
char name[30];
StatusType status;
float credits;
float gpa;
}; -
select length( array(untuple(tuple(100070,46))))
-
изи)))) спасибо
-
Доброго времени суток!
Подскажите, пожалуйста, делаю селект в таблицу, в которой есть json поле.
Осуществляю его парсинг. В исходной таблице около 74 млрд. строк.
После запроса получется около 50 000 строк.
Запрос выполняется порядка 7 минут.
В system.processes потребляет при этом только 8 мегабайт памяти.
Можно ли как-то увеличить память, чтобы запрос потребял больше и выполнялся быстрее за счет этого?
Пример запроса:
SELECT JSONExtractString(body, 'key1') AS key1,
JSONExtractString(body, 'key2') AS key2,
JSONExtractString(body, 'key3') AS key3,
`ts`
FROM tbl
WHERE some_param = 'some_value'
AND ts BETWEEN '2023-03-25 23:50:00' AND '2023-03-25 23:54:59'
AND JSONExtractString(body, 'key2') != ''
Добавлял проекцию таким образом:
ALTER TABLE tbl ADD projection p_tbl_by_ts_some_param (
SELECT JSONExtractString(body, 'key1') AS key1,
JSONExtractString(body, 'key2') AS key2,
JSONExtractString(body, 'key3') AS key3,
`ts`
FROM tbl
ORDER BY ts, some_param
;
ALTER TABLE tbl MATERIALIZE projection p_tbl_by_ts_some_param;
Прироста по скорости не дало. -
https://kb.altinity.com/altinity-kb-queries-and-syntax/jsonextract-to-parse-many-attributes-at-a-time/
Проекция теоретически тоже могла помочь, возможно по какой-то причине она у вас не используется. (index, final, неверные where) -
если позволите, еще вопрос
если AggMT
2 таблицы, с транзакциями и свойствами транзакции - две МВ соответственно, одна в левую часть, другая в правую
id, val, val … par_id, val, val
с правой частью все понятно, в ней всегда будет id транзакции, который подставится в левую часть
а во левая вставка в par_id закинет 0
туплю, что правильно включить в order by? -
id должен быть общий чтобы пустоты схлопывались при final:
id, val1_A, val2_A … , val1_B, val2_B -
это понимаю… с идеей буксую
а можно задать чтобы идентификатор параметра брался последний? -
тогда оставлю только идентификатор транзакции
-
Но вобще-то 7 минут чтобы достать 50к строк - это дофига. Может вам some_param поставить первым или вторым в order by таблицы?
Судя по вашему запросу должно быть так:
order by toDate(ts), some_param -
я не понимаю. Рисуйте пример на fiddle
-
чтобы получить либо как первый запрос, либо как второй
https://fiddle.clickhouse.com/9fa7f244-9a35-448c-9efa-a9d743679ae3 -
о, кажется надо просто с другой стороны… схлопывать по идентификатору справа ))
-
память для такого запроса особо не нужна, нужно много CPU чтобы парсить json
надо смотреть из-за чего проекция не используется
SET send_logs_level = 'trace' и вперёд изучать логи
Возможно достаточно будет сделать ORDER BY some_param, ts -
то есть id из t2
-
да, я же говорю - для этого трюка нужен общий идентификатор
https://fiddle.clickhouse.com/b4d9a080-616c-4c38-bc63-80bf01bd7e92 -
-
но вот у меня изза асинхронности приехал 4 в первую и свойства для 6 во вторую
https://fiddle.clickhouse.com/cbf7fc55-e5b4-4db5-afac-351e714f2512 -
все ядра жрет )
спасибо, теперь разобрались:
нагружали при помощи OPTIMIZE
и упирались в background_pool_size -
наверное как-то так
спасибо, буду дальше думать не выпадет ли из-за этого чего
https://fiddle.clickhouse.com/47d80572-4602-4fe7-897b-cba513dd06e0 -
Всем привет.
Прошу прощения за нубский вопрос, но есть ли механизм выдавать вот так права?
GRANT SELECT ON *.table_name TO username
Чтобы пользователь имел доступ только к определенной таблице, но во всех базах. -
а мутация закончилась?
а то может асинхронная мутация в бэкграунде и новые данные успевает подчистить -
воспроизвел то что не пойму как решить
слева приехало
4,200
справа ничего
затем справа приехало 4,10,7
в итоге имеем две строки
4 340 0 0
и 4 0 10 7 -
а если делать порядок по первому идентификатору у меня схлопнутся разные идентификаторы по второму
на одну транзакцию может быть несколько t2 -
вразьивочку - разные таблицы или разные партиции тоже влияют?
-
Товарищи, подскажите как победить проблему:
Есть кластер СH, состоящий из 2-х шардов с 2-мя репликами каждый.
Не получается осуществить бэкап кластера – получаю ошибку при выполнении команды BACKUP DATABASE dbo ON CLUSTER 'cluster' TO Disk('backups','DBo_test'):
Received exception from server (version 23.3.1):
Code: 999. DB::Exception: Received from localhost:9000. DB::Exception: Got error from бла-блаlocal:9440. Coordination::Exception. Coordination::Exception: Node exists, path: /clickhouse/backups/backup-3463c8b7-7c6e-4b95-8425-a98d704cfa58/repl_part_names/f92fd32d%2Da6d4%2D4220%2D86dc%2D792cfb6f5431/replica%2D1: While collecting data of table dbo.test for backup. (KEEPER_EXCEPTION)
Подскажите что и где поправить?
И 2-ой вопрос:
Если кластер забэкапить не удалось – принял решение попробовать бэкап отдельно шардов.
Бэкап без опции ON CLUSTER проходит успешно
Но при попытке восстановления получаю следующую ошибку( RESTORE DATABASE dbo AS dbo3 FROM Disk('backups','DBo_test8'); ):
Code: 62. DB::Exception: Received from localhost:9000. DB::Exception: Macro 'uuid' and empty arguments of ReplicatedMergeTree are supported only for ON CLUSTER queries with Atomic database engine: While creating table dbo3.test. (SYNTAX_ERROR)
Добавляю опцию ON CLUSTER(BACKUP DATABASE dbo ON CLUSTER 'cluster' TO Disk('backups','DBo_test'):
) и раскатываю один и тот же бэкап на ВСЕ! шарды(несмотря на ошибку):
Timeout exceeded while receiving data from server. Waited for 300 seconds, timeout is 300 seconds.
Подскажите, как правильно бэкапить\ресторить, если используется кластер? Куда копать в этих ошибках? -
Всем привет. Предлагаю стать частью нашей дружной команды.
Бесплатное обучение на всех этапах сотрудничества.
Стабильный зара6оток
Пишите✍️
Звоните🤙 -
Всем привет!
Имеется таблица ReplicateMergeTree (по уникальному ID) для идемпотентности на случай вставки дублирующих данных
Стоит задача в real-time получать сумму значений из одной колонки
Первое что пришло в голову это сделать обычный VIEW, который является SELECT FROM GROUP BY id и уже из этого VIEW делать SELECT SUM()
Насколько хорошим является подобное решение с точки зрения CH? Заранее спасибо за советы! -
Можно как то в CH сказать чтобы процессил одним блоком подзапрос? Хочу использовать runningAccumulate и ему на входе нужен один блок.
-
ReplicateMergeTree или Replacing?
тут можно посмотреть примеры как last state доставать, в зависимости от данных может быть быстрее какой-то вариант
https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/ -
почему не window function использовать?
есть max_block_size для размера блока, но в целом звучит костыльно -
да согласен, спасибо
-
-
select replaceRegexpAll('asd234dfv345', '\D', '')
-
Большое спасибо!
-
подскажите пожалуйста, как делаются роли которые нужно явно задавать , чтобы получить
-
В 23.3. появились lightweight deletes. Кто то пользовался? Для Апдейта или добавления новых колонок что то похожее планируется?
-
про delete - https://github.com/ClickHouse/ClickHouse/issues/39870
в целом всё так же нельзя часто и точечно вызывать его
про update говорили что тоже планировали
а что вы подразумеваете под добавлением новых колонок? что не так сейчас?known issues / limitations of lightweight deletes · Issue #39870 · ClickHouse/ClickHousethey will be delayed, then there are a lot of merges happening (=when there is a high inserts pressure, and the pool is busy) they 'touch' all the parts - so if the list of parts is big, it...
-
Добавляю новую колонку - если сложная логика заполнения, то нужен alter update
-
ну в этом ничего плохого нет, на новой колонке это работает быстро
мы обычно делаем через словарь если сложная логика
ADD COLUMN ... DEFAUTL dictGet
MATERIALIZE COLUMN
REMOVE DEFAULT -
А под капотом разве это не обычная тяжеловесная мутация?
-
добавление колонки с default - это просто добавить новый файлик в каждый парт, это очень дешёво. Не надо всё перемерживать
-
да не добавляется в старые парты ничего, просто метаданные у таблицы меняются
-
я про materialize скорее
-
ааа
-
Спасибо, но уже стоит так в таблице-источнике: ORDER BY some_param, ts.
-
Если к вам в таблицу прилетают дубли, то вам сначала их надо убрать. Это или FINAL или дополнительный group by. Если таблица большая, то это может оказаться проблематично для "real-time". Хотя зависит от запроса - если вам нужна сумма только по 1-му ID, то это быстро, а если top10 то уже нет.
-
Replacing, отпечатался :)
-
Если у вас отношение связываемых таблиц 1:N, то надо хранить "эти самые N" в виде массива и использовать агрегационную функцию groupArrayArray.
-
а это вариант!
-
Здравствуйте!
Postgres для себя стандартно не выводит младшие элементы массива которые не были явно присвоены (хотя бы null)
create table tst_arr( id serial, arr integer []);
insert into tst_arr(id) values(1);
update tst_arr set arr[2]=2 where id=1;
select array_dims(arr), arr from tst_arr;
-- | array_dims | arr |
-- | [2:2] | {2} |
И в итоге когда
create database pgbridge engine= PostgreSQL( 'localhost', 'postgres', 'postgres', '' );
select * from pgbridge.tst_arr;
Ошибка
[07000][1002] std::exception.
Code: 1001, type: pqxx::conversion_error,
e.what() = Could not convert string to i: '[2:2]={2'.
(version 22.12.1.1752 (official build))
Clickhouse не может распарсить значение, не понимает синтаксис вывода postgres'а.
Это можно как-то побороть настройками, без update tst_arr set arr[1]=1 where id=1; ? -
но в этих массивах будут нули и пустые строки от тех случаев когда для левой части не было соответствия справа
-
С чего бы это? default для массива - пустой массив.
-
-
да, в любой версии работает
-
хм, похоже вы правы и это вариант
https://fiddle.clickhouse.com/bdb43b1a-ff75-4297-98b8-a3ca099af50b -
у меня при попытке изменить либо ошибки вылетают либо по таймауту отваливается запрос
-
-
всё ошибку покажите
-
-
база данных Ordinary?
-
ENGINE = MergeTree
-
это таблица, какой Engine у базы данных
-
дефолтное значение
-
что значит дефолтное значение? может вы создали когда дефолтное значение было другим
покажите "show create database >>>ваше имя базы данных тут<<<" -
-
SET ROLE Statement | ClickHouse Docs
Activates roles for the current user.
-
Всем привет, а где можно глянуть ошибки которые может генерит Distributed при вставке? Заметили дубликаты, пытаемся разобраться откуда взялись
-
тогда странно, может вы выполнили первый запрос за modify column, он отвалился по таймауту в клиенте, но на сервере продолжил выполняться и дальше вы пробовали перезапустить и уже ошибка с lock была
В КХ падение запроса по таймауту не значит что запрос упал, он продолжит выполняться дальше в бэкграунде
посмотрите в processes что выполняется сейчас или по query_log смотреть что было -
Спасибо, буду разбираться тогда дальше
-
Всем привет! Подскажите, пожалуйста, как правильно писать запросы с использованием словаря через функции dictGet() или с использованием JOIN?
В одной статье прочитал что Clickhouse может сам конвертировать join в вызов функций dictGet() с версии 20.4, но у меня при тестах скорость выполнения запроса при этом уменьшается (https://altinity.com/blog/2020/5/19/clickhouse-dictionaries-reloaded) -
Alter materialize в этом случае берет эксклюзивный лок на таблицу?
-
Он работает отличным от мутации способом?
-
-
Подскажите в чем может быть проблема? Один из серверов CH перестал принимать конекты после рестарта и не удаляет файл-флаг force_restore_data На SIGTERM не реагирует, просто пишет в логи что пришел сигнал Application: Received termination signal (Terminated) и продолжает что-то делать свое
-
Всем привет.
Возникла проблема.
Есть кластер, состоящий из 4 машин, 2 реплики, 2 шарда.
Создаем таблицу на кластере, автоматически прописываются пути в зукипер. Льем с помощью INSERT INTO данные из других таблиц на кластере, все данные отлично записываются.
Потом по какой-то причине, нужно таблицу переименовать, переименовываем таблицу вот таким способом
RENAME TABLE db.name1 TO db.name2 ON CLUSTER cluster
После этого снова начинаем наливать данные с помощью INSERT INTO в таблицу, но примерно половина данных рандомно не доезжает.
Подскажите, в чем может быть проблема? -
А где написано что ch конвертирует join?
-
В статье в целом все четко написано(примеры) как использовать словари
Какой у вас кейс? -
Если вы не под какой-то табло подстраиваетесь, а сами пишете запросы руками, то лучше конечно dictGet.
Но еще лучше писать код красиво, не в стиле MySQL, а как в школе учили нормальному языку - с интерфейсными функциями:
create or replace function getInventoryDeviceName on cluster {cluster} as (tenant_id, device_id) -> dictGet(`demo_1`.`inventory_device_dict`, 'name', tuple(`tenant_id`, `device_id`));
select getInventoryDeviceName(tenant_id, device_id) from test; -
В выводах написано “ClickHouse can automatically convert joins to dictionary calls”, и в статье пример где dictGet заменяется на INNER JOIN и получается одинаковая скорость выполнения запроса. Плюс в changelog’е к версии v20.4.2.9 (https://clickhouse.com/docs/en/whats-new/changelog/2020#performance-improvement-11) есть один из пуктов #10133 “Special HashJoin over StorageDictionary. Allow rewrite dictGet() functions with JOINs”
У меня кейс следующий, есть таблица со статистикой (ReplicatedMergeTree) и есть словарь с комплексным ключом из 2 полей. Я делаю запрос в котором, в том числе нужно получить несколько полей из словаря. Clickhouse использую недавно, поэтому привычнее JOIN’ы, думал не нужно будет вызывать dictGet для каждого получаемого поля из словаря, но в реальности получаю большее время запроса (хотя по данным из статьи думал что будет одинаковая скорость) -
Какая версия кх
-
У меня 22.11.6.44
-
Там эту оптимизацию поломпли
-
Поставьте настройку join_algorithm='default,direct'
-
Что то вроде такого нужно
-
Берет лок на ALTER, эксклюзивный лок берется например на DROP и TRUNCATE. Есть три типа локов как я понял - shared (берется на селект, например), ALTER (берется чтобы два альтера одновременно не прошли) и Exclusive - берется на дроп, транкейт, с таблицей делать нельзя даже селект, пока этот лок взят.
-
Column Manipulations | ClickHouse Docs
A set of queries that allow changing the table structure.
-
Говорят об эксклюзивном локе
-
Не помогло, также скорость осталась такой же. Исходя из explain’а делается JOIN FillRightFirst. Буду использовать стандартные функции dictGet()
-
странно, вот тут видно что на альтер и на дроп два разных лока. Соответственно селект пытается взять лок drop_lock в режиме READ, а DROP/DETACH/TRUNCATE пытается взять в режиме Write. как то не видно по исходникам, что альтеры как-то блочат эксклюзивно SELECTы, например, да и вроде на практике не помню, чтоб во время исполнения мутаций селекты не работали.
https://clickhouse.com/codebrowser/ClickHouse/src/Storages/IStorage.h.html#639 -
У меня на практике тоже не было, но не просто же так в доку добавили
-
Документация имеет свойство устаревать/расходиться с реальным поведением, строчки документации конкретно эти модифицировались 15.07.2020, а строчки, отвечающие за локинг - 25.10.2021, так что всё возможно)
-
а зачем ему лок на таблицу?
каждый парт отдельно обрабатывается -
это работает только если у словаря простой ключ UInt64 (не работает с complex_key)
и сломано https://github.com/ClickHouse/ClickHouse/issues/46543Join with a dictionary checks join_algorithm incorrectly · Issue #46543 · ClickHouse/ClickHouseThe documentation states that join_algorithm = default (and default = 'direct,hash'). 23.1.3.5 drop database test; create database test; create table if not exists test.src( id UInt64, s St...
-
Спасибо за информацию
-
может быть есть конструктивная статья по getDict и getJoin?
-
Всем привет еще раз
На странице https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/ обнаружил упоминание нового RFC которое вышло в последней версии https://github.com/ClickHouse/ClickHouse/pull/41005
Есть более подробная информация о том, как это работает? Если честно, после прочтения RFC не понял как это практически использовать, но как будто это очень переспективная функция![RFC] Replacing merge tree new engine by youennL-cs · Pull Request #41005 · ClickHouse/ClickHouseChangelog category (leave one): New Feature Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Enrichment of the existing ReplacingMergeTree engine to a...
-
Так вроде там все написано - скрестили RMT with CollapsingMT. Можно прочитать статьи про CollapsingMT и в особенности про VersionedCollapsingMT - их уже тонны написаны и в документации и отдельно.
Если в двух словах, то добавили колонку (sign) куда можно вставить -1 , и тогда магия мерджей станет похожей на CollapsingMT - вместо того чтобы просто брать самую свежую строку из двух (как было раньше), теперь мердж может еще и схлопнуть обе строки в ничего. Получится как-бы удаление. Однако FINAL никто не отменял.
И надо эти -1 ценить. Они нужны чтобы поверх RMT можно было делать MV с агрегацией по суммам и каунтам (без них дубликаты все сломают) . Другое дело что не всегда под рукой есть старые строки с предыдущими value. -
Вот вы говорите про то, что вторая колонка в ReplacingMT это аналог CollapsingMT и должен быть -1 / 1
Однако в pull request'ах идут примеры где эта колонка UInt8 с значениями 0 / 1
Еще пример: в том же pull request'е в качестве примера дают некий SETTINGS clean_deleted_rows='always' но при попытке выполнить данный запрос CH отдает ошибку, что значение должно быть Always (с большой первой буквы)
А что этот параметр делает - вообще не понятно, не было бы данного чата - я бы сидел тупил вечность...)
Я правильно понимаю, что данная функциональность нужна только для того, чтоб была возможность удалять строчки, больше в ней смысла нет? -
Если я все правильно понял, можете пожалуйста объяснить ваше последнее предложение касательно MV
Где можно найти примеры грамотного использования ReplacingMT и MV ?
Я выше писал вопрос касательно лучших практик по SELECT'у из ReplacingMT самых свежих данных (argMax / sub-query с timestamp'ом). Имеется какое-то крутое решение данного вопроса с помощью MV, или я вообще не в ту сторону думаю? -
статьи на kb.altinity.com вы уже нашли. По мне так самое ценное кроме документации. Еще можете Роберта послушать - https://www.youtube.com/watch?v=G9MxRpKlbnIDecember 2022 ClickHouse Bay Area Meetup
Join us for this session on latest #ClickHouse news. 0:10 Start of Meetup 9:07 Adventures with the ClickHouse ReplacingMergeTree Engine by Robert Hodges 46:28 ClickHouse ReplacingMergeTree in Telecom Apps by Alexandr Dubovikov 1:24:32 Doing Crazy Stuff with ClickHouse by Alexey Milovidov See the meetup invite for more information: https://www.meetup.com/san-francisco-bay-area-clickhouse-meetup/events/289605843 #datawarehouse #Meetup ----------------- Check out more ClickHouse resources here: https://altinity.com/resources/ Join Reddit community: https://www.reddit.com/r/Clickhouse/ ----------------- Learn more about Altinity, sponsors of this meetup. Site: https://www.altinity.com LinkedIn: https://www.linkedin.com/company/alti... Twitter: https://twitter.com/AltinityDB
-
> Я правильно понимаю, что данная функциональность нужна только для того, чтоб была возможность удалять строчки, больше в ней смысла нет?
Смысл в -1 конечно есть, я про это и говорю. Он и раньше был, просто сейчас чуть доделали, чтобы и delete работал -
> Я выше писал вопрос касательно лучших практик по SELECT'у из ReplacingMT самых свежих данных (argMax / sub-query с timestamp'ом). Имеется какое-то крутое решение данного вопроса с помощью MV, или я вообще не в ту сторону думаю?
можно и argMax, можно и FINAL. Что не получается-то? Вы же уже добрались до статьи в kb, там вроде все написано понятно. Может быть сделаете пример на fiddle со своими сомнениями? -
У меня на текущий момент в проде используется вариант с обычным view в котором GROUP BY + argMax
В статье (https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/) приводятся примерные бенчмарки разных подходов к получению самых свежих данных, и исходя из представленной статистики group by + argMax является самым худшим решением
Именно поэтому я пошел изучать вопрос альтернативных, более быстрых и эффективных решений -
Бывает по разному. Зависит от данных. Попробуйте все указанные варианты на ваших данных и вашей версии КХ.
Я обычно предпочитаю FINAL на свежих версиях с do_not_merge_across_partitions_select_final=1, однако недавно встретился с ситуацией когда argMax показывал сильно лучший результат. Но там данные были сильно разреженные, и какой-то оптимизации не хватило именно для FINAL, а для group by она работала. Так что проверяйте сами. И когда новые версии ставите тоже проверяйте. -
За примерно год использования КХ отовсюду слышал что FINAL исключительно для дев окружения, похоже ситуация изменилась, изучу, спасибо!
- 08 April 2023 (3 messages)
-
для таблиц которые пометились как read-only временно убрал все *.sql из каталога metadata/ , но сервер попрожнему отказывается принимать входящие конекты, в логи ничего подозрительного не пишет, файл flags/force_restore_data по прежнему не удаляет
-
Все привет!
Никто не сталкивался с ошибкой при инсерте в КХ?
Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: ip, port: 8123; std::exception. Code: 1001, type: std::__1::future_error, e.what() = The associated promise has been destructed prior to the associated state becoming ready. (version 22.12.3.5 (official build))
Запись идет через JDBC, ошибка стала большую часть данных стали записывать напрямую в КХ (до этого запись шла через кафку). -
а, нашел issue, https://github.com/ClickHouse/ClickHouse/issues/48545
тогда вопроса нет, похоже такая же ситуацияUnexpected exception while inserting empty data with async_insert=1 · Issue #48545 · ClickHouse/ClickHouseUnexpected behaviour Insertion of the empty data set (without records) causes an unexpected and unclear error when async_insert is enabled, error: The associated promise has been destructed prior t...
- 09 April 2023 (6 messages)
-
Добрый день.
1) Загружаю в ClickHouse значение даты в формате python datetime.
2) Забираю это значение из таблицы с помощью query_dataframe. Полученное значение в формате pandas timestamp.
3) Снова загружаю данное значение формата pandas timestamp в таблицу, но получаю -3 часа ко времени.
(где-то происходит потеря добавленных 3 часов от локализации)
PS:
Проблема не возникает на Windows с python 3.10, но на debian с python 3.5 всплывает -
Вероятно драйвера вносят свою лепту.
Из всех мытарств с датами вынес, что лучше не связываться с ТС с ТЗ и использовать либо родного клиента либо http интерфейс
Особо много чудес приносит jdbc -
в итоге сделал как тут на картинке
пока полет нормальный
https://excalidraw.comExcalidraw — Collaborative whiteboarding made easyExcalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them.
-
-
правда в один MV юнион не прошел. Работают два MV
-
- 10 April 2023 (149 messages)
-
Всем привет, сейчас может совсем нубский вопрос будет, но что-то не могу сообразить.
Есть вот такой запрос для крона.
insert into stats.diff_views select channel_id, post_id, date, value from (
select
channel_id,
post_id,
date as date,
if(maxDate != minDate, toUInt64(maxVal - minVal), maxVal) as value,
max(counter) OVER wndw as maxVal,
min(counter) OVER wndw as minVal,
max(date) OVER wndw as minDate,
min(date) OVER wndw as maxDate
FROM stats.views as s
where date >= (select date from stats.avg_from_diff group by date order by date desc limit 1 offset 1)
WINDOW wndw as (partition by (channel_id, post_id) order by date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
)
where date not in (select date from stats.avg_from_diff group by date order by date desc limit 1 offset 1);
в условии where используется запрос, который используется как временная метка, на какой дате остановились прошлый проход. Но изначально таблица пустая. Можно ли как-то в этом случае сделать так, что бы если таблица пустая, то возращалось бы дефолтное значение? Или это только на уровне приложения можно сделать?
Вот такая конструкция тоже не совсем рабочая)
select if(count() != 0, date, toDateTime(0)) as date from stats.avg_from_diff group by date order by date desc limit 1 offset 1; -
select defaultValueOfTypeName('DateTime64')
-
Всем привет! Подскажите пожалуйста, как работает mat view? как догружать и удалять данные из представления? требуется чтобы в представлении каждый день были данные за последние три месяца? в BQ догружал данные и удалял шедульным запросом, а как это в CH происходит пока не очень понятно😬
-
К сожалению, совсем не понимаю, как это применить. Тут больше вопрос в том, можно использовать это дефолтное значение, если подзапрос ничего не вернул
-
Точно max(date) должно называться minDate?
-
Да, ошибся, спасибо)
-
Всем привет, может кто-то подсказать из-за чего оптимизация таблицы не запускается? (точнее запускается но ничего не делает и выполняется за 0.2 сек)
Запускаю так:
OPTIMIZE TABLE table PARTITION 202303 FINAL
Такая партиция есть в таблице, уже проверил через system.parts.
Движок таблицы: CollapsingMergeTree(sign) -
а она не как '2023-03' записывается случайно? или '2023-03-01'
-
Неа, там стоит в таблице toYYYYMM(created_at), а created_at записывается в 2023-03-01
-
попробуйте '2023-03-01' указать
-
Вот партиции из system.parts
-
> select date from stats.avg_from_diff group by date order by date desc limit 1 offset 1
Очень странная конструкция. Зачем тут вобще group by? Почему не сделать простой max() от всей таблицы? -
Ошибка в преобразование UInt32, смысл в том что это работало раньше, но сейчас что-то не фурычит
-
Я видимо недостаточно чего-то знаю, странно, что у вас инцилизация сверху приводится к такому виду партиций и к тем более числу, но ладно
-
Мне не совсем max нужен, мне нужно значение предыдущее до максимального значения
-
Если это дни, и вам просто надо продолжить процесс включая последний день, то можно просто отнять 1 день. Даже если в нем не будет данных он пойдет для построения условия.
select max(date) - interval 1 day from stats.avg_from_diff
вобщем вам виднее, что там за логика требуется, но я бы подумал в эту сторону -
В идеальном случае да, подойдет. В идеальном случае у нас сканирование раз в час, и можно просто сделать interval 1 hour. Но никто не гарантирует, что в какой-то момент сервис, который отвечает за сканирование не отвалится. Поэтому приходится вот такие костыли делать, предполагая, что интервал сканирования может быть недетерминированным
-
Подскажите, где бы почитать про устройство distributed очереди? Интересует:
- можно ли безболезненно для CH удалить часть .bin файлов из очереди?
- можно ли посмотреть во внуть .bin файла, чтобы понять какие там лежат данные и принять решение оставить или удалить?
Зачем мне удалять .bin фалы, - иногда у меня падают SELECT-INSERT запросы, я бы хотел подчистить после них -
Ну для начало, надо хотя бы доку открыть и прочитать что такое MV в Clickhouse
-
Приглашаю партнёров посетить обучение по спекуляции на kripte, Никаких залогов и взносов вперёд не требуем❗️
Наша выгода - доля от Ваших дивидендов 💶
Все вопросы в DM 📩 -
Прочитать можно вот так
select * from file('/var/lib/clickhouse/data/default/distr_1/default@not_existing:9000/1.bin', 'Distributed') -
и на первый вопрос, да. Вот тут объяснение https://t.me/clickhouse_ru/313945Denny [Altinity] in ClickHouse не тормозит
нет. Нет там никакого партиционирования. 1.bin -- это данные инсерта как вы его сделали. Нету чуда. У вас 3 шарда, вы вставляете 1000 записей одним инсертом, Distributed таблица создает 3 bin файлика разрезав вашу 1000 записей по шардам, по ключу шардирования. Кладет bin файлы в каталоги. Другой процесс Distributed таблицы -- DirectoryMonitor , сканирует каталоги, и вставляет в шарды содержимое bin файлов. Distributed ни сном ни духом про MergeTree про репликацию, ему вообще пофигу кто на той стороне, просто как клиент засылает инсерты на 9000 порт, этот DirectoryMonitor туп и однопоточен.
-
привет!
есть достаточно тривиальная задача, застрял на простом моменте
бэкапы кластера клика храним через clickhouse-backup (https://github.com/AlexAkulov/clickhouse-backup)
нужно из бэкапа достать одну таблицу, вынуть оттуда определенные партиции и перелить данные в такую же таблицу в другой схеме
пробовал:
clickhouse-backup restore --tables=schema1.table_name --restore-database-mapping=schema1:schema2 --partitions=202303,202302,202301 2023-04-07T00-00-01
падает из-за конфликта путей (берет через show create, там пути зукипера хардом пишутся)
попробовал создать таблицу сам и накинуть флаг только data:
clickhouse-backup restore --tables=schema1.table_name --restore-database-mapping=schema1:schema2 --data --partitions=202303,202302,202301 2023-04-07T00-00-01
падает с ошибкой
error 'schema2.table_name' is not created. Restore schema first or create missing tables manually
но таблица на месте
кто-нибудь сталкивался?GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages supportTool for easy ClickHouse backup and restore with cloud storages support - GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
-
Может кто-то подсказать по доке, не очень понял (движок CollapsingMergeTree). Схлопывание двух строк не будет происходить если только заносить разом и sign -1 и sign 1?
Или не будет происходить вовсе если будет занесение данных только для sign -1?
Просто задача в том чтобы удалить некоторые строки для этого я сделал INSERT INTO table SELECT .... сделав полный дубль записи изменив sign на -1 -
для каждой sign=1 нужно добавить -1, для полного удаления
-
Это я и сделал, но вопрос в том как долго будут схлопываться эти строки? Потому что через FINAL все работает, нужна ли оптимизация для данной таблицы?
-
в неопределенный момент, можно принудительно через оптимайз
-
Принудительно запускал, но оптимиазация выполняется за 0.13сек, но ничего не происходит
-
Вы прочитайте до конца сначала, а потом уже задавайте вопросы ... Попробуйте использовать SELECT * FROM table FINAL
-
Пробовал, через FINAL все корректно выводит, но оптимизация не выполняется
-
Что такое оптимизация ?
-
OPTIMIZE TABLE table PARTITION 202303 FINAL
-
Ну она выполняется за 0.1 секунду, а результата 0
-
точно существует PARTITION 202303?
-
Да, смотрел через system.partitions
-
-
Всё работает .... как и ожидается
-
почему не просто удалить?
-
Так у меня тоже работает, но смысл в том что оптимизация на эту таблицу не срабатывает и он не схлопывает записи по sign
-
потому что дорого ?)
-
Дак я вам показал пример он работает и работает и оптимизация
-
Вы может покажите DDL таблицу на которой у вас не работает ?
-
Да, секунду
-
дороже мерджа? С чего бы?
-
-
А мутация, что вызывает ?
-
ну и почему это должно быть дороже?
Какой смысл сначала заливать копии с -1 а потом делать оптимизацию
когда можно по тому же условию что расставляется -1 сделать удаление -
Ну так он же для теста это делает .... ( Думаю Я )
-
А created_at совпадает у этих записей ?
-
Да
-
Просто походит, на то что они попадают в разные партиции ... а разные партиции никогда между собой не мержатся
-
Записи полный дубль, кроме как sign
-
А у вас же created_at в ORDER BY :)
-
Я не знаю, у вас какая то магия https://fiddle.clickhouse.com/b44145fb-bf87-4fd2-a0d0-ffb65f632e72
-
Очень странно
-
А версия у вас какая ?
-
22.2.2 revision 54455
-
Версия с тонной багов :) Может быть в них проблема ... Обычно когда видим в чате эту версию ... Говорим обновляться :)
-
А ничего не упадет если обновляться? Обратная совместимость имеется?
-
И до какой версии рекомендуете обновится?
-
https://clickhouse.com/docs/en/whats-new/changelog/2022
например за 22 год, вам нужно смотреть на пункт Backward Incompatible Change2022 Changelog | ClickHouse DocsClickHouse release 22.12, 2022-12-15
-
Последний LTS релиз 23.3, есть еще 22.3 и 22.8
-
Хорошо, попробую, спасибо!
-
внутрь подзапроса добавьте через union all дефолтное значение и сверху этой конструкции нужно обернуть еще в подзапрос и выбрать из значений максимальное.
НО, лучше словарь сделать поверх таблицы и использовать его с суффиксом dictGetOrDefault -
Добрый день!
в 32.3 в появилась поддержка удаления
ReplacingMergeTree([version_column],[is_deleted_column])
поле is_deleted_column - UInt8
если сейчас у меня есть таблицы с таймстемпом удаления
можно ли как-то впихнуть его в параметры движка чтобы если таймстемп есть был 1 а если нет 0 -
А вычислимую мат колонку там можно указать?
-
доберусь до компа проверю )
-
-
Спасибо! Я правильно понимаю, что перед тем как делать select from file() мне надо сначала .bin файл из очереди скопировать в /var/lib/clickhouse/user_files ?
-
r
-
-
делайте фича реквест default_backup_name
-
Приглашаю партнёров посетить обучение по спекуляции на kripte, Никаких залогов и взносов вперёд не требуем❗️
Наша выгода - доля от Ваших дивидендов 💶
Все вопросы в DM 📩 -
Вы всю историю храните?
-
удалений? сейчас да, удаления записей с «таймстемпом удалений» нет
-
но по идее должгна быть
-
Добрый день. Сорри, возможно вопрос совсем нубский, но я не настоящий сварщик ) Можно ли кликхауз научит самостоятельно забирать данные из постгреса? Или нужна какая-то самоджельная прослойка?
-
Понял, благодарю!
-
вам постоянно нужно забирать обновления?
Посмотрите в сторону CDC
https://github.com/Altinity/clickhouse-sink-connectorGitHub - Altinity/clickhouse-sink-connector: Altinity Sink Connector for ClickHouseAltinity Sink Connector for ClickHouse. Contribute to Altinity/clickhouse-sink-connector development by creating an account on GitHub.
-
да, постоянно, можно батчами
ага, спасибо -
а просто строить представления на данных из ПГ не подходит?
-
#вакансия
Коллеги привет! Ищу себе в команду опытного DBA, крупная продуктовая компания, отдел разработки 40+ человек.
Развёрнут кластер ClickHouse на 60+ТБ, обитаем в ДЦ, желательно с навыками кодить (таблицы, отчётности, мониторинг). -
я так понимаю, что аналитика из ПГ будет ну очено долгой
-
Приглашаю партнёров посетить обучение по спекуляции на kripte, Никаких залогов и взносов вперёд не требуем❗️
Наша выгода - доля от Ваших дивидендов 💶
Все вопросы в DM 📩 -
у них сегодня обострение?
-
тогда банальный баш и крон )))
или Яндексовый Трансфер если применимо -
ну то есть никаких "особых" встроенных тулов для этого у него нет?
-
как минимум внутри нет никакого шедулера, поэтому …
-
понял, спасиб
-
Всем привет! Добавил к таблице TTL выражение, чтобы данные прошлого года перемещать в Object Storage.
TTL toDate(`ym:pv:dateTime`) + toIntervalDay((today() - toDate('2023-01-01')) + 1) TO DISK 'object_storage'
Хотел посчитать TTL интервал динамически из текущей даты. Но оказалось, что партиции за 1,2,3 января стали тоже перетекать в ObjectStorage. Такое ощущение что TTL интервал как-то фиксируется и не обновляется динамически.
Подскажите почему так происходит? Правильно ли, что для этой задачи проще сделать вручную ALTER TABLE MOVE TO DISK без использования TTL выражений? -
TTL надо считать из данных (даты) в таблице. Когда текущая дата равна или превышает вычисленную в TTL выражении, данные перекладываются/агрегируются/удаляются.
TTL toStartOfYear(колонка с датой) + INTERVAL 1 YEAR MOVE TO ... -
спасибо, понял решение, попробую :)
-
-
да, так и должно быть. Данные MatView хранятся в обычной таблице, надо точно также делать replicated
https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf -
Я правильно понимаю, что три разные ноды, с реплецированными таблицами, mw отработает по разному?
-
-
все это разжевано по тем ссылкам, посмотрите и поймете почему мат вью работают как работают
-
Да, обязательно!
-
-
bin можно удалять у distributed таблиц, так и задумано
посмотреть внутрь SELECT * FROM file('/var/lib/clickhouse/data/detault/test1/2.bin', 'Distributed') -
есть настройка optimize_throw_if_noop, показывает почему мерж не может запустится
optimize table db.table_r on cluster 'main_cluster'
partition id '2023-03-29' settings optimize_throw_if_noop=1; -
Привет, смотрю доку чет частно используется Parquet, для выкачки из CH в Parquet надо больше вычислительных ресурсов? Просто TSV он прям изи выкатывает не напрягаясь
-
создание паркет файлов требует в разы больше ресурсов, например там надо закомпрессировать выходной поток
-
понял, ладно TSV наше все =)
-
#вакансия #DataEngineer #Clickhouse #удаленка #fulltime #remote
Всем привет!
Нахожусь в поисках единственного Data-engineer с опытом работы ClickHouse + Airflow в нашу небольшую команду аналитики. Продуктовая IT компания Peter Partner - занимаемся созданием собственных интернет-проектов: веб-сервисов и мобильных приложений в финтех сфере, а также полным циклом их дальнейшего сопровождения.
Дата инженеру предстоит создавать единый пайплайн обновления отчетности на базе Airflow + Clickhouse (122 гб) + Postgres (25 гб), развивать и поддерживать инфраструктуру аб тестов, создавать витрины с разными слоями данных (Airbyte и Airflow), создавать ETL-процессы, и др. 🚀
Любой формат сотрудничества, можно за пределами РФ 🙂
Если кому-то интересно - напишите в личку 📲Peter PartnerМы — продуктовая IT-компания. В Peter Partner разрабатываем финтех-проекты с 2019 года, которыми пользуются по всему миру. Ищем в команду крутых специалистов с амбициозными целями.
-
Caused by: java.lang.UnsupportedOperationException: LZ4 is not supported. Please disable compression(compress=0), modify the algorithm(e.g. compress_algorithm=gzip), or add the missing libraries to the classpath.
Посоны ищу эту либу, никак найти не могу, киньте ссылку где скачать и подключить -
GitHub - ClickHouse/clickhouse-java: Java client and JDBC driver for ClickHouse
Java client and JDBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-java development by creating an account on GitHub.
-
у меня последней версии 0.4.2 указано что есть уже в самой либе, но чёт не работает
-
CREATE TABLE table1
(
code String Comment 'code1',
name String Comment 'Name1',
)
ENGINE = File('TabSeparated') -
Спасибо! Сделал symlink в каталог user_files_path на базу с distributed таблицами, иначе не работало
-
сам jar с clickhouse jdbc не содержит lz4 либы.
есть shaded jar - полный драйвер, он размером 5 мб. -
а где он?
-
https://github.com/ClickHouse/clickhouse-java/releases
clickhouse-jdbc-0.4.2.jar 1.17 MB
....
clickhouse-jdbc-0.4.2-shaded.jar 2.84 MB
похудел похоже до 2.48 -
блин а как его в приложение подрубить?
-
в мавене обычный лежит
-
ну так, родной, с этого надо было начинать.
у тебя чего? мавен? гредл? сбт ? -
гредл
-
не помню как это гредле сделать, в мавене это
<!-- use uber jar with all dependencies included, change classifier to http for smaller jar -->
<classifier>all</classifier>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions> -
аа chatgpt знает
The equivalent Gradle dependency would be:
arduino
dependencies {
implementation 'com.clickhouse:clickhouse-jdbc:0.4.1:all'
}
You can add this code to your build.gradle file, inside the dependencies block. Note that the classifier element in the Maven dependency is included in the artifact name as a suffix, so in Gradle we specify it using a colon (:) separator after the version number. The exclusions block is not necessary in Gradle, as transitive dependencies are managed differently. -
спасибо!
-
-
https://clickhouse.com/docs/en/sql-reference/functions/other-functions#queryid
http и tcp возвращают query_id
http например в headerOther Functions | ClickHouse DocshostName()
-
select query_id()
-
-
Здравстуйте!
А как бы понять, что этому clickhouse-copier не нравится?
2023.04.10 17:16:00.133427 [ 980 ] {} <Error> : virtual int DB::ClusterCopierApp::main(const std::vector<std::string> &): Code: 62. DB::Exception: Syntax error (storage definition): failed at position 1 ('rand'): rand(). Expected one of: storage definition, ENGINE, PARTITION BY, PRIMARY KEY, ORDER BY, SAMPLE BY, TTL. (SYNTAX_ERROR) -
-
Можно ли для AggregatingMergeTree указать правило по которому из нее будут исключаться записи? Что-то типа TTL но, например, по идентификатору
-
define исключаться
-
не нахожу
https://clickhouse.com/docs/en/sql-reference/statements/create/tableCREATE TABLE | ClickHouse DocsCreates a new table. This query can have various syntax forms depending on a use case.
-
я прошу объяснить что такое исключаться ?
почему например просто в mat.view не написать where <> -
таблица наполняется двумя мат вью
и тот ID по которому выбрасывать есть только в одном
да, подумал, вряд ли получится самоочитка -
потому что надо чтобы сначала сагрегировалось а потом выбросилось 😕
-
т.е. хочется удалять уже смерженные данные?
но мерж случается неизвестно когда, поэтому как бы здесь вам не тут.
но вообще в TTL можно написать что угодно -
да, верно поняли
и да, уже подумал что не получится так ибо нет никакого после мерджа -
Ребят, всем привет!
У меня есть таблица с исходными данными такого формата:
key_id | param1 | param2 | ........... | param10
key | [x,y, ..] | [a,b, ..] |............ | [ , , alpha, betta ..]
Ключ, и 10 (их ограниченное число) столбцов с массивами.
Массив может быть:
- целиком пустой
- содержать пустые значения, а потом не пустые, а потом опять пустые
- но при этим длины массивов для одного ключа одинаковые
Хочу транспонировать средствами самого КХ таблицу до вида:
key_id | param_n | param1 | param2 | ........... | param10
key | 1 | x | a | ........... | Null
key | 2 | y | b | ........... | Null
key | 3 | ... | ... | ........... | alpha
key | 4 | ... | ... | ........... | betta
До сих пор не сталкивался с КХ.
Первое, что нагуглил - это функция arrayjoin
Но получается, чтобы она корректно отработала в моем случае, мне нужно применить ее 10 раз для 10 колонок с параметрами, и потом сджоинить все получившиеся таблицы по ключу и номеру параметра (param_n) (этот параметр, кстати, видимо оконкой получать, или есть что-то встроенное?)
Вопросы:
Как лучше (наименее затратно) транспонировать исходную таблицу?
Данных действительно много
Спасибо! -
Ааа я понял вам нужен не arrayJoin, а ARRAY JOIN пишется после FROM
-
Спасибо, посмотрю
Еще нагуглил arrayZip, вроде тоже похоже, но результат в одной колонке
Буду сравнивать -
так arrayJoin(arrayZip(field1,field2....)) :)
-
Всем доброго вечера, подскажите плиз, как узнать сколько весит не вся таблица, а конкретный столбец? Этот вообще возможно?
-
system.columns
-
Как все просто, спасибо
-
вот тут готовые запросы https://kb.altinity.com/altinity-kb-useful-queries/altinity-kb-database-size-table-column-size/
-
Спасибо!
-
💵Здравствуйте! Есть арбитражная cвязка внyтри бинaнca через BNB с прибылью 4-6%
💲Беру % от вашего ежедневного заработка.
✖️Не принимаю ваши деньги на свои счета и не беру никаких предоплат (как это делают мошенники)✖️
☑️Набираю даже людей без опыта. Если не разбираетесь,все обьясню и покажу
🟢По всем вопросам пишите в лс -
Сегодня обновлял clickhouse c 23.1.1 на 23.3.1
Контур тестовый, нагрузка около нуля по входящим данным, процессор утилизировался на 1-3%.
После обновления стабильно вот уже 8 часов 200 % утилизации цпу процессом /usr/bin/clickhouse-server
Запросы из https://kb.altinity.com/altinity-kb-setup-and-maintenance/who-ate-my-cpu/ ничего не дали.
Какой инструмент далее посоветуете для диагностики?Who ate my CPUQueries to find which subsytem of Clickhouse is using the most of CPU.
-
rabbit ?
-
есть
-
https://github.com/ClickHouse/ClickHouse/issues/48103
исправлено 3 дня назад, и релиза не было200% constant CPU usage while using RabbitMQ intergation on 23.2.4 revision 54461 (docker image) · Issue #48103 · ClickHouse/ClickHouseI reproduce the problem as follows. Start docker image (latest from here https://hub.docker.com/r/clickhouse/clickhouse-server) docker run -d --link rabbit1 --hostname clicktest1 clickhouse/clickho...
-
ох, спасибо
в открытых issues искал похожее - не нашел) теперь понятно почему - 11 April 2023 (119 messages)
-
Доброго времени суток, есть вопрос по predefined_query_handler в связке с INSERT, там ограничений ни каких не было?
-
Добрый день!
Сейчас есть запрос:
SELECT
keyword_id,
groupArray([created_at_day_offset / 3600, pd.position]) AS positions,
pd.created_at_day AS day
FROM product_positions_dist AS pd
GROUP BY keyword_id, created_at_day
ORDER BY keyword_id, created_at_day
Для каждой строки в результатах возвращаются все значения полей created_at_day_offset, page_position.
Как можно сделать выборку только одного значения для полей, но по условию что created_at_day_offset ближе всего к 54000? -
как-то можно в clickhouse выбрать ближайшее число при группировке?
-
argmin(abs(offset - 54000), offset)?
-
кто знает как использовать алиас таблицы внутри другого алиаса в одном запросе? К примеру,
with t as (select … from …),
tt as (
select …
from
`table/url` as l
join
t
on …
)
select …
у меня падает с ошибкой Table YT.t doesn't exist -
Допишите хоть запрос, а то не понятно что и где вы вызываете)
-
Всем доброго утра) Подскажите плиз, непонятно откуда прилетает нагрузка на зукипер, есть какие-то средства мониторинга его? Может готовые запросы есть у кого?)
-
Хотелось бы сохранить данные для которых сработала настройка input_format_skip_unknown_fields при вставке через http, это возможно ?
-
вот тут про мониторинг всё, я бы выбрал вариант с метриками для прометея
https://zookeeper.apache.org/doc/r3.8.0/zookeeperMonitor.html -
Привет!
Есть база, в ней materialized view. Так получилось, что mv смотрит на несуществующую колонку. Теперь я делаю add column с недостающей колонкой в таблицу, на которую смотрит MV, но запрос завершается ошибкой, Missing columns. Как быть? -
upd: решил тем, что дропнул MV и починил сначала таблицу, всем спасибо!
-
https://www.youtube.com/watch?v=JSLhU_LJ5VE
слушал доклад Александра и он упомянул, что делать инсерт в дист таблицу - антипаттерн КХ, где еще можно почитать про другие антипаттерны?Паттерны хранения и обработки данных в ClickHouse / Александр Крашенинников (Badoo)Приглашаем на Saint HighLoad 2023, которая пройдет 26 и 27 июня 2023 в Санкт-Петербурге! Программа, подробности и билеты по ссылке: http://bit.ly/3JZHEg2 -------- Saint HighLoad++ 2019 Тезисы и презентация: https://www.highload.ru/spb/2019/abstracts/4862 В последние два года ClickHouse стал одним из лидирующих инструментов в задачах OLAP. Высокая производительность в совокупности с встроенными средствами масштабирования и отказоустойчивости дают широкие возможности по построению систем обработки данных. Однако при всём богатстве инструментов, есть ряд нюансов, которые стоит учитывать при проектировании хранилищ - движки хранения данных, система репликации, retention данных. ... -------- Нашли ошибку в видео? Пишите нам на support@ontico.ru
-
не делать JOIN :)
-
Вставлять большими бачами
-
я думал он маленькие инсерты не любит, а больше ему ок
-
Анти-патерны это такая вещь
-
что для тебя анти-патерны, а для кого то норм ... Мне вот было норм писать в дистрибьютед таблицу ....
-
А кому то норм делать JOIN'ы
-
Всем привет. Подскажите. пожалуйста, кто-нибудь реализовал запись из одной таблицы с Kafka Engine в две разные таблицы? Сделал две MV, у которой в создании прописано условие записи в соответствующую таблицу. И на выходе получаю результат, что ни в одной таблицы данных нет..
-
Попробовал и только GRANT ALTER FREEZE PARTITION похоже работает, без дополнительных грантов. System таблицы по дефолту и так доступны.
-
сделать две таблицы с различающимися kafka_group_name
-
Всем добрый день! Меня зовут Диана и я работаю IT-рекрутером в агентстве Spice IT.
Сейчас в работе у меня есть вакансия Администратора баз данных ClickHouse в компанию-фармдистрибьютор, вдруг кому-то будет интересно
Задачи:
Установка, настройка кластера и сопровождение ClickHouse; настройка системы мониторинга и анализа ошибок в части работы ClickHouse; внедрение систем миграций БД; настройка кластеров Apache Kafka, контроль и обеспечение непрерывной работы.
По условиям: белая зарплата, все по ТК, ДМС, удаленный/гибридный формат работы (по желанию).
Если вдруг данная вакансия заинтересовала, ставьте реакции или пишите в личку Diana_mstfn
Спасибо за внимание!) -
Работает. Хоть 10 можно. Но учтите, что любая ошибка в любом из этих MV приводит к тому что все останавливается. Данных может совсем не быть, а могут быть и дубликаты. Читайте логи и system.errors
-
Добрый день!
В какой лог сыпятся ошибки MV? -
В общий лог сыпятся все ошибки. Но еще интересно читать system.errors.
И еще интереснее отправлять общий лог не в текстовый файл, а в табличку system.text_log без ужасных перекладываний в графану и подобные. (по умолчанию выключено) -
спасибо!
-
Всем здравствуйте
такая проблема
добавил колонку на таблицу и хочу сделать апдейт этой колонки
запрос синтаксис правильный запрос обрабатывается выполняется
но апдейт не срабатывает
так скажем
создал колонку типом интежер внутри 0
хотел поменять их на 100
но не получается -
ALTER TABLE table name UPDATE columnname = 100 where columnname = 0;
-
из за чего может быть
-
не подскажите?
-
Что конкретно подразумевается под "не срабатывает"?
-
команда Update
-
В system.mutations смотрели?
-
можно было просто add column default 100
-
Я просто пример привел там кондишны чуть посерьёзнее
-
select * from system.mutations where not is_done
-
Это не ответ на вопрос
-
> ALTER queries that are intended to manipulate table data are implemented with a mechanism called “mutations”, most notably ALTER TABLE … DELETE and ALTER TABLE … UPDATE. They are asynchronous background processes similar to merges in MergeTree tables that to produce new “mutated” versions of parts.
-
все они стоят нот из доне
-
это не ответ на вопрос(
-
всем привет!
может, кто-нибудь сталкивался с подобным алертом:
INSERT queries that are rejected due to high number of active data parts for partition in a MergeTree, please decrease INSERT frequency
MergeTreeArchitecture
system.part_log
system.merge_tree_settings
загрузка данных: 3 шарда, таблица Kafka Engine (kafka_max_block_size = 1048576) -> matView -> таблица replicatedMergeTree -> таблица Distributed -
Он самый
-
все колонки смотрите, там last_exception, parts_to_do ...
-
select count() from system.parts where table = ... and active
-
максимальное количество партов 11 по этому запросу) ну либо что-то поменялось, т.к. ошибка за вчерашний день
-
понимаю что задаю тупые вопросы 😢🥲
но что именно я должен увидеть в нот тудув мутейшнс? -
а вы фотки выкладываете потому что доступа в интернет с компа нет?
-
да
-
класс работа, завидую
что вот этот запрос выдает
select 'delete '||part_zoo
from (
select zoo.p_path as part_zoo, zoo.ctime, zoo.mtime, disk.p_path as part_disk
from
(
select concat(path,'/',name) as p_path, ctime, mtime
from system.zookeeper where path in (select concat(replica_path,'/parts') from system.replicas)
) zoo
left join
(
select concat(replica_path,'/parts/',name) as p_path
from system.parts inner join system.replicas using (database, table)
) disk on zoo.p_path = disk.p_path
where part_disk='' and zoo.mtime <= now() - interval 1 day
order by part_zoo); -
(ааааа, момент когда я понял что запрос придется напечатать вручную)
-
может, еще можно в какую-то сторону покопать? наверное, можно этот alert приравнять к too many parts?
-
ааа это алерт в Альтинити операторе
похоже это просто RejectedInserts[1m]) > 0 почему Rejected неизвестно
может места на диске не было -
спасибо, буду смотреть!
-
всем привет
есть вот такой нубский вопрос, пожалуйста, не бейте ногами
вот следующий запрос
SELECT
sin(a),
sum(b) AS sum_b
FROM test_rep
GROUP BY a
HAVING count(c) < 4;
в нем sin(a) будет применяться до фильтрации, описанной в HAVING или сначала будут отфильтрованы все группы, у которых COUNT(c) < 4, а потом уже для их поля a вычислен sin? -
-
-
-
-
-
Понял, спасибо! Как раз была проблема в одном из представлений
-
после.
что бы до, надо писать GROUP BY a, sin(a) -
-
ну т.е. я бы ожидал
SELECT
sin(a) as sina,
sum(b) AS sum_b
FROM test_rep
GROUP BY sina
HAVING count(c) < 4; -
иначе неожиданный запрос
-
-
Подскажите ещё, пожалуйста, по движкам таблиц ExternalDistributed и PostgreSQL. Не совсем понял, копируют ли они физически данные из БД-источника в определённый период, как Dictionary, или же выполняют запросы налету?
-
тянут данные заново из бд источника в каждом запросе.
есть еще, он перекладывает в КХ сам, как реплика PG
https://clickhouse.com/docs/en/engines/table-engines/integrations/materialized-postgresqlMaterializedPostgreSQL | ClickHouse DocsCreates ClickHouse table with an initial data dump of PostgreSQL table and starts replication process, i.e. executes background job to apply new changes as they happen on PostgreSQL table in the remote PostgreSQL database.
-
понял, спасибо!
-
А не лучше использовать cdc sink-connector от алтинити ?
-
я знаю про cdc sink-connector от алтинити ровно 0, я даже не знал что он PG умеет.
-
Подскажите, пожалуйста, в чём может быть проблема.
В kafka положили битый json, таблица с engine=kafka в клике приуныла, перестала забирать сообщения начиная с битого оффсета.
Отключили таблицу kafka в клике, перемотали offset в kafka у партиций на валидные, подсоединили таблицу с engine=kafka в клике, сообщения он получать так и не стал, ошибок не видно.
Пробовал дропать таблицу в клике вместе с мат. вью, которая на ней висит и создавать после перемотки - не помогает. -
format JSONAsString? Если да, то: SETTINGS kafka_skip_broken_messages=1
-
-
-
привет!
а подскажите пожалуйста, каким образом работает explain estimate при подсчете количества строк?
изначально думал, что там просто умножается количество гранул на размер гранулы для читаемых таблиц, но кажется это не всегда так (explain estimate каким-то образом учитывает «неполноту» гранул и лучше предсказывает) -
размер гранулы не константа, не 8192.
адаптивная гранулярность, и КХ знает размер гранул -
уточню: появилась необходимость использовать explain json=1,actions=1 вместо explain estimate при предсказании количества читаемых строк, но точность сильно упала
-
во всех таблицах стоит такая настройка SETTINGS index_granularity = 8192
-
Адаптивная гранулярность индекса в MergeTree таблицах
Александр Сапин, Яндекс Слайды: https://github.com/clickhouse/clickhouse-presentations/raw/master/meetup27/adaptive_index_granularity.pdf
-
хорошо, спасибо)
-
уже давно index_granularity это верхняя граница, строк в грануле может быть меньше чем 8192
-
еще такой вопрос по explain estimate:
правильно понимаю, что он игнорирует подзапросы, скрытые внутри конструкции GLOBAL IN? -
ну да, estimate очень ограниченный, и не работает для distributed/mv/merge
-
на всякий случай уточню еще: explain estimate сейчас единственный способ получения информации о количестве читаемых строк до выполнения запроса?
-
Да, можно и так попробовать, но конкретно сейчас не помогает. Что ещё мешает получать уже валидные записи
-
Привет ребята. Подскажите пожалуйста. Есть win serv, на нем виртуалка гипер в с убунту. на убунту серв это поднял клик хаус. если внутри нее делаю - curl http://localhost:8123 то все ОК. а если с самого сервака вин серв иду через браузер по http://192.168.1.2 то нет подключения. в чем может быть проблема?
-
Видимо не только JSON сломали, но и что-то по типам в матвьюхе с таблицей не сходится. Нужно посмотреть внимательней. Можно подвинуть оффсет обратно, создать сырую таблицу, где всё сообщение будет одной колонкой в стринге лежать, плюс метаданные сообщения в остальных, вставить данные туда и уже повозиться с ними
-
-
Спасибо
-
listen_host какой?
-
не знаю, я это нигде не указывал. не было даже просьбе о таком при установке
-
netstat -nltp | grep 8123
-
Это внутри виртуалки запустите
-
Приветствую. А кто знает можно ли на ALTER TABLE .. MODIFY ORDER BY убрать одну колонку, которая сейчас мешает схлопывать replacingMT. В доке только про добавление. По идее если меняется только метадата, то должно сработать. Новые данные начнут схлопываться, а старым можно в спокойном режиме попартиционно optimize final сделать. или нет?
-
Добрый вечер! Может, кто-то сталкивался с такой ошибкой?
Проблема при работе с кластером ClickHouse через DataGrip. После подключения и выполнения нескольких запросов в DataGrip регулярно вылетает ошибка SSL peer shutdown incorrectly. И после этого, если не закрыть окно DG, сервер продолжает отвечать этой ошибкой (видимо, серверу надо, чтобы это проблемное соединение было прибито). То есть если окно DG после возникновения ошибки открыто, я не могу, например, из DBeaver подключится к бд, он той же ошибкой плюется, DataLens не может до бд достучаться и т. д. Если после возникновения ошибки окно DG закрыть, то сервер возвращается к нормальному режиму работы.
Гуглил по этой проблеме, не нашел решения. -
скорее всего нельзя.
MODIFY ORDER BY позволяет убирать колонку с конца, если она не входит в pk -
ClickHouse Meetup Amsterdam, June 8, 2022
Slides: https://github.com/ClickHouse/clickhouse-presentations/tree/master/meetup59
-
Спасибо!
-
Добрый вечер!
Может кто-то работал с JSON в CH и сможет помочь - у меня есть колонка request_items с String значениями, к примеру:
[{'code': '53974', 'price': 34999, 'quantity': 2}, {'code': '9002', 'price': 4499, 'quantity': 1}]
Мне необходимо вытащить отсюда все price и quantity и записать в отдельные строки.
Я написал скрипт, но он выводит пустые значения:
select
JSONExtractString(item, 'name') as name_,
JSONExtractString(item, 'price') as price_
from cart_recommendation_log
left array join
JSONExtractArrayRaw(request_items) as item
Может, кто-то знает как его исправить? -
Звучит, так что у вас данные не правильные :( Потому что у вас Array(String) по идее
-
Возможно дело в кавычках. Валидный json с двойными кавычками
-
А есть ли в КХ эквивалент питонячьей нативной функции hash? Чтобы то же самое значение получать?
-
эм, так она разная в каждой версии питона
hash('a');
-839024934870873688
hash('a');
12416037344
hash('a');
-7446503259124477539
еще и разная на arm и интел -
Точно, спасибо
-
Более того. Это хэш объекта, а не строки
-
https://docs.python.org/3/library/hashlib.html
https://clickhouse.com/docs/ru/sql-reference/functions/hash-functionshashlib — Secure hashes and message digestsSource code: Lib/hashlib.py This module implements a common interface to many different secure hash and message digest algorithms. Included are the FIPS secure hash algorithms SHA1, SHA224, SHA256,...
-
-
Точно, спасибо!
-
А у меня вопрос обратный как из Python'а получить достоверный sipHash64 как в CH?
Изначально писали в дистрибьютер таблицу, там было такое хеширование, сейчас хотим локально писать, но по такому же правилу, чтобы ничего не сломать -
Всем привет, сори, если тупой вопрос) подскажите пожалуйста у меня есть 2 айдишки и мне нужно из них сделать 1 уникальный индификатор. как обычно в таких случаях делают, выбирают определенную хэш функцию или можно в тупую просто складывать 2 числа ? данных может быть очень много
-
Сложение даст совсем плохой результат, ведь 2 + 3 = 4 + 1, например. Хэш функция тоже даст коллизии, их просто искать будет сложнее. Но если у вас просто два числа, то можно их в пару сложить или в целочисленный тип в 2 раза больше размером без всяких коллизий.
-
-
-
PEP 456 – Secure and interchangeable hash algorithm | peps.python.org
Python Enhancement Proposals (PEPs)
-
-
Ну не гогОл же скорее всего )) если бигинта не хватает, то используйте хеш и не парьтесь. Можно полученный хеш конвертнуть в uniqidentifier и тд. Всё от целей и задач зависит.
-
обычно берут просто строку id1 - id2
-
от нее можно уже хеш брать
-
- 12 April 2023 (212 messages)
-
Здравствуйте, уважаемые знатоки.
Вылетает ошибка при запросе такого вида:
select col1,col2,col3,prefix_column_col1 from simple_view array join columns('^prefix_column') where prefix_column_col1 = '1' and col1 = 1
Ошибка такая:
Code: 47. DB::Exception: Cannot find column equals(col1, 1) in ActionsDAG result. (UNKNOWN_IDENTIFIER) (version 23.3.1.2823 (official build))
Что примечательно simple_view - представление с запросом к таблице ну скажем simple_table, и если запрос перестроить на эту таблицу или явно развернуть запрос из представления в подзапрос - ошибка уходит
Даже больше - если к запросу применить explain syntax, то КХ сам разворачивает представление в подзапрос.
то есть вот такой запрос ошибки не вызывает
select col1,col2,col3,prefix_column_col1 from simple_table array join columns('^prefix_column') where prefix_column_col1 = '1' and col1 = 1
На КХ более старой версии (22.8.4.7- lts), ошибок нет.
Даже больше. На другом сервере КХ с той же версией 23.3.1.2823 данный запрос без проблем выполняется, настройки там аналогичные.
Воспроизвести ошибку на синтетических данных, создав тестовую таблицу - не удается :( -
distributed таблицы учавствуют?
что если сделать set optimize_move_to_prewhere=0 ? -
На том сервере где ошибки нет - участвуют, set optimize_move_to_prewhere=0 пробовал, не помогает
-
Здравствуйте!
Подскажите пожалуйста,
у меня такой запрос работает на постгрессе :
WITH t1 AS (
SELECT field FROM table
),
t2 AS (
SELECT field FROM table
)
SELECT t1.field AS field1, t2.field AS field2 FROM t1, t2
WHERE t1.field NOT IN (
SELECT field1 FROM tablewithpairs
WHERE field1=t1.field AND field2=t2.field
) AND t2.field NOT IN (
SELECT field1 FROM tablewithpairs
WHERE field1=t2.field AND field2=t1.field
) AND t1.field <> t2.field
но на кликхаусе ошибка
DB::Exception: Missing columns: 't1.field' 't2.field' while processing query:
'SELECT field1 FROM tablewithpairs WHERE (field1 = t2.field) AND (field2 = t1.field)', -
А еще если в фильтрах использовать обычную колонку ИЛИ развернутую то ошибки тоже нет
Например так ошибки нет
select col1,col2,col3,prefix_column_col1 from simple_view array join columns('^prefix_column') where prefix_column_col1 = '1'
или Так тоже без ошибки
select col1,col2,col3,prefix_column_col1 from simple_view array join columns('^prefix_column') where col1 = 1
А еще какая то мистика, если добавить в условие 1=1 впереди всех условий - то тоже ошибки нет
select col1,col2,col3,prefix_column_col1 from simple_view array join columns('^prefix_column') where 1=1 and prefix_column_col1 = '1' and col1 = 1 -
Ну так перепишите запрос на синтаксис CH
-
а что тут не так с синтаксисом? ошибка-то не синтаксическая
-
В КХ не работают латеральные запросы
-
Сделал копию таблицы, и перенес в неё данные на том же сервере, не помогло. ошибка та же...
С пустой таблицей ошибки не было... -
а как это можно обойти?
-
Словарь direct например, или своя функция, или через IN, join
-
Добрый день
Пытаюсь настроить движок Kafka
Застрял с проблемой https://pastila.nl/?011739f8/4eaefa1c07c2401ffa6951b5936a8b24
Подскажите пожалуйста на какой стороне может быть проблема и пути решения, все опубликовано через Docker на своих серверах -
Set query_plan_optimize_primary_key=0
-
Не помогло
-
Кстати в доке не нашёл такой настройки, не подскажите где можно все настройки посмотреть?
-
Спасибо, помогло!
-
пожалуйста
-
Тупо написал код, со всеми булевыми настройками из system.settings и поменял на противоположное. Потом эту кучу запросов с антинастройками выполнил и посмотрел с какой настройкой выполнилось без ошибки). Выиграла настройка optimize_read_in_order=0
Что то вроде:
select 'select col1,col2,col3,prefix_column_col1 from simple_view array join columns(''^prefix_column'') where prefix_column_col1 = ''1'' and col1 = 1 settings '||name||'='||if(value::UInt8 = 0,1,0)::String||';\n' as anti_value from system.settings
where type = 'Bool' -
Правда так и не понятно почему так - optimize_read_in_order=0, ведь эта настройка вроде никак не связана с планом запроса...
-
а насколько быстрее стало? просто любопытно.
Или просто запрос заработал?)) -
Не знаю, пока главное что ошибка ушла при отключении этой опции.
-
@den_crane - Спасибо что натолкнули на направление поиска проблемы.
-
Всем привет! Скажите, пожалуйста, у меня на C++ в приложении есть Поток, который бесконечно слушает WebSocket и я хочу раз в 1000 записей их отправлять в ClickHouse.
Сейчас я делаю такие строки:
auto qty = make_shared<ColumnDecimal>(10,9);
qty->Append(to_string(event.quantity));
Как очистить qty чтобы не хранить все их в памяти после Insert?
Может у кого то есть пример кода или вкратце логики -
всем привет, есть живая кафка интеграция, добавил столбец в таблицу, надо поменять MV.
-
это как-то можно сделать вживую?
-
-
Доброго времени суток, после экспериментов с восстановлением бэкапа, на одной ноде при попытке создания таблицы с указанием UUID возникает ошибка:
Code: 57. DB::Exception: Mapping for table with UUID=c1ae35d5-e401-409d-991e-cff0a8cf7a75 already exists. It happened due to UUID collision, most likely because some not random UUIDs were manually specified in CREATE queries.
Где хранится этот Mapping и как-то можно его почистить? -
Всем привет, подскажите плиз в вопросе типа рейда для КХ на NVMe дисках. Мы хотим поставить себе в новый ДЦ три реплики но при этом использовать raid-0
https://clickhouse.com/docs/en/operations/tips
Тут особо про это не сказано, может кто поделиться опытом, стоит ли так делать?Usage Recommendations | ClickHouse DocsCPU Scaling Governor
-
Планирую ставить в куб, через альтинити оператор.
-
Добрый день. Существует ли возможность сделать ilike для множества значений подстрок? (например, получить эти значения select'ом)
-
Скажите, если у меня order by по полю symbol и symbol имеет вот такой формт. в where делаю
CAL_BTC_230413_16050.00
в where делаю
WHERE symbol LIKE 'CAL_BTC_230413_%'
и такой запрос не идёт в prewhere -
это так и должно быть?
-
Функции поиска в строках | ClickHouse Docs
funktsii-poiska-v-strokakh}
-
Добрый день всем.
Есть проблема с запросами в Clickhouse - иногда они начинают зависать и отваливаться по таймауту в 10 секунд, хотя выполняются обычно меньше чем за 0.5 секунд. Происходит в непредсказуемые промежутки времени в 10-20 минут, несколько запросов так падает, потом всё нормально и так по кругу.
Таблица ReplicatedMergeTree, запрос очень простой, без join, обычный SELECT ... WHERE ... ORDER BY LIMIT..., кликхаус в кластере из 2 нод, пока работаем только с одной по своим причинам. В system.errors пусто, куда ещё можно смотреть, чтобы найти причину? Версия кликхауса - 22.12.2 -
Добрый день, господа.
Есть ли в кликхасе способ сделать пивот таблицу.
При этом, чтобы строки в части пивот таблицы моглы нулы содержать + заранее неизвестно количество столбцов в пивот части -
Все известные PIVOT/UNPIVOT собраны тут https://kb.altinity.com/altinity-kb-queries-and-syntax/pivot-unpivot/
-
Привет! Вопрос больше теоретический :)
Есть текстовый файл на 500гб (словарь паролей). Нужно каждую строчку прохешировать в md5/sha1/etc, и потом, соответственно, искать исходный пароль через хеш.
Подойдет ли CH для подобной задачи (одна большая табличка) ?
Сама БД будет обновляться крайне редко. Т.е. один раз заполнить и потом только чтение -
Добрый день!
Сейчас для дедубликации при обновлении данных используется таблица с движком ReplicatedReplacingMergeTree
с ORDER BY(uuid).
В запросах SELECT из этой таблицы условия WHERE идут по другим трем полям(t_from, t_to, type).
В итоге скорость запроса низкая из-за ORDER BY(uuid).
Подскажите, как правильно организовать таблицы, чтобы провести дедубликацию при вставке по uuid и скорость запросов при выборе сохранить ?
Возможно есть еще решения, которые мы не рассматривали ?
пока смотрим в стороны MV с сортировкой под запрос, но там есть проблема в дубле данных -
ReplacingMergeTree не гарантирует отсутствие дубликатов:
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replacingmergetreeReplacingMergeTree | ClickHouse DocsThe engine differs from MergeTree in that it removes duplicate entries with the same sorting key value (ORDER BY table section, not PRIMARY KEY).
-
Звучит, как анти-патерн, но мне кажется это реализуемо. https://clickhouse.com/docs/en/faq/use-cases/key-valueCan I use ClickHouse as a key-value storage? | ClickHouse Docs
can-i-use-clickhouse-as-a-key-value-storage}
-
Имхо, берите key-val db, а не ClickHouse, не тот юзкейс.
-
Понял, спасибо за ответы
-
Точечные чтения это антипаттерн КХ
-
Ну, тут зависит от насколько тяжелый будет индекс у key-value бд.
В некоторых случаях кх может выиграть из за сортировки данных и легкого индекса. -
Попробую сделать пару тестов с 50-100гб файлами, поглядимс. Но посыл понятен
-
Сделал подстановку в функцию select запроса по одной колонке, но возникла следующая ошибка:
Code: 43. DB::Exception: Illegal type Array(Nullable(String)) of argument of function multiSearchAnyCaseInsensitive: While processing multiSearchAnyCaseInsensitive(text, [_CAST('test', 'Nullable(String)')]).
UPD:
SELECT multiSearchAnyCaseInsensitive(text, (SELECT word FROM table_2 WHERE ilike(word, '%test%') AND flag=1)) FROM table_1 -
-
если нужно поменять order by?
достаточно создать таблицу и сделать insert into select * from ? -
на альтинити зачем-то указано через три таблицы
-
old, new and temp
-
Подскажите, пожалуйста, кто-то сталкивался при обновлениии на 23.3.1 (обновлялся с 22.2.2), что при старте судя по логам нормально стартует, удаляет tmp диры, инициализирует таблички, а затем просто чего-то ждет и в логи ничего не пишет?
strace -p 1182283
strace: Process 1182283 attached
futex(0x7ffe070b7ea0, FUTEX_WAIT_PRIVATE, 0, NULL
вот последние строчки в логе
2023.04.12 11:26:48.000408 [ 1182474 ] {} <Debug> pulse.top_stat_all_by_week_replicated (c0602bff-6917-4249-9293-7a2c14ec5f10): Initializing table shared ID with c0602bff-6917-4249-9293-7a2c14ec5f10
2023.04.12 11:26:48.001677 [ 1182474 ] {} <Information> pulse.top_stat_all_by_week_replicated (c0602bff-6917-4249-9293-7a2c14ec5f10): Became leader
2023.04.12 11:26:48.651357 [ 1182477 ] {} <Debug> pulse.kafka2ch_replicated (1621d954-3ecc-4d74-b21c-5f619faff387): Loaded 1251 outdated data parts asynchronously
2023.04.12 11:26:48.669412 [ 1182477 ] {} <Debug> pulse.top_stat_source_by_month_replicated (5a8df5a8-78c6-444d-b827-a419ce4ac4f0): Creating shared ID for table pulse.top_stat_source_by_month_replicated
(5a8df5a8-78c6-444d-b827-a419ce4ac4f0)
2023.04.12 11:26:48.670287 [ 1182477 ] {} <Debug> pulse.top_stat_source_by_month_replicated (5a8df5a8-78c6-444d-b827-a419ce4ac4f0): Initializing table shared ID with 5a8df5a8-78c6-444d-b827-a419ce4ac4f0
2023.04.12 11:26:48.672129 [ 1182477 ] {} <Information> pulse.top_stat_source_by_month_replicated (5a8df5a8-78c6-444d-b827-a419ce4ac4f0): Became leader -
Всем привет, дали вот такие граны
GRANT SELECT ON table TO user
REVOKE SELECT(email) ON table FROM user
GRANT SELECT ON view TO user
REVOKE SELECT(email) ON view FROM user
Привет этом запрос типа select id from view пишет что недостаточно привелегий, так как вьюха под капотом использует все столбцы. Можно ли как-то обойти такое? -
Есть вопросы по header:
- Я правильно понимаю, что это те колонки, которые читаются на каждом этапе запроса?
- Читаются ли все колонки из view при SELECT из него? Например:
CREATE OR REPLACE TABLE table_1 (
foo String,
bar String
)
ENGINE = MergeTree
ORDER BY foo;
CREATE OR REPLACE TABLE table_2 AS table_1;
CREATE OR REPLACE VIEW view_1
AS
SELECT * FROM table_1
UNION DISTINCT
SELECT * FROM table_2;
EXPLAIN header = 1
SELECT foo
FROM view_1;
Expression ((Projection + (Before ORDER BY + (Convert VIEW subquery result to VIEW table structure + Materialize constants after VIEW subquery))))
Header: foo String
Distinct
Header: foo String
bar String
Union
Header: foo String
bar String
Expression ((Projection + Before ORDER BY))
Header: foo String
bar String
ReadFromPreparedSource (Read from NullSource)
Header: foo String
bar String
Expression ((Projection + Before ORDER BY))
Header: foo String
bar String
ReadFromPreparedSource (Read from NullSource)
Header: foo String
bar String
Но
EXPLAIN header = 1
SELECT foo
FROM table_1;
Expression ((Projection + Before ORDER BY))
Header: foo String
ReadFromPreparedSource (Read from NullSource)
Header: foo String
В первом случае колонка bar отображается в header, во втором - нет. Почему так? -
Добрый день. Подскажите плиз
Имеетяс постгресс база и кликхауз. В кликзхаузе настроен MaterializedPostgreSQL. Правильно ли я понимаю, что изменение структуры базы в посгресс намертво ломает репликацию? -
"[экспериментальный] MaterializedPostgreSQL
Создает базу данных ClickHouse с исходным дампом данных таблиц PostgreSQL и запускает процесс репликации, т.е. выполняется применение новых изменений в фоне, как эти изменения происходят в таблице PostgreSQL в удаленной базе данных PostgreSQL.
Сервер ClickHouse работает как реплика PostgreSQL. Он читает WAL и выполняет DML запросы. Данные, полученные в результате DDL запросов, не реплицируются, но сами запросы могут быть обработаны (описано ниже)." -
не совсем понятно вот это не реплицируются, но сами запросы могут быть обработаны
-
Это значит что DDL сам не переползет из БД в БД, но с помощью настроек + ATTACH & DETACH можно таблицу перезагрузить (ну опять же насколько я понял документацию - сам не пробовал)
UPD - наверное я все таки не прав, и можно с помощью materialized_postgresql_allow_automatic_update -
детач не работает )
Received from localhost:9000. DB::Exception: Unknown setting materialized_postgresql_allow_automatic_update. (UNKNOWN_SETTING)
materialized_postgresql_allow_automatic_update - посмотрю, спасиб, но там же logical wal
он разве умеет изменения структурі? -
Пытаюсь получить данные из таблицы с использованием функции histogram
SELECT histogram(5)(myfield)
FROM (
SELECT myfield
FROM mydb.mytable
)
В итоге каждый раз получаю разные данные в ответе
Как сделать, чтобы результат был одинаковый всегда?
v 22.2.2.1 -
logical wal конечно нет но
"materialized_postgresql_allow_automatic_update
Позволяет автоматически обновить таблицу в фоновом режиме при обнаружении изменений схемы. DDL-запросы на стороне сервера PostgreSQL не реплицируются с помощью движка ClickHouse MaterializedPostgreSQL, поскольку это запрещено протоколом логической репликации PostgreSQL, но факт DDL-измененений обнаруживается транзакционно. После обнаружения DDL по умолчанию прекращается репликация этих таблиц. Однако, если эта настройка включена, то вместо остановки репликации, таблицы будут перезагружены в фоновом режиме с помощью снимка базы данных без потери информации, и репликация для них будет продолжена." -
UUID - это самый ужасный вариант для ID. По возможности надо этого избегать.
Если не получается сделать нормальный, мотононно растущий ID, то вставляйте в начало ORDER BY таблицы что-нибудь полезное и/или упорядочивающее этот рандомный порядок. Можно вставить ваш type. Неплохо получится с toDate(timestamp). На дедубликацию через FINAL это скорее всего не повлияет.
Aggregating by MV для таблицы с дубликатами в общем случае невозможно. Нужно делать CollapsingMT c этими sign=1/-1, но будут проблемы с добычей старый данных. Вытаскивать их из той-же таблицы будет не очень просто/быстро, лучше получать из OLTP. -
ORDER BY?
-
Кликхаус не гарантирует одинаковый порядок данных без ORDER BY
-
А, пардон, не увидел histogram
-
Надо попробовать.
Сейчас выяснил опытным путем. Что на маленьких таблицах все в норме.
На тех что побольше начинаются проблемы
Проблемные от 200 000 записей -
На удивление работает 🙂
Осталось только найти того безумца, который проверит “математику”
SELECT histogram(5)(myfield)
FROM (
SELECT myfield
FROM mydb.mytable
ORDER BY myfield
) -
-
😲
-
из документации: Рассчитывает адаптивную гистограмму. Не гарантирует точного результата.
-
это да
Но надо хотябы чтобы результат был одинаковый при каждом запросе -
кажется при такой формулировки это ожидать не стоит
-
Добрый день. Подскажите пожалуйста как провести проверку какие процессы внутри клика съедают больше всего памяти при пустом show processlist?
-
Посоветуйте пожалуйста
-
Всем привет! Свежеустановленный кликхаус не пускает по паролю. Куда смотреть?
-
users.xml
-
сокет слушает?
типо netstat -nlp | grep 9000 -
А вы уверены что проблемы с паролем?
-
хочу сделать некоторые честные тесты, но после первого квери. второй (такой же) выполняется намного быстрее
-
есть возможно сть сбросить кеши?
-
Всем привет! Ребята, подскажите, пожалуйста, у кого был опыт имплементации сложной бизнес логики ETL на кликхаусе (рекурсивный поиск, апдейты, мердж процедуры)? Подходит ли Clickhouse для этого?
-
Проведите тесты и эксперименты относительно своих данных. Так-то в ClickHouse можно имплементировать многое, но надо готовиться к костылям и обходным решениям.
-
Не похоже на пароль :)
-
-
в папке /etc/clickhouse-server/ есть только config.xml
-
Не уверен, что именно с паролем.
-
network error -- при чем тут пароль?
КХ не запущен
service clickhouse-server status -
-
кстати вы задали пароль при установке КХ
users.d/default-password.xml
можете удалить или исправить этот файл -
скажите в system.distribution_queue должно быть пусто или постоянно присутствующие строки где все по нулям тоже допускаются по типу таких:
Row 1:
──────
database: aaaaq
table: ggg
data_path: /var/lib/clickhouse/store/c07/c07e7aa8-d583-4011-af6e-d5100251f4b6/shard2_replica1/
is_blocked: 0
error_count: 0
data_files: 0
data_compressed_bytes: 0
broken_data_files: 0
broken_data_compressed_bytes: 0
last_exception:
last_exception_time: 1970-01-01 03:00:00
На одном шарде в таком виде, на другом пусто в этой табличке -
это нормально.
пока data_files не растет непрерывно, все ок -
спасибо
-
-
select * from t1
where id in (select id from t2
where id in (select id from t1)
) -
спасибо
-
Вы не можете просто давать на view доступы, а на таблицу не давать. Требуется доступы и на таблицу
-
нет, не подходит
-
Я даю доступ и на табилцу и на вью, вопроси в том что вью делает запрос на все колонки, и если у пользователя нет доступа на одну из колонок, вью при любом селекте говорит что нехаватает доступа, можно это как-то обойти?
-
Коллеги, доброго дня, подскажите, какой размер у типов данный в clickhouse Date и DateTime?
-
Какой клиент обычно юзают для клика?
-
родной
-
смотря чем ходить в него)
clickhouse-client -
Он и для администрирования и для разработки?
-
конечно
-
он же, по сути, сути сам КХ и есть ))
-
В смысле? Движок причём
-
Такой ещё вопрос, сейчас на рынке ищут чтобы и админили кластер, и разрабатывали витрины? Или по отдельности
-
Привет! По S3 в Clickhouse-backup: кто-нибудь сталкивался с тем какие конкретно пермишены надо на бакет задавать? Необходим один R/O, и один R/W юзер, но никак не получается их сконфигурировать.
-
спасибо за ответ, а можно побольше подробностей узнать?
-
Нет
-
Что такое размер ?
-
чтобы умел делать все и решать задачи, а в чем проблема?
-
сколько занимает в байтах одно значение
-
А какие тулзы помимо клиента ещё нужны для администрирования? Типа зукипера итд
-
вам вакансию что ли надо составить на DBA? 🤣
-
Не, собес на разраба и похоже там админство будет
-
Кхм, DateTime пол собой хранит стандартный timestamp
-
Ты его уже не прошел :)
-
Эмммм, уж простите, но разработчик должен знать не более чем SQL запросы и движки баз данных, но чот прям задавая вопросы такие, не думаю, что вы сможете пройти собес.
-
это детям рассказывай)
-
👍
-
То есть по вашей логике чел с бэкграундом ms/postgre предварительно почитав доку и посмотрев видосики не сможет пройти собес на ссанный кликхаус?)
-
А вы просто разработчик или разработчик баз данных? или вас берут на администратора?
-
Ну дык это нужно спрашивать в первую очередь) а то один ляпнул, второй повторил)
-
КХ не умеет или умеет отвратительно делать рекурсивный поиск, апдейты, мердж процедуры
-
Так вы не до конца рассказали о своем контексте, и да, если в вас есть желание или нет развиваться, то в случае когда вы идете на роль админа баз данных, вас могут взять с натяжкой в случае, когда ваши зарплатные ожидания не удовлетворяют выделенному бюджету на вакансии, или вы заваливаете собес на теоретических вопросах.
-
что делает вот этот SQL запрос
SELECT arrayFilter( (z,x) -> not arrayExists(i -> x%i=0 and x<>i, r) , (arrayMap(z->z+2, range(20))) as r,r) -
Ща хпт спросим)
-
-
В смысле можно банить?
-
Тут чо за духота хоть
-
еще спросите у gpt "how to change timezone in Clickhouse database"
-
ну гпт зачастую помогает, когда чатик игнорирует сообщения
-
а date тот же timestamp, только округленный до начала суток? ИГде это можно прочитать?
-
У меня другой вопрос, я как сюда не зайду, я вижу "кликхаус не умеет") чаму так?)
-
Нет, там кол-во дней вместо секунд
-
date - это целое, соответствующее числу дней
dateTime - это целое, соответствующее числу секунд -
mm КХ не умеет варить кофе? Не кофеварка. В чем вопрос-то?
Чего КХ не умеет конкретно? Рекурсивные запросы? Ну в КХ индекс разреженный, поэтому поиск по индексу относительно медленный, поэтому рекурсивные запросы будут работать примерно в 10000 раз медленее чем обычно, а КХ не тормозит. Ну и например рекурсивные запросы потребуют 2 человека года на разработку, а нужны 1% пользователей. Ну и смысл их разрабатывать? -
понял, но по размеру, если timestamp - это 8 байт, то date сколько? и где это документально увидеть?
-
Тут Яндекс подарил ошибку. Стал кидать вопросы с условием на поле Date, в формате dt IN (toDate32('2023-02-01’))
в итоге ошибка
Type mismatch in IN or VALUES section. Expected: Date. Got: Int64
Вот такое
select toDate32('2023-02-01')-toDate('2023-02-01');
дает ошибку
Illegal types Date32 and Date of arguments of function minus
Вопрос, можно ли под это как-то подстроиться или ждать пока они починят? -
timestamp (DateTime) это UInt32 -- 4 байта
DateTime64 -- UInt64 -
Да вроде в документации всё было
-
А оконки появились?
-
да вроде есть все в доке
https://clickhouse.com/docs/en/sql-reference/data-types/dateDate | ClickHouse DocsA date. Stored in two bytes as the number of days since 1970-01-01 (unsigned). Allows storing values from just after the beginning of the Unix Epoch to the upper threshold defined by a constant at the compilation stage (currently, this is until the year 2149, but the final fully-supported year is 2148).
-
в 2021
https://clickhouse.com/docs/en/sql-reference/window-functions#examplesWindow Functions | ClickHouse DocsClickHouse supports the standard grammar for defining windows and window functions. The following features are currently supported:
-
А джоины заработали по-человечески?
-
нет, очень сложная задача, 20-30 человеко-лет
-
А оптимизатор появился нормальный?
-
нет
-
ну кстати, возьмите starrocks, там все есть и он быстрее чем кликхауз и там стандартный sql
-
Строгая типизация до сих пор?
-
ну и всегда можно выполнить
select toInt16(today()), toInt32(now()),toUnixTimestamp64Nano(now64(9)); -
уже почти везде выпилили, к сожалению
-
И синтаксис стремный. Я поэтому и зашёл узнать, чо и как.
-
Добрый день. На version 23.2.4, не получается дать права пользователю из под default
(Code: 497. DB::Exception: Received from localhost:9000. DB::Exception: default: Not enough privileges. To execute this query it's necessary to have grant SHOW, SELECT, INSERT, ALTER, CREATE, DROP, TRUNCATE, OPTIMIZE, BACKUP, KILL QUERY, KILL TRANSACTION, MOVE PARTITION BETWEEN SHARDS, ACCESS MANAGEMENT, SYSTEM, dictGet, INTROSPECTION, SOURCES ON *.* WITH GRANT OPTION. (ACCESS_DENIED))
access_management = 1, на версии 22 таких проблем не наблюдается.
кто-нибудь сталкивался? -
я говорю, у нас новый король: starrocks, там все есть и он быстрее чем кликхауз и там стандартный sql
-
вероятно у вас access_management = 1 перекрывается
вчера как раз делал эту настройку в 23.3.1 - все ок -
RBAC access_management config does not grant ACCESS MANAGEMENT · Issue #47092 · ClickHouse/ClickHouse
Describe the unexpected behaviour Following steps in https://clickhouse.com/docs/en/operations/access-rights/#access-control-usage , I have a user defined in users.xml with <access_management>...
-
Ну пусть будет у работодателей)
-
забавно кстати
how to change timezone in Clickhouse database
To change the timezone in ClickHouse, you can follow these steps:
Connect to the ClickHouse server using a client such as clickhouse-client.
Run the SELECT timezone() query to check the current timezone setting.
To change the timezone, run the SET timezone = 'timezone_name' query, where timezone_name is the name of the timezone you want to set. For example, to set the timezone to US Pacific Time, you would run SET timezone = 'America/Los_Angeles'.
Run the SELECT timezone() query again to verify that the timezone has been set correctly.
Note that the SET timezone command only affects the current session, so you will need to run it again if you want to change the timezone for future sessions. Also, the timezone_name should be a valid timezone identifier from the IANA Time Zone database (e.g. America/Los_Angeles, Europe/Paris, etc.). -
интересно это он галюцинирует или предсказывает будущее или это одно и то же
-
он генератор текстов, он так накопипастил ))
-
-
достойно
-
Спасибо помогло. Необходимо добавить в users.xml
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets> -
+4 месяца, вместо часа
-
???
-
предположение
-
Всем привет! Вопрос такой. есть таблица в полем типа Array(UInt32). Стоит задача "развернуть" массив в строки и сгруппировать по количеству. Используется функция arrayJoin. Что то типа select arrayJoin(field_name) as alias_name, count() from table_name group by alias_name. Запрос работает крайне медленно. Есть способы улучшить производительность без изменений схемы хранения? Спасибо.
-
а у меня SET timezone = 'America/Los_Angeles';
не работает
:((
Exception: Setting timezone is neither a builtin setting nor started with the prefix 'custom_' registered for user-defined settings -
ну так я же говорил про будущее и gpt. В этом и был вопрос.
так будет работать, когда-нибудь, наверное к осени -
да и вот обидно, вы уже в нем, а я нет )
-
накидать железа
-
Как кх понимает, что надо в prewhere, а что нет?
-
-
Настройте listen_host
Должен быть 0.0.0.0
Ищите в доке -
двигаются маленькие по размеру колонки, которые не в PRIMARY KEY , индексные колонки как бы фильтруются до стадии prewhere, но в некоторых случаях их все равно имело БЫ смысл затолкать в prewhere, но КХ это не умеет, потому что это очень сложно определить без стоимостного оптимизатора
-
Ага, т.е лучше манипулировать вручную этим?
-
а я может глупый вопрос задам. но ведь в доке сказано, что order by заменяет индекс
-
или нет?
-
По умолчанию primary index совпадает с order by
-
Хотим обновить клик у себя в проде. Сейчас версия 21.11.2.2. Как лучше выбрать версию для обновления, переехать на последний stable или лучше на одну-две версии старше последней в репозитории? Може есть какие-нибудь подводные камни при обновлении? Хотим попробовать обновиться без даунтайма, сначала одну реплику шарда, затем вторую.
-
-
Добрый день. Инсерчу данные батчами по 20к-50k в несколько потоков. Иногда какие-то инсерты отваливаются с ошибкой: DB::Exception: Too large sizes of FixedString to deserialize: 1154506816. (TOO_LARGE_STRING_SIZE),. Если повторить инсерт еще раз все сработает.
Что можно сделать лучше? Может ли кто-то подсказатьч то я делаю не так?
(использую `clickhouse/clickhouse-server:23.2`)
P.S. в целом если снизить размерность батча инсерта до 10к, то никаких ошибок нет… -
прочитайте доку еще раз.
order by и primary key не одно и тоже, там есть раздел про то когда набор полей может отличаться в order by и primary key -
ту которую тестировали на стейдже
-
слишком мало инфомации
чаще всего проблема в клиенте, который неправильно формирует rowbinary
чем заливаете-то? -
-
питоном 🤷
-
Всем привет
Подскажите пожалуйста, как получить число посетителей из сырых данных logs api? -
Окей, понял, попробую подебажить, спасибо
-
primary key - это то что будет храниться в индексе в памяти
order by - это то как данные будут отсортированны -
наверное проще понять вот так
индекс есть всегда.
если есть секция primary key, значит index = primary key
если секции primary key нет, значи index = order by -
Доброго вечера, посоветуйте пожалуйста - в yandex cloud аналитики в скрипте из нескольких запросов создают временные таблички вида
create table app1.temp_table engine=Memory as select 'Что то там' as some_value, * from app1.events where ...;
что-то считают, складывают, следующим запросом в этом же пайплайне используют и тут же удаляют (это происходит раз в день, проблем с конкурентностью нет).
На clickhouse cloud база реплицируема и такой способ не проходит, ошибка:
CREATE AS SELECT is not supported with Replicated databases. Use separate CREATE and INSERT queries. (SUPPORT_IS_DISABLED) (version 23.3.1.30093 (official build)).
Можно ли как-то обойти ограничение/ошибку или лучше использовать другой "несложный" способ создания временных таблиц с заранее неизвестной и постоянно меняющейся структурой? -
Еще вопрос: я вставляю исторические данные и инсерты работают быстрее, чем мерджи в бэкграунде.
Правильно ли я понимаю, что расширив временно настройки:
<background_pool_size>40</background_pool_size>
<background_merges_mutations_concurrency_ratio>4</background_merges_mutations_concurrency_ratio>
<background_move_pool_size>36</background_move_pool_size>
<background_common_pool_size>36</background_common_pool_size>
я делаю бэкраунд мердж быстрее? Есть ли какие-то другие параметры которые можно потюнить для скорости? -
да, таким образом можно добится что сервер будет мержить всеми процессорами и дисками, и select 1 начнет выполняться 2 минуты, и инсерт 10 минут.
т.е. какбы какую проблему решаем? залить все очень быстро разово? тогда просто можно макс кол-во партов поставить 3000000 временно у таблицы и вставить -
(если инсерты мелкие, то имеет смысл лить через engine=Buffer)
-
Ага, понял, спасибо. А из-за количества партов диск вероятно сильно разбухнет?
-
Я подумал что можно просто отключить мерджинг, но диск съедало жутко :(
-
Спасибо, почитаю
-
Можно ли как-то попросить CH бросить все силы на мержи кусков? Пробую OPTIMIZE TABLE default.test_local FINAL получаю ошибку Code: 388. DB::Exception: Received from localhost:9000. DB::Exception: Cannot select parts for optimization: Part 202212_43560_43565_1 has already been assigned a merge into 202212_43560_43576_2 (in partition 202212). (CANNOT_ASSIGN_OPTIMIZE)
Максимально освободил CH от внешней нагрузки, чтобы тот помержил все куски, но он как-то расслаблено это делает, хочется проц и/или диск утилизировать по максимуму -
из-за кол-ва партов диск разбухнет? В смысле маленькие парты жмутся хуже чем большой? Или вы про inactive и 8 минут?
-
Маленькие парты жмутся хуже, да
-
background_pool_size
как его выставлять зависит от версии КХ
но вообще мерж естественно работает в один поток, поэтому большой мерж не распараллелить -
Спасибо! А какое разумное значение можно попробовать поставить, вижу что по дефолту 16, если поставить 64 или 128 или еще больше?
-
Increase `max_replicated_merges_in_queue` by alexey-milovidov · Pull Request #47050 · ClickHouse/ClickHouse
Changelog category (leave one): Performance Improvement Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Increase the default value of max_replicated_...
-
-
VPN в телеграме прям @webofrussia_vpn_bot лично я использую
-
💵Здравствуйте! Есть арбитражная cвязка внyтри бинaнca через BNB с прибылью 4-6%
💲Беру % от вашего ежедневного заработка.
✖️Не принимаю ваши деньги на свои счета и не беру никаких предоплат (как это делают мошенники)✖️
☑️Набираю даже людей без опыта. Если не разбираетесь,все обьясню и покажу
🟢По всем вопросам пишите в лс -
-
Подскажите пожалуйста надо ли изменять stripe_cache_size для RAID-0 mdadm?
Из 8 NVMe дисков 3.84Tb
Или из 4 NVMe дисков по 7.68 Tb -
stripe_cache_size имеет какое-то влияние только на raid5/6
-
Благодарю, а можете пояснить почему при RAID-0 не имеет значения?
- 13 April 2023 (115 messages)
-
Добрый день! Есть ли простой способ перетащить данные? Простой, ну как копирование папки.... роняем контейнер, архивируем папку, перетаскиваем на новое место, поднимаем контейнер. Сработает так?
-
ну если у вас докер персистент сторадж, не вижу проблемы
-
ловлю DB::assertResponseIsOk(), если я ловлю assert, это баг?
2023.04.13 05:53:09.484232 [ 184 ] {} <Error> default.test_local (9f9c7631-83b3-469e-95d0-375da4937c11): auto DB::StorageReplicatedMergeTree::processQueueEntry(ReplicatedMergeTreeQueue::SelectedEntryPtr)::(anonymous class)::operator()(DB::StorageReplicatedMergeTree::LogEntryPtr &) const: Code: 86. DB::Exception: Received error from remote server /?endpoint=DataPartsExchange%3A%2Fclickhouse%2Ftables%2Fbender%2F03%2Freports%2Fmaster_spots_map_v3%2Freplicas%2Frch3n1&part=202303_2845071_2845079_2&client_protocol_version=7&compress=false. HTTP status code: 500 Internal Server Error, body: Code: 232. DB::Exception: No part 202303_2845071_2845079_2 in table. (NO_SUCH_DATA_PART), 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) @ 0xa3ffe9a in /usr/bin/clickhouse
1. DB::Exception::Exception<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(int, fmt::v8::basic_format_string<char, fmt::v8::type_identity<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>::type>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0xa439ef8 in /usr/bin/clickhouse
2. DB::DataPartsExchange::Service::findPart(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x157dd583 in /usr/bin/clickhouse
3. DB::DataPartsExchange::Service::processQuery(DB::HTMLForm const&, DB::ReadBuffer&, DB::WriteBuffer&, DB::HTTPServerResponse&) @ 0x157dbe93 in /usr/bin/clickhouse
4. DB::InterserverIOHTTPHandler::processQuery(DB::HTTPServerRequest&, DB::HTTPServerResponse&, DB::InterserverIOHTTPHandler::Output&) @ 0x15c58bce in /usr/bin/clickhouse
5. DB::InterserverIOHTTPHandler::handleRequest(DB::HTTPServerRequest&, DB::HTTPServerResponse&) @ 0x15c594e5 in /usr/bin/clickhouse
6. DB::HTTPServerConnection::run() @ 0x15cc3c02 in /usr/bin/clickhouse
7. Poco::Net::TCPServerConnection::start() @ 0x18a2eb93 in /usr/bin/clickhouse
8. Poco::Net::TCPServerDispatcher::run() @ 0x18a2feed in /usr/bin/clickhouse
9. Poco::PooledThread::run() @ 0x18bf2849 in /usr/bin/clickhouse
10. Poco::ThreadImpl::runnableEntry(void*) @ 0x18bf0102 in /usr/bin/clickhouse
11. ? @ 0x7f9399a3d609 in ?
12. __clone @ 0x7f9399962133 in ?
(version 22.8.15.23 (official build)). (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER), 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) @ 0xa3ffe9a in /usr/bin/clickhouse
1. DB::assertResponseIsOk(Poco::Net::HTTPRequest const&, Poco::Net::HTTPResponse&, std::__1::basic_istream<char, std::__1::char_traits<char> >&, bool) @ 0xa60d430 in /usr/bin/clickhouse
2. DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::callImpl(Poco::URI, Poco::Net::HTTPResponse&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x15806857 in /usr/bin/clickhouse
3. DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::call(Poco::Net::HTTPResponse&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) @ 0x1580224c in /usr/bin/clickhouse
4. DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::initialize() @ 0x15800d62 in /usr/bin/clickhouse
5. DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::ReadWriteBufferFromHTTPBase(std::__1::shared_ptr<DB::UpdatablePooledSession>, Poco::URI, Poco::Net::HTTPBasicCredentials const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, unsigned long, DB::ReadSettin -
gs const&, std::__1::vector<std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >, DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::Range, DB::RemoteHostFilter const*, bool, bool, bool) @ 0x157fe887 in /usr/bin/clickhouse
6. DB::PooledReadWriteBufferFromHTTP::PooledReadWriteBufferFromHTTP(Poco::URI, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, DB::ConnectionTimeouts const&, Poco::Net::HTTPBasicCredentials const&, unsigned long, unsigned long, unsigned long) @ 0x157fe054 in /usr/bin/clickhouse
7. DB::DataPartsExchange::Fetcher::fetchPart(std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::__1::shared_ptr<DB::Context const>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, DB::ConnectionTimeouts const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Throttler>, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::optional<DB::CurrentlySubmergingEmergingTagger>*, bool, std::__1::shared_ptr<DB::IDisk>) @ 0x157e47d3 in /usr/bin/clickhouse
8. ? @ 0x156178c2 in /usr/bin/clickhouse
9. DB::StorageReplicatedMergeTree::fetchPart(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, unsigned long, std::__1::shared_ptr<zkutil::ZooKeeper>, bool) @ 0x1554e596 in /usr/bin/clickhouse
10. DB::StorageReplicatedMergeTree::executeFetch(DB::ReplicatedMergeTreeLogEntry&, bool) @ 0x1553f702 in /usr/bin/clickhouse
11. DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&) @ 0x1552d340 in /usr/bin/clickhouse
12. ? @ 0x156152bf in /usr/bin/clickhouse
13. DB::ReplicatedMergeTreeQueue::processEntry(std::__1::function<std::__1::shared_ptr<zkutil::ZooKeeper> ()>, std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::__1::function<bool (std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>) @ 0x15ab3a65 in /usr/bin/clickhouse
14. DB::StorageReplicatedMergeTree::processQueueEntry(std::__1::shared_ptr<DB::ReplicatedMergeTreeQueue::SelectedEntry>) @ 0x15576ebc in /usr/bin/clickhouse
15. DB::ExecutableLambdaAdapter::executeStep() @ 0x15615f51 in /usr/bin/clickhouse
16. DB::MergeTreeBackgroundExecutor<DB::OrdinaryRuntimeQueue>::routine(std::__1::shared_ptr<DB::TaskRuntimeData>) @ 0xa3cd7db in /usr/bin/clickhouse
17. DB::MergeTreeBackgroundExecutor<DB::OrdinaryRuntimeQueue>::threadFunction() @ 0xa3cd450 in /usr/bin/clickhouse
18. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0xa4c4126 in /usr/bin/clickhouse
19. void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&)::'lambda'(), void ()> >(std::__1::__function::__policy_storage const*) @ -
0xa4c5a77 in /usr/bin/clickhouse
20. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xa4c1a48 in /usr/bin/clickhouse
21. ? @ 0xa4c4c5d in /usr/bin/clickhouse
22. ? @ 0x7fd4d0302609 in ?
23. __clone @ 0x7fd4d0227133 in ?
(version 22.8.15.23 (official build))
И clickhouse перезапускается -
Можно через freeze partition, copy + attach
https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#freeze-partitionManipulating Partitions and Parts | ClickHouse DocsThe following operations with partitions are available:
-
спасибо
-
сработает
-
Добрый день! Подскажите пожалуйста по кейсу:
Есть таблица key, tag1, tag2, tag3, tag4.
Пытаюсь создать MV на AggrMT c group by key.
1)Нужны уники tag1 - AggregateFunction(groupUniqArray, UInt16)
2)Нужны уники (tag2, tag3), если (tag3!=key И tag3!=null) - AggregateFunction(groupUniqArrayIf, Tuple(UInt64,Nullable(UInt64)),UInt8)
3)Нужны уники tag4 и число сколько раз встретилась комбинация (key, tag4)
Можно ли это сделать в одной MV?
groupUniqArrayIf - можно ли использовать в п.2?
Какую агрегатную функцию использовать в п.3? -
-
🔥Есть арбитражная cвязка внутри Бинанса 🔥
💸Профит 5-6% с круга 💸
Если не работали со связками то помогу обучится всему с нуля
💰Моя выгода: % от прибыли 💰
❌Деньги под свое управление не беру ❌
💥БЕЗ ОБМЕННИКОВ 💥
Кому интересно, пишите в лс ✅ -
Давайте уже бота что ли поставим антиспам) запарили разводилы
-
У мудачья и криптоблядей весеннее обострение. Да, @maaxxximm?
-
Доброго времени суток, хочу у кластера из 2-нод сменить машину зукипера, для версии 22.8.5 только смены адреса зукипера достаточно или в этой версии так нельзя?
-
Всем привет! Подскажите, пожалуйста, может есть какие-то способы оптимизации словарей (помимо Join таблиц)?
Есть словарь с атрибутами товаров, довольно большой около 50 Гб и около 1 млрд строк
Работает довольно медленно, часто возникают ошибки TOO_SLOW, либо превышение ожидаемого времени выполнения
Источник таблица на локалхосте, размещается в памяти как hashed_array -
Too slow скорее всего от диска а не словаря
-
-
Сколько словарь памяти жрет?
-
48 Гб
-
А сколько по времени словарь грузится?
-
Кстати, какие в целом преимущества словарей перед JOIN-ами к таблицам?
Если есть таблица-словарь в MYSQL, в чем преимущество создания словаря из этой таблицы перед простым JOIN к таблице с движком MySQL?
По запросам, которые я тестил, JOIN занимает меньше оперативы и времения для выполнения по сравнению со словарем и запросами dictGet -
-
какой движок словаря используете для вычитки из mysql?
-
HASHED обычно
-
словарь простейший, небольшой
-
в районе 50к строк
-
для некоторых словарей complex_key_hashed, но там уже словари в 500-600 записей, разницы никакой при join-ах и запросах к словарю нет
но если таблица и словарь какой то +- средний/большой размер имеют, то джоин выигрывает у словаря по производительности, хотя я думал, что будет наоборот -
а как вы оцениваете скорость запросов? в query_log, clickhouse-client смотрите?
-
и там и там смотрел
-
словарь через dictGet используете?
-
не то, чтобы полноценное исследование проводил
но на глаз была заметна разница -
да
-
круто тогда, если у вас это быстрее и лучше работает, можете скинуть пруфы какие-нибудь в pastila, например
лучше конечно код запроса показать -
По памяти поправка занимает 57 Гб, по загрузке 19 минут
-
Всем привет! Как правильно называются в CH выражения в {}? Например, {cluster}. Хочу про это почитать. Если поделитесь ссылкой - плюсик в карму.
-
macros?
-
Вроде да, но что то не гуглится по "Clickhouse macros" ничего толком
-
Репликация данных | ClickHouse Docs
table_engines-replication}
-
macros в ctrl + f
-
А есть у кого-нибудь пример бэкапа CH в кроне по расписанию?
-
-
Добрый день!
Подскажите по
ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
не очень понимаю про join_strictness
если будет INNER JOIN и LEFT JOIN? -
Очередь на репликацию при этом не увеличилась?
Надо смотреть что много инсертит в КХ и какими чанками, если кривой сервис который вставляет по одной строчке то дело в нем. -
Данные вставляем через кафку
-
Все сервисы через кафку вставляют? 100%?
-
да
-
нашел, сделал, получилось. спасибо большое. а можете подсказать как сделать тоже самое, только если у меня на этой виртуалке убунтовской докер с образом клик хаус.? я в сам докер зашел, поменял лист хост, но извне (с железки) все равно нет доступа
-
Читайте про проброс портов в докер на docs.docker.com
-
благо дарю вам
-
Было недавно такое, но причина была в сервисе который писал не чанками в КХ.
Может кто то более опытный подскажет вам. -
И еще попробуйте такой запрос выполнить, может что то прояснится:
SELECT count(), table FROM system.replication_queue group by table; -
я затупил. я просто забыл -p выставить в команде. спасибо еще раз
-
-
очень тупой вопрос, наверное, но - где найти документацию по State-функциям, хотя бы по самому argMaxState? поиск по доке не выдает ничего
-
кажется, вот это оно https://clickhouse.com/docs/en/sql-reference/aggregate-functions/combinators#-stateAggregate Function Combinators | ClickHouse Docs
The name of an aggregate function can have a suffix appended to it. This changes the way the aggregate function works.
-
Открываем карты для оплаты заграницей 🌍
• Работает в любой точке планеты
• Пополнение в рублях
• Быстрый выпуск,доставка пластика прямо до вас
Так-же изготавливаем криптокарты
Оплачиваем отели и авиабилеты
Проверенный сервис ✅
Пишите -
Добрый день!
Подскажите пожалуйста,
когда работаешь с системными топиками nats для update сведений по аккаунту (jwt) создается temporary пользователь под SYS аккаунтом, это делается для того, чтобы токены были отличные при каждом запросе?
можно ли работать с одним токеном с большого количества соединений? -
-
отлично, спасибо
-
Добрый день!
есть ли лучшее решение для группировки не пустых элементов в массив чем его фильтрация через arrayFilter? Пробовал еще groupArrayIf(...) но там приходится дублировать извлечение элемента
arrayFilter(x->notEmpty(x), groupArray((arrayElement(`answers.comment`,indexOf(`answers.question_id`, 59623))))) -
добрый день! подскажите, а есть ли хотя бы теоритическая возможность подружить клик с EBS снэпшотами в AWS? проблема, которая ломает всю красоту в том, что во время работы некоторые парты не fsync-ты с диском, и в снэпшоте образовываются битые файлы. было бы приемлимо это терпеть на "новых" партах (по сути, поломанные последние парты эквивалентны запуску бэкапа чуть раньше), но это ведь могут быть какие угодно парты, в том числе из далекого прошлого (если идут мержи)
-
Ну и что? Если был мерж то старые парты еще не удалены(8 мин не прошло), так что из них можно повторить
-
мержи не могут. Там защита 8 минут (неактивные парты)
Я не вижу проблемы, все вокруг используют снэпшоты в AWS как бекап КХ, это ровно тоже самое что и внезапный рестарт, да, инсерт недавний сломается, это ровно тоже самое как если бы бекап случился на 10 сек. раньше. -
про недавние инсерты – да, устраивает, про то и писал.
про "поломанные" парты – но ведь тогда придется искать руками старые парты и как-то их включать заново? грубо говоря парты А и Б мержатся в С, клик пишет С на диск, но из-за отсутствия fsync С оказывается битый – к этому моменту А и Б будут выключены. или я чего-то не знаю/упускаю? -
Настройки MergeTree таблиц | ClickHouse Docs
merge-tree-settings}
-
Во время запуска сервер ClickHouse проверяет целостность кусков. Если новый (слитый) кусок поврежден, ClickHouse возвращает неактивные куски в список активных и позже снова выполняет слияние. В этом случае испорченный кусок получает новое имя (добавляется префикс broken_) и попадает в каталог detached. Если проверка целостности не выявляет проблем в слитом куске, то исходные неактивные куски переименовываются (добавляется префикс ignored_) и перемещаются в каталог detached.
-
ой, так это просто прелесть, спасибо!
-
Иначе КХ бы терял данные с каждым рестартом железа
-
Всем привет!
Строим в компании аналитическое хранилище, есть несколько таблиц фактов с общим объемом 16 млрд записей (примерно 2ТБ), хотим запустить туда примерно 40 человек пользователей, которые будут постоянно бросать туда простенькие запросы с GROUP BY/ORDER BY.
Прикидываем кол-во ресурсов на сервер, из доков КХ не совсем понятно какая зависимость от CPU/RAM, подскажите, на что обратить внимание? Какую конфигурацию лучше использовать? -
Берете 4 пользователей, делаете тест, экстраполируете на 40. Других вариантов нет.
-
Добрый день! Использую движок баз данных MaterializedPostgreSQL, но в реплицируемых таблицах не обновляются данные при изменении в Postgre, подскажите, как можно решить эту проблему?
-
А с чего начать по мощности? 64/128/256 ГБ оперативки. Хотелось бы на предварительном этапе понять, какой сервер нужен.
-
64
-
А если говорить про конфигурацию, которая с 90% вероятностью выстоит, то есть можно взять ресурсов с запасом, что бы вы могли посоветовать? Времени на тесты нет, требуют цифры…
-
В стейдже нет того количество данных и ETL-процессов, что есть на проде, увы(
Обновилось в стейдже без проблем, но это не гарант, что на проде что-нибудь не выстрелит в процессе обновления -
Можно ли сделать ttl на поле с типом AggregateFunction? Или SimpleAggregateFunction?
-
Scaling out | ClickHouse Docs
Description
-
Конфигурационные файлы | ClickHouse Docs
https://clickhouse.com/docs/ru/operations/configuration-files#configuration_filesКонфигурационные файлы | ClickHouse Docsconfiguration_files}
-
Или вот на русском
-
Спасибо!
-
Если кто то поделится своими скриптами по бэкапам в кроне - буду безмерно благодарен!
-
GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
Tool for easy ClickHouse backup and restore with cloud storages support - GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
-
тут идет резервное копирование через утилиту clickhouse-backup. А если без нее, встроенными средствами?
-
Backup and Restore | ClickHouse Docs
In order to effectively mitigate possible human errors, you should carefully prepare a strategy for backing up and restoring your data.
-
-
Так а какие тогда скрипты нужны?
Нужно просто например через clickhouse-client -q "BACKUP DATABASE ..."
Одна строчка. -
Тут общая информация о бэкапе.
У меня есть скрипты, которые делают полный+дифф бэкап.
Я хочу их положить в крон, чтобы они проходили по расписанию
А какой скрипт нужно положить в крон я не понимаю -
Ну так это не вопрос к кликхаусу, а к тем, кто ответственен у вас в отделе за это :)
-
Это разовый бэкап. Я хочу настроить, чтобы в имени файла было имя даты, иначе он повторно не создаться.
-
а у вас как это сделано? Можете поделиться решением?
-
Не могу, у меня соглашение по неразглашению информации.
-
можно же обезличить, меня интересует как к файлу бэкапа мапится дата и делает его уникальным
-
-
Да, но весь вопрос в том, что нужно добавить, чтобы имя бэкапа было уникально при создании(типа переменной в виде даты)
-
на чём у Вас скрипты?
-
можно хэш попробовать, можно дату, просто в скрипте сделать это вроде проще, а гуглится на раз-два:
https://unix.stackexchange.com/questions/96380/how-to-append-date-to-backup-filenameHow to append date to backup filenameI need to make a backup of a file, and I would like to have a timestamp as part of the name to make it easier to differentiate. How would you inject the current date into a copy command? [root@...
-
00 23 * * 07 clickhouse-client --query="BACKUP DATABASE бла-бла TO Disk('backups','ctage_1_1_2');" --password=бла-бла --user бла-бла
Вот мой скрипт, я его закинул в крон. -
Нужно, чтобы имя бэкапа(я так полагаю) содержало дату и при каждом создании бэкапа было уникально. Этим скриптом 1 раз создасться только бэкап.
-
это не скрипт, а запуск клиента КХ. его нужно в скрипт положить и вызывать скрипт уже. Сам скрипт что-то типа
#!/bin/bash
backupsuffix=$(date +%Y%m%d)
clickhouse-client --query="BACKUP DATABASE бла-бла TO Disk('backups','backupfilename_${backupsuffix}');" --password=бла-бла --user бла-бла
ссылку на возможные варианты суффиксов Вам уже дали -
Спасибо большое!
-
Всем привет! Подскажите чем проще и быстрее близко к реалтайму реплицировать postgres -> clickhouse?
Может кто пробовал Altinity Replicator for ClickHouse (Lightweight version)? -
Здравствуйте, кто-нибудь может подсказать, почему SummingMergeTree пустое?
https://fiddle.clickhouse.com/ef1ef503-420d-4ce9-a7cc-43fa7c56e891 -
sum(sells) as sells
по именам вставка идет
https://fiddle.clickhouse.com/7c97435f-860c-4f99-a50d-c2cf8965606d
вы вставляет 0 в колонку sells, summingMT не хранит строки и 0. -
Сегодня читал https://clickhouse.com/docs/en/engines/database-engines/postgresql, как раз хотел попробовать...PostgreSQL | ClickHouse Docs
Allows to connect to databases on a remote PostgreSQL server. Supports read and write operations (SELECT and INSERT queries) to exchange data between ClickHouse and PostgreSQL.
-
спасибо, постоянно про это забываю, как то кажется что порядка колонок достаточно. Про 0 вообще неочевидно, получается 1 и -1 схлопнется как в CollapsingMergeTree.
-
ну это все есть в доке
просто никто не читает, непонятно что делать -
-
-
Как отформатировать map?
SELECT возвращает json, а нужен формат таблицы field - value
Размер небольшой, до 10 строк, но нужен чистый текст -
Хорошо скажется
-
cdc debezium, писать в versioned collapsing mt
-
Это прокси к посгре, мутации сложно обрабатывать
-
А таймзоны которые GMT+x криво работают что ли? Ощущение что + и - перепутаны.
toStartOfHour(now(), 'UTC') -> 2023-04-13 23:00:00
toStartOfHour(now(), 'Europe/Moscow') -> 2023-04-14 02:00:00
toStartOfHour(now(), 'Etc/GMT+0') -> 2023-04-13 23:00:00
toStartOfHour(now(), 'Etc/GMT+3') -> 2023-04-13 20:00:00
toStartOfHour(now(), 'Etc/GMT-3') -> 2023-04-14 02:00:00 -
-
- 14 April 2023 (107 messages)
-
скажите, в чем может быть проблема в следующем сценарии: есть CH и есть какие-то запросы. В режиме без нагрузки запрос выполняется за 0.1-0.3 секунды. всё супер. Подключаем графану и запросов становится много (точное кол-во не скажу, но в пределах 15-20 сессий от клиентов с рефрешем от 1 до 5 секунд). После этого тот же запрос в clickhouse-client начинает выполняться 3-10 секунд. Грешил на IO, но iotop не показывает никакой нагрузки, памяти 220гигов, занято только 10 гиг, нагрузки на CPU тоже нет.
Более того. после апдейта 22.12 на 23.3 ситуация стала хуже, если на 22.12 запросы были 1-4 секунды, на 23.3 теперь 3-8 секунды -
chproxy смотрели? Чтобы ограничить количество сессий к КХ как минимум
-
нет, сейчас почитаю, это что-то типа pgbouncer?
-
добрый день!
есть json такого вида:
{"EventDateTime":"2023-03-31T15:22:19","EventType":"BALTHD","Msisdn":"996221202407","RequestID":"17521718","Source":"DBSS","TransactionID":"17521718","CampaignID":"","Value":"","Duration":"","ExpiryPeriod":"","GenericParams":{"KeyValueOfstringstring":[{"Key":"balanceId","Value":"683091"},{"Key":"threshold","Value":"0"}]}}
подскажите как извлечь вложенные значения через JSONExtract? например GenericParams.KeyValueOfstringstring[0].Value ? -
Ну типа, главный плюс от него вот в этой фичи на селетк https://www.chproxy.org/configuration/cachingCaching
undefined
-
Вы внизу написал JSON_QUERY ? https://clickhouse.com/docs/en/sql-reference/functions/json-functions#json_queryjson-pathjson-functions | ClickHouse Docs
There are two sets of functions to parse JSON.
-
спасибо!
-
пытаюсь поменять order by
https://kb.altinity.com/altinity-kb-schema-design/change-order-by/
но все мои запросы выдают partiton как tuple()How to change ORDER BYHow to change ORDER BY.
-
и мне не понятно, зачем всё-таки в данном солюшн используется помимо old/original table еще и temp table?
-
можно аттачить и tuple() - это значит, что у вас нет партиции
-
но как?
-
Code: 248. DB::Exception: Received from localhost:9000. DB::Exception: Invalid partition format: tuple(). (INVALID_PARTITION_VALUE)
-
-
ага, без ID
-
спасибо
-
просто по-разному можно сделать, в примере, сначала ренейм делают, а дальше создают со старым именем, старой структурой полей, но с разным ключом ключом.
Можете просто сделать рядом темп таблицу, туда перелить, пересоздать старую и залить данные из темповой. как вам удобнее -
почему нельзя сделать rename table to table_old
create table with new order by
insert to table select * from table_old -
т.е. не понимаю, зачем три таблицы
-
можно
-
уффф, спасибо. я уж думал, что какой-то скрытый смысл в 3х таблицах есть
-
ну там 3 пункт есть же)
-
правильно, но в моём примере же остаётся create table with new order by
-
если у вас нет МВ или еще каких-то зависимостей, то это не проблема. Мало ли у вас на таблице, которую вы хотите изменить висят мв, и при переливе у вас задублируются данные из-за инсерта
-
ахххх
-
мерси
-
добрый день.
есть MV таблица, которая смотрит на mysql в докер-сварме. Соотв, если контейнер с mysql переедет на другую ноду, то будет проблема.
Как можно это решить?
CREATE TABLE pp.mysql_countries ON cluster pp_cluster
(
`id` UInt32,
`iso` String,
`continent` String,
`name_ru` String,
`name_us` String
)
ENGINE = MySQL('dsw01-htz-de:3306', 'pp', 'countries', 'clickhouse', 'PASSWORD'); -
Сделать https://clickhouse.com/docs/en/operations/named-collections и заменить строку подключенияStoring details for connecting to external sources in configuration files | ClickHouse Docs
Details for connecting to external sources (dictionaries, tables, table functions) can be saved
-
-
Здравствуйте!
Подскажите пожалуйста, как правильно переименовать базу в кластере?
Переименовываю:
RENAME DATABASE My_DB TO My_DB__OLD ON CLUSTER main_cluster;
проверяю:
SHOW DATABASES;
всё ок, база переименована
делаю запрос:
SELECT * FROM My_DB__OLD.table;
получаю ошибку:
DB::Exception: Database My_DB__OLD doesn't exist. (UNKNOWN_DATABASE)
смотрю в zookeeper - там база называется по-старому -
переконнектились ?
-
-
-
-
Всем привет!
Не пойму как сделать эндпоинт через HTTP Interface, который будет отдавать HTTP status в зависимости от результата запроса. https://clickhouse.com/docs/en/interfaces/http
Идея в том, чтобы сделать k8s httpGet Liveness Probe эндпоинт и при отсутствии данных в CH перезапускать контейнер.
Вариант через exec понятен, но хотелось бы без изменения самого контейнера.HTTP Interface | ClickHouse DocsThe HTTP interface lets you use ClickHouse on any platform from any programming language in a form of REST API. The HTTP interface is more limited than the native interface, but it has better language support.
-
Всем привет! коллеги, подскажите пожалуйста - настройка max_memory_usage_for_user "пляшет" в зависимости от нод. Запускаю запрос для чтения настройки и вижу на 5 из 6 нод значение 90750000000, а на 6-ой ноде значени 0. Почему так происходит?
-
Добрый день. Подскажите, пожалуйста, как объединить все строки в массив с массивами?
Например, есть результат
┌─total_tansactions─┬─transactions_success─┬─transactions_fail─┐
│ 95 │ 85 │ 10 │
│ 856 │ 428 │ 428 │
│ 1204 │ 614 │ 590 │
│ 897 │ 475 │ 419 │
└───────────────┴─────────────┴──────────────┘
Я хочу получить:
[[95, 85, 10], [856, 428, 428], [1204, 614, 590], [897, 475, 419]] -
может быть ее кто-то изменил в конфиге?
select * from system.settings where name='max_memory_usage_for_user'
если изменено значение changed=1 будет -
Именно этот запрос и показывает что он равен 0 на одной из 6 нод, а все остальные 90750000000, страннсть в том, что при повторном запуске нода, на которой этот параметр отличается от других будет уже другая
-
мб и проще можно, но вот что сходу вспомнилось
https://fiddle.clickhouse.com/3d547917-c055-404d-9b5d-e437acf5b454 -
Не совсем то. Он по колонкам объединяет, а мне именно по строкам надо
-
Select groupArray(array(col1,col2,col3)) но столбцы должны быть одного типа
-
значит наоборт надо cначала обернуть колонки в array, потом groupArray
-
-
Приветствую! Помогите, пожалуйста, разобраться, как работает настройки max_bytes_before_external_sort и max_bytes_before_external_group_by. Правильно ли я понимаю, что при достижении максимального значения памяти выставленного в этих параметрах для сортировки и группировки соответственно, сервер начинает выгружать результаты этих операций на диск и продолжает операции с этими данными?
-
Да. Только не забывайте, что в самом конце работы запроса все эти промежуточные результаты будут подтягиваться разом в оперативку и если их размер превысит доступный объем, вы все равно можете получить out-of-memory.
-
ага, понятно. То есть прежде чем на инициаторе включился этот механизм нужно, что бы он получил весь этот обьем данных, а обьем большой и получаем MEMORY_LIMIT_EXCEEDED. Что тут можно предпринять? distributed_aggregation_memory_efficient = 1, LIMIT на запросе, увеличение памяти и max_memory_usage, куда еще можно посмотреть?
-
коллеги, подсткажите плиз еще вопрос:
у нас 6 нод, на 3ей ноде показывает настройку max_memory_usage_for_user = 0 при запросе
SELECT hostName() AS hostname,
*
FROM clusterAllReplicas('cluster_name', 'system', 'settings')
where name = 'max_memory_usage_for_user'
а при запросе select * from system.settings where name = 'max_memory_usage_for_user' показывает там значение как и на всех остальных нодах. Оба запроса выполняются на 3ей ноде -
max_bytes_before_external_group_by
max_memory_usage
max_threads
aggregation_memory_efficient_merge_threads
optimize_aggregation_in_order -
Ну и join_algorithm, который сейчас в hash выставлен, видимо в auto?
-
Всем привет! Пытаюсь создать таблицу и мне выдается ошибка Code: 497. DB::Exception: : Not enough privileges. To execute this query it's necessary to have grant CREATE TABLE ON clickhouse1.hits. (ACCESS_DENIED) (version 22.8.15.23 (official build))
Захожу через sql (https://clickhouse.com/docs/en/cloud/users-and-roles), пытаюсь добавить админа, но и там аналогичная ошибка.
CH на яндекс клауд.
Подскажите где и как поменять роль и решить ошибкуUsers and Roles | ClickHouse DocsIf you are working with self-managed ClickHouse please see SQL users and roles.
-
а в WITH можно определять лямбды и передавать их в как ФВП?
-
привет! а может кто помочь понять, должен ли слот логической репликации в PostgreSQL быть active=true или нет, при испольовании связки с кликом на движке MaterializedPostgres.
настроили реплику с Postgres на движке MatreilizedPostgresql и слот на мастеровой бд висит в active=false. вроде где-то в ишьюс читал что слот используется только для первичного слепка базы. но официальных доков на эту тему не нашел.
но видеть алерт о том, что слот репликиции лежит - так себе. заранее спасибо! -
разобрался, в старых версиях нельзя
-
<access_management>1</access_management> у пользователя, под которым вы пытаетесь сделать эту операцию
https://clickhouse.com/docs/ru/operations/settings/settings-usersНастройки пользователей | ClickHouse Docsnastroiki-polzovatelei}
-
Добрый день коллеги, подскажите пожалуйста, использую для бэкапа клика clickhouse-backup, провожу тестовое восстановление, удаляю базу и при ресторе выдают такую партянку
"apping for table with UUID=37173e82-d7db-4bf4-b717-3e82d7db9bf4 already exists. It happened due to UUID collision, most likely because some not random UUIDs were manually specified in CREATE queries. after 15 times, please check your schema dependencies"
и через непродолжительное время все таки дает восстановить базу, он не чистит метаданные или в схеме еще какое то время хранится эта информация?
Может кто знает как это пофиксить, буду благодарен, в гугле особо ничего похожего не нашел -
кажется только с включенным аналайзером, но он еще не в релизе
-
drop database .... sync
8 минут, корзина, Атомик датабейз -
А можно как-то вернуть из корзины?
-
в новой версии добавили undrop
-
благодарю
-
ну руками всегда можно было
-
это 23.*? или какая новая?
-
23.3
-
https://github.com/ClickHouse/ClickHouse/blob/master/CHANGELOG.md
Support for UNDROP TABLE query. Closes #46811. #47241 (chen).ClickHouse/CHANGELOG.md at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Всем привет!
Где в своем https://clickhouse.cloud/ узнать host и port? -
ClickHouse Cloud Quick Start | ClickHouse Docs
The quickest and easiest way to get up and running with ClickHouse is to create a new
-
Спасибо
-
-
Я правильно понимаю что если мы несколько раз используем подзапрос с with, то он несколько раз перевыполняется? Нельзя его в рам закешить?
-
WITH работает с ближайшим к нему снизу SELECT-ом
-
спасибо
-
Кстати - можно как-то заставить кликхаус предпосчитать CTE, а не делать пушдаун вызова функции из основного запроса в CTE?
Это кажется называется Materialize CTE -
КХ не умеет в материализацию CTE
-
Жаль, спасибо(
-
видимо 0. хотя роли нужные он показывает
но я не совсем понял как это сделать во встроенном sql редакторе -
-
не могу понять почему не может работать через named connection, пишет не такого
-
зависит от того в каком каталоге лежит xml и был рестарт или нет
-
-
-
да
-
-
-
а никак
-
нет такой фичи
-
-
-
но НЕ применяется
-
-
-
-
да все знают, еще в 2016 все объяснили в этом чате
-
-
-
-
Server config files
How to manage server config files in Clickhouse
-
Есть запрос
SELECT * FROM (
SELECT ПоследнееИзмерениеДоПериода
UNION ALL
SELECT ИзмеренияЗаПериод
UNION ALL
SELECT ИзмерниеПослеПериода
)
ORDER BY timestamp
Т.е. "внешняя" выборка только для того чтоб значения трех запросов отсортировать
Можно как-то без него обойтись? -
Queries that are parts of UNION can be enclosed in round brackets. ORDER BY and LIMIT are applied to separate queries, not to the final result. If you need to apply a conversion to the final result, you can put all the queries with UNION in a subquery in the FROM clause.
-
чет не догоняю смысла
-
you can put all the queries with UNION in a subquery in the FROM clause
То есть написано, что делать как вы и написали) -
Всем привет!
В таблице есть поле, который содержит {'name': ['TEST'], 'surname': ['TEST2']}
Можете плиз подсказать как вытащить значение name? -
json-functions | ClickHouse Docs
There are two sets of functions to parse JSON.
-
Разве для Json не должны быть двойные кавычки?
-
Точно. Сорян 🙈
-
классная структура, у вас реально имена так хранятся или это замаскированные какието другие данные?)
-
Данные замаскированные, на самом деле в кафке это Json, в клике сохранили все в одно поле
-
А почему кавычки одинарные если в кафке json?
- 15 April 2023 (53 messages)
-
Если так и лежит в КХ, то выглядит как map тип, в значениях которого массив. Извлекать тогда нужно select your_field['name'] from table; далее что хотите делайте с массивом
-
Игровая площадка ClickHouse
https://fiddle.clickhouse.com/8d5cfe2a-3f48-4f4c-b337-aed8abfcffa0
@yelnarmurat -FYI -
Всем привет, если вдруг кому то нужен числовой авто-инкремент для таблицы то вот моя поделка. https://fiddle.clickhouse.com/8b03fd64-b7d6-4bad-9950-10331d409383
-
Если разбиение на периоды правильное (нет аномалий) и сделано по тому же полю, что order by, никто не мешает засунуть order by в каждый запрос и убрать внешний select.
Update. Пардон, это вранье, у CH нет определенного порядка в результате union, все может быть перемешано, т.е.внешний select действительно необходим. -
SELECT ИзмеренияЗаПериод ORDER BY timestamp
А первый и третий запрос там всего по одному значению возвращается -
внешний селект с ордером для того чтоб первый и третий запрос всегда были в начале и в конце выборки
-
IMHO при параллельных вставках работать не будет
max будет повторяться
Ну и cpu будет жрать как не в себя насилуя pk в памяти -
Всем кому нужен автоинкремент
Стоит прочитать про snowflake Id и генерировать его на стороне приложения -
Генерировать на стороне приложения можно и более простым способом, я предложил способ не зависящий от приложения
-
Про cpu согласен, про параллельные вставки нет если их пустить через асинхронный инсерт, это же и нагрузку на cpu нивелирует.
Max(id) к тому же вычисляется 1 раз на одну вставку. Если вставка большой пачкой строк и не чаще раза в секунду, то не критично для cpu это будет -
Подскажите, плиз, если создаётся новая replicated табличка (новая версия, с другим путем), то старая в зукипере сама удалится или нужно их как-то чистить?
-
По моему в предложенной схеме getMax будет для каждой строки вызываться как default expression при вставке
-
Старая таблица как удалялась? Через drop table?
-
А может и нет, ведь пока транзакция не прошла, будет один и тот же результат, будет ли выражение на кадой строке выполняться, как бы проверить...?
-
Думаю да, мы dbt используем и не уверен как он под капотом перезагружает таблицу. Скорее всего он создаёт тмп таблицу а потом exchange делает и дроп тейбл временной
-
Ну а откуда тут метризация возьмётся?
-
Надо смотреть
Временная таблица вроде не умеет в replicated
Ну или у вас обычная ReplicatedMergeTree
С префиксом в имени
И тогда drop table почистит zookeeper
Но надо смотреть какой там replication_path тогда и есть ли ещё реплики на этот путь -
Роман Болдырев:
ClickHouse Playground
https://fiddle.clickhouse.com/a5e9543a-440d-48d5-a6f2-1f0bba2b3086
Судя по тому как КХ преобразует запрос, могу предположить что он 1 раз считает выражение. -
Кажется слышал от Алексея Миловидова, что считается 1 раз выражение
-
Добрый день!
Дает ли какой-то профит SimpleAggregateFunction
в сравнении с
AggregateFunction
в AggregatingMergeTree
кроме лаконичности теекста запросов?
и смежный вопрос, почему не дает создать
SimpleAggregateFunction(sum,Int16)? -
-
Привет!
Подскажите есть ли возможность для асинхронных инсертов сделать так, чтобы материализованное представление, которое висит на таблице срабатывало именно для пачки строк, когда происходит сброс данных, а не на каждую вставленную строку?
Сейчас для этого использую буфферные таблицы, хотел перейти на асинхронные инсерты, но поведение отличается. -
SimpleAggregateFunction хранит только итоговый результат же, а AggregateFunction хранит стейт для вычисления, а не самом результат.
Поэтому для каких-нибудь медиан симпл не подойдет. -
А в чем вообще плюс SimpleAggregateFunction, если я могу просто хранить значение просто?
-
SimpleAggregateFunction содержит инструкцию для кх, какую агрегатную функцию нужно применить во время мержа.
Это была пркт единственная цель для введения типа -
да, вспомнил, на Альтините же статья есть )
-
В кликхаус нет транзакций
IMHO и у вас тут просто вызов функции для вычисления default выражения для каждой строки по идее должен считаться -
Ну про транзакции я в курсе. Просто к слову пришлось.
Тем не менее логика моя такова: есть блок данных, в котором для столбца вычисляется выражение, но известно что это выражение константа, я на месте КХ бы вычислил константу 1 раз и применил ко всему столбцу, что на плане запроса и видно. Чем каждый раз константу получать на каждую строку. И это очень похоже на транзакцию кстати, поскольку на время записи блока данных единожды посчитанные константы не изменяются. Если взять и дефолтом поставить now() то для всего вставляемого блока данных время будет одинаковое. Даже если с наносекундами в unixtime перевести -
откуда кликхаус поймет что ваша функция константа если там sub query?
которое константу не возвращает... -
Если выполнить subquery 1 раз на время записи блока данных, то результат однозначно будет константой.
-
так я пытюсь сказать, что там нет блока данных
DEFAULT EXPRESSION будет вычисляться для каждой строки... -
Даже если вставка не по одной строке, а пачкой?
-
без разницы
https://fiddle.clickhouse.com/ee5e5e33-fa02-49a5-abe7-6f38960384ba -
так и работает при сбросе.
вы видимо не осознаете что по дефолту асинхронные инсерты копятся 0.2 сек. -
в некоторых случаях SimpleAggregateFunction быстрее чем AggregateFunction
>и смежный вопрос, почему не дает создать SimpleAggregateFunction(sum,Int16)?
тупо забыли сделать. Используйте Int64 и codec T64 -
«тупо забыли сделать» :))
Спасибо! -
а ниче что max будет считаться минут 10 ?
-
Приветствую
Доку в pdf где взять можно? -
нигде
только самому если сгенерировать из
https://github.com/ClickHouse/ClickHouse/tree/master/docs
и из
https://github.com/ClickHouse/clickhouse-docs/ClickHouse/docs at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Так материлизация де описана в драйвере клика. Вы стандартной польщуетесь?
-
-
Уже месяц как умеет ;)
https://github.com/ClickHouse/ClickHouse/pull/46071
Вроде.Add support of arbitrary engines for temporary tables by rvasin · Pull Request #46071 · ClickHouse/ClickHouseChangelog category (leave one): New Feature Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Added support of arbitrary tables engines for temporary t...
-
В дбт материлиазации явным образом есть команда drop relation, соответственно зависит от драйвера кх. Но скорее всего если пути разные то старая сохранится. Почти при любой реализации драйвера
-
А как можно проверить? У нас пусть репликации выглядит как /.../table/{uuid}. Попробовал смотреть через system.zookeeper where path и там вижу только последнюю версию
-
так, а я верно понимаю что таблица с тем же именем и в той же схеме. а все изменения это только внутри строки описания движка репликейтет мержтри? если так то нормально дбт удаляет прошлую таблицу и с нуля создает новую. это все матарилизации стабильно делают если вы свою кастомщину не писали
-
-
Да, все так. Спасибо🙏
-
Всем привет! Есть табличка в постгресе с иерархией, но ключи типа uuid. Дерево примерно 3к узлов. Как можно создать иерархический словарь? Хочется избежать лишних сущностей. Можно ли при выполнении селекта в Клике, в котором нужен обход дерева, создать какие то временные структуры, чтобы получить иерархический словарь?
-
https://clickhouse.com/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-hierarchical
Но uuid придется замапить на UInt32/64Иерархические словари | ClickHouse Docsierarkhicheskie-slovari}
-
а какого хера эритрея от эфтиопии отделилась?
-
Так уже 30 лет как. Была колонией Италии, автономией потом со своим правительством, а Эфиопия хотела себе забрать земли.
-
Наблюдаю странную ошибку:
Code: 49. DB::Exception: Part 202209_28950_35740_7 intersects next part 202209_28950_39093_7.
При этом на реплика1 партиция 202209 состоит только из одного куска 202209_28950_53862_9 (смотрю на файловой системе)
на реплика2
31G 202209_28950_39093_7
34G 202209_39094_50560_8
13G 202209_50561_53020_5
6.1G 202209_53021_53861_5
9.5M 202209_53862_53862_0
т.е. кусок 202209_28950_53862_9 на реплика1 полностью перекрывает все куски на риплика2 и при этом получаю intersect error и таблица переходит в read-only
2023.04.15 22:12:45.530431 [ 227 ] {} <Error> default.test_local (ReplicatedMergeTreeRestartingThread): void DB::ReplicatedMergeTreeRestartingThread::run(): Code: 49. DB::Exception: Part 202209_28950_35740_7 intersects next part 202209_28950_39093_7. It is a bug or a result of manual intervention in the ZooKeeper data. (LOGICAL_ERROR), 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) @ 0xa3ffe9a in /usr/bin/clickhouse
1. DB::Exception::Exception<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int, fmt::v8::basic_format_string<char, fmt::v8::type_identity<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>::type, fmt::v8::type_identity<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::type>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) @ 0xc76ba53 in /usr/bin/clickhouse
2. DB::ActiveDataPartSet::add(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >*) @ 0x157b9244 in /usr/bin/clickhouse
3. DB::ReplicatedMergeTreeQueue::insertUnlocked(std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry> const&, std::__1::optional<long>&, std::__1::lock_guard<std::__1::mutex>&) @ 0x15a8f58a in /usr/bin/clickhouse
4. DB::ReplicatedMergeTreeQueue::load(std::__1::shared_ptr<zkutil::ZooKeeper>) @ 0x15a8dd6b in /usr/bin/clickhouse
5. DB::ReplicatedMergeTreeRestartingThread::tryStartup() @ 0x15ad9edf in /usr/bin/clickhouse
6. DB::ReplicatedMergeTreeRestartingThread::runImpl() @ 0x15ad0f30 in /usr/bin/clickhouse
7. DB::ReplicatedMergeTreeRestartingThread::run() @ 0x15acdb3e in /usr/bin/clickhouse
8. DB::BackgroundSchedulePoolTaskInfo::execute() @ 0x13f2eef8 in /usr/bin/clickhouse
9. DB::BackgroundSchedulePool::threadFunction() @ 0x13f317d6 in /usr/bin/clickhouse
10. ? @ 0x13f3250c in /usr/bin/clickhouse
11. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xa4c1a48 in /usr/bin/clickhouse
12. ? @ 0xa4c4c5d in /usr/bin/clickhouse
13. ? @ 0x7f5e3e0fa609 in ?
14. __clone @ 0x7f5e3e01f133 in ?
(version 22.8.15.23 (official build)) -
ну это нормально, так обычно и бывает при intersects
можно в логе посмотреть откуда взялся 202209_28950_35740_7 - 16 April 2023 (48 messages)
-
Спасибо. А это нормально если маппинг сделать в Клике?. Т.е. у меня есть постоянно живущий словарь повторяющий постгрес с ключом string соответствующий uuid-у. Тогда перед выполнением селекта, я делаю временную Memory таблицу, в ней маппинг uuid -Int64, и уже на ее основе временный иерархический словарь, который и буду использовать в селекте. А по завершении запроса, drop временный словарь и drop временную таблицу. Или есть другой вариант?
-
на реплика1 в логах ничего нет про 202209_28950_35740_7, а в логах реплика2
такое же сообщение как и выше
Можно ли как-то таблицу принудительно вывести из read-only? я бы сделал DETACH-ATTACH для проблемной партиции, думаю это помогло бы. Или удалить узел связанный с этой таблицей в ZooKeeper -
Всем привет! Хочу поэкспериментировать с настройками таблицы (всякие ключи order by / сжатия / индексы), насколько рабочим будет способ создать таблицу с новыми настройками и вставить в нее через insert into select из старой таблицы для тестов?
-
Обычно таким способо и тестируем
-
Спасибо, были опасения, что вставка произойдет с сохранением каких-то настроек старой структуры
-
такого точно не произойдет)
-
Можно попробовать на партиции attach/detach так быстрее получается.
-
ммм
человек задал вопрос что он хочет изменить ключ сортировки
Читайте 3 пункта тут:
https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#attach-partition-fromManipulating Partitions and Parts | ClickHouse DocsThe following operations with partitions are available:
-
-
Если дата без времени и партиционирование по дням, то не будет выигрыша. По ключу партиционирования КХ отберёт нужные партиции и будет искать нужные записи в них по индексу. И какой тогда смысл в дате в индексе, если у всех записей внутри партиции она одинаковая? Только индекс раздуете.
-
Спасибо , видел просто примеры похожие
-
-
Добрый день! Запутался в синтаксисе массивов из кортежей. Не получается вставить строку, может кто подскажет где ошибка?
CREATE TABLE metrics (ebpf Array(Tuple(port UInt16, pid UInt32, v Float64))) ENGINE=Memory;
INSERT INTO metrics VALUES ([(8080, 10000, 5.0)]);
SELECT * FROM metrics; -
там вроде CREATE TABLE metrics (ebpf Array(Tuple(UInt16, UInt32, Float64))) ENGINE=Memory;
Или если вы хотите key-value, то там json формат нужно использовать -
Спасибо большое!
Они в таблице хранятся как String, а можно ли в Клике кастануть String в Map(String, Array(String)) ? -
Есть смысл в том случае, если у вас есть, например, дата и время поступления события и вы делаете партиционирование по дате (по дням, неделям или месяцам), а внутри уже сортируете по дате и времени.
-
Понял, спасибо!
-
Насколько я знаю- нет, из json в map можно, а из строки нет
-
Ребят, подскажите плз, не понимаю, что происходит. Есть большая по числу полей и данных таблица.
Делаю простейший селект вида select count() where id=123.
order by у таблицы ровно по этому id
и вот магия, если просто выполняю - происходит чтение 1.17млн строк за 0.3 секунды условно.
Если добавляю allow_experimental_projection_optimization = 0 - 0.004 секунды, прочитано 41к строк.
В предыдущей инсталляции такой проблемы не наблюдал (был 23.1.1, сейчас 23.3.1, заменили физически сервера, переливали данные через insert from remote)
На что обратить внимание, где могут быть проблемы?
https://pastila.nl/?01b84b53/2c765ea83820b70a1218b1ded906cb2b -
explain plan indexes = 1 добавьте к запросам вначале и покажите вывод или settings send_logs_level = 'trace'
-
стоит сделать issue на гитхаб вместе с explain estimates, скорее всего деградация какая то
-
вот так получается https://pastila.nl/?04d0928e/804c59170baf4e3d3f9514fb4f3a4b70
-
получается когда проекции включены primary key вообще в расчет не берется и ничего не отсекается... Похоже на багу в оптимайзере
-
-
https://fiddle.clickhouse.com/a5d2c546-3bec-45ff-bec7-03bc896b770e
Вот кстати вроде воспроизвел на минималках -
-
-
кстати вот есть баг https://github.com/ClickHouse/ClickHouse/issues/35966 незакрытый - у меня тоже при send_logs_level = 'trace' показывает кучу сообщений Used generic exclusion search over index for part t_reverse.all_9_9_0, так что видимо проблема в этомCan't omit certain projections that make query 100x slower · Issue #35966 · ClickHouse/ClickHouse
Clickhouse scans the index of each projection that matches a query- but sometimes this can result in an extremely inefficient index scan. The scan can become so slow, that its 100x slower to read t...
-
по идее можно один сервак даунгрейднуть и посмотреть, реплику какую-нибудь.
-
-
А почему кстати на старых версия не отрабатывает? Чето не выводит использование индекса нормально.
Пробую на <23.ххх -
https://fiddle.clickhouse.com/d3de6c02-c36e-4c90-8ea6-6998d07eac16
вот так выводит, просто ReadFromNUllSource это видимо когда нет данных... -
те айдишник не хитнул вообще - это и понятно, рандомный UInt64 тяжело хитнуть
-
а, не распарсил, спасибо.
Ну т.е. баг исключительно в новых версиях судя по fiddle? -
23.3 LTS, 2023-03-30
This improvement should be invisible for users. Re-implement projection analysis on top of query plan. Added setting query_plan_optimize_projection=1 to switch between old and new version. Fixes #44963. #46537 (Nikolai Kochetov).
select count() from t where id = 154601880 SETTINGS query_plan_optimize_projection=0;
1 row in set. Elapsed: 0.002 sec. -
-
Всем привет!
Нужно перенести данные CH ( v22.6.1.1985) на отдельный том с минимальным временем простоя. Клик на одном сервере, без репликации.
Попробовал rsync на горячую, затем остановить клик и ту же команду, чтоб докопировались измененные данные – не взлетело:
Detaching broken part /var/lib/clickhouse/store/fd5/fd5d4c32-c9f1-41e1-8be2-b332620364fd/20230412_1490327_1490327_0 (size: 0.00 B). If it happened after update, it is likely because of backward incompability. You need to resolve this manually
пока вижу два варианта, если всё правильно понял:
1. копирование данных при остановленном CH
2. поднять ещё один инстанс CH с хранением данных в нужной директории, и настроить репликацию.
Может чего посоветует сообщество ещё, заранее спасибо! -
что такое перенести данные на отдельный том ?
как вы настраиваете путь куда кх должен за данными ходить?
>`0230412_1490327_1490327_0 (size: 0.00 B)`
ну 0 байт и что? почему КХ вообще ищет данные в /var/lib/clickhouse ?
>пока вижу два варианта, если всё правильно понял:
вообще все не так и проблема не в этом -
да, написал недостаточно ясно, исправляюсь.
Директория с данными в /var/lib/clickhouse
<!-- Path to data directory, with trailing slash. -->
<path>/var/lib/clickhouse/</path>
<!-- Multi-disk configuration example: -->
т.е. в корневой фс. Я создал отдельный том, чтоб перенести туда данные.
Далее, выполнял в таком порядке:
rsync -a -H --progress /var/lib/clickhouse/ /mnt/
systemctl stop clickhouse-server.service
mv /var/lib/clickhouse /var/lib/clickhouse.bak
mv /var/lib/clickhouse.mnt /var/lib/clickhouse
umount /mnt && mount -o user,noatime /dev/mapper/nvmedata-clickh /var/lib/clickhouse
chown -Rv clickhouse:clickhouse /var/lib/clickhouse
systemctl start clickhouse-server.service
сервис не запустился с ошибкой выше, но я уже кажется понял в чём дело, пока писал.
основной вопрос был в том: допустимо ли копировать данные "на горячую" (при работающем сервисе), остановить сервис и докопировать изменения? с целью уменьшить время простоя сервиса. -
просьба не набрасываться так сразу 🙂 с кликхаузом не работал плотно ранее, а теперь приходится
-
>основной вопрос был в том: допустимо ли копировать данные "на горячую" (при работающем сервисе), остановить сервис и докопировать изменения?
допустимо, но у вас кмк у rsync недостаточно ключей, надо удалить все лишние файлы (КХ удаляет файлы)
--delete delete extraneous files from dest dirs -
Угу, уже сам понял пока писал. Спасибо!
-
ОК. Ну в след. раз пишите сразу больше.
Потому перенос на отдельный том это вообще фиг поймешь что, притом что у КХ тоже есть тома и диски. -
Всем привет. Недавно занимаюсь CH но есть вопрос который мне не дает покоя. Подскажите где в документации смотреть как размещать нужную мне базу на нужные мне диски? в доках увидел только описание как создавать Using Multiple Block Devices for Data Storage но там так всё невнятно.. может обладает кто сакральным знанием? есть ли какая то внятная дока по этому?
Нашел только это:
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes
Но дело в том что там есть xml теги назначение и обязательность которых мне совсем не ясна. Я попробовал и у меня получилось создать политику размещения для таблиц, но непонятно зачем нужен <default> или тэг <single> как их использовать?MergeTree | ClickHouse DocsThe MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engines.
-
Насчёт бд целиком не знаю, но конкретно таблицу можно поместить с помощью настройки в секции settings при создании таблицы.
Если же она создана, то по-умолчанию содержится на default volume , ее так же можно перенести
https://altinity.com/blog/2019/11/29/amplifying-clickhouse-capacity-with-multi-volume-storage-part-2Amplifying ClickHouse Capacity with Multi-Volume Storage (Part 2)This article is a continuation of the series describing multi-volume storage, which greatly increases ClickHouse server capacity using tiered storage. In the previous article we introduced why tiered storage is important, described multi-volume organization in ClickHouse, and worked through a concrete example of setting up disk definitions.
-
А подскажите какие лучшие практики в данном вопросе? Я привых что в рдбмс я сам рулю тем что у меня и где лежит... а здесь как? "под ногами"? ТОесть где сервер стоит? (в моем случае разворачиваю онпремис где то на 10 Тб хранения для внутрефирменного использования взамен SSAS)
-
Ну по-умолчанию, если ничего не менять, то лежит в директории из конфига.
А там смотрите сами , можете изменить на нужный ваш том по-умолчанию, и не ломать голову с volume , если не требуется .
https://clickhouse.com/docs/ru/operations/server-configuration-parameters/settings#server_configuration_parameters-pathКонфигурационные параметры сервера | ClickHouse Docsserver-configuration-parameters-reference}
-
Вот как раз таки "по умолчанию" совсем не устраивает (работает конечно, но имхо "детский сад" напоминает).. читаю статью которую Вы мне дали... спасибо... я приблизительно так и думал что оно так работает, по сути в КХ парадигма БД сведена к "таблице" .. что в случае с КХ является более важной и натуральной сущностью
- 17 April 2023 (97 messages)
-
А кто где ищет кликхаус дба? А то у нас появляются кластера большое количество , нужно это все уметь менеджить и туллинг базовый писать, где такого человека найти ?
-
Можете в этот чат вакансию закинуть :)
-
https://hh.uz/vacancy/79160572 можно писать мне в лс с вопросами , также опсов ищем. Удалена полная в любой точке планеты ( я например сейчас в Японии ), но можно и в МосквеВакансия Clickhouse DBA в Ташкенте, работа в компании «UZUM TECHNOLOGIES».
Зарплата: не указана. Ташкент. Требуемый опыт: 3–6 лет. Полная занятость. Дата публикации: 11.04.2023.
-
Коллеги, подскажите плиз еще вопрос:
у нас 6 нод, на 3ей ноде показывает настройку max_memory_usage_for_user = 0 при запросе
SELECT hostName() AS hostname,
*
FROM clusterAllReplicas('cluster_name', 'system', 'settings')
where name = 'max_memory_usage_for_user'
а при запросе select * from system.settings where name = 'max_memory_usage_for_user' показывает там значение как и на всех остальных нодах. Оба запроса выполняются на 3ей ноде. С чем может быть связано? Почему запрос себя так ведет? -
а что показывают колонки user, initial_user в system.query_log по этим запросам? Может разный юзер в итоге получился при запросах?
-
Добрый день!
Подскажите, пожалуйста, есть ли эффективный способ фильтрации данных из таблицы pg_table_1 с Engine=PostgreSQL?
Суть проблемы в следующем,
если таким образом получать данные из PG:
select * from pg_table_1 where id in (2, 4, 6);
то эффективно работает фильтрация по id на стороне PG.
Если же нужно фильтровать по значениям полученным запросом на стороне CH:
select * from pg_table_1 where id in (select id from ch_table_2 where code in ('2', '4'));
то фильтрация по id на стороне PG не работает, работает только на стороне CH, что в моём случае гораздо менее эффективно. -
Привет всeм
В дaнный момент oткрылся набор к нaм для зарaботкa!!!
От тебя никaкoгo oпыта о тeмe. Всe бесплатнo!
Зaрабoтoк oт 110 баксoв в двa часа.
Всeму нaучу сaм:@visher_GOGo -
список для IN не передается в сторону PG. Так что пишите
select * from pg_table_1 where id = 2 or id=4 or id=6.
Не очень удобно, но работает, и таким образом можно послать хоть сотни тысяч значений. Для удобства применения (при несколько ином запросе) можно применить Direct словарь. Он сам сформирует этот безумный список OR для запроса в PG. -
Юзер один и тот же
-
Настройки при дистрибьютид запросах передаются с ининциатора на другие сервера. Нельзя увидеть настоящую settings
-
А можно distributed над системными таблицами сделать?
-
Можо. но для settings не имеет смысла
-
Я предлагаю обычно сделать вот так https://kb.altinity.com/altinity-kb-setup-and-maintenance/sysall/
-
Спасибо! Отключение этого параметра привело к резкому росту скорости выполнения запросов (снижению числа прочитанных строк), средний ЛА5 на машинках снизился с 60-80 до 20-30. Если вдруг у кого то много проекций и последняя версия - потестируйте у себя.
-
Лучшая практика, это использовать mdraid
-
-
max_server_memory_usage > max_memory_usage должно быть, очевидно.
-
Спасибо!
-
всем, привет, как в кафка енджин продолжить консьюмить сообщения?
2023.04.17 08:42:02.248911 [ 291 ] {} <Error> void DB::StorageKafka::threadFunc(size_t): Code: 117. DB::Exception: Unexpected end of file while parsing JSON object.: (at row 1): while parsing Kafka message (topic: lt.quoter.quoter_stats, partition: 0, offset: 2193674267)': While executing Kafka. (INCORRECT_DATA), Stack trace (when copying this message, always include the lines below): -
-
Всем привет, мы в компании настраиваем сквозную аналитику. Хотим использовать clickhouse в яндекс облаке, data lens для отчетов. Источники данных: рекламные кабинеты, битрикс crm и 1С на ms sql с транзакциями. Вопросов несколько:
1. Как лучше получать данные с директа в clickhouse?
2. Для стриминга сырых данных, что лучше использовать?
3. Стоит ли бросить google analytics и использовать метрику?
Вопросов больше, если кто-то решал подобную задачу, прошу помочь, провести консультацию. Естественно, не бесплатно. Также, возможно, потребуется участие для решения задач по тз.
Компания — федеральная розничная сеть мебели и интернет-магазин -
Для моего понимания. Сервер RAM 128Gb, max_server_memory_usage == 120Gb, max_memory_usage == 50Gb, max_server_memory_usage_to_ram_ratio = 0.9. Вопрос первый: если один запрос начнет потреблять > 50Gb я получу MEMORY_LIMIT_EXCEEDED. Так? Вопрос второй: Если я заставлю выполняться 20 запросов и каждый будет потреблять по 10Gb, я получу туже ошибку (MEMORY_LIMIT_EXCEEDED) или другую?
-
будет ли работать kafka_skip_broken_messages c форматом JSONAsString
-
?
-
она будет выглядеть как MEMORY_LIMIT_EXCEED в обоих случаях. В таком стиле
"Memory tracker{}{}: limit exceed. Would use {} (attempt to allocate chunk of {} bytes), maximum: {}" -
Всем привет! Может ли кто-то подсказать про allow_nullable_key? Чем опасен, может ли что-то пойти не так и тд?) Пробовал ли кто-то его использовать? Планируем использовать редко, для пары тройки таблиц
-
Input format doesn't allow to skip errors): (at row 1)
: while parsing Kafka message (topic: lt.quoter.quoter_stats, partition: 0, offset: 2193674267)': While executing Kafka. (INCORRECT_DATA), Stack trace (when copying this message, always include the lines below): -
Всем привет. У меня "Эль проблема".
Вкратце.
Устанавливаю: `yandex/clickhouse-server:21.1.2.15`.
OS: macOS; С чипом: Apple M1.
После генерации выдает следующую ошибки приведенная в скриншоте.
Понятное дело, что жалоба идет на процессор.
Такой вопрос.
Есть ли актуальная минорная версия, когда необходимо использовать мажорку 21?
Или же, существуют альтернативное решение по данному вопросу? -
запуск в докере с --arch не вариант?
-
Хм... есть подробна информация на счет данного флага?
А то не знаком с ним -
Добрый день, подскажите пжл.
Имеется кластер 2 шарда по 2 реплики.
Создаю распределённую таблицу, которая смотрит на реплицированную.
Вставляю в distr записи. На 1 шард данные ложатся нормально на обе реплики - половина всех записей при одинаковых весах и на 1 и на 2 реплике. На 2 шард половина записей ложится только на одну релику, почему на вторую реплику ничего не ложится?
internal_replication = true -
сорри
--platform linux/amd64 -
Select * from system.macros
Select * from system.replication_queue -
Макросы правильно стоят. А вот queque помог понять, что коннект не проходит
-
Всем привет. Последовательно удалял 3 колонки: c1,c2,c3. при удалении второй и третьей на некоторых шардах валится ошибка в мутации
Code: 47. DB::Exception: Missing columns: 'с1' while processing query:
и
Code: 47. DB::Exception: Missing columns: 'с2' while processing query:
что-то с этим можно сделать? -
-
Пробовал так. Не, не взлетает.
-
И не взлетит - увы я не смог завести 21 через обратную совместимость (мак м1)
-
-
Товарищи, позвольте вопрос про самые азы. Вот есть таблица:
create table table1
(
fieldInt1 UInt64,
fieldInt2 UInt64,
fieldText String,
fieldDate DateTime,
flag UInt8 default 0,
inserttime DateTime default now()
)
engine = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table1', '{replica}')
PARTITION BY toYYYYMM(fieldDate)
ORDER BY (fieldInt1, fieldInt2, fieldDate)
SETTINGS index_granularity = 8192;
И я вставляю сначала:
INSERT INTO table1
(fieldInt1, fieldInt2, fieldText, fieldDate)
VALUES
(123, 234, 'some text', toDate('2023-01-01 00:00:00')) ;
А спустя какое-то время:
INSERT INTO table1
(fieldInt1, fieldInt2, fieldText, fieldDate, flag)
VALUES
(123, 234, 'some text', toDate('2023-01-01 00:00:00'), 1) ;
Т. е. те же данные, но с включенным флагом. Верно ли я понимаю, что эти две записи схлопнутся в одну со значением флага, которое было вставлено позже? Т.е. в данном случае останется запись с flag=1. -
-
ну да, я запросы выполнял и видел такой же результат, хочется просто убедиться, что это так работает, а не какое-то совпадение (:
-
Здравствуйте. Вот с такой проблемой столкнулся. Обновляю версию КХ с 22.10.7.13 (а так же 22.11.6.44) на 22.12.х. До 22.12.3.5 обновление нормально проходит, а с 22.12.4.76 сервер при рестарте больше не запускается с сообщением
Job for clickhouse-server.service failed because the control process exited with error code.
See "systemctl status clickhouse-server.service" and "journalctl -xe" for details.
при этом systemctl status clickhouse-server.service выдаёт
System has not been booted with systemd as init system (PID 1). Can't operate.
а journalctl -xe
-- Subject: Automatic restarting of a unit has been scheduled
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Automatic restarting of the unit clickhouse-server.service has been scheduled, as the result for
-- the configured Restart= setting for the unit.
Apr 17 15:16:16 clickhouse-test-update.ekblocal systemd[1]: Stopped ClickHouse Server (analytic DBMS for big data).
-- Subject: Unit clickhouse-server.service has finished shutting down
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit clickhouse-server.service has finished shutting down.
Apr 17 15:16:16 clickhouse-test-update.ekblocal systemd[1]: Starting ClickHouse Server (analytic DBMS for big data)...
-- Subject: Unit clickhouse-server.service has begun start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit clickhouse-server.service has begun starting up.
Apr 17 15:16:16 clickhouse-test-update.ekblocal systemd[54476]: clickhouse-server.service: Failed to connect stdout to the journal socket, ignoring: No such file or directory
Apr 17 15:16:16 clickhouse-test-update.ekblocal systemd[1]: clickhouse-server.service: Main process exited, code=exited, status=169/n/a
Apr 17 15:16:16 clickhouse-test-update.ekblocal systemd[1]: clickhouse-server.service: Failed with result 'exit-code'.
Apr 17 15:16:16 clickhouse-test-update.ekblocal systemd[1]: Failed to start ClickHouse Server (analytic DBMS for big data).
-- Subject: Unit clickhouse-server.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit clickhouse-server.service has failed.
--
-- The result is RESULT.
Apr 17 15:16:19 clickhouse-test-update.ekblocal dbus-daemon[1223]: [system] Failed to activate service 'org.freedesktop.timedate1': timed out (service_start_timeout=25000ms)
Apr 17 15:16:19 clickhouse-test-update.ekblocal dbus-daemon[1223]: [system] Activating via systemd: service name='org.freedesktop.timedate1' unit='dbus-org.freedesktop.timedate1.service' reque
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[1]: Starting Time & Date Service...
-- Subject: Unit systemd-timedated.service has begun start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit systemd-timedated.service has begun starting up.
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[54507]: systemd-timedated.service: Failed to connect stdout to the journal socket, ignoring: No such file or directory
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[54507]: systemd-timedated.service: Failed to set up mount namespacing: No such file or directory
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[54507]: systemd-timedated.service: Failed at step NAMESPACE spawning /lib/systemd/systemd-timedated: No such file or directory
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[1]: systemd-timedated.service: Main process exited, code=exited, status=226/NAMESPACE
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[1]: systemd-timedated.service: Failed with result 'exit-code'.
Apr 17 15:16:19 clickhouse-test-update.ekblocal systemd[1]: Failed to start Time & Date Service.
-- Subject: Unit systemd-timedated.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit systemd-timedated.service has failed.
--
-- The result is RESULT.
и если виртуалку ребутнуть, то она уже больше не поднимается. Что делать? -
ОС: Ubuntu 18.04.4
-
В файле users.xml раскомментил строку
<!-- User can create other users and grant rights to them. -->
<access_management>1</access_management>
Перезапустил .... ничего не помогает.. пытаюсь создать юзера - создает, пытаюсь дать ему
GRANT ALL ON *.* TO clickhouse_admin WITH GRANT OPTION; пишет что у меня нет прав... хотя я default ...что не так? Помогите плз... весь мозг сломал...
Пишет:
SQL Error [497] [07000]: Code: 497. DB::Exception: default: Not enough privileges. To execute this query it's necessary to have grant SHOW, SELECT, INSERT,....... и тд -
/var/log/clickhouse-server/clickhouse-server.err.log что-нибудь есть?
-
Вот это, похоже, первые записи после рестарта:
2023.04.17 15:17:18.030607 [ 54728 ] {} <Error> DNSResolver: Cannot resolve host (localhost), error 0: DNS error.
2023.04.17 15:17:18.030841 [ 54728 ] {} <Error> Cluster: Code: 198. DB::Exception: Not found address of host: localhost. (DNS_ERROR), Stack trace (when copying this message, always include the lines below):
0. DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0xddd64f5 in /usr/bin/clickhouse
1. ? @ 0x8bd1984 in /usr/bin/clickhouse
2. ? @ 0xdda9d4d in /usr/bin/clickhouse
3. ? @ 0xdda7dc8 in /usr/bin/clickhouse
4. ? @ 0xdda8c6e in /usr/bin/clickhouse
5. DB::DNSResolver::resolveAddress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned short) @ 0xdda9447 in /usr/bin/clickhouse
6. DB::Cluster::Address::getResolvedAddress() const @ 0x129e26ec in /usr/bin/clickhouse
7. DB::Cluster::Address::Address(Poco::Util::AbstractConfiguration const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned int, unsigned int) @ 0x129e34aa in /usr/bin/clickhouse
8. DB::Cluster::Cluster(Poco::Util::AbstractConfiguration const&, DB::Settings const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) @ 0x129e96e2 in /usr/bin/clickhouse
9. DB::Clusters::updateClusters(Poco::Util::AbstractConfiguration const&, DB::Settings const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, Poco::Util::AbstractConfiguration*) @ 0x129e75eb in /usr/bin/clickhouse
10. DB::Clusters::Clusters(Poco::Util::AbstractConfiguration const&, DB::Settings const&, std::__1::shared_ptr<DB::Macros const>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) @ 0x129e685a in /usr/bin/clickhouse
11. DB::Context::setClustersConfig(Poco::AutoPtr<Poco::Util::AbstractConfiguration> const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) @ 0x12a30916 in /usr/bin/clickhouse
12. ? @ 0xde8550f in /usr/bin/clickhouse
13. ? @ 0xde84886 in /usr/bin/clickhouse
14. DB::ConfigReloader::reloadIfNewer(bool, bool, bool, bool) @ 0x14c73dd6 in /usr/bin/clickhouse
15. DB::ConfigReloader::ConfigReloader(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, zkutil::ZooKeeperNodeCache&&, std::__1::shared_ptr<Poco::Event> const&, std::__1::function<void (Poco::AutoPtr<Poco::Util::AbstractConfiguration>, bool)>&&, bool) @ 0x14c6fe0a in /usr/bin/clickhouse
16. DB::Server::main(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>> const&) @ 0xde66231 in /usr/bin/clickhouse
17. Poco::Util::Application::run() @ 0x1759b542 in /usr/bin/clickhouse
18. DB::Server::run() @ 0xde5885c in /usr/bin/clickhouse
19. Poco::Util::ServerApplication::run(int, char**) @ 0x175af89a in /usr/bin/clickhouse
20. mainEntryClickHouseServer(int, char**) @ 0xde55286 in /usr/bin/clickhouse
21. main @ 0x884a973 in /usr/bin/clickhouse
22. __libc_start_main @ 0x21c87 in /lib/x86_64-linux-gnu/libc-2.27.so
23. _start @ 0x7ea89ee in /usr/bin/clickhouse
(version 23.1.5.24 (official build))
2023.04.17 15:17:18.031388 [ 54728 ] {} <Error> DNSResolver: Cannot resolve host (localhost), error 0: DNS error. -
2023.04.17 15:17:18.031453 [ 54728 ] {} <Error> Cluster: Code: 198. DB::Exception: Not found address of host: localhost. (DNS_ERROR), Stack trace (when copying this message, always include the lines below):
и дальше в том же духе про DNS -
в /etc/hosts есть что-нибудь про localhost?
-
Всем привет,
Хочу провести запрос optimize table orders_products_current_7 final
Но получаю ошибку Code: 84. DB::Exception: Directory /var/lib/clickhouse/store/a59/a593d2d3-fc4d-4155-85f6-780a6163b64a/tmp_merge_1680998400_1_10_1/ already exists. (DIRECTORY_ALREADY_EXISTS) (version 22.1.3.7 (official build))
Это значит что оптимизация идет или ошибка какая-то это и фиксить надо? -
вот всё, что там есть:
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters -
должно быть ещё что-то типа:
127.0.0.1 localhost -
У меня в ::1 также есть localhost
-
Я сам не админ, но вообще, с таким hosts работают 10 боевых нод...
-
Тады разберись, как там localhost ресолвится. Ибо у меня везде он в hosts есть.
-
Везде - это несколько больше 10 :-)
-
Ну вообще
administrator@clickhouse-test-update:~$ ping localhost
PING localhost(ip6-localhost (::1)) 56 data bytes
64 bytes from ip6-localhost (::1): icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from ip6-localhost (::1): icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from ip6-localhost (::1): icmp_seq=3 ttl=64 time=0.040 ms
64 bytes from ip6-localhost (::1): icmp_seq=4 ttl=64 time=0.048 ms
64 bytes from ip6-localhost (::1): icmp_seq=5 ttl=64 time=0.043 ms
64 bytes from ip6-localhost (::1): icmp_seq=6 ttl=64 time=0.040 ms
но
administrator@clickhouse-test-update:~$ ping clickhouse-test-update.ekblocal
ping: clickhouse-test-update.ekblocal: Temporary failure in name resolution -
RBAC access_management config does not grant ACCESS MANAGEMENT · Issue #47092 · ClickHouse/ClickHouse
Describe the unexpected behaviour Following steps in https://clickhouse.com/docs/en/operations/access-rights/#access-control-usage , I have a user defined in users.xml with <access_management>...
-
возьмите 22.3.20.29
-
dns надо проверять типа nslookup localhost
-
;; connection timed out; no servers could be reached
-
НИЗКИЙ ТЕБЕ ПОКЛОН!!! ДОБРЫЙ ЧЕЛОВЕК!!!!!!!!!..................аааааааааааааааа чето ору уже... сорри..
пс. Спасибо БОЛЬШОЕ! -
та же ошибка
Code: 84. DB::Exception: Directory /var/lib/clickhouse/store/a59/a593d2d3-fc4d-4155-85f6-780a6163b64a/tmp_merge_1680998400_1_10_1/ already exists. (DIRECTORY_ALREADY_EXISTS) (version 23.3.1.2823 (official build)) -
именно её надо? 22.3.20.29 Поставил последнюю версию которая в докере есть - ошибка остается
-
Всем привет! Разрабатываю Multi-Tenant приложение, в каждом запросе к CH присутствует WHERE project_id = '{id}'
Правильно ли я понимаю, что для эффективности следует указать ключ партиций как PARTITION BY (project_id, toYYYYMM(timestamp)) ? -
А сколько строчек для project_id и сколько их различных?
-
вот тут Миша Филимонов рассказывает почему так делать не надо https://youtu.be/DP7l6Swkskw?t=3798
надо сделать project_id первым полем в orderbyClickHouse Meetup Amsterdam, June 8, 2022Slides: https://github.com/ClickHouse/clickhouse-presentations/tree/master/meetup59
-
ну удалите этот каталог
что в логе КХ грепается по строке 1680998400_1_10 -
Я удалял уже - в таблице данные пропали. Залил данные, снова делаю optimize - та же ошибка
-
Ошибка в wsl видимо и решения нет
https://github.com/ClickHouse/ClickHouse/issues/31946Error Code: 84: Directory already exists · Issue #31946 · ClickHouse/ClickHousei meet this error in every merge tree table 2021.11.29 05:44:38.294340 [ 71 ] {} void DB::MergeTreeBackgroundExecutorDB::MergeMutateRuntimeQueue::routine(DB::TaskRuntimeDataPtr) [Queue = DB::MergeM...
-
Было 9млн записей, все пропали сразу
-
в wsl надо на ext4 диск положить внутри wsl
-
Понял, видео обязательно изучу, а есть еще какие-то способы оптимизации, с учетом того что не может быть случая где мне нужны данные с разными project_id одновременно ?
-
День добрый!
Подскажите, что можеь быть не так.
Есть 3 шарда, в них распределённые таблицы, некоторые достаточно большие, по 15-20 млрд записей со сроком хранения 1 неделя (есть как и MergedTree, так и ReplicatedMegreTree). Добавил к этим трём шардам 3 "новые" сервера, каждому по реплике. На репликах создал базу, создал таблицы, всё запускается без ошибок. Но вот select coun(*) from table_distributed на "основных" серверах теперь показывает то 7млрд, то 15, то нормальное к-по под 20млр, какой-то рандом. Выключаю сервера-реплики и всё считается нормально. Куда смотреть, что менять? -
ну вот в MergedTree не реплицируются данные сами, как бы странно ожидать что строки магически появятся на репликах
-
так и ReplicatedMergeTree примерно так же себя ведут
-
или это остаточно долго будет при млрд записей?
-
есть макросы, shard / replica , они должны быть правильно заполнены
select * from system.macros -
что долго?
-
репликация на реплики при перком запуске
я же атк понимаю, CLick на реплики будет копировать все записи? -
да но дистрибьютид таблица не должна ходить в такие реплики.
-
select count() from replicated на новой реплике сильно отличается?
-
да, очнеь сильно отличаются
-
в макросах пропсиал
shard = имя сервера
replica = на «основных» 1, на «репликах 2 -
internar_replication=false
-
макрос replica должен быть уникальным у каждой ноды
обычно используют имя хоста -
у вас случайно uuid нету в пути реплики?
-
для replicated таблиц, надо true
-
uuid нет, есть только shard=server_name, replica=1
видимо, сбда копать
раз replica дб уникальное для ноды -
у меня наоборот получается
-
шард как раз должен быть одинаковым для шардов
-
-
ага, спасибо
направление куда копать понятно -
такой вопрос: есть дистрибютед таблица dist.probe
как я могу создавать row policy для нее?
У меня есть row policy для MergeTree таблиц и для ReplicatedMergeTree таблиц.
Но для дистрибютед эти правила не работают. -
Создавайте для mergeTree
-
Это будет достаточно?
-
да
- 18 April 2023 (205 messages)
-
Есть ещё такая статья https://clickhouse.com/blog/clickhouse-grafana-plugin-2.0ClickHouse Plugin for Grafana - 2.0 Release
The 2.0 release of the ClickHouse plugin for Grafana improves filtering while adding support for HTTP and JSON.
-
-
Добрый день!
Есть генератор запросов он собирает огромный IN (миллион адишников формата uuid) (как обычно пользаки жгут эксельками со списками). Вот вопрос пролезет ли этот запрос в стандартный odbc драйвер и переварить ли это скл парсер и далее? Во сколько порядков это будет дольше по сравнению с сохранением списка в темповую таблицу и джойн/семиджойн уже с ней? -
оба плагина работают.
но пока есть паритет по функциям...
sql код писать в altinity немножечко удобнее...
но в целом новые фичи графаны типа tracing пока только в плагине от grafana labs -
парсер переварит, ODBC драйвер тоже должен,
можно попробовать потюнить настройки на стороне сервера
https://clickhouse.com/docs/en/operations/settings/settings#settings-max_query_size
https://clickhouse.com/docs/en/operations/settings/query-complexity#max-ast-depth
https://clickhouse.com/docs/en/operations/settings/query-complexity#max-ast-elementsCore Settings | ClickHouse Docsadditionaltablefilters
-
Привет всем. Подскажите, плиз, есть ли у кликхауса что-то аналогичное pg_dump --schema-only?
-
Спасибо 🙏
-
Всем привет, можете подсказать такой вопрос.
Обновили три новых кликхауса с версии 21.9.4.35 на версию 23.3.1.2823
При обновлении сохранили старый файл config.xml
После успешного обновления всех нод, через время стала выскакивать на всех ошибка
CODE 252 Too many parts (600 with average size 15.25MiB)
По данным на кликхаусах ничего не менялось. Подскажите с чем это может быть связано? -
system.parts смотрите на NewPart какой размер
и идут ли мержи в system.merges?
не факт что config.xml вообще как то влиял, но хорошая практика такая что config.xml оставлять тот который идет с пакетом
а все настройки и переопределения хранить в config.d/*.xml -
Всем привет!
Использую Кликхаус 21.11.4 revision 54450
Есть qz-файл на 30Гб такого вида
insert into h values (...);
insert into h values (...);
...
Хочу его загнать в клик, но не получается, выедает всю память и аверейдж за сотню.
Делаю так:
cat ./h.sql.gz | gzip -d | clickhouse-client --multiquery --ignore-error --verbose
Как победить? -
Спасибо за ответ!
System merges идут и на основной ноде, но их стало гораздо больше чем раньше. -
я бы попробовал бы в csv переделать файл и загрузить уже csv... 😳
-
вставлять по одной записи в clickhouse это самоубийство
конвертируйте в CSV / TSV -
Спасибо за советы. Сделал чуть по-другому
cat h.sql.gz | gzip -d | py 1.py | clickhouse-client --query="insert into h values " --verbose
где скрипт 1.py преобразует строки
insert into h values (...);
insert into h values (...);
в формаат Values
(...)
,(...)
Закачка пошла "как надо". -
System merges идут, replicas есть, кроме этой ошибки одна база выдаёт ошибку по с партами
-
-
Смотря что вы имеете в виду под обновлением данных
-
если это чисто таблица с пользователями не очень большая - то можно и через UPDATE, а если это таблица с событями огромная у которой есть user_id, то я бы словарь сделал, user_id -> is_blocked
-
Условный флаг 0 / 1 заблокирован он или нет?
-
Да, это имею ввиду
-
Тогда вариант Артема лучший (причем хранить только заблокированных в словаре, а по дефолту в колонке держать 0)
-
-
Всем привет.
Есть таблица с 15 млрд записей. В ней есть столбцы название домена, ссылка, дата.
Каждый день добавляется около 30 млн записей.
Подскажите как лучше оптимизировать таблицу чтобы быстро вытаскивать данные?
Фильтрация обычно происходит по дате в диапазоне и есть ограничение в выборке (limit, offset)
Может быть партиции как то указать -
Если фильтрация обычно захватывает диапазоны от месяца и больше, то выгодно партицировать по месяцам, если обычно дни, то по дням. Ну и order by (date) сделать таблице. Limit, offset - во всех базах тяжело, если оффсеты большие
-
обычно по дням
-
а если при создании таблицы указан ключ сортировки один, а при селекте другой, то будет дольше отрабатывать?
-
Ну да, индекс не отработает тогда и ничего не отсечет, будет фул скан по партиции
-
Всем привет , а подскажите плиз как можно примерно оценить сколько врмение будет выполняться этот запрос , полагаю надо будет уточнить какое у нас железо ?
Имеется таблица 135кк строк , 40 столбцов
Резко появилась необходимость ее перезаписать с другим DDL
оперативки на сервере 32 гб , ядер 16 ( мб это пригодится)
Уложимся ли в 5 минут ? -
А откуда такой жесткий тайминг 5 минут? Если будет 6 что случится?))
-
Ну в эту таблицу пишется раз в 5 минут данные новые по принципу
select max(dttm) max_dttm from Таблица
этот дейттайм идёт в запрос
select *
from t
where dttm > {max_dttm}
И отсюда выгружается , ну хотя можно выключить джобу , чёт только щас подумал
Но если скажите как можно примерно оценивтаь время выполнения инсерта такого кол-во строк , был бы благодарен -
Сложно оценить, но что можно сделать - при выгрузке указать insert into new_table select * from old_table where dttm < '2023-04-18 12:00:00';
-
-
-
-
-
Но если скажите как можно примерно оценивтаь время выполнения инсерта такого кол-во строк , был бы благодарен
Так создайте временную таблицу и сделайте инсерт в нее, узнаете сколько времени длится. Джоба может писать дальше в старую -
Хорошая идея , спасибо большое
-
кроме партиций есть еще какие то варианты?
-
кх очень неэффективно выполняет запросы типа select * from order by limit offset ( тратит слишком много ресурсов ), ну и пагинацию лучше делать по where, а не по offset, но это в любой базе, они все будут прокачивать все записи каждый раз чтобы дойти до нужного offset
ну т.е. я бы проголосовал за вариант не использовать кх. -
Всем привет! Подскажите, пожалуйста, каким наиболее оптимальным типом можно представить данные в СН, хранимые в MySQL-е с типом TIME?
То есть просто время, вроде "100:00:00" -
Int16 всё равно маловат для 6 мультов допустимых значений, если отрицательные значения не нужны просто приклейте дату и пишите как DateTime, он хранится как UInt32
-
-
подскажите, из-за чего kafkaEngine может игнорировать параметры kafka_flush_interval_ms & kafka_max_block_size ?
сервер 22.8.9.24
описание движка:
ENGINE = Kafka
SETTINGS kafka_broker_list = 'kafka.kafka:9092', kafka_topic_list = 'events', kafka_group_name = 'stream-events', kafka_format = 'JSONEachRow', kafka_flush_interval_ms = 180000, kafka_max_block_size = 500000
вставляет гораздо чаще и меньшими пачками:
┌──────────event_time─┬─written_rows─┐
│ 2023-04-18 13:23:08 │ 6 │
│ 2023-04-18 13:23:38 │ 519 │
│ 2023-04-18 13:23:48 │ 4258 │
│ 2023-04-18 13:23:52 │ 4257 │
│ 2023-04-18 13:24:00 │ 11 │
│ 2023-04-18 13:24:25 │ 11 │
│ 2023-04-18 13:25:10 │ 3633 │
│ 2023-04-18 13:25:15 │ 40 │
│ 2023-04-18 13:25:39 │ 6144 │
│ 2023-04-18 13:25:43 │ 6162 │
│ 2023-04-18 13:25:47 │ 18 │
│ 2023-04-18 13:26:32 │ 22 │
│ 2023-04-18 13:26:36 │ 5 │
│ 2023-04-18 13:26:47 │ 289 │
│ 2023-04-18 13:27:09 │ 4603 │
│ 2023-04-18 13:27:13 │ 4963 │
└─────────────────────┴──────────────┘ -
Это не подойдет, так как в случае необходимости положить туда длительность больше 24 часов возникнут сложности.
-
Тогда только UInt32/Int32 в зависимости от нужности отрицательных значений.
Нет аналога типа TIME в КХ, ближайший похожий DateTime но он не подходит. -
Имеешь ввиду хранить количество секунд и после приводить значение к более читаемому виду?
-
да
-
Ясно. Спасибо!
-
-
потому что в mysql TIME это не просто время, а продолжительность, она может быть больше 24 часов. Ну да, можно и в DateTime её сохранить, к какой то константной дате прибавить, но это вряд ли будет удобно, проще уж просто количество секунд сохранить в Int/Uint.
-
-
-
Коллеги, а что означает "Присвоить профиль пользователю" (что то я не нахожу to username в описании синтаксиса) вот тут
https://clickhouse.com/docs/ru/sql-reference/statements/create/settings-profile
и чем это отличается от alter user username SETTINGS PROFILE profilename ?CREATE SETTINGS PROFILE | ClickHouse Docscreate-settings-profile-statement}
-
Тут от обратного, профиль присваивается пользователю, а не наоборот, поэтому и нет синтаксиса
«Присвоить профиль пользователю robin:» -
Хмм. Ну а что тогда делает alter user settings profile?
-
И, кстати. Хочу поменять в уже созданном профайле настройку. Иду в
https://clickhouse.com/docs/en/sql-reference/statements/alter/settings-profile
и не понимаю что такое to name1.settings-profile | ClickHouse DocsALTER SETTINGS PROFILE
-
это разные команды же
-
я понимаю что разные. Я пытаюсь понять в чем разница конечная. Пока понял, что возможно смысл первой в привязке профиля к пользователю (то есть что бы он смог делать set prifilename, по профиль по умолчанию не используется), а второй пользователя к профайлу и пользователь может использовать профиль сразу, не указывая set. Похоже на правду?
-
1 вариант - устанавливаем профиль пользователю сразу при создании профиля
2 вариант - хотите сменить профиль у пользоватлея.
вот и вся разница. -
спасибо
-
Добрый день.
ClickHouse используется в нескольких коммерческих SIEM системах для хранения событий безопасности. При этом события из журналов собираются и отправляются в ClickHouse с помощью коммерческих коннекторов, являющихся частью SIEM систем -
А какие есть open-source способы собрать события из windows event log и положить в ClickHouse. Есть ли на это счёт best-practice?
-
Беглый поиск дал winlogbeats из ELK стека, но он вроде бы не умеет класть в Clickhouse и fluentd/logHouse, но он больше не поддерживается
-
Sending Windows Event Logs to ClickHouse with Fluent Bit
Monitor your Windows servers and workstations for security threats by sending Event Logs to ClickHouse using FluentBit
-
Добрый день. подажите плз, как поступить с зафейленными мутациями? например по причине корявого запроса - удалить строчку мутации через альтер?
-
Отлично, спасибо!
-
KILL MUTATION WHERE
-
Спасибо большое
-
SELECT database, table, event_type, count() c, quantiles(0.5,0.9)(rows) r FROM system.part_log GROUP BY database, table, event_type;
-
Спасибо!
-
Всем привет.
Столкнулся с интересной ситуацией: есть 2 поля, одно входит в primary key (т. е. есть первичный индекс), по второму есть вторичный индекс.
При запросе с условием по любому из полей видно, что индексы работают и гранулы скипаются (смотрю через SET send_logs_level='debug' и EXPLAIN indexes=1).
При запросе с двумя условиями через OR ни один индекс не работает, гранулы не скипаются. Это норма? -
я хочу вас к мысли подвести
что если вы много вставляете мелкими кусками
и оно просто может не успевать мержить...
либо могут быть фейлы на мержах
по разным причинам
смотрите MergePart события детальнее там если фейл был то запишется почему
доку почитайте какие полячто значат
https://clickhouse.com/docs/en/operations/system-tables/part_logpart_log | ClickHouse DocsThe system.partlog table is created only if the partlog server setting is specified.
-
спасибо ещё раз, буду смотреть
-
Ага, видел, спасибо. Как эту статью сравнивал с тем, что в доке у плагинаот Альтини, сложилось в печатление, что у родного плагина фичей поменьше
-
Ну раз в целом одинаково, то логично взять родной плагин, полагаю. Спасибо
-
(Апну свой вопрос)
-
это норма. КХ не умеет смешивать pk и skip индексы для OR
>одно входит в primary key
кстати вот это вообще можно понять например как
order by a,b,c,d, ONE_COLUMN, e,f,g
ONE_COLUMN входит в индекс, но запросам where ONE_COLUMN= не поможет -
> это вообще можно понять например как order by a,b,c,d, ONE_COLUMN, e,f,g
Поле действительно не в начале primary key, перед ним стоит другое низкокардинальное поле. Индекс при этом, как ни странно, работает (согласно EXPLAIN, PrimaryKey ... Granules: 14/228315).
> КХ не умеет смешивать pk и skip индексы для OR
А два skip-индекса умеет? Можно про это где-то почитать? -
И еще, подскажите, пожалуйста, можно ли как-то оценить дополнительную нагрузку при вставке данных от добавления индекса?
Пока нашел только Memory and CPU usage for Inserts -
зависит от индекса, блумфильтры могут и в два раза замедлять инсерты
-
>А два skip-индекса умеет? Можно про это где-то почитать?
в гитхабе в issues
or работает если оба поля(выражения) в одном индексе.
все зависит, мне проще показать на примере как решить проблему, чем 4 часа объяснять почему. -
А если primary key f(one_column) order by f(one_column), a, b, c, d, one_column нужно делать where f(one_column) == f(x) and one_column == x или one_column == x уже будет работать быстро и кликхаус внутри себя оптимизирует запрос?
-
У меня на одной таблице так и получилось с ngrambf, на вставку одной строки с индексом в среднем уходило в 2 раза больше времени.
-
зависит от f
-
ну да, ожидаемо
-
Удалось понять? У меня та же история сейчас
-
В примере на altinity я видел 2 основных примера, которые использую: toYYYYMM / … и userId % 16
-
ну вообще можно просто создать две таблицы и заинсертить и посмотреть в квери логе сколько ресурсов сожрет. быстрее сделать через рисерчить:)
-
в случае toYYYYMM не надо
в случае % надо -
Понял, спасибо!
-
Нет, в итоге только до 22.8 обновился, а на след версиях не смог запустить
-
У меня так только на нескольких шардах, все остальные запустились без проблем
-
Хм... Я только на одном сервере попробовал и у меня сразу проявилась проблема, если найдешь решение, напиши, пожалуйста. Потому что я хз что с этим делать
-
а сколько replicated таблиц ?
а таблицы replicated в новом синтаксисе? partition by / order by или в старом (без partition by / order by) ? -
Моя проблема горе от ума. Есть поле со строкой вида prefix-id1-id2-, формат у строки постоянный, отличаются только id1 и id2. Нужно быстро найти все строки где id1 или id2 равно заданному. С ngrambf все работает, но, по ощущениям, медленная вставка.
Хотел заменить ngrambf на сортировку по этому полю (что дает быстрый поиск по id1) и отдельную колонку с извлеченным id2 и более легковесным индексом по ней. Но запрос с OR не работает. Можно просто делать 2 запроса, конечно, но как-то неаккуратно. -
каким выражением вы выдираете id1 id2?
-
У меня синтаксис таблиц на всех шардах одинаковый, набор таблиц тоже. Часть шардов запустилась, а другая - нет. Висит на table_name become leader ...
Что помогает? Открыл схему на шарде, что стоит рядом, сделал show tables. Взял таблицу, что идет после той, которая последняя в логе в строке с 'Became leader', дропнул ее мету в зукипере, сделал рестарт реплике шарда, пошло дальше, дальше новая таблица находится, на которой зависает, повторяем процедуру, ... -
эм я не это спросил
вы знаете что такое старый синтаксис? -
-
ну ок.
-
я думаю что поможет проагрейдить все ноды в 22.8 и потом сразу в 23.3
-
но это баг и я хотел бы его воспроизвести
-
Если нужен ответ на конкретный вопрос, то у нас все таблицы в новом синтаксисе, их много, несколько сотен
-
спасибо
-
А в чем заключается баг? Я думал, что у меня часть реплик при остановке оставила какие-то потроха в знодах таблиц в зукипере, которые теперь мешают по этим таблицам включить реплицирование после запуска и поэтому реплика никак не может запуститься полностью
-
Если поможет обновление до 22.8, то попробую. Можно сейчас все стопнуть, сделать даунгрейд пакета до 22.8 и запуститься снова?
-
зачем? если уже все работает в 23.3 то уже смысла нет
-
-
-
ну так эту часть проагредите в 22.8 и затем в 23.3
-
даунгрейдить то зачем
-
-
id1 не выдираю, а делаю запрос вида
WHERE id_column LIKE 'prefix-id-%'
где id это интересующее нас значение id1.
id2 забираю в отдельную колонку как
id2_col String DEFAULT extract(id_column, 'prefix-.+-(.+)-')
и строю по ней bloom_filter-индекс.
Или, для варианта с ngrambf, просто делаю запрос вида
WHERE id_column LIKE 'prefix%-id-%'
Возможно, стоит попробовать выдрать id1 и id2 в array, а по нему уже строить общий индекс, как в статье. -
если что, то в моем случае, порядка 130 репликейтед таблиц и все в новом синтаксисе были созданы
-
-
-
ааа, теперь понятно.
можно не делать колонку отдельную, можно сделать индекс по функции
INDEX x1 (extract(s, '.*-(.*)-.*'), extract(s, '.*-.*-(.*)')) TYPE bloom_filter GRANULARITY 3
и потом where extract(s, '.*-(.*)-.*') = 'some' or extract(s, '.*-.*-(.*)')='some1
будет использовать индекс -
Интересно, подумаю над таким вариантом. Спасибо за ответы.
-
На всех проблемных шардах остановил сервис. Взял один из проблемных шардов, одну его реплику. Сделалл даунгрейд до версии пакета 22.8.16.32. Запустил сервис, ловлю ошибку:
<Error> Application: Coordination::Exception: Transaction failed (Bad version): Op #0, path: /clickhouse/tables/$shard_number/$db_name/$table_name/leader_election -
даунгрейд? что?
-
На тех шардах, с которыми была проблема, на них уже стояла версия 23.3.1. Они с этой версией не запускались
-
а как они работали тогда ?
выключены были? -
-
ОК, и что вы оставили систему в нерабочем состоянии?
-
-
да, именно так.
но сейчас у меня впечатление что вы под словом шард подразумеваете что-то другое, поэтому возможно мои советы не имеют смысла. -
Шард в моем случае - это пара реплик. Понятие шарда совпадает с тем, что указано в конфиге кликхауса. Вот у меня таких 4 пары не хотят запускаться с версией 23.3. Я стопнул на них сервис, поставил пакет 22.8, попробовал запуститься
-
выложите на pastila.nl полностью кусок clickhouse-server.log с момента старта до конца
-
и для 23.3 и для 22.8
-
26.4мб для 22.8 выдернул сейчас. Вставится?
-
не знаю,
ну выложите на любой файлообеменник -
В личку если пришлю - норм? Просто у нас trace стоит. Могу конечно поменять уровень и прогнать для разных версий, чтобы лог был коротким
-
А что будет если не удалять?
-
Какова вероятность что движок игнорит параметры при создании и использует системные?
stream_flush_interval_ms
The default value is 7500.
stream_poll_timeout_ms
Default value: 500. -
присылайте
нужен trace -
мержить эти парты не будет, все застрянет со временем короче
-
CREATE TABLE syslog.logs21
(
`timestamp` DateTime64(6),
`priority` Int8,
`boot_id` UUID,
`machine_id` UUID,
`message` String,
`syslog_identifier` LowCardinality(String),
`unit` LowCardinality(String),
`instance` LowCardinality(String),
`unit_type` LowCardinality(String),
`transport` LowCardinality(String)
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(timestamp, 'UTC')
ORDER BY (timestamp, boot_id)
TTL toDate(timestamp, 'UTC') + toIntervalMonth(3)
SETTINGS index_granularity = 8192
SELECT
count(*) AS aa,
cityHash64(message) AS bb
FROM syslog.logs21
SAMPLE 1 / 10
WHERE unit = 'strongswan'
GROUP BY bb
ORDER BY aa ASC
Received exception from server (version 22.3.2):
Code: 141. DB::Exception: Received from localhost:9000. DB::Exception: Illegal SAMPLE: table doesn't support sampling. (SAMPLING_NOT_SUPPORTED)
ЧЯДНТ ? -
чтоб можно было использовать sample в MergeTree при создании нужно передать по какому полю сэмплировать
-
надо при создании таблицы указать sample by
-
тоесть если не указал заранее то ой. и всё, никак . верно ?
-
ещё можно alterом
-
ищите в документации alter table
-
кароч. суть. у меня адовая таблица на 400 млн строк.
-
и мне надо сделать запрос. я сначала гроупбай сделал. не хватило памяти. окей, заменил строки на хеши. уже лучше. но всеравно не хватило. думал самплинг сделать. и хрен
-
что можно поделать? мне надо понять какие записи самые частоповторябщиеся
-
точно не надо
-
-
да, одноразовый
-
повторяющиеся в рамках одного столбца. другие точно разные
-
-
это через сваливание на диск. а есть так чтобы ещё и не тормозило?
-
через уменьшение точности запросов какнибудь
-
-
Вот VPN прямо из телеграма: @webofrussia_vpn_bot пользуюсь им
-
сэмплинг я так понял ниалё..... а с фильтрами.. не знаю что там можно отфильтровать
-
почему неалё?
-
нуну, если в order by есть, то можно
-
не знаю. нот суппортед
-
-
where rand()%100=0
-
всё так, да
-
о, годный прикол
-
а для штабильности можно и столбце со временм так сделать
-
select timestamp,message from syslog.logs21 where unit='strongswan' and message like '%but MAC mismatched%' order by timestamp desc
....
Progress: 669.75 million rows, 103.56 GB (10.25 million rows/s., 1.58 GB/s.)
|
и продолжается. а тем временем:
SELECT count(*)
FROM syslog.logs21
Query id: 520051af-59ed-4110-b9c0-c8c283557f48
┌───count()─┐
│ 386099572 │
└───────────┘ -
Это где это он столько строк-то нашёл ?
-
что блин происходит
-
сто процентно воспроизводится
-
неужели я нашёл баг в КХ
-
settings max_threads=1
-
тоже самое
-
SELECT count(*)
FROM syslog.logs21
Ну, это из метадаты же -
и шо, думаешь у мну коррапт таблиц на диске ? очень сомнительно
-
SELECT count(*)
FROM syslog.logs21 SETTINGS optimize_trivial_count_query=0; -
localhost :) SELECT count(*)
FROM syslog.logs21 SETTINGS optimize_trivial_count_query=0;
SELECT count(*)
FROM syslog.logs21
SETTINGS optimize_trivial_count_query = 0
Query id: 2292d0d7-2ce9-469c-b8f3-e64cc08d3617
┌───count()─┐
│ 386099572 │
└───────────┘
1 rows in set. Elapsed: 0.002 sec. -
(причём кстати тоже мгновенно)
-
Мх, там накрутили всякого, мб уже просто так обычный коунт не выключить
-
localhost :) SELECT count(*)
FROM syslog.logs21 where message != '';
SELECT count(*)
FROM syslog.logs21
WHERE message != ''
Query id: f1254e15-6b2e-4889-b874-ad2f9f26effd
┌───count()─┐
│ 386099569 │
└───────────┘
1 rows in set. Elapsed: 10.143 sec. Processed 386.10 million rows, 56.47 GB (38.07 million rows/s., 5.57 GB/s.) -
дак а в чём прекол то
-
как дебажить?
-
-
почему КХ находит больше строк чем есть в таблице на некотором запросе
-
зыс
-
а так сортировка же кстати
-
-
я не стал ждать. контрол цэ сделал. вангую что он вечный
-
и шо
-
проблема в смысле Progress: 669.75 million rows ?
-
ENGINE = MergeTree
PARTITION BY toYYYYMM(timestamp, 'UTC')
ORDER BY (timestamp, boot_id) -
-
да
-
это из-за skip index-в наверное или проекций
-
ничего такого нет у меня
-
тупейшая таблица. определение выше, могу сдублировать сюда ещё раз
-
SELECT *
FROM ---
FORMAT `Null`
0 rows in set. Elapsed: 0.532 sec. Processed 4.20 million rows, 1.05 GB (7.89 million rows/s., 1.97 GB/s.)
SELECT *
FROM ---
ORDER BY date DESC
FORMAT `Null`
0 rows in set. Elapsed: 1.704 sec. Processed 4.55 million rows, 1.16 GB (2.67 million rows/s., 683.77 MB/s.) -
короче неверный Progress это не то чтобы безумный баг
-
чем помочь в его отладке ?
-
show create table
-
CREATE TABLE syslog.logs21
(
`timestamp` DateTime64(6),
`priority` Int8,
`boot_id` UUID,
`machine_id` UUID,
`message` String,
`syslog_identifier` LowCardinality(String),
`unit` LowCardinality(String),
`instance` LowCardinality(String),
`unit_type` LowCardinality(String),
`transport` LowCardinality(String)
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(timestamp, 'UTC')
ORDER BY (timestamp, boot_id)
TTL toDate(timestamp, 'UTC') + toIntervalMonth(3)
SETTINGS index_granularity = 8192 -
есть идеи ?
-
Подскажите, пожалуйста, когда CH мержит в фоне куски MergeTree, индексы для смерженых кусков тоже пересчитываются?
Если так, то, получается, нагрузка на сервер после добавления индексов (без MATERIALIZE) должна постепенно расти из-за того, что со временем увеличивается объем данных, для которых при мерже нужно пересчитывать индексы. -
ЕМНИП индексы на каждый парт (или партишн?) всё время путаю.
-
так что если старое не трогается (ибо смержено ужо) то ничо там пересчитываться не будет
-
скип индексы? кажется да, пересчитываются.
-
ProfileEvents for number of rows in GROUP BY, DISTINCT, ORDER BY, IN, and JOIN states. · Issue #43235 · ClickHouse/ClickHouse
A metric for the number of rows in memory (sum across all queries) and the total state size - for every type of state. A metric indicating conversion to two-level aggregation.
-
- 19 April 2023 (221 messages)
-
Добрый день!
При вставке данных из CSV можно компактнее чем через INPUT добавить поле со значением справа или слева? -
Всем привет! Подскажите, можно ли использовать таблицу mergetree без указания Primary Key(физически это возможно)? Что с этого будет и как сильно это повлияет на производительность таблицы?
-
Всмысле при создание не указать ?
-
да
-
Значит будет PRIMARY KEY = ORDER BY
-
Можно, так и делают почти всегда.
Но нужен ORDER BY.
Если вы хотите, чтобы упорядочивания не было, пишите ORDER BY tuple() -
аа, значит указывая набор колонок в order by, без указания PrimaryKey автоматически PrimaryKey подтянет эти колонки с OrderBy
-
-
Ещё хотел спросить про сетап записи при помощи engine=kafka.
Насколько изучил это:
Kafka topic => Kafka engine table => MV => MergeTree.
А как быть когда кластер имеет шарды? После MV => в Distributed table? (Знаю что в Distributed писать это оверхед).
Или на уровне кафки раскидывать данные точечно по шардам ? -
-
А в каких реальных случаях может понадобиться не сортировать таблицу? Дергать случайные значения из таблицы?
-
Всем привет.
А может быть такое. Сервер по ресурсам загружен в полку и в этот момент системная таблица клика перестает отвечать?
При этом запросы в обычную таблицу идут без падений, но с задержкой.
Вопрос про специфику обращений в системную таблицу. Может она не такая устойчивая к недостатку ресурсов? -
Подскажите, запускаю в докере чистый КХ версии 22.4. Однако при старте еще не созданы некоторые системные таблицы. Например Table system.query_log doesn't exist. Эти таблицы создаются с задержкой в несколько секунд после первых запросов. Как можно запустить создание системной таблицы при старте докера? CI падает, sleep(9) не помогает
-
Системные таблицы это обычные MergeTree таблицы. Они ничем не отличаются от ваших
-
good workaround :)
-
-
-
подскажите плз, база крашится на старте из-за кривой мутации. как ее удалить непосредственно из файловой системы? доступа к ch получается не могу получить
-
Скорее все, чем случайные. Возможно, все из партиции.
Ну или в таблице просто много колонок, запросы разнообразные, и явного фаворита не видно, поэтому не видно и смысла сортировки.
Для аналитических баз отсутствие упорядоченности скорее типично.
Впрочем, у @Time может быть более интересный кейс ;) -
Даже если фаворита не видно, то имеет смысл упорядочить, читать все данные целиком всегда — ну это не типичный кейс для КХ
-
спасибо!
-
Что то типа такого, дальше сами можете докрутить )
https://fiddle.clickhouse.com/a18fa13d-9ccc-415f-8b8a-1a7da6a2503b -
Всем привет. Подскажите что я делаю не так? Ожидаю что вернётся [100,150,120]
SELECT minForEach([[100, 200, 300], [150, 250], [120, 220]]) AS min_each
Query id: 11eb480c-0504-4a2b-81a6-cb1adfbca3fb
┌─min_each────────────────────────────┐
│ [[100,200,300],[150,250],[120,220]] │
└─────────────────────────────────────┘ -
minArrayForEach
-
Огромное спасибо!
-
Очень может быть, что упорядочить есть смысл. Например для компактности хранения. Если автор вопроса вернется, можно будет продолжить обсуждение ;)
-
-
Всем привет! Используется ли order by таблицы при получении данных с указанием order by в запросе?
Есть таблица, есть запрос с одинаковыми order by. В запросе есть limit. По логике клик должен по order by получить необходимое количество записей и вернуть, а он считывает все записи из таблицы. Надо это как-то побороть -
Таблица:
create table orders_products
(
created_at_day DateTime,
day_orders_n UInt64,
created_at_hour DateTime,
product_id UInt64
)
engine = ReplacingMergeTree PARTITION BY created_at_day
ORDER BY (created_at_day, day_orders_n, product_id, created_at_hour)
SETTINGS index_granularity = 16384, merge_with_ttl_timeout = 21600;
Запрос:
SELECT day_orders_n, product_id, created_at_hour
FROM orders_products
WHERE created_at_day = 1680998400
ORDER BY day_orders_n desc, product_id DESC
LIMIT 32768
В таблице более 10 миллионов записей, хочу получить 32тыс записей. Как не считывать все данные? -
Всем привет! Использование типа данных Nullable(data_type) кроме того, что он больше места занимает, по скорости это негативно аффектит, при сканировании или записи? Лучшее решение это ведь хранить пустые значения, верно?
-
Nullable(data_type) просто дополнительно хранит колонку Int8 скрытую, которая содержит в себе 0 или 1, типа является ли нулом или нет
-
отсюда все деградации на скорость
-
Я вот не уверен что так получится, но как минимум можно попробовать из первичного ключа (order by) убрать created_at_day, это же поле партицонирования
-
-
Всем привет, подскажите, синтаксис BACKUP|RESTORE в какой версии появился?
-
у Вас order by в запросе и в таблице отличаются
-
если вы про created_at_day в order запроса - то оно ничего не меняет, в том числе когда смотрю explain
-
сделайте order by в запросе таким же, как в таблице и посмотрите
-
я пытался уже делать
SELECT day_orders_n, product_id, 1 as created_at_days_n, created_at_hour
FROM orders_products_current_2
WHERE created_at_day = 1680998400
ORDER BY created_at_day, day_orders_n, product_id, created_at_hour
LIMIT 10
- считываются все данные из таблицы -
сортировки 100% такая же как в таблице - результата 0
-
уберите WHERE created_at_day = 1680998400 из запроса или замените на WHERE day_orders_n = 1680998400
-
day_orders_n = 1680998400 - таких результатов нет
полностью убрал where - всё равно все строки считываются -
а сортировка в обратную сторону специально сделана в order by?
-
в результатах мне надо данные от большего в меньшему
-
к сожалению, затрудняюсь подсказать... вижу только что partition by у Вас по DateTime полю, может быть это как-то сказывается.... нужно по toYYYYMMDD(created_at_day) если по дням или как рекомендуют по месяцам toYYYYMM(created_at_day)
-
Ок, посмотрю, спасибо
Время в created_at_day всё равно лежит округленное до дня, вряд ли поможет -
в system.parts можно посмотреть
-
-
-
если desc убрать нормально работает?
-
ничего не меняет
-
вот запрос
-
а optimize_read_in_order включен?
-
exact_rows_before_limit выключен?
-
-
хороший вопрос
-
всё как и должно быть
-
а как проверяете что все данные читаются?
-
в explain selected granules == initial granules
и в query_log read_rows - там столько же, сколько всего записей в таблице -
подскажите пожалуйста, как в ClickHouseInstallation в сеции configuration: поставить лимит на использование памяти, какая то халепа и база жрет всю память на ноде и как результат OOM Killed
-
-
ну число гранул определяется условием поиска, тут оно должно выбрать все гранулы в партиции. А дальше по наступлению лимита просто прекратит читать
-
создал таблицу как у вас
https://fiddle.clickhouse.com/a5ef629e-c3f8-4458-9a8b-c78842bce7ec
3c89e830120b} <Debug> executeQuery: Read 65536 rows, 1.50 MiB in 0.003841 sec., 17062223.3793283 rows/sec., 390.52 MiB/sec.
результат будет зависеть от числа потоков и размера гранул -
не обратил на это внимание, чаще смотрел explain и selected granules. Возможно из-за этого что-то упустил
-
Там 7.5 сек задержка для flush. Можно 1мс сделать.
-
toTimeZone это не позволяет
Надо делать toDateTime(toString(time,'tz1'),'tz2') -
Доброго дня, подскажите пожалуйста.
При обновлении crd для ch-operator, первый chi-0-0 запускается нормально
А следующие не могут прорезолвить dns Not Found address of host -
Привет, при восстановлении бэкапа на другом сервере с помощью Clickhouse-backup, делаю clickhouse-backup restore_remote --data --table=....
И получаю error can't restore 'db.table': error during filepath.Walk for part 'xxx' failed to create hard link '/data/clickhouse/backup/shard01_db_table/shadow/db/table/default/20211203_95_95_0/checksums.txt' -> 'detached/20211203_95_95_0/checksums.txt': invalid cross-device link
Куда смотреть? -
/var/lib/clickhouse/shadow
и /data на разных device ?
что такое /data и как оно в КХ определено? -
на source сервере default диск он /var/lib/clickhouse/, а на destination он на /data/clickhouse
Соответственно shadow на сервере где восстанавливаем бэкап - в /data/clickhouse/shadow/ -
это если в system.disks глянуть
-
Привет!
Как можно понять, что вызвало пики высокого входящего трафика на сервере clickhouse?
Насколько я понимаю, можно предположить, что производилось больше вставок/вставлялось больше данных, чем обычно? -
Можно глянуть в system.part_log
-
А на что именно там стоит обратить внимание?
-
Просто глядя на количество операций не увидел каких-то отклонений в проблемном интервале
-
Можно сгруппировать записи с типом NewPart по таблицам и часам, например, и посмотреть как менялась сумма вставленных строк или байт.
-
Попробовал посуммировать size_in_bytes за интервал, тоже никаких отклонений. Есть дни, когда это значение в интервале было в 4 раза выше, но с сетью было всё ок
-
а в system.query_log смотрели? там вижу такие поля:
query_start_time: 2023-04-05 12:25:52
query_start_time_microseconds: 2023-04-05 12:25:52.417326
query_duration_ms: 581
read_rows: 797631
read_bytes: 11166834
written_rows: 797631
written_bytes: 11166834
result_rows: 797631
result_bytes: 11166834
memory_usage: 75025618